diff --git a/components/entrustOrderList/entrustOrderList.vue b/components/entrustOrderList/entrustOrderList.vue index 98b6af1..93e03ae 100644 --- a/components/entrustOrderList/entrustOrderList.vue +++ b/components/entrustOrderList/entrustOrderList.vue @@ -2,12 +2,13 @@ - {{ i18n.CurrentEntrust }} - + {{ i18n.Position }} {{ i18n.Closed }} + {{ i18n.CurrentEntrust }} + {{ i18n.Revoked }} @@ -232,11 +233,11 @@ data() { return { list: [], - status: 'undone', + status: 'opened', closeModalShow: false, stopModalShow: false, + type: 1, stopModalShowZui:false, - type: 0, test: 0, dealList: [{ dealType: 'long' @@ -379,6 +380,7 @@ * @param {*} type */ onChangeType(type = 0) { + this.list=[]; this.type = type if (this.type == 0) { this.status = 'undone' diff --git a/components/kline/kline.vue b/components/kline/kline.vue new file mode 100644 index 0000000..9b02035 --- /dev/null +++ b/components/kline/kline.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/components/kline/props.js b/components/kline/props.js new file mode 100644 index 0000000..8f7e8ea --- /dev/null +++ b/components/kline/props.js @@ -0,0 +1,18 @@ +export default { + props: { + // 组件宽度 + width: { + type: Number, + default: 0 + }, + //组件高度 + height: { + type: Number, + default: 0 + }, + symbol: { + type: String, + default: '' + }, + } +} diff --git a/components/kline/tradingView/chartConfig.js b/components/kline/tradingView/chartConfig.js new file mode 100644 index 0000000..f63813c --- /dev/null +++ b/components/kline/tradingView/chartConfig.js @@ -0,0 +1,135 @@ +import { + FeedBase +} from './datafeed.js' + + +// new UDFCompatibleDatafeed('https://demo-feed-data.tradingview.com') +var chartConfig = { + // debug: true, + width: 0, //宽度 + height: 0, //高度 + //.... + autosize: false, //自适应宽高 + fullscreen: false, //布尔值显示图表是否占用窗口中所有可用的空间。 + //如果上面参数开启会影响到宽高项 + timeframe: '1', + timezone: "Asia/Bangkok", + container: "kline", + datafeed: new FeedBase(), + library_path: "./static/charting_library/", + locale: "en", + loading_screen: { + "backgroundColor": "#1e222d", + "foregroundColor": "#ffffff" + }, + theme: 'Dark', + //#ifdef APP-PLUS + preset: "mobile", + //#endif + //禁用功能 + disabled_features: [ // 需要屏蔽掉的 参考 https://tradingview.gitee.io/featuresets/ + "widget_logo", //LOGO + "left_toolbar", + "header_screenshot", + "header_fullscreen_button", + "header_undo_redo", + "header_indicators", + "header_symbol_search", // 搜索 + 'symbol_search_hot_key', + "header_saveload", // 上传下载按钮 + "header_compare", //compare + "volume_force_overlay", // k线与销量分开 + 'header_interval_dialog_button', + 'show_interval_dialog_on_key_press', + "legend_context_menu", + "edit_buttons_in_legend", + 'dont_show_boolean_study_arguments', + "save_chart_properties_to_local_storage", + "use_localstorage_for_settings", + "display_market_status", + "fix_left_edge", + "timeframes_toolbar", // 底部时间栏目 + //#ifdef APP-PLUS + "source_selection_markers", + // "chart_zoom",//图表缩放 + 'pane_context_menu', // 图表右键菜单 + // "header_widget", + // 'header_widget_dom_node', // 顶部工具栏 + "header_screenshot", // 照相机按钮 + // "header_chart_type", // 图标类型按钮 + // "header_undo_redo", // 左右箭头 + // "header_resolutions", // 分辨率 + // "property_pages", + // "control_bar", //图表左移、右移 放大 缩小 工具 + "go_to_date", //前往到某个时间 + // "left_toolbar", // 左侧栏 + "header_fullscreen_button", //全屏 + // 'header_indicators', // 技术指标 + // "border_around_the_chart", //边框环绕 + //#endif + ], + //启用名称的数组 + enabled_features: [ + "move_logo_to_main_pane", + "keep_left_toolbar_visible_on_small_screens", //防止左侧工具栏在小屏消失 + "seconds_resolution", //支持秒的周期 + "hide_left_toolbar_by_defaut", //第一次打开隐藏左侧工具 + "hide_last_na_study_output", //隐藏 n/a + ], + custom_css_url: "./css/tradingview.css", + studies_overrides: { + "volume.precision": 0, + // 销量线 + "volume.volume.color.0": "#d64b62", + "volume.volume.color.1": "#08ab90", + }, + overrides: { + // 蜡烛样式 + "mainSeriesProperties.candleStyle.upColor": "#08ab90", + "mainSeriesProperties.candleStyle.downColor": "#d64b62", + // 画布背景颜色 + "paneProperties.background": "#ffffff", + //纵向网格线颜色 + "paneProperties.vertGridProperties.color": "#1f2943", + //横向网格线颜色 + "paneProperties.horzGridProperties.color": "#1f2943", + //刻度属性文本颜色 + "scalesProperties.textColor": '#61688a', + // 设置坐标轴字体大小 + //#ifdef APP-PLUS + 'scalesProperties.fontSize': 12, + //#endif + //#ifdef H5 + 'scalesProperties.fontSize': 12, + //#endif + //隐藏左上角行情信息 + 'paneProperties.legendProperties.showLegend': false, + 'left_toolbar': false, + //销量面板尺寸,支持的值: large, medium, small, tiny + "volumePaneSize": "medium", + // 设置十字线 + 'paneProperties.crossHairProperties.color': "rgba(197, 206, 226, 0.4)", + //#ifdef APP-PLUS + 'paneProperties.crossHairProperties.width': 5, + //#endif + //#ifdef H5 + 'paneProperties.crossHairProperties.width': 1, + //#endif + 'paneProperties.crossHairProperties.style': 0, + //烛心 + // "mainSeriesProperties.candleStyle.drawWick" : true, + //烛心颜色 + //"mainSeriesProperties.candleStyle.wickUpColor:" : '#8a3a3b', + //"mainSeriesProperties.candleStyle.wickDownColor" : "#8a3a3b", + + // 白色烛心颜色 + // "mainSeriesProperties.candleStyle.wickUpColor:" : '#8a3a3b', + // "mainSeriesProperties.candleStyle.wickDownColor" : "#8a3a3b", + + //边框 + "mainSeriesProperties.candleStyle.drawBorder": true, + }, + +} + +exports.chartConfig = chartConfig diff --git a/components/kline/tradingView/datafeed.js b/components/kline/tradingView/datafeed.js new file mode 100644 index 0000000..806f9fd --- /dev/null +++ b/components/kline/tradingView/datafeed.js @@ -0,0 +1,220 @@ +/*********************************************/ + +// 次文件只需要关注 getBars 和 subscribeBars 函数即可 + +/******************************************/ + + +import { + socket +} from './websocket.js' + +import { + Event +} from './event.js' + + +// 历史数据 第一条数据的 时间撮 因为k线图一次性历史数据只拿一部分,用户吧图往前滑动,就会用这个时间撮去请求更早的 历史数据 +var detafeed_historyTime = 0 +// 上一次的 K线周期 切换产品的时候 需要从websock 取消订阅这个 +var detafeed_lastResolution = null +// 上一次的产品 切换产品的时候 需要从websock 取消订阅这个 +var detafeed_lastSymbol = null + + +function FeedBase() {} + +FeedBase.prototype.onReady = function(callback) { + callback(this._configuration) +} + +FeedBase.prototype.getSendSymbolName = function(symbolName) { + var name = symbolName.split('/') + return (name[0] + name[1]).toLocaleLowerCase() +} + FeedBase.prototype.defaultConfiguration = function defaultConfiguration() { + //设置默认配置 + return { + supports_search: false, + supports_group_request: false, + supported_resolutions: ['1', '5', '15', '30', '60', '1D', '1W', '1M'], + supports_marks: false, + supports_timescale_marks: false, + supports_time: true + }; + }; +FeedBase.prototype.resolveSymbol = function(symbolName, onResolve, onError) { + onResolve({ + "name": symbolName, + "timezone": "Asia/Shanghai", + "pricescale": 10000000000000000, + "minmov": 1, + "minmov2": 0, + "ticker": symbolName, + "description": "", + "session": "24x7", + "type": "bitcoin", + "volume_precision": 10, + "has_intraday": true, + "intraday_multipliers": ['1', '5', '15', '30', '60', '1D', '1W','1M'], // 时间 + "supported_resolutions": ['1', '5', '15', '30', '60', '1D', '1W','1M'], // 时间 + "supports_marks": false, + "supports_timescale_marks": false, + "supported_time": true, + "has_weekly_and_monthly": false, + "has_no_volume": false, + "regular_session": "24x7", + + }) +} + + +/** + * 更多时间类型在这里添加 时间类型请看火币文档 + * @param resolution 订阅周期 按照自己喜欢的来 如 30 30分钟、 1D 一天 + * @param name 交易对symbol + * @param to 结束时间 + * @returns {object} + */ +const resolutionFormat = (resolution, name, to) => { + let req = `market.${name}.kline.${resolution}min`; + let minutes = resolution; + console.log(resolution) + if (resolution.includes('D')) { + if (resolution.length < 2) resolution = '1' + resolution; + req = `market.${name}.kline.${parseInt(resolution)}day`; + minutes = parseInt(resolution) * 24 * 60; + } else if (resolution.includes('W')) { + if (resolution.length < 2) resolution = '1' + resolution; + req = `market.${name}.kline.${parseInt(resolution)}week`; + minutes = parseInt(resolution) * 24 * 60 * 7; + } else if (resolution.includes('M')) { + if (resolution.length < 2) resolution = '1' + resolution; + req = `market.${name}.kline.${parseInt(resolution)}mon`; + minutes = parseInt(resolution) * 24 * 60 * 30; + } else { + if (resolution / 60 > 1) { + req = `market.${name}.kline.${resolution / 60}hour`; + } + } + + let from = null; + if (to) { + from = to - 50 * minutes * 60; + if (resolution.includes('M') || resolution.includes('W')) { // 周线月线控制条数,时间超出火币规定范围, ws报错 + from = to - 50 * minutes * 60; + } + } + return { + minutes, + req, + from, + to, + }; +}; + +FeedBase.prototype.getBars = function(symbolInfo, resolution, periodParams, onHistoryCallback, onErrorCallback) { + console.log("获取历史数据") + // 切换产品周期 或者 切换产品 会执行这个函数 + let reso = resolutionFormat(resolution, symbolInfo.name, periodParams.to > detafeed_historyTime ? periodParams + .to : + detafeed_historyTime) + // 是历史数据 + var history = true + /* + !detafeed_historyTime 如果没请请求过这个产品或者这个周期的历史数据 + resolution !== detafeed_lastResolution 是否更换了产品周期 + detafeed_lastSymbol !== symbolInfo.name 是否切换了产品 + */ + if (!detafeed_historyTime || (resolution !== detafeed_lastResolution) || detafeed_lastSymbol !== symbolInfo + .name) { + // 那就不是历史数据 + history = false + // 储存请求过的产品 + detafeed_lastSymbol = symbolInfo.name + // 记录目前时间戳,就用目前时间戳往前请求历史数据 + detafeed_historyTime = window.parseInt((Date.now() / 1000)) + } + /* + @socket.sendData + 第一个参数订阅历史数据 + 第二个参数订阅实时数据 + 第三个参数 是 是否是历史数据 + */ + socket.sendData({ + event: "req", + type: "kline", + channel: [reso.req], + fromDate:reso.from, + toDate:reso.to + }, reso.req, history) + + Event.off('data') + + Event.on('data', data => { + if (data && Array.isArray(data)) { + // 记录这次请求的时间周期 + detafeed_lastResolution = resolution + var meta = { + noData: false + } + const datas = [] + if (data.length) { + detafeed_historyTime = data[0].id + for (let i of data) { + i.time = i.id * 1000 + i.volume = i.vol + datas.push(i) + } + } else { + meta = { + noData: true, + nextTime: detafeed_historyTime + } + } + onHistoryCallback(datas, meta) + } + }) +} + +FeedBase.prototype.subscribeBars = function(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) { + Event.off('realTime') + // 拿到实时数据 在这里画 + Event.on('realTime', data => { + if (Object.prototype.toString.call(data) === '[object Object]' && data.hasOwnProperty('open')) { + //因为有的数值为科学计数法,故增加了转换函数,因为修改了源码中处理小数点的代码,所以需要二次元运算 + //如果大于1则根据float形式进行toFixed(2),如果小于1则按照string形式进行截取处理显示 + let realtimeData = { + time: data.id * 1000, + volume: data.vol <= 0.00001 ? transferToNumber(data.vol) : data.vol, + close: data.close <= 0.00001 ? transferToNumber(data.close) : data.close, + open: data.open <= 0.00001 ? transferToNumber(data.open) : data.open, + high: data.high <= 0.00001 ? transferToNumber(data.high) : data.high, + low: data.low <= 0.00001 ? transferToNumber(data.low) : data.low + } + onRealtimeCallback(realtimeData) + } + }) +} + +FeedBase.prototype.unsubscribeBars = function(listenerGuid) { + // 取消订阅产品的callback +} + + + + +//处理科学计数法 +function transferToNumber(inputNumber) { + if (isNaN(inputNumber)) { + return inputNumber + } + inputNumber = '' + inputNumber + inputNumber = parseFloat(inputNumber) + let eformat = inputNumber.toExponential() // 转换为标准的科学计数法形式(字符串) + let tmpArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/) // 分离出小数值和指数值 + let number = inputNumber.toFixed(Math.max(0, (tmpArray[1] || '').length - tmpArray[2])) + return number +} + +exports.FeedBase = FeedBase diff --git a/components/kline/tradingView/datafeed1.js b/components/kline/tradingView/datafeed1.js new file mode 100644 index 0000000..877c611 --- /dev/null +++ b/components/kline/tradingView/datafeed1.js @@ -0,0 +1,205 @@ +/*********************************************/ + +// 次文件只需要关注 getBars 和 subscribeBars 函数即可 + +/******************************************/ + + +import { + socket +} from './websocket.js' + +import { + Event +} from './event.js' + + +// 历史数据 第一条数据的 时间撮 因为k线图一次性历史数据只拿一部分,用户吧图往前滑动,就会用这个时间撮去请求更早的 历史数据 +var detafeed_historyTime = 0 +// 上一次的 K线周期 切换产品的时候 需要从websock 取消订阅这个 +var detafeed_lastResolution = null +// 上一次的产品 切换产品的时候 需要从websock 取消订阅这个 +var detafeed_lastSymbol = null + + +function FeedBase() {} + +FeedBase.prototype.onReady = function(callback) { + callback(this._configuration) +} + +FeedBase.prototype.getSendSymbolName = function(symbolName) { + var name = symbolName.split('/') + return (name[0] + name[1]).toLocaleLowerCase() +} + +FeedBase.prototype.resolveSymbol = function(symbolName, onResolve, onError) { + onResolve({ + "name": symbolName, + "timezone": "Asia/Shanghai", + "pricescale": 10000000000000000, + "minmov": 1, + "minmov2": 0, + "ticker": symbolName, + "description": "", + "session": "24x7", + "type": "bitcoin", + "volume_precision": 10, + "has_intraday": true, + "intraday_multipliers": ['1', '5', '15', '30', '60', '240', '1440'], // 时间 + "has_weekly_and_monthly": false, + "has_no_volume": false, + "regular_session": "24x7", + + }) +} + + +/** + * 更多时间类型在这里添加 时间类型请看火币文档 + * @param resolution 订阅周期 按照自己喜欢的来 如 30 30分钟、 1D 一天 + * @param name 交易对symbol + * @param to 结束时间 + * @returns {object} + */ +const resolutionFormat = (resolution, name, to) => { + let req = `market.${name}.kline.${resolution}min`; + let minutes = resolution; + + if (resolution.includes('D')) { + if (resolution.length < 2) resolution = '1' + resolution; + req = `market.${name}.kline.${parseInt(resolution)}day`; + minutes = parseInt(resolution) * 24 * 60; + } else if (resolution.includes('W')) { + if (resolution.length < 2) resolution = '1' + resolution; + req = `market.${name}.kline.${parseInt(resolution)}week`; + minutes = parseInt(resolution) * 24 * 60 * 7; + } else if (resolution.includes('M')) { + if (resolution.length < 2) resolution = '1' + resolution; + req = `market.${name}.kline.${parseInt(resolution)}mon`; + minutes = parseInt(resolution) * 24 * 60 * 30; + } else { + if (resolution / 60 > 1) { + req = `market.${name}.kline.${resolution / 60}hour`; + } + } + + let from = null; + if (to) { + from = to - 50 * minutes * 60; + if (resolution.includes('M') || resolution.includes('W')) { // 周线月线控制条数,时间超出火币规定范围, ws报错 + from = to - 50 * minutes * 60; + } + } + return { + minutes, + req, + from, + to, + }; +}; + +FeedBase.prototype.getBars = function(symbolInfo, resolution, periodParams, onHistoryCallback, onErrorCallback) { + console.log("获取历史数据") + // 切换产品周期 或者 切换产品 会执行这个函数 + let reso = resolutionFormat(resolution, symbolInfo.name, periodParams.to > detafeed_historyTime ? periodParams + .to : + detafeed_historyTime) + // 是历史数据 + var history = true + /* + !detafeed_historyTime 如果没请请求过这个产品或者这个周期的历史数据 + resolution !== detafeed_lastResolution 是否更换了产品周期 + detafeed_lastSymbol !== symbolInfo.name 是否切换了产品 + */ + if (!detafeed_historyTime || (resolution !== detafeed_lastResolution) || detafeed_lastSymbol !== symbolInfo + .name) { + // 那就不是历史数据 + history = false + // 储存请求过的产品 + detafeed_lastSymbol = symbolInfo.name + // 记录目前时间戳,就用目前时间戳往前请求历史数据 + detafeed_historyTime = window.parseInt((Date.now() / 1000)) + } + /* + @socket.sendData + 第一个参数订阅历史数据 + 第二个参数订阅实时数据 + 第三个参数 是 是否是历史数据 + */ + socket.sendData({ + req: reso.req, + id: "id10", + from: reso.from, + to: reso.to, + }, reso.req, history) + + Event.off('data') + + Event.on('data', data => { + if (data && Array.isArray(data)) { + // 记录这次请求的时间周期 + detafeed_lastResolution = resolution + var meta = { + noData: false + } + const datas = [] + if (data.length) { + detafeed_historyTime = data[0].id + for (let i of data) { + i.time = i.id * 1000 + i.volume = i.vol + datas.push(i) + } + } else { + meta = { + noData: true, + nextTime: detafeed_historyTime + } + } + onHistoryCallback(datas, meta) + } + }) +} + +FeedBase.prototype.subscribeBars = function(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) { + Event.off('realTime') + // 拿到实时数据 在这里画 + Event.on('realTime', data => { + if (Object.prototype.toString.call(data) === '[object Object]' && data.hasOwnProperty('open')) { + //因为有的数值为科学计数法,故增加了转换函数,因为修改了源码中处理小数点的代码,所以需要二次元运算 + //如果大于1则根据float形式进行toFixed(2),如果小于1则按照string形式进行截取处理显示 + let realtimeData = { + time: data.id * 1000, + volume: data.vol <= 0.00001 ? transferToNumber(data.vol) : data.vol, + close: data.close <= 0.00001 ? transferToNumber(data.close) : data.close, + open: data.open <= 0.00001 ? transferToNumber(data.open) : data.open, + high: data.high <= 0.00001 ? transferToNumber(data.high) : data.high, + low: data.low <= 0.00001 ? transferToNumber(data.low) : data.low + } + onRealtimeCallback(realtimeData) + } + }) +} + +FeedBase.prototype.unsubscribeBars = function(listenerGuid) { + // 取消订阅产品的callback +} + + + + +//处理科学计数法 +function transferToNumber(inputNumber) { + if (isNaN(inputNumber)) { + return inputNumber + } + inputNumber = '' + inputNumber + inputNumber = parseFloat(inputNumber) + let eformat = inputNumber.toExponential() // 转换为标准的科学计数法形式(字符串) + let tmpArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/) // 分离出小数值和指数值 + let number = inputNumber.toFixed(Math.max(0, (tmpArray[1] || '').length - tmpArray[2])) + return number +} + +exports.FeedBase = FeedBase diff --git a/components/kline/tradingView/event.js b/components/kline/tradingView/event.js new file mode 100644 index 0000000..e2fd88a --- /dev/null +++ b/components/kline/tradingView/event.js @@ -0,0 +1,22 @@ +var Event = { + EVENT: {}, + emit (eventName, resp) { + if (this.EVENT[eventName] && Object.prototype.toString.call(this.EVENT[eventName]) === "[object Array]") { + for (let i = 0, fn; fn = this.EVENT[eventName][i++];) { + fn(resp) + } + } + }, + on (name, fn) { + if (this.EVENT[name] && Object.prototype.toString.call(this.EVENT[name]) === "[object Array]") { + this.EVENT[name].push(fn) + } else { + this.EVENT[name] = [fn] + } + }, + off (name) { + this.EVENT[name] = null + } +} + +exports.Event = Event \ No newline at end of file diff --git a/components/kline/tradingView/pako.js b/components/kline/tradingView/pako.js new file mode 100644 index 0000000..2d73598 --- /dev/null +++ b/components/kline/tradingView/pako.js @@ -0,0 +1,1978 @@ +/* pako 1.0.3 nodeca/pako */ ! function(t) { + if ("object" == typeof exports && "undefined" != typeof module) module.exports = t(); + else if ("function" == typeof define && define.amd) define([], t); + else { + var e; + e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? + self : this, e.pako = t() + } +}(function() { + return function t(e, a, i) { + function n(s, o) { + if (!a[s]) { + if (!e[s]) { + var l = "function" == typeof require && require; + if (!o && l) return l(s, !0); + if (r) return r(s, !0); + var h = new Error("Cannot find module '" + s + "'"); + throw h.code = "MODULE_NOT_FOUND", h + } + var d = a[s] = { + exports: {} + }; + e[s][0].call(d.exports, function(t) { + var a = e[s][1][t]; + return n(a ? a : t) + }, d, d.exports, t, e, a, i) + } + return a[s].exports + } + for (var r = "function" == typeof require && require, s = 0; s < i.length; s++) n(i[s]); + return n + }({ + 1: [function(t, e, a) { + "use strict"; + + function i(t) { + if (!(this instanceof i)) return new i(t); + this.options = l.assign({ + level: w, + method: v, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: p, + to: "" + }, t || {}); + var e = this.options; + e.raw && e.windowBits > 0 ? e.windowBits = -e.windowBits : e.gzip && e.windowBits > + 0 && e.windowBits < 16 && (e.windowBits += 16), this.err = 0, this.msg = "", + this.ended = !1, this.chunks = [], this.strm = new f, this.strm.avail_out = 0; + var a = o.deflateInit2(this.strm, e.level, e.method, e.windowBits, e.memLevel, e + .strategy); + if (a !== b) throw new Error(d[a]); + if (e.header && o.deflateSetHeader(this.strm, e.header), e.dictionary) { + var n; + if (n = "string" == typeof e.dictionary ? h.string2buf(e.dictionary) : + "[object ArrayBuffer]" === _.call(e.dictionary) ? new Uint8Array(e + .dictionary) : e.dictionary, a = o.deflateSetDictionary(this.strm, n), + a !== b) throw new Error(d[a]); + this._dict_set = !0 + } + } + + function n(t, e) { + var a = new i(e); + if (a.push(t, !0), a.err) throw a.msg; + return a.result + } + + function r(t, e) { + return e = e || {}, e.raw = !0, n(t, e) + } + + function s(t, e) { + return e = e || {}, e.gzip = !0, n(t, e) + } + var o = t("./zlib/deflate"), + l = t("./utils/common"), + h = t("./utils/strings"), + d = t("./zlib/messages"), + f = t("./zlib/zstream"), + _ = Object.prototype.toString, + u = 0, + c = 4, + b = 0, + g = 1, + m = 2, + w = -1, + p = 0, + v = 8; + i.prototype.push = function(t, e) { + var a, i, n = this.strm, + r = this.options.chunkSize; + if (this.ended) return !1; + i = e === ~~e ? e : e === !0 ? c : u, "string" == typeof t ? n.input = h + .string2buf(t) : "[object ArrayBuffer]" === _.call(t) ? n.input = + new Uint8Array(t) : n.input = t, n.next_in = 0, n.avail_in = n.input.length; + do { + if (0 === n.avail_out && (n.output = new l.Buf8(r), n.next_out = 0, n + .avail_out = r), a = o.deflate(n, i), a !== g && a !== b) + return this.onEnd(a), this.ended = !0, !1; + 0 !== n.avail_out && (0 !== n.avail_in || i !== c && i !== m) || ( + "string" === this.options.to ? this.onData(h.buf2binstring(l + .shrinkBuf(n.output, n.next_out))) : this.onData(l.shrinkBuf(n + .output, n.next_out))) + } while ((n.avail_in > 0 || 0 === n.avail_out) && a !== g); + return i === c ? (a = o.deflateEnd(this.strm), this.onEnd(a), this.ended = !0, + a === b) : i !== m || (this.onEnd(b), n.avail_out = 0, !0) + }, i.prototype.onData = function(t) { + this.chunks.push(t) + }, i.prototype.onEnd = function(t) { + t === b && ("string" === this.options.to ? this.result = this.chunks.join("") : + this.result = l.flattenChunks(this.chunks)), this.chunks = [], this + .err = t, this.msg = this.strm.msg + }, a.Deflate = i, a.deflate = n, a.deflateRaw = r, a.gzip = s + }, { + "./utils/common": 3, + "./utils/strings": 4, + "./zlib/deflate": 8, + "./zlib/messages": 13, + "./zlib/zstream": 15 + }], + 2: [function(t, e, a) { + "use strict"; + + function i(t) { + if (!(this instanceof i)) return new i(t); + this.options = o.assign({ + chunkSize: 16384, + windowBits: 0, + to: "" + }, t || {}); + var e = this.options; + e.raw && e.windowBits >= 0 && e.windowBits < 16 && (e.windowBits = -e.windowBits, + 0 === e.windowBits && (e.windowBits = -15)), !(e.windowBits >= 0 && e + .windowBits < 16) || t && t.windowBits || (e.windowBits += 32), e + .windowBits > 15 && e.windowBits < 48 && 0 === (15 & e.windowBits) && (e + .windowBits |= 15), this.err = 0, this.msg = "", this.ended = !1, this + .chunks = [], this.strm = new f, this.strm.avail_out = 0; + var a = s.inflateInit2(this.strm, e.windowBits); + if (a !== h.Z_OK) throw new Error(d[a]); + this.header = new _, s.inflateGetHeader(this.strm, this.header) + } + + function n(t, e) { + var a = new i(e); + if (a.push(t, !0), a.err) throw a.msg; + return a.result + } + + function r(t, e) { + return e = e || {}, e.raw = !0, n(t, e) + } + var s = t("./zlib/inflate"), + o = t("./utils/common"), + l = t("./utils/strings"), + h = t("./zlib/constants"), + d = t("./zlib/messages"), + f = t("./zlib/zstream"), + _ = t("./zlib/gzheader"), + u = Object.prototype.toString; + i.prototype.push = function(t, e) { + var a, i, n, r, d, f, _ = this.strm, + c = this.options.chunkSize, + b = this.options.dictionary, + g = !1; + if (this.ended) return !1; + i = e === ~~e ? e : e === !0 ? h.Z_FINISH : h.Z_NO_FLUSH, "string" == typeof t ? + _.input = l.binstring2buf(t) : "[object ArrayBuffer]" === u.call(t) ? _ + .input = new Uint8Array(t) : _.input = t, _.next_in = 0, _.avail_in = _ + .input.length; + do { + if (0 === _.avail_out && (_.output = new o.Buf8(c), _.next_out = 0, _ + .avail_out = c), a = s.inflate(_, h.Z_NO_FLUSH), a === h + .Z_NEED_DICT && b && (f = "string" == typeof b ? l.string2buf(b) : + "[object ArrayBuffer]" === u.call(b) ? new Uint8Array(b) : b, a = s + .inflateSetDictionary(this.strm, f)), a === h.Z_BUF_ERROR && g === ! + 0 && (a = h.Z_OK, g = !1), a !== h.Z_STREAM_END && a !== h.Z_OK) + return this.onEnd(a), this.ended = !0, !1; + _.next_out && (0 !== _.avail_out && a !== h.Z_STREAM_END && (0 !== _ + .avail_in || i !== h.Z_FINISH && i !== h.Z_SYNC_FLUSH) || ( + "string" === this.options.to ? (n = l.utf8border(_.output, _ + .next_out), r = _.next_out - n, d = l.buf2string(_ + .output, n), _.next_out = r, _.avail_out = c - r, r && o + .arraySet(_.output, _.output, n, r, 0), this.onData(d)) : + this.onData(o.shrinkBuf(_.output, _.next_out)))), 0 === _ + .avail_in && 0 === _.avail_out && (g = !0) + } while ((_.avail_in > 0 || 0 === _.avail_out) && a !== h.Z_STREAM_END); + return a === h.Z_STREAM_END && (i = h.Z_FINISH), i === h.Z_FINISH ? (a = s + .inflateEnd(this.strm), this.onEnd(a), this.ended = !0, a === h.Z_OK) : + i !== h.Z_SYNC_FLUSH || (this.onEnd(h.Z_OK), _.avail_out = 0, !0) + }, i.prototype.onData = function(t) { + this.chunks.push(t) + }, i.prototype.onEnd = function(t) { + t === h.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join( + "") : this.result = o.flattenChunks(this.chunks)), this.chunks = [], + this.err = t, this.msg = this.strm.msg + }, a.Inflate = i, a.inflate = n, a.inflateRaw = r, a.ungzip = n + }, { + "./utils/common": 3, + "./utils/strings": 4, + "./zlib/constants": 6, + "./zlib/gzheader": 9, + "./zlib/inflate": 11, + "./zlib/messages": 13, + "./zlib/zstream": 15 + }], + 3: [function(t, e, a) { + "use strict"; + var i = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && + "undefined" != typeof Int32Array; + a.assign = function(t) { + for (var e = Array.prototype.slice.call(arguments, 1); e.length;) { + var a = e.shift(); + if (a) { + if ("object" != typeof a) throw new TypeError(a + "must be non-object"); + for (var i in a) a.hasOwnProperty(i) && (t[i] = a[i]) + } + } + return t + }, a.shrinkBuf = function(t, e) { + return t.length === e ? t : t.subarray ? t.subarray(0, e) : (t.length = e, t) + }; + var n = { + arraySet: function(t, e, a, i, n) { + if (e.subarray && t.subarray) return void t.set(e.subarray(a, a + i), + n); + for (var r = 0; r < i; r++) t[n + r] = e[a + r] + }, + flattenChunks: function(t) { + var e, a, i, n, r, s; + for (i = 0, e = 0, a = t.length; e < a; e++) i += t[e].length; + for (s = new Uint8Array(i), n = 0, e = 0, a = t.length; e < a; e++) r = + t[e], s.set(r, n), n += r.length; + return s + } + }, + r = { + arraySet: function(t, e, a, i, n) { + for (var r = 0; r < i; r++) t[n + r] = e[a + r] + }, + flattenChunks: function(t) { + return [].concat.apply([], t) + } + }; + a.setTyped = function(t) { + t ? (a.Buf8 = Uint8Array, a.Buf16 = Uint16Array, a.Buf32 = Int32Array, a.assign( + a, n)) : (a.Buf8 = Array, a.Buf16 = Array, a.Buf32 = Array, a.assign(a, + r)) + }, a.setTyped(i) + }, {}], + 4: [function(t, e, a) { + "use strict"; + + function i(t, e) { + if (e < 65537 && (t.subarray && s || !t.subarray && r)) return String.fromCharCode + .apply(null, n.shrinkBuf(t, e)); + for (var a = "", i = 0; i < e; i++) a += String.fromCharCode(t[i]); + return a + } + var n = t("./common"), + r = !0, + s = !0; + try { + String.fromCharCode.apply(null, [0]) + } catch (t) { + r = !1 + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)) + } catch (t) { + s = !1 + } + for (var o = new n.Buf8(256), l = 0; l < 256; l++) o[l] = l >= 252 ? 6 : l >= 248 ? 5 : + l >= 240 ? 4 : l >= 224 ? 3 : l >= 192 ? 2 : 1; + o[254] = o[254] = 1, a.string2buf = function(t) { + var e, a, i, r, s, o = t.length, + l = 0; + for (r = 0; r < o; r++) a = t.charCodeAt(r), 55296 === (64512 & a) && r + 1 < + o && (i = t.charCodeAt(r + 1), 56320 === (64512 & i) && (a = 65536 + (a - + 55296 << 10) + (i - 56320), r++)), l += a < 128 ? 1 : a < 2048 ? 2 : a < + 65536 ? 3 : 4; + for (e = new n.Buf8(l), s = 0, r = 0; s < l; r++) a = t.charCodeAt(r), 55296 === + (64512 & a) && r + 1 < o && (i = t.charCodeAt(r + 1), 56320 === (64512 & + i) && (a = 65536 + (a - 55296 << 10) + (i - 56320), r++)), a < 128 ? e[ + s++] = a : a < 2048 ? (e[s++] = 192 | a >>> 6, e[s++] = 128 | 63 & a) : + a < 65536 ? (e[s++] = 224 | a >>> 12, e[s++] = 128 | a >>> 6 & 63, e[s++] = + 128 | 63 & a) : (e[s++] = 240 | a >>> 18, e[s++] = 128 | a >>> 12 & 63, + e[s++] = 128 | a >>> 6 & 63, e[s++] = 128 | 63 & a); + return e + }, a.buf2binstring = function(t) { + return i(t, t.length) + }, a.binstring2buf = function(t) { + for (var e = new n.Buf8(t.length), a = 0, i = e.length; a < i; a++) e[a] = t + .charCodeAt(a); + return e + }, a.buf2string = function(t, e) { + var a, n, r, s, l = e || t.length, + h = new Array(2 * l); + for (n = 0, a = 0; a < l;) + if (r = t[a++], r < 128) h[n++] = r; + else if (s = o[r], s > 4) h[n++] = 65533, a += s - 1; + else { + for (r &= 2 === s ? 31 : 3 === s ? 15 : 7; s > 1 && a < l;) r = r << 6 | + 63 & t[a++], s--; + s > 1 ? h[n++] = 65533 : r < 65536 ? h[n++] = r : (r -= 65536, h[n++] = + 55296 | r >> 10 & 1023, h[n++] = 56320 | 1023 & r) + } + return i(h, n) + }, a.utf8border = function(t, e) { + var a; + for (e = e || t.length, e > t.length && (e = t.length), a = e - 1; a >= 0 && + 128 === (192 & t[a]);) a--; + return a < 0 ? e : 0 === a ? e : a + o[t[a]] > e ? a : e + } + }, { + "./common": 3 + }], + 5: [function(t, e, a) { + "use strict"; + + function i(t, e, a, i) { + for (var n = 65535 & t | 0, r = t >>> 16 & 65535 | 0, s = 0; 0 !== a;) { + s = a > 2e3 ? 2e3 : a, a -= s; + do n = n + e[i++] | 0, r = r + n | 0; while (--s); + n %= 65521, r %= 65521 + } + return n | r << 16 | 0 + } + e.exports = i + }, {}], + 6: [function(t, e, a) { + "use strict"; + e.exports = { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_BUF_ERROR: -5, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + Z_BINARY: 0, + Z_TEXT: 1, + Z_UNKNOWN: 2, + Z_DEFLATED: 8 + } + }, {}], + 7: [function(t, e, a) { + "use strict"; + + function i() { + for (var t, e = [], a = 0; a < 256; a++) { + t = a; + for (var i = 0; i < 8; i++) t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1; + e[a] = t + } + return e + } + + function n(t, e, a, i) { + var n = r, + s = i + a; + t ^= -1; + for (var o = i; o < s; o++) t = t >>> 8 ^ n[255 & (t ^ e[o])]; + return t ^ -1 + } + var r = i(); + e.exports = n + }, {}], + 8: [function(t, e, a) { + "use strict"; + + function i(t, e) { + return t.msg = D[e], e + } + + function n(t) { + return (t << 1) - (t > 4 ? 9 : 0) + } + + function r(t) { + for (var e = t.length; --e >= 0;) t[e] = 0 + } + + function s(t) { + var e = t.state, + a = e.pending; + a > t.avail_out && (a = t.avail_out), 0 !== a && (R.arraySet(t.output, e + .pending_buf, e.pending_out, a, t.next_out), t.next_out += a, e + .pending_out += a, t.total_out += a, t.avail_out -= a, e.pending -= a, 0 === + e.pending && (e.pending_out = 0)) + } + + function o(t, e) { + C._tr_flush_block(t, t.block_start >= 0 ? t.block_start : -1, t.strstart - t + .block_start, e), t.block_start = t.strstart, s(t.strm) + } + + function l(t, e) { + t.pending_buf[t.pending++] = e + } + + function h(t, e) { + t.pending_buf[t.pending++] = e >>> 8 & 255, t.pending_buf[t.pending++] = 255 & e + } + + function d(t, e, a, i) { + var n = t.avail_in; + return n > i && (n = i), 0 === n ? 0 : (t.avail_in -= n, R.arraySet(e, t.input, t + .next_in, n, a), 1 === t.state.wrap ? t.adler = N(t.adler, e, n, a) : + 2 === t.state.wrap && (t.adler = O(t.adler, e, n, a)), t.next_in += n, t + .total_in += n, n) + } + + function f(t, e) { + var a, i, n = t.max_chain_length, + r = t.strstart, + s = t.prev_length, + o = t.nice_match, + l = t.strstart > t.w_size - ft ? t.strstart - (t.w_size - ft) : 0, + h = t.window, + d = t.w_mask, + f = t.prev, + _ = t.strstart + dt, + u = h[r + s - 1], + c = h[r + s]; + t.prev_length >= t.good_match && (n >>= 2), o > t.lookahead && (o = t.lookahead); + do + if (a = e, h[a + s] === c && h[a + s - 1] === u && h[a] === h[r] && h[++a] === + h[r + 1]) { + r += 2, a++; + do; while (h[++r] === h[++a] && h[++r] === h[++a] && h[++r] === h[++a] && h[ + ++r] === h[++a] && h[++r] === h[++a] && h[++r] === h[++a] && h[++ + r] === h[++a] && h[++r] === h[++a] && r < _); + if (i = dt - (_ - r), r = _ - dt, i > s) { + if (t.match_start = e, s = i, i >= o) break; + u = h[r + s - 1], c = h[r + s] + } + } while ((e = f[e & d]) > l && 0 !== --n); + return s <= t.lookahead ? s : t.lookahead + } + + function _(t) { + var e, a, i, n, r, s = t.w_size; + do { + if (n = t.window_size - t.lookahead - t.strstart, t.strstart >= s + (s - ft)) { + R.arraySet(t.window, t.window, s, s, 0), t.match_start -= s, t.strstart -= + s, t.block_start -= s, a = t.hash_size, e = a; + do i = t.head[--e], t.head[e] = i >= s ? i - s : 0; while (--a); + a = s, e = a; + do i = t.prev[--e], t.prev[e] = i >= s ? i - s : 0; while (--a); + n += s + } + if (0 === t.strm.avail_in) break; + if (a = d(t.strm, t.window, t.strstart + t.lookahead, n), t.lookahead += a, t + .lookahead + t.insert >= ht) + for (r = t.strstart - t.insert, t.ins_h = t.window[r], t.ins_h = (t.ins_h << + t.hash_shift ^ t.window[r + 1]) & t.hash_mask; t.insert && (t + .ins_h = (t.ins_h << t.hash_shift ^ t.window[r + ht - 1]) & t + .hash_mask, t.prev[r & t.w_mask] = t.head[t.ins_h], t.head[t + .ins_h] = r, r++, t.insert--, !(t.lookahead + t.insert < ht));); + } while (t.lookahead < ft && 0 !== t.strm.avail_in) + } + + function u(t, e) { + var a = 65535; + for (a > t.pending_buf_size - 5 && (a = t.pending_buf_size - 5);;) { + if (t.lookahead <= 1) { + if (_(t), 0 === t.lookahead && e === I) return vt; + if (0 === t.lookahead) break + } + t.strstart += t.lookahead, t.lookahead = 0; + var i = t.block_start + a; + if ((0 === t.strstart || t.strstart >= i) && (t.lookahead = t.strstart - i, t + .strstart = i, o(t, !1), 0 === t.strm.avail_out)) return vt; + if (t.strstart - t.block_start >= t.w_size - ft && (o(t, !1), 0 === t.strm + .avail_out)) return vt + } + return t.insert = 0, e === F ? (o(t, !0), 0 === t.strm.avail_out ? yt : xt) : t + .strstart > t.block_start && (o(t, !1), 0 === t.strm.avail_out) ? vt : vt + } + + function c(t, e) { + for (var a, i;;) { + if (t.lookahead < ft) { + if (_(t), t.lookahead < ft && e === I) return vt; + if (0 === t.lookahead) break + } + if (a = 0, t.lookahead >= ht && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t + .strstart + ht - 1]) & t.hash_mask, a = t.prev[t.strstart & t + .w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), 0 !== a && t + .strstart - a <= t.w_size - ft && (t.match_length = f(t, a)), t + .match_length >= ht) + if (i = C._tr_tally(t, t.strstart - t.match_start, t.match_length - ht), t + .lookahead -= t.match_length, t.match_length <= t.max_lazy_match && t + .lookahead >= ht) { + t.match_length--; + do t.strstart++, t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t + .strstart + ht - 1]) & t.hash_mask, a = t.prev[t.strstart & t + .w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart; while ( + 0 !== --t.match_length); + t.strstart++ + } else t.strstart += t.match_length, t.match_length = 0, t.ins_h = t.window[ + t.strstart], t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t + .strstart + 1]) & t.hash_mask; + else i = C._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++; + if (i && (o(t, !1), 0 === t.strm.avail_out)) return vt + } + return t.insert = t.strstart < ht - 1 ? t.strstart : ht - 1, e === F ? (o(t, !0), + 0 === t.strm.avail_out ? yt : xt) : t.last_lit && (o(t, !1), 0 === t.strm + .avail_out) ? vt : kt + } + + function b(t, e) { + for (var a, i, n;;) { + if (t.lookahead < ft) { + if (_(t), t.lookahead < ft && e === I) return vt; + if (0 === t.lookahead) break + } + if (a = 0, t.lookahead >= ht && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t + .strstart + ht - 1]) & t.hash_mask, a = t.prev[t.strstart & t + .w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), t + .prev_length = t.match_length, t.prev_match = t.match_start, t + .match_length = ht - 1, 0 !== a && t.prev_length < t.max_lazy_match && t + .strstart - a <= t.w_size - ft && (t.match_length = f(t, a), t + .match_length <= 5 && (t.strategy === q || t.match_length === ht && t + .strstart - t.match_start > 4096) && (t.match_length = ht - 1)), t + .prev_length >= ht && t.match_length <= t.prev_length) { + n = t.strstart + t.lookahead - ht, i = C._tr_tally(t, t.strstart - 1 - t + .prev_match, t.prev_length - ht), t.lookahead -= t.prev_length - 1, + t.prev_length -= 2; + do ++t.strstart <= n && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t + .strstart + ht - 1]) & t.hash_mask, a = t.prev[t.strstart & t + .w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart); while (0 !== + --t.prev_length); + if (t.match_available = 0, t.match_length = ht - 1, t.strstart++, i && (o(t, + !1), 0 === t.strm.avail_out)) return vt + } else if (t.match_available) { + if (i = C._tr_tally(t, 0, t.window[t.strstart - 1]), i && o(t, !1), t + .strstart++, t.lookahead--, 0 === t.strm.avail_out) return vt + } else t.match_available = 1, t.strstart++, t.lookahead-- + } + return t.match_available && (i = C._tr_tally(t, 0, t.window[t.strstart - 1]), t + .match_available = 0), t.insert = t.strstart < ht - 1 ? t.strstart : ht - 1, + e === F ? (o(t, !0), 0 === t.strm.avail_out ? yt : xt) : t.last_lit && (o(t, ! + 1), 0 === t.strm.avail_out) ? vt : kt + } + + function g(t, e) { + for (var a, i, n, r, s = t.window;;) { + if (t.lookahead <= dt) { + if (_(t), t.lookahead <= dt && e === I) return vt; + if (0 === t.lookahead) break + } + if (t.match_length = 0, t.lookahead >= ht && t.strstart > 0 && (n = t.strstart - + 1, i = s[n], i === s[++n] && i === s[++n] && i === s[++n])) { + r = t.strstart + dt; + do; while (i === s[++n] && i === s[++n] && i === s[++n] && i === s[++n] && + i === s[++n] && i === s[++n] && i === s[++n] && i === s[++n] && n < r); + t.match_length = dt - (r - n), t.match_length > t.lookahead && (t + .match_length = t.lookahead) + } + if (t.match_length >= ht ? (a = C._tr_tally(t, 1, t.match_length - ht), t + .lookahead -= t.match_length, t.strstart += t.match_length, t + .match_length = 0) : (a = C._tr_tally(t, 0, t.window[t.strstart]), t + .lookahead--, t.strstart++), a && (o(t, !1), 0 === t.strm.avail_out)) + return vt + } + return t.insert = 0, e === F ? (o(t, !0), 0 === t.strm.avail_out ? yt : xt) : t + .last_lit && (o(t, !1), 0 === t.strm.avail_out) ? vt : kt + } + + function m(t, e) { + for (var a;;) { + if (0 === t.lookahead && (_(t), 0 === t.lookahead)) { + if (e === I) return vt; + break + } + if (t.match_length = 0, a = C._tr_tally(t, 0, t.window[t.strstart]), t + .lookahead--, t.strstart++, a && (o(t, !1), 0 === t.strm.avail_out)) + return vt + } + return t.insert = 0, e === F ? (o(t, !0), 0 === t.strm.avail_out ? yt : xt) : t + .last_lit && (o(t, !1), 0 === t.strm.avail_out) ? vt : kt + } + + function w(t, e, a, i, n) { + this.good_length = t, this.max_lazy = e, this.nice_length = a, this.max_chain = i, + this.func = n + } + + function p(t) { + t.window_size = 2 * t.w_size, r(t.head), t.max_lazy_match = Z[t.level].max_lazy, t + .good_match = Z[t.level].good_length, t.nice_match = Z[t.level].nice_length, t + .max_chain_length = Z[t.level].max_chain, t.strstart = 0, t.block_start = 0, t + .lookahead = 0, t.insert = 0, t.match_length = t.prev_length = ht - 1, t + .match_available = 0, t.ins_h = 0 + } + + function v() { + this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = + 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, + this.gzindex = 0, this.method = V, this.last_flush = -1, this.w_size = 0, this + .w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this + .prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this + .hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, + this.match_length = 0, this.prev_match = 0, this.match_available = 0, this + .strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, + this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this + .strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new R + .Buf16(2 * ot), this.dyn_dtree = new R.Buf16(2 * (2 * rt + 1)), this.bl_tree = + new R.Buf16(2 * (2 * st + 1)), r(this.dyn_ltree), r(this.dyn_dtree), r(this + .bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this + .bl_count = new R.Buf16(lt + 1), this.heap = new R.Buf16(2 * nt + 1), r(this + .heap), this.heap_len = 0, this.heap_max = 0, this.depth = new R.Buf16(2 * + nt + 1), r(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this + .last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this + .matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0 + } + + function k(t) { + var e; + return t && t.state ? (t.total_in = t.total_out = 0, t.data_type = Q, e = t.state, e + .pending = 0, e.pending_out = 0, e.wrap < 0 && (e.wrap = -e.wrap), e + .status = e.wrap ? ut : wt, t.adler = 2 === e.wrap ? 0 : 1, e.last_flush = + I, C._tr_init(e), H) : i(t, K) + } + + function y(t) { + var e = k(t); + return e === H && p(t.state), e + } + + function x(t, e) { + return t && t.state ? 2 !== t.state.wrap ? K : (t.state.gzhead = e, H) : K + } + + function z(t, e, a, n, r, s) { + if (!t) return K; + var o = 1; + if (e === Y && (e = 6), n < 0 ? (o = 0, n = -n) : n > 15 && (o = 2, n -= 16), r < + 1 || r > $ || a !== V || n < 8 || n > 15 || e < 0 || e > 9 || s < 0 || s > W) + return i(t, K); + 8 === n && (n = 9); + var l = new v; + return t.state = l, l.strm = t, l.wrap = o, l.gzhead = null, l.w_bits = n, l + .w_size = 1 << l.w_bits, l.w_mask = l.w_size - 1, l.hash_bits = r + 7, l + .hash_size = 1 << l.hash_bits, l.hash_mask = l.hash_size - 1, l.hash_shift = ~~( + (l.hash_bits + ht - 1) / ht), l.window = new R.Buf8(2 * l.w_size), l.head = + new R.Buf16(l.hash_size), l.prev = new R.Buf16(l.w_size), l.lit_bufsize = 1 << + r + 6, l.pending_buf_size = 4 * l.lit_bufsize, l.pending_buf = new R.Buf8(l + .pending_buf_size), l.d_buf = 1 * l.lit_bufsize, l.l_buf = 3 * l + .lit_bufsize, l.level = e, l.strategy = s, l.method = a, y(t) + } + + function B(t, e) { + return z(t, e, V, tt, et, J) + } + + function S(t, e) { + var a, o, d, f; + if (!t || !t.state || e > L || e < 0) return t ? i(t, K) : K; + if (o = t.state, !t.output || !t.input && 0 !== t.avail_in || o.status === pt && + e !== F) return i(t, 0 === t.avail_out ? P : K); + if (o.strm = t, a = o.last_flush, o.last_flush = e, o.status === ut) + if (2 === o.wrap) t.adler = 0, l(o, 31), l(o, 139), l(o, 8), o.gzhead ? (l(o, (o + .gzhead.text ? 1 : 0) + (o.gzhead.hcrc ? 2 : 0) + (o.gzhead + .extra ? 4 : 0) + (o.gzhead.name ? 8 : 0) + (o.gzhead.comment ? + 16 : 0)), l(o, 255 & o.gzhead.time), l(o, o.gzhead.time >> 8 & 255), + l(o, o.gzhead.time >> 16 & 255), l(o, o.gzhead.time >> 24 & 255), l(o, + 9 === o.level ? 2 : o.strategy >= G || o.level < 2 ? 4 : 0), l(o, + 255 & o.gzhead.os), o.gzhead.extra && o.gzhead.extra.length && (l(o, + 255 & o.gzhead.extra.length), l(o, o.gzhead.extra.length >> 8 & + 255)), o.gzhead.hcrc && (t.adler = O(t.adler, o.pending_buf, o + .pending, 0)), o.gzindex = 0, o.status = ct) : (l(o, 0), l(o, 0), l( + o, 0), l(o, 0), l(o, 0), l(o, 9 === o.level ? 2 : o.strategy >= G || + o.level < 2 ? 4 : 0), l(o, zt), o.status = wt); + else { + var _ = V + (o.w_bits - 8 << 4) << 8, + u = -1; + u = o.strategy >= G || o.level < 2 ? 0 : o.level < 6 ? 1 : 6 === o.level ? + 2 : 3, _ |= u << 6, 0 !== o.strstart && (_ |= _t), _ += 31 - _ % 31, o + .status = wt, h(o, _), 0 !== o.strstart && (h(o, t.adler >>> 16), h(o, + 65535 & t.adler)), t.adler = 1 + } if (o.status === ct) + if (o.gzhead.extra) { + for (d = o.pending; o.gzindex < (65535 & o.gzhead.extra.length) && (o + .pending !== o.pending_buf_size || (o.gzhead.hcrc && o.pending > + d && (t.adler = O(t.adler, o.pending_buf, o.pending - d, d)), s( + t), d = o.pending, o.pending !== o.pending_buf_size));) l(o, + 255 & o.gzhead.extra[o.gzindex]), o.gzindex++; + o.gzhead.hcrc && o.pending > d && (t.adler = O(t.adler, o.pending_buf, o + .pending - d, d)), o.gzindex === o.gzhead.extra.length && (o + .gzindex = 0, o.status = bt) + } else o.status = bt; + if (o.status === bt) + if (o.gzhead.name) { + d = o.pending; + do { + if (o.pending === o.pending_buf_size && (o.gzhead.hcrc && o.pending > + d && (t.adler = O(t.adler, o.pending_buf, o.pending - d, d)), s( + t), d = o.pending, o.pending === o.pending_buf_size)) { + f = 1; + break + } + f = o.gzindex < o.gzhead.name.length ? 255 & o.gzhead.name.charCodeAt(o + .gzindex++) : 0, l(o, f) + } while (0 !== f); + o.gzhead.hcrc && o.pending > d && (t.adler = O(t.adler, o.pending_buf, o + .pending - d, d)), 0 === f && (o.gzindex = 0, o.status = gt) + } else o.status = gt; + if (o.status === gt) + if (o.gzhead.comment) { + d = o.pending; + do { + if (o.pending === o.pending_buf_size && (o.gzhead.hcrc && o.pending > + d && (t.adler = O(t.adler, o.pending_buf, o.pending - d, d)), s( + t), d = o.pending, o.pending === o.pending_buf_size)) { + f = 1; + break + } + f = o.gzindex < o.gzhead.comment.length ? 255 & o.gzhead.comment + .charCodeAt(o.gzindex++) : 0, l(o, f) + } while (0 !== f); + o.gzhead.hcrc && o.pending > d && (t.adler = O(t.adler, o.pending_buf, o + .pending - d, d)), 0 === f && (o.status = mt) + } else o.status = mt; + if (o.status === mt && (o.gzhead.hcrc ? (o.pending + 2 > o.pending_buf_size && s(t), + o.pending + 2 <= o.pending_buf_size && (l(o, 255 & t.adler), l(o, t + .adler >> 8 & 255), t.adler = 0, o.status = wt)) : o.status = wt), 0 !== + o.pending) { + if (s(t), 0 === t.avail_out) return o.last_flush = -1, H + } else if (0 === t.avail_in && n(e) <= n(a) && e !== F) return i(t, P); + if (o.status === pt && 0 !== t.avail_in) return i(t, P); + if (0 !== t.avail_in || 0 !== o.lookahead || e !== I && o.status !== pt) { + var c = o.strategy === G ? m(o, e) : o.strategy === X ? g(o, e) : Z[o.level] + .func(o, e); + if (c !== yt && c !== xt || (o.status = pt), c === vt || c === yt) return 0 === + t.avail_out && (o.last_flush = -1), H; + if (c === kt && (e === U ? C._tr_align(o) : e !== L && (C._tr_stored_block(o, 0, + 0, !1), e === T && (r(o.head), 0 === o.lookahead && (o + .strstart = 0, o.block_start = 0, o.insert = 0))), s(t), 0 === t + .avail_out)) return o.last_flush = -1, H + } + return e !== F ? H : o.wrap <= 0 ? j : (2 === o.wrap ? (l(o, 255 & t.adler), l(o, t + .adler >> 8 & 255), l(o, t.adler >> 16 & 255), l(o, t.adler >> 24 & + 255), l(o, 255 & t.total_in), l(o, t.total_in >> 8 & 255), l(o, t + .total_in >> 16 & 255), l(o, t.total_in >> 24 & 255)) : (h(o, t + .adler >>> 16), h(o, 65535 & t.adler)), s(t), o.wrap > 0 && (o.wrap = -o + .wrap), 0 !== o.pending ? H : j) + } + + function E(t) { + var e; + return t && t.state ? (e = t.state.status, e !== ut && e !== ct && e !== bt && e !== + gt && e !== mt && e !== wt && e !== pt ? i(t, K) : (t.state = null, e === + wt ? i(t, M) : H)) : K + } + + function A(t, e) { + var a, i, n, s, o, l, h, d, f = e.length; + if (!t || !t.state) return K; + if (a = t.state, s = a.wrap, 2 === s || 1 === s && a.status !== ut || a.lookahead) + return K; + for (1 === s && (t.adler = N(t.adler, e, f, 0)), a.wrap = 0, f >= a.w_size && (0 === + s && (r(a.head), a.strstart = 0, a.block_start = 0, a.insert = 0), d = new R + .Buf8(a.w_size), R.arraySet(d, e, f - a.w_size, a.w_size, 0), e = d, f = a + .w_size), o = t.avail_in, l = t.next_in, h = t.input, t.avail_in = f, t + .next_in = 0, t.input = e, _(a); a.lookahead >= ht;) { + i = a.strstart, n = a.lookahead - (ht - 1); + do a.ins_h = (a.ins_h << a.hash_shift ^ a.window[i + ht - 1]) & a.hash_mask, a + .prev[i & a.w_mask] = a.head[a.ins_h], a.head[a.ins_h] = i, i++; while (-- + n); + a.strstart = i, a.lookahead = ht - 1, _(a) + } + return a.strstart += a.lookahead, a.block_start = a.strstart, a.insert = a + .lookahead, a.lookahead = 0, a.match_length = a.prev_length = ht - 1, a + .match_available = 0, t.next_in = l, t.input = h, t.avail_in = o, a.wrap = s, H + } + var Z, R = t("../utils/common"), + C = t("./trees"), + N = t("./adler32"), + O = t("./crc32"), + D = t("./messages"), + I = 0, + U = 1, + T = 3, + F = 4, + L = 5, + H = 0, + j = 1, + K = -2, + M = -3, + P = -5, + Y = -1, + q = 1, + G = 2, + X = 3, + W = 4, + J = 0, + Q = 2, + V = 8, + $ = 9, + tt = 15, + et = 8, + at = 29, + it = 256, + nt = it + 1 + at, + rt = 30, + st = 19, + ot = 2 * nt + 1, + lt = 15, + ht = 3, + dt = 258, + ft = dt + ht + 1, + _t = 32, + ut = 42, + ct = 69, + bt = 73, + gt = 91, + mt = 103, + wt = 113, + pt = 666, + vt = 1, + kt = 2, + yt = 3, + xt = 4, + zt = 3; + Z = [new w(0, 0, 0, 0, u), new w(4, 4, 8, 4, c), new w(4, 5, 16, 8, c), new w(4, 6, 32, + 32, c), new w(4, 4, 16, 16, b), new w(8, 16, 32, 32, b), new w(8, 16, 128, + 128, b), new w(8, 32, 128, 256, b), new w(32, 128, 258, 1024, b), new w(32, + 258, 258, 4096, b)], a.deflateInit = B, a.deflateInit2 = z, a.deflateReset = y, + a.deflateResetKeep = k, a.deflateSetHeader = x, a.deflate = S, a.deflateEnd = E, a + .deflateSetDictionary = A, a.deflateInfo = "pako deflate (from Nodeca project)" + }, { + "../utils/common": 3, + "./adler32": 5, + "./crc32": 7, + "./messages": 13, + "./trees": 14 + }], + 9: [function(t, e, a) { + "use strict"; + + function i() { + this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this + .extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1 + } + e.exports = i + }, {}], + 10: [function(t, e, a) { + "use strict"; + var i = 30, + n = 12; + e.exports = function(t, e) { + var a, r, s, o, l, h, d, f, _, u, c, b, g, m, w, p, v, k, y, x, z, B, S, E, A; + a = t.state, r = t.next_in, E = t.input, s = r + (t.avail_in - 5), o = t + .next_out, A = t.output, l = o - (e - t.avail_out), h = o + (t.avail_out - + 257), d = a.dmax, f = a.wsize, _ = a.whave, u = a.wnext, c = a.window, + b = a.hold, g = a.bits, m = a.lencode, w = a.distcode, p = (1 << a + .lenbits) - 1, v = (1 << a.distbits) - 1; + t: do { + g < 15 && (b += E[r++] << g, g += 8, b += E[r++] << g, g += 8), k = m[ + b & p]; + e: for (;;) { + if (y = k >>> 24, b >>>= y, g -= y, y = k >>> 16 & 255, 0 === y) + A[o++] = 65535 & k; + else { + if (!(16 & y)) { + if (0 === (64 & y)) { + k = m[(65535 & k) + (b & (1 << y) - 1)]; + continue e + } + if (32 & y) { + a.mode = n; + break t + } + t.msg = "invalid literal/length code", a.mode = i; + break t + } + x = 65535 & k, y &= 15, y && (g < y && (b += E[r++] << g, + g += 8), x += b & (1 << y) - 1, b >>>= y, g -= + y), g < 15 && (b += E[r++] << g, g += 8, b += E[ + r++] << g, g += 8), k = w[b & v]; + a: for (;;) { + if (y = k >>> 24, b >>>= y, g -= y, y = k >>> 16 & + 255, !(16 & y)) { + if (0 === (64 & y)) { + k = w[(65535 & k) + (b & (1 << y) - 1)]; + continue a + } + t.msg = "invalid distance code", a.mode = i; + break t + } + if (z = 65535 & k, y &= 15, g < y && (b += E[r++] << + g, g += 8, g < y && (b += E[r++] << g, g += + 8)), z += b & (1 << y) - 1, z > d) { + t.msg = "invalid distance too far back", a + .mode = i; + break t + } + if (b >>>= y, g -= y, y = o - l, z > y) { + if (y = z - y, y > _ && a.sane) { + t.msg = "invalid distance too far back", a + .mode = i; + break t + } + if (B = 0, S = c, 0 === u) { + if (B += f - y, y < x) { + x -= y; + do A[o++] = c[B++]; while (--y); + B = o - z, S = A + } + } else if (u < y) { + if (B += f + u - y, y -= u, y < x) { + x -= y; + do A[o++] = c[B++]; while (--y); + if (B = 0, u < x) { + y = u, x -= y; + do A[o++] = c[B++]; while (--y); + B = o - z, S = A + } + } + } else if (B += u - y, y < x) { + x -= y; + do A[o++] = c[B++]; while (--y); + B = o - z, S = A + } + for (; x > 2;) A[o++] = S[B++], A[o++] = S[B++], + A[o++] = S[B++], x -= 3; + x && (A[o++] = S[B++], x > 1 && (A[o++] = S[ + B++])) + } else { + B = o - z; + do A[o++] = A[B++], A[o++] = A[B++], A[o++] = A[ + B++], x -= 3; while (x > 2); + x && (A[o++] = A[B++], x > 1 && (A[o++] = A[ + B++])) + } + break + } + } + break + } + } while (r < s && o < h); + x = g >> 3, r -= x, g -= x << 3, b &= (1 << g) - 1, t.next_in = r, t.next_out = + o, t.avail_in = r < s ? 5 + (s - r) : 5 - (r - s), t.avail_out = o < h ? + 257 + (h - o) : 257 - (o - h), a.hold = b, a.bits = g + } + }, {}], + 11: [function(t, e, a) { + "use strict"; + + function i(t) { + return (t >>> 24 & 255) + (t >>> 8 & 65280) + ((65280 & t) << 8) + ((255 & t) << 24) + } + + function n() { + this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, + this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, + this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = + 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this + .lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this + .ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this + .lens = new w.Buf16(320), this.work = new w.Buf16(288), this.lendyn = null, this + .distdyn = null, this.sane = 0, this.back = 0, this.was = 0 + } + + function r(t) { + var e; + return t && t.state ? (e = t.state, t.total_in = t.total_out = e.total = 0, t.msg = + "", e.wrap && (t.adler = 1 & e.wrap), e.mode = T, e.last = 0, e.havedict = + 0, e.dmax = 32768, e.head = null, e.hold = 0, e.bits = 0, e.lencode = e + .lendyn = new w.Buf32(bt), e.distcode = e.distdyn = new w.Buf32(gt), e + .sane = 1, e.back = -1, Z) : N + } + + function s(t) { + var e; + return t && t.state ? (e = t.state, e.wsize = 0, e.whave = 0, e.wnext = 0, r(t)) : N + } + + function o(t, e) { + var a, i; + return t && t.state ? (i = t.state, e < 0 ? (a = 0, e = -e) : (a = (e >> 4) + 1, e < + 48 && (e &= 15)), e && (e < 8 || e > 15) ? N : (null !== i.window && i + .wbits !== e && (i.window = null), i.wrap = a, i.wbits = e, s(t))) : N + } + + function l(t, e) { + var a, i; + return t ? (i = new n, t.state = i, i.window = null, a = o(t, e), a !== Z && (t + .state = null), a) : N + } + + function h(t) { + return l(t, wt) + } + + function d(t) { + if (pt) { + var e; + for (g = new w.Buf32(512), m = new w.Buf32(32), e = 0; e < 144;) t.lens[e++] = + 8; + for (; e < 256;) t.lens[e++] = 9; + for (; e < 280;) t.lens[e++] = 7; + for (; e < 288;) t.lens[e++] = 8; + for (y(z, t.lens, 0, 288, g, 0, t.work, { + bits: 9 + }), e = 0; e < 32;) t.lens[e++] = 5; + y(B, t.lens, 0, 32, m, 0, t.work, { + bits: 5 + }), pt = !1 + } + t.lencode = g, t.lenbits = 9, t.distcode = m, t.distbits = 5 + } + + function f(t, e, a, i) { + var n, r = t.state; + return null === r.window && (r.wsize = 1 << r.wbits, r.wnext = 0, r.whave = 0, r + .window = new w.Buf8(r.wsize)), i >= r.wsize ? (w.arraySet(r.window, e, a - + r.wsize, r.wsize, 0), r.wnext = 0, r.whave = r.wsize) : (n = r.wsize - r + .wnext, n > i && (n = i), w.arraySet(r.window, e, a - i, n, r.wnext), i -= + n, i ? (w.arraySet(r.window, e, a - i, i, 0), r.wnext = i, r.whave = r + .wsize) : (r.wnext += n, r.wnext === r.wsize && (r.wnext = 0), r.whave < + r.wsize && (r.whave += n))), 0 + } + + function _(t, e) { + var a, n, r, s, o, l, h, _, u, c, b, g, m, bt, gt, mt, wt, pt, vt, kt, yt, xt, zt, + Bt, St = 0, + Et = new w.Buf8(4), + At = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + if (!t || !t.state || !t.output || !t.input && 0 !== t.avail_in) return N; + a = t.state, a.mode === X && (a.mode = W), o = t.next_out, r = t.output, h = t + .avail_out, s = t.next_in, n = t.input, l = t.avail_in, _ = a.hold, u = a.bits, + c = l, b = h, xt = Z; + t: for (;;) switch (a.mode) { + case T: + if (0 === a.wrap) { + a.mode = W; + break + } + for (; u < 16;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (2 & a.wrap && 35615 === _) { + a.check = 0, Et[0] = 255 & _, Et[1] = _ >>> 8 & 255, a.check = + v(a.check, Et, 2, 0), _ = 0, u = 0, a.mode = F; + break + } + if (a.flags = 0, a.head && (a.head.done = !1), !(1 & a.wrap) || ((( + 255 & _) << 8) + (_ >> 8)) % 31) { + t.msg = "incorrect header check", a.mode = _t; + break + } + if ((15 & _) !== U) { + t.msg = "unknown compression method", a.mode = _t; + break + } + if (_ >>>= 4, u -= 4, yt = (15 & _) + 8, 0 === a.wbits) a.wbits = + yt; + else if (yt > a.wbits) { + t.msg = "invalid window size", a.mode = _t; + break + } + a.dmax = 1 << yt, t.adler = a.check = 1, a.mode = 512 & _ ? q : X, + _ = 0, u = 0; + break; + case F: + for (; u < 16;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (a.flags = _, (255 & a.flags) !== U) { + t.msg = "unknown compression method", a.mode = _t; + break + } + if (57344 & a.flags) { + t.msg = "unknown header flags set", a.mode = _t; + break + } + a.head && (a.head.text = _ >> 8 & 1), 512 & a.flags && (Et[0] = + 255 & _, Et[1] = _ >>> 8 & 255, a.check = v(a.check, Et, 2, + 0)), _ = 0, u = 0, a.mode = L; + case L: + for (; u < 32;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + a.head && (a.head.time = _), 512 & a.flags && (Et[0] = 255 & _, Et[ + 1] = _ >>> 8 & 255, Et[2] = _ >>> 16 & 255, Et[3] = + _ >>> 24 & 255, a.check = v(a.check, Et, 4, 0)), _ = 0, u = + 0, a.mode = H; + case H: + for (; u < 16;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + a.head && (a.head.xflags = 255 & _, a.head.os = _ >> 8), 512 & a + .flags && (Et[0] = 255 & _, Et[1] = _ >>> 8 & 255, a.check = v(a + .check, Et, 2, 0)), _ = 0, u = 0, a.mode = j; + case j: + if (1024 & a.flags) { + for (; u < 16;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + a.length = _, a.head && (a.head.extra_len = _), 512 & a.flags && + (Et[0] = 255 & _, Et[1] = _ >>> 8 & 255, a.check = v(a + .check, Et, 2, 0)), _ = 0, u = 0 + } else a.head && (a.head.extra = null); + a.mode = K; + case K: + if (1024 & a.flags && (g = a.length, g > l && (g = l), g && (a + .head && (yt = a.head.extra_len - a.length, a.head + .extra || (a.head.extra = new Array(a.head + .extra_len)), w.arraySet(a.head.extra, n, s, g, + yt)), 512 & a.flags && (a.check = v(a.check, n, + g, s)), l -= g, s += g, a.length -= g), a.length)) + break t; + a.length = 0, a.mode = M; + case M: + if (2048 & a.flags) { + if (0 === l) break t; + g = 0; + do yt = n[s + g++], a.head && yt && a.length < 65536 && (a.head + .name += String.fromCharCode(yt)); while (yt && g < l); + if (512 & a.flags && (a.check = v(a.check, n, g, s)), l -= g, + s += g, yt) break t + } else a.head && (a.head.name = null); + a.length = 0, a.mode = P; + case P: + if (4096 & a.flags) { + if (0 === l) break t; + g = 0; + do yt = n[s + g++], a.head && yt && a.length < 65536 && (a.head + .comment += String.fromCharCode(yt)); while (yt && g < l); + if (512 & a.flags && (a.check = v(a.check, n, g, s)), l -= g, + s += g, yt) break t + } else a.head && (a.head.comment = null); + a.mode = Y; + case Y: + if (512 & a.flags) { + for (; u < 16;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (_ !== (65535 & a.check)) { + t.msg = "header crc mismatch", a.mode = _t; + break + } + _ = 0, u = 0 + } + a.head && (a.head.hcrc = a.flags >> 9 & 1, a.head.done = !0), t + .adler = a.check = 0, a.mode = X; + break; + case q: + for (; u < 32;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + t.adler = a.check = i(_), _ = 0, u = 0, a.mode = G; + case G: + if (0 === a.havedict) return t.next_out = o, t.avail_out = h, t + .next_in = s, t.avail_in = l, a.hold = _, a.bits = u, C; + t.adler = a.check = 1, a.mode = X; + case X: + if (e === E || e === A) break t; + case W: + if (a.last) { + _ >>>= 7 & u, u -= 7 & u, a.mode = ht; + break + } + for (; u < 3;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + switch (a.last = 1 & _, _ >>>= 1, u -= 1, 3 & _) { + case 0: + a.mode = J; + break; + case 1: + if (d(a), a.mode = at, e === A) { + _ >>>= 2, u -= 2; + break t + } + break; + case 2: + a.mode = $; + break; + case 3: + t.msg = "invalid block type", a.mode = _t + } + _ >>>= 2, u -= 2; + break; + case J: + for (_ >>>= 7 & u, u -= 7 & u; u < 32;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if ((65535 & _) !== (_ >>> 16 ^ 65535)) { + t.msg = "invalid stored block lengths", a.mode = _t; + break + } + if (a.length = 65535 & _, _ = 0, u = 0, a.mode = Q, e === A) + break t; + case Q: + a.mode = V; + case V: + if (g = a.length) { + if (g > l && (g = l), g > h && (g = h), 0 === g) break t; + w.arraySet(r, n, s, g, o), l -= g, s += g, h -= g, o += g, a + .length -= g; + break + } + a.mode = X; + break; + case $: + for (; u < 14;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (a.nlen = (31 & _) + 257, _ >>>= 5, u -= 5, a.ndist = (31 & _) + + 1, _ >>>= 5, u -= 5, a.ncode = (15 & _) + 4, _ >>>= 4, u -= 4, a + .nlen > 286 || a.ndist > 30) { + t.msg = "too many length or distance symbols", a.mode = _t; + break + } + a.have = 0, a.mode = tt; + case tt: + for (; a.have < a.ncode;) { + for (; u < 3;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + a.lens[At[a.have++]] = 7 & _, _ >>>= 3, u -= 3 + } + for (; a.have < 19;) a.lens[At[a.have++]] = 0; + if (a.lencode = a.lendyn, a.lenbits = 7, zt = { + bits: a.lenbits + }, xt = y(x, a.lens, 0, 19, a.lencode, 0, a.work, zt), a + .lenbits = zt.bits, xt) { + t.msg = "invalid code lengths set", a.mode = _t; + break + } + a.have = 0, a.mode = et; + case et: + for (; a.have < a.nlen + a.ndist;) { + for (; St = a.lencode[_ & (1 << a.lenbits) - 1], gt = St >>> 24, + mt = St >>> 16 & 255, wt = 65535 & St, !(gt <= u);) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (wt < 16) _ >>>= gt, u -= gt, a.lens[a.have++] = wt; + else { + if (16 === wt) { + for (Bt = gt + 2; u < Bt;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (_ >>>= gt, u -= gt, 0 === a.have) { + t.msg = "invalid bit length repeat", a.mode = _t; + break + } + yt = a.lens[a.have - 1], g = 3 + (3 & _), _ >>>= 2, u -= + 2 + } else if (17 === wt) { + for (Bt = gt + 3; u < Bt;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + _ >>>= gt, u -= gt, yt = 0, g = 3 + (7 & _), _ >>>= 3, + u -= 3 + } else { + for (Bt = gt + 7; u < Bt;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + _ >>>= gt, u -= gt, yt = 0, g = 11 + (127 & _), _ >>>= + 7, u -= 7 + } + if (a.have + g > a.nlen + a.ndist) { + t.msg = "invalid bit length repeat", a.mode = _t; + break + } + for (; g--;) a.lens[a.have++] = yt + } + } + if (a.mode === _t) break; + if (0 === a.lens[256]) { + t.msg = "invalid code -- missing end-of-block", a.mode = _t; + break + } + if (a.lenbits = 9, zt = { + bits: a.lenbits + }, xt = y(z, a.lens, 0, a.nlen, a.lencode, 0, a.work, zt), a + .lenbits = zt.bits, xt) { + t.msg = "invalid literal/lengths set", a.mode = _t; + break + } + if (a.distbits = 6, a.distcode = a.distdyn, zt = { + bits: a.distbits + }, xt = y(B, a.lens, a.nlen, a.ndist, a.distcode, 0, a.work, + zt), a.distbits = zt.bits, xt) { + t.msg = "invalid distances set", a.mode = _t; + break + } + if (a.mode = at, e === A) break t; + case at: + a.mode = it; + case it: + if (l >= 6 && h >= 258) { + t.next_out = o, t.avail_out = h, t.next_in = s, t.avail_in = l, + a.hold = _, a.bits = u, k(t, b), o = t.next_out, r = t + .output, h = t.avail_out, s = t.next_in, n = t.input, l = t + .avail_in, _ = a.hold, u = a.bits, a.mode === X && (a + .back = -1); + break + } + for (a.back = 0; St = a.lencode[_ & (1 << a.lenbits) - 1], gt = + St >>> 24, mt = St >>> 16 & 255, wt = 65535 & St, !(gt <= u);) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (mt && 0 === (240 & mt)) { + for (pt = gt, vt = mt, kt = wt; St = a.lencode[kt + ((_ & (1 << + pt + vt) - 1) >> pt)], gt = St >>> 24, mt = St >>> 16 & + 255, wt = 65535 & St, !(pt + gt <= u);) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + _ >>>= pt, u -= pt, a.back += pt + } + if (_ >>>= gt, u -= gt, a.back += gt, a.length = wt, 0 === mt) { + a.mode = lt; + break + } + if (32 & mt) { + a.back = -1, a.mode = X; + break + } + if (64 & mt) { + t.msg = "invalid literal/length code", a.mode = _t; + break + } + a.extra = 15 & mt, a.mode = nt; + case nt: + if (a.extra) { + for (Bt = a.extra; u < Bt;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + a.length += _ & (1 << a.extra) - 1, _ >>>= a.extra, u -= a + .extra, a.back += a.extra + } + a.was = a.length, a.mode = rt; + case rt: + for (; St = a.distcode[_ & (1 << a.distbits) - 1], gt = St >>> 24, + mt = St >>> 16 & 255, wt = 65535 & St, !(gt <= u);) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (0 === (240 & mt)) { + for (pt = gt, vt = mt, kt = wt; St = a.distcode[kt + ((_ & (1 << + pt + vt) - 1) >> pt)], gt = St >>> 24, mt = St >>> 16 & + 255, wt = 65535 & St, !(pt + gt <= u);) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + _ >>>= pt, u -= pt, a.back += pt + } + if (_ >>>= gt, u -= gt, a.back += gt, 64 & mt) { + t.msg = "invalid distance code", a.mode = _t; + break + } + a.offset = wt, a.extra = 15 & mt, a.mode = st; + case st: + if (a.extra) { + for (Bt = a.extra; u < Bt;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + a.offset += _ & (1 << a.extra) - 1, _ >>>= a.extra, u -= a + .extra, a.back += a.extra + } + if (a.offset > a.dmax) { + t.msg = "invalid distance too far back", a.mode = _t; + break + } + a.mode = ot; + case ot: + if (0 === h) break t; + if (g = b - h, a.offset > g) { + if (g = a.offset - g, g > a.whave && a.sane) { + t.msg = "invalid distance too far back", a.mode = _t; + break + } + g > a.wnext ? (g -= a.wnext, m = a.wsize - g) : m = a.wnext - g, + g > a.length && (g = a.length), bt = a.window + } else bt = r, m = o - a.offset, g = a.length; + g > h && (g = h), h -= g, a.length -= g; + do r[o++] = bt[m++]; while (--g); + 0 === a.length && (a.mode = it); + break; + case lt: + if (0 === h) break t; + r[o++] = a.length, h--, a.mode = it; + break; + case ht: + if (a.wrap) { + for (; u < 32;) { + if (0 === l) break t; + l--, _ |= n[s++] << u, u += 8 + } + if (b -= h, t.total_out += b, a.total += b, b && (t.adler = a + .check = a.flags ? v(a.check, r, b, o - b) : p(a.check, + r, b, o - b)), b = h, (a.flags ? _ : i(_)) !== a + .check) { + t.msg = "incorrect data check", a.mode = _t; + break + } + _ = 0, u = 0 + } + a.mode = dt; + case dt: + if (a.wrap && a.flags) { + for (; u < 32;) { + if (0 === l) break t; + l--, _ += n[s++] << u, u += 8 + } + if (_ !== (4294967295 & a.total)) { + t.msg = "incorrect length check", a.mode = _t; + break + } + _ = 0, u = 0 + } + a.mode = ft; + case ft: + xt = R; + break t; + case _t: + xt = O; + break t; + case ut: + return D; + case ct: + default: + return N + } + return t.next_out = o, t.avail_out = h, t.next_in = s, t.avail_in = l, a.hold = _, a + .bits = u, (a.wsize || b !== t.avail_out && a.mode < _t && (a.mode < ht || e !== + S)) && f(t, t.output, t.next_out, b - t.avail_out) ? (a.mode = ut, D) : ( + c -= t.avail_in, b -= t.avail_out, t.total_in += c, t.total_out += b, a + .total += b, a.wrap && b && (t.adler = a.check = a.flags ? v(a.check, r, b, + t.next_out - b) : p(a.check, r, b, t.next_out - b)), t.data_type = a + .bits + (a.last ? 64 : 0) + (a.mode === X ? 128 : 0) + (a.mode === at || a + .mode === Q ? 256 : 0), (0 === c && 0 === b || e === S) && xt === Z && ( + xt = I), xt) + } + + function u(t) { + if (!t || !t.state) return N; + var e = t.state; + return e.window && (e.window = null), t.state = null, Z + } + + function c(t, e) { + var a; + return t && t.state ? (a = t.state, 0 === (2 & a.wrap) ? N : (a.head = e, e.done = ! + 1, Z)) : N + } + + function b(t, e) { + var a, i, n, r = e.length; + return t && t.state ? (a = t.state, 0 !== a.wrap && a.mode !== G ? N : a.mode === + G && (i = 1, i = p(i, e, r, 0), i !== a.check) ? O : (n = f(t, e, r, r)) ? ( + a.mode = ut, D) : (a.havedict = 1, Z)) : N + } + var g, m, w = t("../utils/common"), + p = t("./adler32"), + v = t("./crc32"), + k = t("./inffast"), + y = t("./inftrees"), + x = 0, + z = 1, + B = 2, + S = 4, + E = 5, + A = 6, + Z = 0, + R = 1, + C = 2, + N = -2, + O = -3, + D = -4, + I = -5, + U = 8, + T = 1, + F = 2, + L = 3, + H = 4, + j = 5, + K = 6, + M = 7, + P = 8, + Y = 9, + q = 10, + G = 11, + X = 12, + W = 13, + J = 14, + Q = 15, + V = 16, + $ = 17, + tt = 18, + et = 19, + at = 20, + it = 21, + nt = 22, + rt = 23, + st = 24, + ot = 25, + lt = 26, + ht = 27, + dt = 28, + ft = 29, + _t = 30, + ut = 31, + ct = 32, + bt = 852, + gt = 592, + mt = 15, + wt = mt, + pt = !0; + a.inflateReset = s, a.inflateReset2 = o, a.inflateResetKeep = r, a.inflateInit = h, a + .inflateInit2 = l, a.inflate = _, a.inflateEnd = u, a.inflateGetHeader = c, a + .inflateSetDictionary = b, a.inflateInfo = "pako inflate (from Nodeca project)" + }, { + "../utils/common": 3, + "./adler32": 5, + "./crc32": 7, + "./inffast": 10, + "./inftrees": 12 + }], + 12: [function(t, e, a) { + "use strict"; + var i = t("../utils/common"), + n = 15, + r = 852, + s = 592, + o = 0, + l = 1, + h = 2, + d = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, + 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 + ], + f = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, + 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 + ], + _ = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, + 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 + ], + u = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, + 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64 + ]; + e.exports = function(t, e, a, c, b, g, m, w) { + var p, v, k, y, x, z, B, S, E, A = w.bits, + Z = 0, + R = 0, + C = 0, + N = 0, + O = 0, + D = 0, + I = 0, + U = 0, + T = 0, + F = 0, + L = null, + H = 0, + j = new i.Buf16(n + 1), + K = new i.Buf16(n + 1), + M = null, + P = 0; + for (Z = 0; Z <= n; Z++) j[Z] = 0; + for (R = 0; R < c; R++) j[e[a + R]]++; + for (O = A, N = n; N >= 1 && 0 === j[N]; N--); + if (O > N && (O = N), 0 === N) return b[g++] = 20971520, b[g++] = 20971520, w + .bits = 1, 0; + for (C = 1; C < N && 0 === j[C]; C++); + for (O < C && (O = C), U = 1, Z = 1; Z <= n; Z++) + if (U <<= 1, U -= j[Z], U < 0) return -1; + if (U > 0 && (t === o || 1 !== N)) return -1; + for (K[1] = 0, Z = 1; Z < n; Z++) K[Z + 1] = K[Z] + j[Z]; + for (R = 0; R < c; R++) 0 !== e[a + R] && (m[K[e[a + R]]++] = R); + if (t === o ? (L = M = m, z = 19) : t === l ? (L = d, H -= 257, M = f, P -= 257, + z = 256) : (L = _, M = u, z = -1), F = 0, R = 0, Z = C, x = g, D = O, + I = 0, k = -1, T = 1 << O, y = T - 1, t === l && T > r || t === h && T > s) + return 1; + for (var Y = 0;;) { + Y++, B = Z - I, m[R] < z ? (S = 0, E = m[R]) : m[R] > z ? (S = M[P + m[R]], + E = L[H + m[R]]) : (S = 96, E = 0), p = 1 << Z - I, v = 1 << D, C = + v; + do v -= p, b[x + (F >> I) + v] = B << 24 | S << 16 | E | 0; while (0 !== v); + for (p = 1 << Z - 1; F & p;) p >>= 1; + if (0 !== p ? (F &= p - 1, F += p) : F = 0, R++, 0 === --j[Z]) { + if (Z === N) break; + Z = e[a + m[R]] + } + if (Z > O && (F & y) !== k) { + for (0 === I && (I = O), x += C, D = Z - I, U = 1 << D; D + I < N && ( + U -= j[D + I], !(U <= 0));) D++, U <<= 1; + if (T += 1 << D, t === l && T > r || t === h && T > s) return 1; + k = F & y, b[k] = O << 24 | D << 16 | x - g | 0 + } + } + return 0 !== F && (b[x + F] = Z - I << 24 | 64 << 16 | 0), w.bits = O, 0 + } + }, { + "../utils/common": 3 + }], + 13: [function(t, e, a) { + "use strict"; + e.exports = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + } + }, {}], + 14: [function(t, e, a) { + "use strict"; + + function i(t) { + for (var e = t.length; --e >= 0;) t[e] = 0 + } + + function n(t, e, a, i, n) { + this.static_tree = t, this.extra_bits = e, this.extra_base = a, this.elems = i, this + .max_length = n, this.has_stree = t && t.length + } + + function r(t, e) { + this.dyn_tree = t, this.max_code = 0, this.stat_desc = e + } + + function s(t) { + return t < 256 ? lt[t] : lt[256 + (t >>> 7)] + } + + function o(t, e) { + t.pending_buf[t.pending++] = 255 & e, t.pending_buf[t.pending++] = e >>> 8 & 255 + } + + function l(t, e, a) { + t.bi_valid > W - a ? (t.bi_buf |= e << t.bi_valid & 65535, o(t, t.bi_buf), t + .bi_buf = e >> W - t.bi_valid, t.bi_valid += a - W) : (t.bi_buf |= e << t + .bi_valid & 65535, t.bi_valid += a) + } + + function h(t, e, a) { + l(t, a[2 * e], a[2 * e + 1]) + } + + function d(t, e) { + var a = 0; + do a |= 1 & t, t >>>= 1, a <<= 1; while (--e > 0); + return a >>> 1 + } + + function f(t) { + 16 === t.bi_valid ? (o(t, t.bi_buf), t.bi_buf = 0, t.bi_valid = 0) : t.bi_valid >= + 8 && (t.pending_buf[t.pending++] = 255 & t.bi_buf, t.bi_buf >>= 8, t.bi_valid -= + 8) + } + + function _(t, e) { + var a, i, n, r, s, o, l = e.dyn_tree, + h = e.max_code, + d = e.stat_desc.static_tree, + f = e.stat_desc.has_stree, + _ = e.stat_desc.extra_bits, + u = e.stat_desc.extra_base, + c = e.stat_desc.max_length, + b = 0; + for (r = 0; r <= X; r++) t.bl_count[r] = 0; + for (l[2 * t.heap[t.heap_max] + 1] = 0, a = t.heap_max + 1; a < G; a++) i = t.heap[ + a], r = l[2 * l[2 * i + 1] + 1] + 1, r > c && (r = c, b++), l[2 * i + 1] = + r, i > h || (t.bl_count[r]++, s = 0, i >= u && (s = _[i - u]), o = l[2 * i], t + .opt_len += o * (r + s), f && (t.static_len += o * (d[2 * i + 1] + s))); + if (0 !== b) { + do { + for (r = c - 1; 0 === t.bl_count[r];) r--; + t.bl_count[r]--, t.bl_count[r + 1] += 2, t.bl_count[c]--, b -= 2 + } while (b > 0); + for (r = c; 0 !== r; r--) + for (i = t.bl_count[r]; 0 !== i;) n = t.heap[--a], n > h || (l[2 * n + + 1] !== r && (t.opt_len += (r - l[2 * n + 1]) * l[2 * n], l[2 * n + + 1] = r), i--) + } + } + + function u(t, e, a) { + var i, n, r = new Array(X + 1), + s = 0; + for (i = 1; i <= X; i++) r[i] = s = s + a[i - 1] << 1; + for (n = 0; n <= e; n++) { + var o = t[2 * n + 1]; + 0 !== o && (t[2 * n] = d(r[o]++, o)) + } + } + + function c() { + var t, e, a, i, r, s = new Array(X + 1); + for (a = 0, i = 0; i < K - 1; i++) + for (dt[i] = a, t = 0; t < 1 << et[i]; t++) ht[a++] = i; + for (ht[a - 1] = i, r = 0, i = 0; i < 16; i++) + for (ft[i] = r, t = 0; t < 1 << at[i]; t++) lt[r++] = i; + for (r >>= 7; i < Y; i++) + for (ft[i] = r << 7, t = 0; t < 1 << at[i] - 7; t++) lt[256 + r++] = i; + for (e = 0; e <= X; e++) s[e] = 0; + for (t = 0; t <= 143;) st[2 * t + 1] = 8, t++, s[8]++; + for (; t <= 255;) st[2 * t + 1] = 9, t++, s[9]++; + for (; t <= 279;) st[2 * t + 1] = 7, t++, s[7]++; + for (; t <= 287;) st[2 * t + 1] = 8, t++, s[8]++; + for (u(st, P + 1, s), t = 0; t < Y; t++) ot[2 * t + 1] = 5, ot[2 * t] = d(t, 5); + _t = new n(st, et, M + 1, P, X), ut = new n(ot, at, 0, Y, X), ct = new n(new Array( + 0), it, 0, q, J) + } + + function b(t) { + var e; + for (e = 0; e < P; e++) t.dyn_ltree[2 * e] = 0; + for (e = 0; e < Y; e++) t.dyn_dtree[2 * e] = 0; + for (e = 0; e < q; e++) t.bl_tree[2 * e] = 0; + t.dyn_ltree[2 * Q] = 1, t.opt_len = t.static_len = 0, t.last_lit = t.matches = 0 + } + + function g(t) { + t.bi_valid > 8 ? o(t, t.bi_buf) : t.bi_valid > 0 && (t.pending_buf[t.pending++] = t + .bi_buf), t.bi_buf = 0, t.bi_valid = 0 + } + + function m(t, e, a, i) { + g(t), i && (o(t, a), o(t, ~a)), N.arraySet(t.pending_buf, t.window, e, a, t + .pending), t.pending += a + } + + function w(t, e, a, i) { + var n = 2 * e, + r = 2 * a; + return t[n] < t[r] || t[n] === t[r] && i[e] <= i[a] + } + + function p(t, e, a) { + for (var i = t.heap[a], n = a << 1; n <= t.heap_len && (n < t.heap_len && w(e, t + .heap[n + 1], t.heap[n], t.depth) && n++, !w(e, i, t.heap[n], t.depth));) t + .heap[a] = t.heap[n], a = n, n <<= 1; + t.heap[a] = i + } + + function v(t, e, a) { + var i, n, r, o, d = 0; + if (0 !== t.last_lit) + do i = t.pending_buf[t.d_buf + 2 * d] << 8 | t.pending_buf[t.d_buf + 2 * d + 1], + n = t.pending_buf[t.l_buf + d], d++, 0 === i ? h(t, n, e) : (r = ht[n], h(t, + r + M + 1, e), o = et[r], 0 !== o && (n -= dt[r], l(t, n, o)), i--, + r = s(i), h(t, r, a), o = at[r], 0 !== o && (i -= ft[r], l(t, i, o)) + ); while (d < t.last_lit); + h(t, Q, e) + } + + function k(t, e) { + var a, i, n, r = e.dyn_tree, + s = e.stat_desc.static_tree, + o = e.stat_desc.has_stree, + l = e.stat_desc.elems, + h = -1; + for (t.heap_len = 0, t.heap_max = G, a = 0; a < l; a++) 0 !== r[2 * a] ? (t.heap[++t + .heap_len] = h = a, t.depth[a] = 0) : r[2 * a + 1] = 0; + for (; t.heap_len < 2;) n = t.heap[++t.heap_len] = h < 2 ? ++h : 0, r[2 * n] = 1, t + .depth[n] = 0, t.opt_len--, o && (t.static_len -= s[2 * n + 1]); + for (e.max_code = h, a = t.heap_len >> 1; a >= 1; a--) p(t, r, a); + n = l; + do a = t.heap[1], t.heap[1] = t.heap[t.heap_len--], p(t, r, 1), i = t.heap[1], t + .heap[--t.heap_max] = a, t.heap[--t.heap_max] = i, r[2 * n] = r[2 * a] + r[2 * + i], t.depth[n] = (t.depth[a] >= t.depth[i] ? t.depth[a] : t.depth[i]) + 1, + r[2 * a + 1] = r[2 * i + 1] = n, t.heap[1] = n++, p(t, r, 1); while (t + .heap_len >= 2); + t.heap[--t.heap_max] = t.heap[1], _(t, e), u(r, h, t.bl_count) + } + + function y(t, e, a) { + var i, n, r = -1, + s = e[1], + o = 0, + l = 7, + h = 4; + for (0 === s && (l = 138, h = 3), e[2 * (a + 1) + 1] = 65535, i = 0; i <= a; i++) + n = s, s = e[2 * (i + 1) + 1], ++o < l && n === s || (o < h ? t.bl_tree[2 * + n] += o : 0 !== n ? (n !== r && t.bl_tree[2 * n]++, t.bl_tree[2 * V]++) : + o <= 10 ? t.bl_tree[2 * $]++ : t.bl_tree[2 * tt]++, o = 0, r = n, 0 === s ? + (l = 138, h = 3) : n === s ? (l = 6, h = 3) : (l = 7, h = 4)) + } + + function x(t, e, a) { + var i, n, r = -1, + s = e[1], + o = 0, + d = 7, + f = 4; + for (0 === s && (d = 138, f = 3), i = 0; i <= a; i++) + if (n = s, s = e[2 * (i + 1) + 1], !(++o < d && n === s)) { + if (o < f) { + do h(t, n, t.bl_tree); while (0 !== --o) + } else 0 !== n ? (n !== r && (h(t, n, t.bl_tree), o--), h(t, V, t.bl_tree), + l(t, o - 3, 2)) : o <= 10 ? (h(t, $, t.bl_tree), l(t, o - 3, 3)) : ( + h(t, tt, t.bl_tree), l(t, o - 11, 7)); + o = 0, r = n, 0 === s ? (d = 138, f = 3) : n === s ? (d = 6, f = 3) : (d = + 7, f = 4) + } + } + + function z(t) { + var e; + for (y(t, t.dyn_ltree, t.l_desc.max_code), y(t, t.dyn_dtree, t.d_desc.max_code), k( + t, t.bl_desc), e = q - 1; e >= 3 && 0 === t.bl_tree[2 * nt[e] + 1]; e--); + return t.opt_len += 3 * (e + 1) + 5 + 5 + 4, e + } + + function B(t, e, a, i) { + var n; + for (l(t, e - 257, 5), l(t, a - 1, 5), l(t, i - 4, 4), n = 0; n < i; n++) l(t, t + .bl_tree[2 * nt[n] + 1], 3); + x(t, t.dyn_ltree, e - 1), x(t, t.dyn_dtree, a - 1) + } + + function S(t) { + var e, a = 4093624447; + for (e = 0; e <= 31; e++, a >>>= 1) + if (1 & a && 0 !== t.dyn_ltree[2 * e]) return D; + if (0 !== t.dyn_ltree[18] || 0 !== t.dyn_ltree[20] || 0 !== t.dyn_ltree[26]) + return I; + for (e = 32; e < M; e++) + if (0 !== t.dyn_ltree[2 * e]) return I; + return D + } + + function E(t) { + bt || (c(), bt = !0), t.l_desc = new r(t.dyn_ltree, _t), t.d_desc = new r(t + .dyn_dtree, ut), t.bl_desc = new r(t.bl_tree, ct), t.bi_buf = 0, t + .bi_valid = 0, b(t) + } + + function A(t, e, a, i) { + l(t, (T << 1) + (i ? 1 : 0), 3), m(t, e, a, !0) + } + + function Z(t) { + l(t, F << 1, 3), h(t, Q, st), f(t) + } + + function R(t, e, a, i) { + var n, r, s = 0; + t.level > 0 ? (t.strm.data_type === U && (t.strm.data_type = S(t)), k(t, t.l_desc), + k(t, t.d_desc), s = z(t), n = t.opt_len + 3 + 7 >>> 3, r = t.static_len + + 3 + 7 >>> 3, r <= n && (n = r)) : n = r = a + 5, a + 4 <= n && e !== -1 ? A( + t, e, a, i) : t.strategy === O || r === n ? (l(t, (F << 1) + (i ? 1 : 0), + 3), v(t, st, ot)) : (l(t, (L << 1) + (i ? 1 : 0), 3), B(t, t.l_desc + .max_code + 1, t.d_desc.max_code + 1, s + 1), v(t, t.dyn_ltree, t + .dyn_dtree)), b(t), i && g(t) + } + + function C(t, e, a) { + return t.pending_buf[t.d_buf + 2 * t.last_lit] = e >>> 8 & 255, t.pending_buf[t + .d_buf + 2 * t.last_lit + 1] = 255 & e, t.pending_buf[t.l_buf + t + .last_lit] = 255 & a, t.last_lit++, 0 === e ? t.dyn_ltree[2 * a]++ : (t + .matches++, e--, t.dyn_ltree[2 * (ht[a] + M + 1)]++, t.dyn_dtree[2 * s(e)]++ + ), t.last_lit === t.lit_bufsize - 1 + } + var N = t("../utils/common"), + O = 4, + D = 0, + I = 1, + U = 2, + T = 0, + F = 1, + L = 2, + H = 3, + j = 258, + K = 29, + M = 256, + P = M + 1 + K, + Y = 30, + q = 19, + G = 2 * P + 1, + X = 15, + W = 16, + J = 7, + Q = 256, + V = 16, + $ = 17, + tt = 18, + et = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, + 5, 5, 0 + ], + at = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, + 11, 12, 12, 13, 13 + ], + it = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], + nt = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], + rt = 512, + st = new Array(2 * (P + 2)); + i(st); + var ot = new Array(2 * Y); + i(ot); + var lt = new Array(rt); + i(lt); + var ht = new Array(j - H + 1); + i(ht); + var dt = new Array(K); + i(dt); + var ft = new Array(Y); + i(ft); + var _t, ut, ct, bt = !1; + a._tr_init = E, a._tr_stored_block = A, a._tr_flush_block = R, a._tr_tally = C, a + ._tr_align = Z + }, { + "../utils/common": 3 + }], + 15: [function(t, e, a) { + "use strict"; + + function i() { + this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this + .output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this + .msg = "", this.state = null, this.data_type = 2, this.adler = 0 + } + e.exports = i + }, {}], + "/": [function(t, e, a) { + "use strict"; + var i = t("./lib/utils/common").assign, + n = t("./lib/deflate"), + r = t("./lib/inflate"), + s = t("./lib/zlib/constants"), + o = {}; + i(o, n, r, s), e.exports = o + }, { + "./lib/deflate": 1, + "./lib/inflate": 2, + "./lib/utils/common": 3, + "./lib/zlib/constants": 6 + }] + }, {}, [])("/") +}); diff --git a/components/kline/tradingView/readme.md b/components/kline/tradingView/readme.md new file mode 100644 index 0000000..10c7a36 --- /dev/null +++ b/components/kline/tradingView/readme.md @@ -0,0 +1,77 @@ +修改了TradingView 如下源码 +//charting_library.min.js +//原因是preset: "mobile", 的时候某些工具栏不显示 +mobile: { + // disabled_features: ["left_toolbar", "header_widget", "timeframes_toolbar", "edit_buttons_in_legend", + // "context_menus", "control_bar", "border_around_the_chart" + // ], + disabled_features: [], + enabled_features: [] + } + +//--library.db04e45ec22f0b637da3.js-- +//原因是想把0 .000000000001325 这样的价格格式化成0 .0{11}132 +//奈何找不到文档也 cv不了别人代码 熬了一晚上翻的源码直接改 +t.prototype._formatAsDecimal = function(t, i) { + //格式化价格 + if (this.type == "price") { + t = 0.00039123 + var price = "0.00"; + //如果价格大于1则保留2位小数 + if (t > 1) { + price = t.toFixed(2) + } else { + //否则 + let splitList = t.toString().split(".") + let num = 0 + if (splitList[1]) { + for (var i = 0; i < splitList[1].length; i++) { + if (splitList[1][i] == "0") { + num++ + } else { + //如果不为0了 直接中断 + break; + } + } + } + if (num >= 4) { + var last = "" + splitList[1].substring(num, splitList[1].length) + if (last.length >= 4) { + if (last[4] >= 5) { + price = '0.0{' + num + '}' + (parseInt(last[1] + last[2] + last[3]) + 1) + } else { + price = '0.0{' + num + '}' + last[1] + last[2] + last[3] + } + } else { + price = '0.0{' + num + '}' + last + } + } else { + price = t.toFixed(5) + } + + } + return price + } else { + var n, r, s, a, l; + i = i || 0, n = this._fractional ? Math.pow(10, this._fractionalLength || 0) : + Math.pow(10, i) * this._priceScale / this._minMove, r = Math.floor(t), s = +( + Math + .round(t * n) - r * n).toFixed(this._fractionalLength), s >= n && (s -= n, + r += + 1), a = "", 1 !== n && (l = void 0 !== this._fractionalLength ? this + ._fractionalLength : NaN, + a = e.formatterOptions.decimalSign + o(+s.toFixed(this._fractionalLength) * + this._minMove, l + i), + a = this._removeEndingZeros(a, i)) + return "" + r + a + } +} + + +// 隐藏符号 +// r.appendTo(t), +this._itemsBinding.push({ + value: o, + cell: r, + source: t.source +}) diff --git a/components/kline/tradingView/websocket.js b/components/kline/tradingView/websocket.js new file mode 100644 index 0000000..0d6f089 --- /dev/null +++ b/components/kline/tradingView/websocket.js @@ -0,0 +1,141 @@ +import + constant + from '@/utils/constant.js' +import { + Event +} from './event.js' +import pakoJs from './pako.js' + +var pako = pakoJs +var socket = { + socket: null, // socket name + id:null, + realTimeData: null, // 请求实时数据的参数 + intervalObj: null, // 定时器的名字 + lastRealTimeData: null, // 上一次请求的产品 + sendData(historyData, realTimeDatas, history) { + // 储存历史数据 + this.historyData = historyData + + this.realTimeData = realTimeDatas + // 如果上一次订阅过产品 + if (this.lastRealTimeData) { + + + // 请求这一次的历史 + this.historyData.id=this.id + this.sendWsRequest(this.historyData) + + + // 如果不是订阅历史产品 那么肯定就是切换周期咯 或者切换产品咯 + // 那么就订阅一下 这次产品的或者周期的 实时数据 + if (!history) { + console.log('订阅新的' + realTimeDatas) + console.log(111111,realTimeDatas) + this.sendWsRequest({ + event: 'un_sub', + type: 'kline', + id: this.id, + channel:[this.lastRealTimeData], + }) + this.lastRealTimeData = this.realTimeData + } + } else { + + // 如果是第一次订阅,就是说刚进入交易所, + // 先存起来这一次请求的产品 作为历史产品 + this.lastRealTimeData = this.realTimeData + // 然后 初始化一下websocket + this.initWs() + } + }, + initWs() { + this.socket = new WebSocket(constant.WSSURL) + this.socket.onopen = () => { + + } + this.socket.onmessage = resp => { + this.message(resp) + } + this.socket.onclose = () => { + this.close() + } + this.socket.onerror = err => { + this.error(err) + } + }, + error(err) { + console.log(err, 'depth-socket::error') + }, + close() { + // 如果websocket关闭的话,就从新打开一下。 + this.initWs() + console.log('depth-socket::close') + }, + message(resp) { + resp=JSON.parse(resp.data) + if (resp.channel === 'conn') { + this.id = resp.data + + this.historyData.id=this.id + this.sendWsRequest(this.historyData) + + + }else { + if(resp.event === 'req'){ + this.sendWsRequest({ + event: 'sub', + type: 'kline', + id: this.id, + channel:[this.lastRealTimeData], + }) + Event.emit('data', resp.data) + }else{ + Event.emit('realTime', resp.data) + + } + + + } + + + }, + checkSendMessage(options) { + // 这里处理websocket 连接不上的问题 + var checkTimes = 10 + var i = 0 + this.intervalObj = setInterval(() => { + i += 1 + if (this.socket.readyState === 1) { + // ... + this.socket.send(options) + clearInterval(this.intervalObj) + return + } + if (i >= checkTimes) { + clearInterval(this.intervalObj) + console.log('send post_data_str timeout.') + } + }, 500) + }, + sendWsRequest(options) { + switch (this.socket.readyState) { + case 0: + this.checkSendMessage(JSON.stringify(options)) + break + case 1: + this.socket.send(JSON.stringify(options)) + break + case 2: + console.log('ws关闭状态') + break + case 3: + this.initWs() + break + default: + console.log('ws未知错误') + } + } +} + +exports.socket = socket diff --git a/components/kline/tradingView/websocket1.js b/components/kline/tradingView/websocket1.js new file mode 100644 index 0000000..69cbc99 --- /dev/null +++ b/components/kline/tradingView/websocket1.js @@ -0,0 +1,149 @@ +import { + Event +} from './event.js' + +import pakoJs from './pako.js' + +var pako = pakoJs +var socket = { + socket: null, // socket name + realTimeData: null, // 请求实时数据的参数 + intervalObj: null, // 定时器的名字 + lastRealTimeData: null, // 上一次请求的产品 + sendData(historyData, realTimeDatas, history) { + // 储存历史数据 + this.historyData = historyData + this.realTimeData = realTimeDatas + // 如果上一次订阅过产品 + if (this.lastRealTimeData) { + // 如果不是订阅历史产品 那么肯定就是切换周期咯 或者 切换产品 + // 那么就取消订阅上一次的产品实时数据 + if (!history) { + console.log('取消订阅' + this.lastRealTimeData) + this.sendWsRequest({ + "unsub": this.lastRealTimeData, + "id": "id1" + }) + } + + // 请求这一次的历史 + this.sendWsRequest(this.historyData) + console.log(111111,realTimeDatas) + + // 如果不是订阅历史产品 那么肯定就是切换周期咯 或者切换产品咯 + // 那么就订阅一下 这次产品的或者周期的 实时数据 + if (!history) { + console.log('订阅新的' + realTimeDatas) + this.sendWsRequest({ + "sub": realTimeDatas, + "id": "id1" + }) + } + } else { + // 如果是第一次订阅,就是说刚进入交易所, + // 先存起来这一次请求的产品 作为历史产品 + this.lastRealTimeData = this.realTimeData + // 然后 初始化一下websocket + this.initWs() + } + }, + initWs() { + this.socket = new WebSocket('wss://api.huobi.pro/ws') + this.socket.onopen = () => { + this.sendWsRequest(this.historyData) + this.sendWsRequest({ + "sub": this.historyData.req, + "id": "id1" + }) + } + this.socket.onmessage = resp => { + this.message(resp) + } + this.socket.onclose = () => { + this.close() + } + this.socket.onerror = err => { + this.error(err) + } + }, + error(err) { + console.log(err, 'depth-socket::error') + }, + close() { + // 如果websocket关闭的话,就从新打开一下。 + this.initWs() + console.log('depth-socket::close') + }, + message(resp) { + //console.log(resp) + let this_ = this + let reader = new FileReader() + reader.onload = function(e) { + // 对数据进行解压 + let msg = JSON.parse(pako.ungzip(reader.result, { + to: 'string' + })) + // console.log(msg) + // 如果是实时数据触发Event('realTime') 喂数据 + if (msg.tick) { + Event.emit('realTime', msg.tick) + } + + //响应服务器,避免断开连接 + if (msg.ping) { + this_.socket.send(JSON.stringify({ + pong: msg.ping + })); + this_.hasCheck = true + } + + this_.lastRealTimeData = this_.realTimeData + // 如果是历史数据触发Event('data') 绘制数据 + if (msg.data && Array.isArray(msg.data)) { + console.log(msg.data) + Event.emit('data', msg.data) + } + + } + // //将返回的数据解析为字符串格式 + reader.readAsArrayBuffer(resp.data); + }, + checkSendMessage(options) { + // 这里处理websocket 连接不上的问题 + var checkTimes = 10 + var i = 0 + this.intervalObj = setInterval(() => { + i += 1 + if (this.socket.readyState === 1) { + // ... + this.socket.send(options) + clearInterval(this.intervalObj) + return + } + if (i >= checkTimes) { + clearInterval(this.intervalObj) + console.log('send post_data_str timeout.') + } + }, 500) + }, + sendWsRequest(options) { + switch (this.socket.readyState) { + case 0: + this.checkSendMessage(JSON.stringify(options)) + break + case 1: + this.socket.send(JSON.stringify(options)) + break + case 2: + console.log('ws关闭状态') + break + case 3: + this.initWs() + break + default: + console.log('ws未知错误') + } + } +} + +exports.socket = socket diff --git a/manifest.json b/manifest.json index 8a1d626..60c42ff 100644 --- a/manifest.json +++ b/manifest.json @@ -119,7 +119,7 @@ }, "/market" : { "ws" : false, - "target" : "https://market.acefinex.com", + "target" : "https://market.gream.ltd", "changeOrigin" : true, "secure" : false, "pathRewrite" : { diff --git a/pages.json b/pages.json index 00f4c09..18fadb4 100644 --- a/pages.json +++ b/pages.json @@ -62,6 +62,12 @@ "navigationStyle": "custom" } }, + { + "path": "pages/markets/contractOrder", + "style": { + "navigationStyle": "custom" + } + }, // charity { diff --git a/pages/home/index.vue b/pages/home/index.vue index a314662..bbfac40 100644 --- a/pages/home/index.vue +++ b/pages/home/index.vue @@ -42,19 +42,24 @@ + width="123rpx" height="123rpx"> {{ i18n.Recharge }} - + {{ i18n.Mine }} + width="123rpx" height="123rpx"> {{ i18n.Subcription }} + + + {{ i18n.Order }} + @@ -551,6 +556,9 @@ case 'subcription': url = '/pages/subscription/index'; break; + case 'contractOrder': + url = '/pages/markets/contractOrder'; + break; default: break; } @@ -894,15 +902,15 @@ } .btnDiv { - margin: 32rpx 48rpx; + margin: 32rpx 34rpx; .item { display: inline-block; - width: 218rpx; + width: 172rpx; text-align: center; .img { - margin: 0 36rpx 16rpx; + margin: 0 26rpx 16rpx; } } } diff --git a/pages/markets/contractOrder.vue b/pages/markets/contractOrder.vue new file mode 100644 index 0000000..cb58ab5 --- /dev/null +++ b/pages/markets/contractOrder.vue @@ -0,0 +1,765 @@ + + + + + diff --git a/pages/markets/kLine.vue b/pages/markets/kLine.vue index 9180e37..b59f4f2 100644 --- a/pages/markets/kLine.vue +++ b/pages/markets/kLine.vue @@ -34,29 +34,9 @@ - - 1min - - 5min - - 15min - - 30min - - 60min - - 1day - - 1week - - 1mon - - - - - - + + + {{ i18n.Markettrades }} @@ -90,27 +70,27 @@ - + - {{ i18n.LONG }} + {{ i18n.open }} - {{ i18n.SHORT }} + {{ i18n.close }} - - diff --git a/pages/markets/kLine2.vue b/pages/markets/kLine2.vue new file mode 100644 index 0000000..a4cd83d --- /dev/null +++ b/pages/markets/kLine2.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/static/charting_library/ar-tv-chart.132c7060.html b/static/charting_library/ar-tv-chart.132c7060.html new file mode 100644 index 0000000..21df487 --- /dev/null +++ b/static/charting_library/ar-tv-chart.132c7060.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/static/charting_library/bundles/0.d46f0b5e9380d7893de5.js b/static/charting_library/bundles/0.d46f0b5e9380d7893de5.js new file mode 100644 index 0000000..51bb6b2 --- /dev/null +++ b/static/charting_library/bundles/0.d46f0b5e9380d7893de5.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{"+EG+":function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return r}));var i=n("q1tI");class o extends i.Component{shouldComponentUpdate(){return!1}render(){return i.createElement("div",{style:{position:"fixed",zIndex:150,left:0,top:0},ref:this.props.reference})}}const r=i.createContext(null)},"0YpW":function(t,e,n){"use strict";const i=(()=>{let t;return()=>{var e;if(void 0===t){const n=document.createElement("div"),i=n.style;i.visibility="hidden",i.width="100px",i.msOverflowStyle="scrollbar",document.body.appendChild(n);const o=n.offsetWidth;n.style.overflow="scroll";const r=document.createElement("div");r.style.width="100%",n.appendChild(r);const s=r.offsetWidth;null===(e=n.parentNode)||void 0===e||e.removeChild(n),t=o-s}return t}})();function o(t,e,n){null!==t&&t.style.setProperty(e,n)}function r(t,e){return getComputedStyle(t,null).getPropertyValue(e)}function s(t,e){return parseInt(r(t,e))}n.d(e,"a",(function(){return u}));let c=0,d=!1;function u(t){const{body:e}=document,n=e.querySelector(".widgetbar-wrap");if(t&&1==++c){const t=r(e,"overflow"),c=s(e,"padding-right");"hidden"!==t.toLowerCase()&&e.scrollHeight>e.offsetHeight&&(o(n,"right",i()+"px"),e.style.paddingRight=c+i()+"px",d=!0),e.classList.add("i-no-scroll")}else if(!t&&c>0&&0==--c&&(e.classList.remove("i-no-scroll"),d)){o(n,"right","0px");let t=0;0,e.scrollHeight<=e.clientHeight&&(t-=i()),e.style.paddingRight=(t<0?0:t)+"px",d=!1}}},"8Rai":function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var i=n("q1tI"),o=n("R5JZ");function r(t){const{click:e,mouseDown:n,touchEnd:r,touchStart:s,handler:c,reference:d,ownerDocument:u=document}=t,l=Object(i.useRef)(null),a=Object(i.useRef)(new CustomEvent("timestamp").timeStamp);return Object(i.useLayoutEffect)(()=>{const t={click:e,mouseDown:n,touchEnd:r,touchStart:s},i=d?d.current:l.current;return Object(o.a)(a.current,i,c,u,t)},[e,n,r,s,c]),d||l}},AiMB:function(t,e,n){"use strict";n.d(e,"a",(function(){return d})),n.d(e,"b",(function(){return u}));var i=n("q1tI"),o=n("i8i4"),r=n("e3/o"),s=n("jAh7"),c=n("+EG+");class d extends i.PureComponent{constructor(){super(...arguments),this._uuid=Object(r.guid)()}componentWillUnmount(){this._manager().removeWindow(this._uuid)}render(){const t=this._manager().ensureWindow(this._uuid,this.props.layerOptions);return t.style.top=this.props.top||"",t.style.bottom=this.props.bottom||"",t.style.left=this.props.left||"",t.style.right=this.props.right||"",t.style.pointerEvents=this.props.pointerEvents||"",o.createPortal(i.createElement(u.Provider,{value:this},this.props.children),t)}moveToTop(){this._manager().moveToTop(this._uuid)}_manager(){return null===this.context?Object(s.b)():this.context}}d.contextType=c.b;const u=i.createContext(null)},Iivm:function(t,e,n){"use strict";var i=n("q1tI");const o=i.forwardRef((t,e)=>{const{icon:n="",...o}=t;return i.createElement("span",{...o,ref:e,dangerouslySetInnerHTML:{__html:n}})});n.d(e,"a",(function(){return o}))},jAh7:function(t,e,n){ +"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return c}));var i=n("Eyy1");class o{constructor(){this._storage=[]}add(t){this._storage.push(t)}remove(t){this._storage=this._storage.filter(e=>t!==e)}has(t){return this._storage.includes(t)}getItems(){return this._storage}}class r{constructor(t=document){this._storage=new o,this._windows=new Map,this._index=0,this._document=t,this._container=t.createDocumentFragment()}setContainer(t){const e=this._container,n=null===t?this._document.createDocumentFragment():t;!function(t,e){Array.from(t.childNodes).forEach(t=>{t.nodeType===Node.ELEMENT_NODE&&e.appendChild(t)})}(e,n),this._container=n}registerWindow(t){this._storage.has(t)||this._storage.add(t)}ensureWindow(t,e={position:"fixed",direction:"normal"}){const n=this._windows.get(t);if(void 0!==n)return n;this.registerWindow(t);const i=this._document.createElement("div");if(i.style.position=e.position,i.style.zIndex=this._index.toString(),i.dataset.id=t,void 0!==e.index){const t=this._container.childNodes.length;if(e.index>=t)this._container.appendChild(i);else if(e.index<=0)this._container.insertBefore(i,this._container.firstChild);else{const t=this._container.childNodes[e.index];this._container.insertBefore(i,t)}}else"reverse"===e.direction?this._container.insertBefore(i,this._container.firstChild):this._container.appendChild(i);return this._windows.set(t,i),++this._index,i}unregisterWindow(t){this._storage.remove(t);const e=this._windows.get(t);void 0!==e&&(null!==e.parentElement&&e.parentElement.removeChild(e),this._windows.delete(t))}getZindex(t){const e=this.ensureWindow(t);return parseInt(e.style.zIndex||"0")}moveToTop(t){if(this.getZindex(t)!==this._index){this.ensureWindow(t).style.zIndex=(++this._index).toString()}}removeWindow(t){this.unregisterWindow(t)}}const s=new WeakMap;function c(t=document){const e=t.getElementById("overlap-manager-root");if(null!==e)return Object(i.ensureDefined)(s.get(e));{const e=new r(t),n=function(t){const e=t.createElement("div");return e.style.position="absolute",e.style.zIndex=150..toString(),e.style.top="0px",e.style.left="0px",e.id="overlap-manager-root",e}(t);return s.set(n,e),e.setContainer(n),t.body.appendChild(n),e}}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/0579d40b812fa2c3ffe72e5803a6e14c.cur b/static/charting_library/bundles/0579d40b812fa2c3ffe72e5803a6e14c.cur new file mode 100644 index 0000000..13b6033 Binary files /dev/null and b/static/charting_library/bundles/0579d40b812fa2c3ffe72e5803a6e14c.cur differ diff --git a/static/charting_library/bundles/1.92647ec0a7beb8b2898d.css b/static/charting_library/bundles/1.92647ec0a7beb8b2898d.css new file mode 100644 index 0000000..e69de29 diff --git a/static/charting_library/bundles/1.92647ec0a7beb8b2898d.rtl.css b/static/charting_library/bundles/1.92647ec0a7beb8b2898d.rtl.css new file mode 100644 index 0000000..e69de29 diff --git a/static/charting_library/bundles/1.f02c87d35fbc8ffcaedb.js b/static/charting_library/bundles/1.f02c87d35fbc8ffcaedb.js new file mode 100644 index 0000000..5cb2eb0 --- /dev/null +++ b/static/charting_library/bundles/1.f02c87d35fbc8ffcaedb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/10.21e665b7935d5bc4ba64.js b/static/charting_library/bundles/10.21e665b7935d5bc4ba64.js new file mode 100644 index 0000000..b0cde14 --- /dev/null +++ b/static/charting_library/bundles/10.21e665b7935d5bc4ba64.js @@ -0,0 +1,6 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{cvc5:function(e,t,n){var r,o,i;e.exports=(r=n("q1tI"),o=n("i8i4"),i=n("MjAr"),function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="dist/",t(0)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n(1));t.default=r.default,e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:n.props.includeMargin;if(n.props.shouldMeasure){n._node.parentNode||n._setDOMNode();var t=n.getDimensions(n._node,e),r="function"==typeof n.props.children;n._propsToMeasure.some((function(e){if(t[e]!==n._lastDimensions[e])return n.props.onMeasure(t),r&&void 0!==n&&n.setState({dimensions:t}),n._lastDimensions=t,!0}))}},n.state={dimensions:{width:0,height:0,top:0,right:0,bottom:0,left:0}},n._node=null,n._propsToMeasure=n._getPropsToMeasure(e),n._lastDimensions={},n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"componentDidMount",value:function(){var e=this;this._setDOMNode(),this.measure(),this.resizeObserver=new c.default((function(){return e.measure()})),this.resizeObserver.observe(this._node)}},{key:"componentWillReceiveProps",value:function(e){var t=(e.config,e.whitelist),n=e.blacklist;this.props.whitelist===t&&this.props.blacklist===n||(this._propsToMeasure=this._getPropsToMeasure({whitelist:t,blacklist:n}))}},{key:"componentWillUnmount",value:function(){this.resizeObserver.disconnect(this._node),this._node=null}},{key:"_setDOMNode",value:function(){this._node=s.default.findDOMNode(this)}},{key:"getDimensions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._node,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.props.includeMargin;return(0,f.default)(e,{margin:t})}},{ +key:"_getPropsToMeasure",value:function(e){var t=e.whitelist,n=e.blacklist;return t.filter((function(e){return n.indexOf(e)<0}))}},{key:"render",value:function(){var e=this.props.children;return i.Children.only("function"==typeof e?e(this.state.dimensions):e)}}]),t}(i.Component);l.propTypes={whitelist:a.default.array,blacklist:a.default.array,includeMargin:a.default.bool,useClone:a.default.bool,cloneOptions:a.default.object,shouldMeasure:a.default.bool,onMeasure:a.default.func},l.defaultProps={whitelist:["width","height","top","right","bottom","left"],blacklist:[],includeMargin:!0,useClone:!1,cloneOptions:{},shouldMeasure:!0,onMeasure:function(){return null}},t.default=l,e.exports=t.default},function(e,t){e.exports=r},function(e,t,n){(function(t){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};if("production"!==t.env.NODE_ENV){var o="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103;e.exports=n(5)((function(e){return"object"===(void 0===e?"undefined":r(e))&&null!==e&&e.$$typeof===o}),!0)}else e.exports=n(12)()}).call(t,n(4))},function(e,t){"use strict";function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(c===setTimeout)return setTimeout(e,0);if((c===n||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function i(){y&&p&&(y=!1,p.length?d=p.concat(d):h=-1,d.length&&u())}function u(){if(!y){var e=o(i);y=!0;for(var t=d.length;t;){for(p=d,d=[];++h1)for(var n=1;n1?t-1:0),r=1;r2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:{},n=e.getBoundingClientRect(),o=void 0,i=void 0,u=void 0;return t.margin&&(u=(0,r.default)(getComputedStyle(e))),t.margin?(o=u.left+n.width+u.right,i=u.top+n.height+u.bottom):(o=n.width,i=n.height),{width:o,height:i,top:n.top,right:n.right,bottom:n.bottom,left:n.left}};var r=function(e){return e&&e.__esModule?e:{default:e}}(n(16));e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return{top:n((e=e||{}).marginTop),right:n(e.marginRight),bottom:n(e.marginBottom),left:n(e.marginLeft)}};var n=function(e){return parseInt(e)||0};e.exports=t.default}]))}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/11.8b65dc2e0d8b6e5041c4.css b/static/charting_library/bundles/11.8b65dc2e0d8b6e5041c4.css new file mode 100644 index 0000000..7fb45d3 --- /dev/null +++ b/static/charting_library/bundles/11.8b65dc2e0d8b6e5041c4.css @@ -0,0 +1 @@ +.wrap-164vy-kj{bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:0}.wrap-164vy-kj.positionBottom-164vy-kj{align-items:flex-end}.backdrop-164vy-kj{background-color:#9598a1;bottom:0;left:0;opacity:.7;position:absolute;right:0;top:0;transform:translateZ(0)}html.theme-dark .backdrop-164vy-kj{background-color:#0c0e15}.drawer-164vy-kj{-webkit-overflow-scrolling:touch;background:#fff;box-shadow:0 2px 4px #0003;box-sizing:border-box;padding:6px 0;z-index:1}html.theme-dark .drawer-164vy-kj{background:#1e222d;box-shadow:0 2px 4px #0006}.drawer-164vy-kj.positionLeft-164vy-kj{margin-right:40px;max-width:calc(100% - 40px);min-width:260px}.drawer-164vy-kj.positionBottom-164vy-kj{border-top-left-radius:6px;border-top-right-radius:6px;flex-basis:100%;margin-top:100px;max-height:calc(100% - 100px);overflow:auto} \ No newline at end of file diff --git a/static/charting_library/bundles/11.8b65dc2e0d8b6e5041c4.rtl.css b/static/charting_library/bundles/11.8b65dc2e0d8b6e5041c4.rtl.css new file mode 100644 index 0000000..036886e --- /dev/null +++ b/static/charting_library/bundles/11.8b65dc2e0d8b6e5041c4.rtl.css @@ -0,0 +1 @@ +.wrap-164vy-kj{bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:0}.wrap-164vy-kj.positionBottom-164vy-kj{align-items:flex-end}.backdrop-164vy-kj{background-color:#9598a1;bottom:0;left:0;opacity:.7;position:absolute;right:0;top:0;transform:translateZ(0)}html.theme-dark .backdrop-164vy-kj{background-color:#0c0e15}.drawer-164vy-kj{-webkit-overflow-scrolling:touch;background:#fff;box-shadow:0 2px 4px #0003;box-sizing:border-box;padding:6px 0;z-index:1}html.theme-dark .drawer-164vy-kj{background:#1e222d;box-shadow:0 2px 4px #0006}.drawer-164vy-kj.positionLeft-164vy-kj{margin-left:40px;max-width:calc(100% - 40px);min-width:260px}.drawer-164vy-kj.positionBottom-164vy-kj{border-top-left-radius:6px;border-top-right-radius:6px;flex-basis:100%;margin-top:100px;max-height:calc(100% - 100px);overflow:auto} \ No newline at end of file diff --git a/static/charting_library/bundles/11.df012db70159a159d927.js b/static/charting_library/bundles/11.df012db70159a159d927.js new file mode 100644 index 0000000..7a62800 --- /dev/null +++ b/static/charting_library/bundles/11.df012db70159a159d927.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/12.37750b21f6d8d35c6e6e.js b/static/charting_library/bundles/12.37750b21f6d8d35c6e6e.js new file mode 100644 index 0000000..068e5bb --- /dev/null +++ b/static/charting_library/bundles/12.37750b21f6d8d35c6e6e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/12.ef8057448f3a7ae1c3d8.css b/static/charting_library/bundles/12.ef8057448f3a7ae1c3d8.css new file mode 100644 index 0000000..2b3f39b --- /dev/null +++ b/static/charting_library/bundles/12.ef8057448f3a7ae1c3d8.css @@ -0,0 +1 @@ +.item-2IihgTnv{align-items:center;background-color:#fff;color:#131722;cursor:default;display:flex;flex-flow:row nowrap;font-size:14px;padding:2px 10px 2px 8px;transition-property:none;white-space:nowrap}html.theme-dark .item-2IihgTnv{background-color:#1e222d;color:#b2b5be}.item-2IihgTnv.hovered-2IihgTnv,.item-2IihgTnv:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv:hover{color:#131722}}html.theme-dark .item-2IihgTnv.hovered-2IihgTnv,html.theme-dark .item-2IihgTnv:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv:hover{color:#c1c4cd}}.item-2IihgTnv.hovered-2IihgTnv,.item-2IihgTnv:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv:hover{background-color:#f0f3fa}}html.theme-dark .item-2IihgTnv.hovered-2IihgTnv,html.theme-dark .item-2IihgTnv:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv:hover{background-color:#2a2e39}}.item-2IihgTnv.isDisabled-2IihgTnv{cursor:default;opacity:.3}.item-2IihgTnv.isDisabled-2IihgTnv,.item-2IihgTnv.isDisabled-2IihgTnv:active{background-color:#fff;color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isDisabled-2IihgTnv:hover{background-color:#fff;color:#131722}}html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv,html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:active{background-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:hover{background-color:#1e222d}}html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv,html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:active{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:hover{color:#b2b5be}}.item-2IihgTnv.isActive-2IihgTnv,.item-2IihgTnv.isActive-2IihgTnv:active{background-color:#2962ff;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isActive-2IihgTnv:hover{background-color:#2962ff;color:#fff}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active{background-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover{background-color:#2962ff}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active{color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover{color:#d1d4dc}}.item-2IihgTnv.isActive-2IihgTnv .shortcut-2IihgTnv,.item-2IihgTnv.isActive-2IihgTnv:active .shortcut-2IihgTnv{color:#ffffffb3}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isActive-2IihgTnv:hover .shortcut-2IihgTnv{color:#ffffffb3}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv .shortcut-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active .shortcut-2IihgTnv{color:#131722b3}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover .shortcut-2IihgTnv{color:#131722b3}}.item-2IihgTnv.isActive-2IihgTnv .toolbox-2IihgTnv,.item-2IihgTnv.isActive-2IihgTnv:active .toolbox-2IihgTnv{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isActive-2IihgTnv:hover .toolbox-2IihgTnv{color:#fff}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv .toolbox-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active .toolbox-2IihgTnv{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover .toolbox-2IihgTnv{color:#fff}}.item-2IihgTnv.withIcon-2IihgTnv{padding-bottom:6px;padding-top:6px}.item-2IihgTnv:before{content:" ";display:block;height:28px}.icon-2IihgTnv{align-items:center;display:flex;height:28px;justify-content:center;margin-right:6px;width:28px}.icon-2IihgTnv svg{display:block}.labelRow-2IihgTnv{align-items:baseline;box-sizing:border-box;display:flex;flex:0 1 100%;flex-direction:row;justify-content:space-between;max-width:100%;min-width:0;padding-right:12px}.labelRow-2IihgTnv:first-child{padding-left:4px}.labelRow-2IihgTnv:last-child{padding-right:4px}.label-2IihgTnv{display:flex;flex:0 0 auto;max-width:100%;overflow:hidden}.shortcut-2IihgTnv{color:#9598a1;font-size:12px;margin-right:14px;min-width:27px}html.theme-dark .shortcut-2IihgTnv{color:#5d606b}.toolbox-2IihgTnv{align-items:center;color:#787b86;display:flex;position:relative}html.theme-dark .toolbox-2IihgTnv{color:#787b86}.feature-no-touch .toolbox-2IihgTnv.showOnHover-2IihgTnv{opacity:0}.toolbox-2IihgTnv>:not(:last-child){margin-right:4px}@media screen and (max-width:428px){.toolbox-2IihgTnv>:not(:last-child){margin-right:8px}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.feature-no-touch .item-2IihgTnv:hover .toolbox-2IihgTnv.showOnHover-2IihgTnv{opacity:1}} \ No newline at end of file diff --git a/static/charting_library/bundles/12.ef8057448f3a7ae1c3d8.rtl.css b/static/charting_library/bundles/12.ef8057448f3a7ae1c3d8.rtl.css new file mode 100644 index 0000000..02828a9 --- /dev/null +++ b/static/charting_library/bundles/12.ef8057448f3a7ae1c3d8.rtl.css @@ -0,0 +1 @@ +.item-2IihgTnv{align-items:center;background-color:#fff;color:#131722;cursor:default;display:flex;flex-flow:row nowrap;font-size:14px;padding:2px 8px 2px 10px;transition-property:none;white-space:nowrap}html.theme-dark .item-2IihgTnv{background-color:#1e222d;color:#b2b5be}.item-2IihgTnv.hovered-2IihgTnv,.item-2IihgTnv:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv:hover{color:#131722}}html.theme-dark .item-2IihgTnv.hovered-2IihgTnv,html.theme-dark .item-2IihgTnv:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv:hover{color:#c1c4cd}}.item-2IihgTnv.hovered-2IihgTnv,.item-2IihgTnv:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv:hover{background-color:#f0f3fa}}html.theme-dark .item-2IihgTnv.hovered-2IihgTnv,html.theme-dark .item-2IihgTnv:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv:hover{background-color:#2a2e39}}.item-2IihgTnv.isDisabled-2IihgTnv{cursor:default;opacity:.3}.item-2IihgTnv.isDisabled-2IihgTnv,.item-2IihgTnv.isDisabled-2IihgTnv:active{background-color:#fff;color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isDisabled-2IihgTnv:hover{background-color:#fff;color:#131722}}html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv,html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:active{background-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:hover{background-color:#1e222d}}html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv,html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:active{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isDisabled-2IihgTnv:hover{color:#b2b5be}}.item-2IihgTnv.isActive-2IihgTnv,.item-2IihgTnv.isActive-2IihgTnv:active{background-color:#2962ff;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isActive-2IihgTnv:hover{background-color:#2962ff;color:#fff}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active{background-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover{background-color:#2962ff}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active{color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover{color:#d1d4dc}}.item-2IihgTnv.isActive-2IihgTnv .shortcut-2IihgTnv,.item-2IihgTnv.isActive-2IihgTnv:active .shortcut-2IihgTnv{color:#ffffffb3}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isActive-2IihgTnv:hover .shortcut-2IihgTnv{color:#ffffffb3}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv .shortcut-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active .shortcut-2IihgTnv{color:#131722b3}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover .shortcut-2IihgTnv{color:#131722b3}}.item-2IihgTnv.isActive-2IihgTnv .toolbox-2IihgTnv,.item-2IihgTnv.isActive-2IihgTnv:active .toolbox-2IihgTnv{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2IihgTnv.isActive-2IihgTnv:hover .toolbox-2IihgTnv{color:#fff}}html.theme-dark .item-2IihgTnv.isActive-2IihgTnv .toolbox-2IihgTnv,html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:active .toolbox-2IihgTnv{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2IihgTnv.isActive-2IihgTnv:hover .toolbox-2IihgTnv{color:#fff}}.item-2IihgTnv.withIcon-2IihgTnv{padding-bottom:6px;padding-top:6px}.item-2IihgTnv:before{content:" ";display:block;height:28px}.icon-2IihgTnv{align-items:center;display:flex;height:28px;justify-content:center;margin-left:6px;width:28px}.icon-2IihgTnv svg{display:block}.labelRow-2IihgTnv{align-items:baseline;box-sizing:border-box;display:flex;flex:0 1 100%;flex-direction:row;justify-content:space-between;max-width:100%;min-width:0;padding-left:12px}.labelRow-2IihgTnv:first-child{padding-right:4px}.labelRow-2IihgTnv:last-child{padding-left:4px}.label-2IihgTnv{display:flex;flex:0 0 auto;max-width:100%;overflow:hidden}.shortcut-2IihgTnv{color:#9598a1;font-size:12px;margin-left:14px;min-width:27px}html.theme-dark .shortcut-2IihgTnv{color:#5d606b}.toolbox-2IihgTnv{align-items:center;color:#787b86;display:flex;position:relative}html.theme-dark .toolbox-2IihgTnv{color:#787b86}.feature-no-touch .toolbox-2IihgTnv.showOnHover-2IihgTnv{opacity:0}.toolbox-2IihgTnv>:not(:last-child){margin-left:4px}@media screen and (max-width:428px){.toolbox-2IihgTnv>:not(:last-child){margin-left:8px}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.feature-no-touch .item-2IihgTnv:hover .toolbox-2IihgTnv.showOnHover-2IihgTnv{opacity:1}} \ No newline at end of file diff --git a/static/charting_library/bundles/13.699469c73d09b7add56d.js b/static/charting_library/bundles/13.699469c73d09b7add56d.js new file mode 100644 index 0000000..613b054 --- /dev/null +++ b/static/charting_library/bundles/13.699469c73d09b7add56d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/13.9240f13280154f2593b7.css b/static/charting_library/bundles/13.9240f13280154f2593b7.css new file mode 100644 index 0000000..29e7105 --- /dev/null +++ b/static/charting_library/bundles/13.9240f13280154f2593b7.css @@ -0,0 +1 @@ +.icon-19OjtB6A{align-items:center;display:flex;flex-direction:row;transition:transform .35s cubic-bezier(.175,.885,.32,1.275)}.icon-19OjtB6A svg{fill:currentColor;display:block;height:4px;width:8px}.icon-19OjtB6A.dropped-19OjtB6A{transform:rotate(180deg)} \ No newline at end of file diff --git a/static/charting_library/bundles/13.9240f13280154f2593b7.rtl.css b/static/charting_library/bundles/13.9240f13280154f2593b7.rtl.css new file mode 100644 index 0000000..58e9646 --- /dev/null +++ b/static/charting_library/bundles/13.9240f13280154f2593b7.rtl.css @@ -0,0 +1 @@ +.icon-19OjtB6A{align-items:center;display:flex;flex-direction:row;transition:transform .35s cubic-bezier(.175,.885,.32,1.275)}.icon-19OjtB6A svg{fill:currentColor;display:block;height:4px;width:8px}.icon-19OjtB6A.dropped-19OjtB6A{transform:rotate(-180deg)} \ No newline at end of file diff --git a/static/charting_library/bundles/14.8095b40dd1e7deedf401.css b/static/charting_library/bundles/14.8095b40dd1e7deedf401.css new file mode 100644 index 0000000..e8ffeaa --- /dev/null +++ b/static/charting_library/bundles/14.8095b40dd1e7deedf401.css @@ -0,0 +1 @@ +.button-2Vpz_LXc{align-items:center;box-sizing:border-box;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;height:100%;transition:background-color 60ms ease,opacity 60ms ease,color 60ms ease}html.theme-dark .button-2Vpz_LXc{color:var(--tv-color-toolbar-button-text,#787b86)}.button-2Vpz_LXc.hover-2Vpz_LXc,.button-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-2Vpz_LXc.hover-2Vpz_LXc,html.theme-dark .button-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-2Vpz_LXc svg{display:block;-moz-transform:translateX(0)}.button-2Vpz_LXc.isInteractive-2Vpz_LXc{position:relative;z-index:0}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.hover-2Vpz_LXc:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.hover-2Vpz_LXc:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc{position:relative;z-index:0}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc.hover-2Vpz_LXc:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc.hover-2Vpz_LXc:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff)}html.theme-sa .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff)}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc.hover-2Vpz_LXc,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc.hover-2Vpz_LXc,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc.hover-2Vpz_LXc:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:active:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc.hover-2Vpz_LXc:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:active:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}}.button-2Vpz_LXc.isDisabled-2Vpz_LXc{opacity:.3}.button-2Vpz_LXc.isDisabled-2Vpz_LXc,.button-2Vpz_LXc.isDisabled-2Vpz_LXc:active{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isDisabled-2Vpz_LXc:hover{background-color:initial}}.button-2Vpz_LXc.isDisabled-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff);opacity:1}html.theme-sa .button-2Vpz_LXc.isDisabled-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .button-2Vpz_LXc.isDisabled-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff)}.icon-2Vpz_LXc+.text-2Vpz_LXc,.text-2Vpz_LXc+.icon-2Vpz_LXc{margin-left:2px} \ No newline at end of file diff --git a/static/charting_library/bundles/14.8095b40dd1e7deedf401.rtl.css b/static/charting_library/bundles/14.8095b40dd1e7deedf401.rtl.css new file mode 100644 index 0000000..3cada46 --- /dev/null +++ b/static/charting_library/bundles/14.8095b40dd1e7deedf401.rtl.css @@ -0,0 +1 @@ +.button-2Vpz_LXc{align-items:center;box-sizing:border-box;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;height:100%;transition:background-color 60ms ease,opacity 60ms ease,color 60ms ease}html.theme-dark .button-2Vpz_LXc{color:var(--tv-color-toolbar-button-text,#787b86)}.button-2Vpz_LXc.hover-2Vpz_LXc,.button-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-2Vpz_LXc.hover-2Vpz_LXc,html.theme-dark .button-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-2Vpz_LXc svg{display:block;-moz-transform:translateX(0)}.button-2Vpz_LXc.isInteractive-2Vpz_LXc{position:relative;z-index:0}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.hover-2Vpz_LXc:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.hover-2Vpz_LXc:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc{position:relative;z-index:0}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc.hover-2Vpz_LXc:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc.hover-2Vpz_LXc:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isGrouped-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff)}html.theme-sa .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff)}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc.hover-2Vpz_LXc,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc.hover-2Vpz_LXc,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:active{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isActive-2Vpz_LXc:hover{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc.hover-2Vpz_LXc:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:active:before,.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc.hover-2Vpz_LXc:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:active:before,html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2Vpz_LXc.isInteractive-2Vpz_LXc.isOpened-2Vpz_LXc:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}}.button-2Vpz_LXc.isDisabled-2Vpz_LXc{opacity:.3}.button-2Vpz_LXc.isDisabled-2Vpz_LXc,.button-2Vpz_LXc.isDisabled-2Vpz_LXc:active{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2Vpz_LXc.isDisabled-2Vpz_LXc:hover{background-color:initial}}.button-2Vpz_LXc.isDisabled-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff);opacity:1}html.theme-sa .button-2Vpz_LXc.isDisabled-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .button-2Vpz_LXc.isDisabled-2Vpz_LXc.isActive-2Vpz_LXc{color:var(--tv-color-toolbar-button-text-active,#2962ff)}.icon-2Vpz_LXc+.text-2Vpz_LXc,.text-2Vpz_LXc+.icon-2Vpz_LXc{margin-right:2px} \ No newline at end of file diff --git a/static/charting_library/bundles/14.d1148b38d59df9ca5061.js b/static/charting_library/bundles/14.d1148b38d59df9ca5061.js new file mode 100644 index 0000000..89702fa --- /dev/null +++ b/static/charting_library/bundles/14.d1148b38d59df9ca5061.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/15.44f2acca80348a1da1a6.js b/static/charting_library/bundles/15.44f2acca80348a1da1a6.js new file mode 100644 index 0000000..65100a7 --- /dev/null +++ b/static/charting_library/bundles/15.44f2acca80348a1da1a6.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{"2ish":function(e,t,n){},"3F0O":function(e,t,n){"use strict";function o(...e){return t=>{for(const n of e)void 0!==n&&n(t)}}n.d(t,"a",(function(){return o}))},"9p+j":function(e){e.exports=JSON.parse('{"input":"input-3bEGcMc9","with-start-slot":"with-start-slot-16sVynIv","with-end-slot":"with-end-slot-S5RrC8PC"}')},"Bcy+":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var o=n("3F0O"),r=n("SpAO");function i(e){const{onFocus:t,onBlur:n,intent:i,highlight:c,disabled:s}=e,[u,a]=Object(r.a)(),l=Object(o.a)(s?void 0:a.onFocus,t),d=Object(o.a)(s?void 0:a.onBlur,n);return{...e,intent:i||(u?"primary":"default"),highlight:null!=c?c:u,onFocus:l,onBlur:d}}},Dgta:function(e){e.exports=JSON.parse('{"container":"container-q0mjim9E","intent-default":"intent-default-1iFRsAl_","focused":"focused-3_QrLayY","readonly":"readonly-2O87siLj","disabled":"disabled-1IdBwvKU","with-highlight":"with-highlight-1fw5sABK","grouped":"grouped-OqOAs_gO","adjust-position":"adjust-position-CZNDwrAs","first-row":"first-row-1TtmkJB5","first-col":"first-col-3gkQgeTB","stretch":"stretch-1ZwMxhiW","font-size-medium":"font-size-medium-2X_Vsy16","font-size-large":"font-size-large-3XsO4Jyv","size-small":"size-small-1yttw7pF","size-medium":"size-medium-JO0bzDKQ","size-large":"size-large-3NHYwkZf","intent-success":"intent-success-3d9hoQq6","intent-warning":"intent-warning-2R7B-fcl","intent-danger":"intent-danger-2aIQ0kCh","intent-primary":"intent-primary-1uA2IWJE","border-none":"border-none-1THKKmlu","border-thin":"border-thin-xydp6U9V","border-thick":"border-thick-2gyRxvRu","no-corner-top-left":"no-corner-top-left-1CiWWKym","no-corner-top-right":"no-corner-top-right-3FhGiM-K","no-corner-bottom-right":"no-corner-bottom-right-7_q0YPc_","no-corner-bottom-left":"no-corner-bottom-left-3MCGXDki","highlight":"highlight-1k6YPfiQ","shown":"shown-2dwiJlCW"}')},ECWH:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var o=n("q1tI");function r(e){return Object(o.useCallback)(function(e){return t=>{e.forEach(e=>{"function"==typeof e?e(t):null!==e&&(e.current=t)})}}(e),e)}},NGCk:function(e){e.exports=JSON.parse('{"inner-slot":"inner-slot-2OKMGqSc","interactive":"interactive-3SE8kqul","icon":"icon-2tguASdP","inner-middle-slot":"inner-middle-slot-FxLdcHA0","before-slot":"before-slot-3KAG-INy","after-slot":"after-slot-34RFQaLb"}')},RG4O:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var o=n("q1tI");function r(){const e=Object(o.useRef)(!1),t=Object(o.useCallback)(()=>{e.current=!0},[e]),n=Object(o.useCallback)(()=>{e.current=!1},[e]);return{isMouseDown:e,handleMouseDown:t,handleMouseUp:n}}},SpAO:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var o=n("q1tI");function r(e){const[t,n]=Object(o.useState)(!1);return[t,{onFocus:Object(o.useCallback)((function(t){void 0!==e&&e.current!==t.target||n(!0)}),[e]),onBlur:Object(o.useCallback)((function(t){void 0!==e&&e.current!==t.target||n(!1)}),[e])}]}},T9x2:function(e,t,n){},ZWNO:function(e,t,n){"use strict";function o(e){ +let t=0;return e.isTop&&e.isLeft||(t+=1),e.isTop&&e.isRight||(t+=2),e.isBottom&&e.isLeft||(t+=8),e.isBottom&&e.isRight||(t+=4),t}n.d(t,"a",(function(){return o}))},ewrn:function(e,t,n){},ldG2:function(e,t,n){"use strict";var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n("Eyy1"),s=n("ECWH"),u=n("ijHL"),a=n("wwkJ"),l=n("ZWNO");var d=n("Dgta");n("ewrn");function f(e){let t="";return 0!==e&&(1&e&&(t=i(t,d["no-corner-top-left"])),2&e&&(t=i(t,d["no-corner-top-right"])),4&e&&(t=i(t,d["no-corner-bottom-right"])),8&e&&(t=i(t,d["no-corner-bottom-left"]))),t}function b(e,t,n,o){const{removeRoundBorder:r,className:c,intent:s="default",borderStyle:u="thin",size:a,highlight:b,disabled:h,readonly:m,stretch:p,noReadonlyStyles:g,isFocused:O}=e,j=f(null!=r?r:Object(l.a)(n));return i(d.container,d["intent-"+s],d["border-"+u],a&&d["size-"+a],j,b&&d["with-highlight"],h&&d.disabled,m&&!g&&d.readonly,O&&d.focused,p&&d.stretch,t&&d.grouped,!o&&d["adjust-position"],n.isTop&&d["first-row"],n.isLeft&&d["first-col"],c)}function h(e,t){const{highlight:n,highlightRemoveRoundBorder:o}=e;if(!n)return d.highlight;const r=f(null!=o?o:Object(l.a)(t));return i(d.highlight,d.shown,r)}const m={FontSizeMedium:Object(c.ensureDefined)(d["font-size-medium"]),FontSizeLarge:Object(c.ensureDefined)(d["font-size-large"])},p={passive:!1};function g(e,t){const{id:n,role:i,onFocus:c,onBlur:l,onMouseOver:d,onMouseOut:f,onMouseDown:m,onMouseUp:g,onKeyDown:O,onClick:j,tabIndex:w,startSlot:y,middleSlot:v,endSlot:S,onWheel:C,onWheelNoPassive:F=null}=e,{isGrouped:k,cellState:N,disablePositionAdjustment:x=!1}=Object(o.useContext)(a.a),R=function(e,t=null,n){const r=Object(o.useRef)(null),i=Object(o.useRef)(null),c=Object(o.useCallback)(()=>{if(null===r.current||null===i.current)return;const[e,t,n]=i.current;null!==t&&r.current.addEventListener(e,t,n)},[]),s=Object(o.useCallback)(()=>{if(null===r.current||null===i.current)return;const[e,t,n]=i.current;null!==t&&r.current.removeEventListener(e,t,n)},[]),u=Object(o.useCallback)(e=>{s(),r.current=e,c()},[]);return Object(o.useEffect)(()=>(i.current=[e,t,n],c(),s),[e,t,n]),u}("wheel",F,p);return r.a.createElement("span",{id:n,role:i,className:b(e,k,N,x),tabIndex:w,ref:Object(s.a)([t,R]),onFocus:c,onBlur:l,onMouseOver:d,onMouseOut:f,onMouseDown:m,onMouseUp:g,onKeyDown:O,onClick:j,onWheel:C,...Object(u.b)(e),...Object(u.a)(e)},y,v,S,r.a.createElement("span",{className:h(e,N)}))}g.displayName="ControlSkeleton";const O=r.a.forwardRef(g);n.d(t,"b",(function(){return m})),n.d(t,"a",(function(){return O}))},szLm:function(e,t,n){"use strict";function o(e){null!==e&&e.setSelectionRange(0,e.value.length)}n.d(t,"a",(function(){return o}))},wHCJ:function(e,t,n){"use strict";var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n("ijHL"),s=n("3F0O"),u=n("szLm"),a=n("ECWH"),l=n("Bcy+"),d=n("SpAO"),f=n("RG4O"),b=n("ldG2"),h=n("xADF"),m=n("9p+j");n("2ish");function p(e){return!Object(c.d)(e)&&!Object(c.e)(e)}function g(e){ +const{id:t,title:n,role:o,tabIndex:s,placeholder:u,name:a,type:l,value:d,defaultValue:f,draggable:g,autoComplete:O,autoFocus:j,maxLength:w,min:y,max:v,step:S,pattern:C,inputMode:F,onSelect:k,onFocus:N,onBlur:x,onKeyDown:R,onKeyUp:M,onKeyPress:B,onChange:D,onDragStart:E,size:z="medium",className:I,inputClassName:K,disabled:L,readonly:T,containerTabIndex:A,startSlot:q,endSlot:G,reference:J,containerReference:W,onContainerFocus:Q,...H}=e,U=Object(c.c)(H,p),P={...Object(c.a)(H),...Object(c.b)(H),id:t,title:n,role:o,tabIndex:s,placeholder:u,name:a,type:l,value:d,defaultValue:f,draggable:g,autoComplete:O,autoFocus:j,maxLength:w,min:y,max:v,step:S,pattern:C,inputMode:F,onSelect:k,onFocus:N,onBlur:x,onKeyDown:R,onKeyUp:M,onKeyPress:B,onChange:D,onDragStart:E};return r.a.createElement(b.a,{...U,disabled:L,readonly:T,tabIndex:A,className:i(m.container,I),size:z,ref:W,onFocus:Q,startSlot:q,middleSlot:r.a.createElement(h.c,null,r.a.createElement("input",{...P,className:i(m.input,K,q&&m["with-start-slot"],G&&m["with-end-slot"]),disabled:L,readOnly:T,ref:J})),endSlot:G})}function O(e){e=Object(l.a)(e);const{disabled:t,autoSelectOnFocus:n,tabIndex:i=0,onFocus:c,onBlur:b,reference:h,containerReference:m=null}=e,p=Object(o.useRef)(null),O=Object(o.useRef)(null),[j,w]=Object(d.a)(),y=t?void 0:j?-1:i,v=t?void 0:j?i:-1,{isMouseDown:S,handleMouseDown:C,handleMouseUp:F}=Object(f.a)(),k=Object(s.a)(w.onFocus,(function(e){n&&!S.current&&Object(u.a)(e.currentTarget)}),c),N=Object(s.a)(w.onBlur,b),x=Object(o.useCallback)(e=>{p.current=e,h&&("function"==typeof h&&h(e),"object"==typeof h&&(h.current=e))},[p,h]);return r.a.createElement(g,{...e,isFocused:j,containerTabIndex:y,tabIndex:v,onContainerFocus:function(e){O.current===e.target&&null!==p.current&&p.current.focus()},onFocus:k,onBlur:N,reference:x,containerReference:Object(a.a)([O,m]),onMouseDown:C,onMouseUp:F})}n.d(t,"a",(function(){return O}))},wwkJ:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var o=n("q1tI");const r=n.n(o).a.createContext({isGrouped:!1,cellState:{isTop:!0,isRight:!0,isBottom:!0,isLeft:!0}})},xADF:function(e,t,n){"use strict";n.d(t,"d",(function(){return s})),n.d(t,"c",(function(){return u})),n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return l}));var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n("NGCk");n("T9x2");function s(e){const{className:t,interactive:n=!0,icon:o=!1,children:s}=e;return r.a.createElement("span",{className:i(c["inner-slot"],n&&c.interactive,o&&c.icon,t)},s)}function u(e){const{className:t,children:n}=e;return r.a.createElement("span",{className:i(c["inner-slot"],c["inner-middle-slot"],t)},n)}function a(e){const{className:t,interactive:n=!0,icon:o=!1,children:s}=e;return r.a.createElement("span",{className:i(c["inner-slot"],n&&c.interactive,o&&c.icon,t)},s)}function l(e){const{className:t,children:n}=e;return r.a.createElement("span",{className:i(c["after-slot"],t)},n)}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/16.680572949c1125757d35.js b/static/charting_library/bundles/16.680572949c1125757d35.js new file mode 100644 index 0000000..1be04ea --- /dev/null +++ b/static/charting_library/bundles/16.680572949c1125757d35.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/16.d567c9db608f3d98d8de.css b/static/charting_library/bundles/16.d567c9db608f3d98d8de.css new file mode 100644 index 0000000..9dc356d --- /dev/null +++ b/static/charting_library/bundles/16.d567c9db608f3d98d8de.css @@ -0,0 +1 @@ +.container-q0mjim9E{align-items:center;border-color:var(--ui-lib-intent-color,#d1d4dc);border-radius:4px;border-style:solid;border-width:var(--ui-lib-control-border-width,1px);box-sizing:border-box;color:#131722;display:inline-flex;position:relative}.container-q0mjim9E,html.theme-dark .container-q0mjim9E{--ui-lib-control-default-slot-color:#787b86}html.theme-dark .container-q0mjim9E{border-color:var(--ui-lib-intent-color,#50535e);color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.intent-default-1iFRsAl_:hover{--ui-lib-control-default-slot-color:#131722;border-color:#a3a6af}html.theme-dark .container-q0mjim9E.intent-default-1iFRsAl_:hover{--ui-lib-control-default-slot-color:#d1d4dc;border-color:#6a6d78}}.container-q0mjim9E.focused-3_QrLayY{border-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.focused-3_QrLayY:hover{border-color:#2962ff}}html.theme-dark .container-q0mjim9E.focused-3_QrLayY{border-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.focused-3_QrLayY:hover{border-color:#2962ff}}.container-q0mjim9E.readonly-2O87siLj{background-color:#f0f3fa;border-color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.readonly-2O87siLj:hover{background-color:#f0f3fa;border-color:#d1d4dc}}html.theme-dark .container-q0mjim9E.readonly-2O87siLj{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.readonly-2O87siLj:hover{background-color:#2a2e39}}html.theme-dark .container-q0mjim9E.readonly-2O87siLj{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.readonly-2O87siLj:hover{border-color:#50535e}}.container-q0mjim9E.disabled-1IdBwvKU{--default-slot-color:#787b86;background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.disabled-1IdBwvKU:hover{--default-slot-color:#787b86;background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{--default-slot-color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{--default-slot-color:#787b86}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{color:#50535e}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{background-color:#2a2e39}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{border-color:#50535e}}.container-q0mjim9E.with-highlight-1fw5sABK,.container-q0mjim9E.with-highlight-1fw5sABK.focused-3_QrLayY{border-color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.with-highlight-1fw5sABK:hover{border-color:#d1d4dc}}html.theme-dark .container-q0mjim9E.with-highlight-1fw5sABK,html.theme-dark .container-q0mjim9E.with-highlight-1fw5sABK.focused-3_QrLayY{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.with-highlight-1fw5sABK:hover{border-color:#50535e}}.container-q0mjim9E.grouped-OqOAs_gO.adjust-position-CZNDwrAs:not(.first-row-1TtmkJB5){margin-top:calc(var(--ui-lib-control-border-width, 1px)*-1)}.container-q0mjim9E.grouped-OqOAs_gO.adjust-position-CZNDwrAs:not(.first-col-3gkQgeTB){margin-left:calc(var(--ui-lib-control-border-width, 1px)*-1)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.grouped-OqOAs_gO:hover{z-index:1}}.container-q0mjim9E.grouped-OqOAs_gO.focused-3_QrLayY{z-index:2}.container-q0mjim9E.stretch-1ZwMxhiW{width:100%}.container-q0mjim9E.font-size-medium-2X_Vsy16{font-size:14px;font-style:normal;font-weight:400;line-height:21px}.container-q0mjim9E.font-size-large-3XsO4Jyv{font-size:16px;font-style:normal;font-weight:400;line-height:24px}.container-q0mjim9E.size-small-1yttw7pF{height:24px}.container-q0mjim9E.size-medium-JO0bzDKQ{height:34px}.container-q0mjim9E.size-large-3NHYwkZf{height:48px}.container-q0mjim9E.intent-default-1iFRsAl_{--ui-lib-intent-color:#d1d4dc;--ui-lib-intent-highlight-color:#b2b5be}html.theme-dark .container-q0mjim9E.intent-default-1iFRsAl_{--ui-lib-intent-highlight-color:#868993;--ui-lib-intent-color:#50535e}.container-q0mjim9E.intent-success-3d9hoQq6{--ui-lib-intent-color:#00897b;--ui-lib-intent-highlight-color:#00897b}html.theme-dark .container-q0mjim9E.intent-success-3d9hoQq6{--ui-lib-intent-color:#00897b}.container-q0mjim9E.intent-warning-2R7B-fcl{--ui-lib-intent-color:#ff9800;--ui-lib-intent-highlight-color:#ff9800}html.theme-dark .container-q0mjim9E.intent-warning-2R7B-fcl{--ui-lib-intent-color:#ff9800}.container-q0mjim9E.intent-danger-2aIQ0kCh{--ui-lib-intent-color:#f44336;--ui-lib-intent-highlight-color:#f44336}html.theme-dark .container-q0mjim9E.intent-danger-2aIQ0kCh{--ui-lib-intent-color:#d32f2f}.container-q0mjim9E.intent-primary-1uA2IWJE{--ui-lib-intent-color:#2962ff;--ui-lib-intent-highlight-color:#2962ff}html.theme-dark .container-q0mjim9E.intent-primary-1uA2IWJE{--ui-lib-intent-color:#2962ff}.container-q0mjim9E.border-none-1THKKmlu{--ui-lib-control-border-width:0px}.container-q0mjim9E.border-thin-xydp6U9V{--ui-lib-control-border-width:1px}.container-q0mjim9E.border-thick-2gyRxvRu{--ui-lib-control-border-width:2px}.container-q0mjim9E.no-corner-top-left-1CiWWKym{border-top-left-radius:0}.container-q0mjim9E.no-corner-top-right-3FhGiM-K{border-top-right-radius:0}.container-q0mjim9E.no-corner-bottom-right-7_q0YPc_{border-bottom-right-radius:0}.container-q0mjim9E.no-corner-bottom-left-3MCGXDki{border-bottom-left-radius:0}.highlight-1k6YPfiQ{border:2px solid;border-color:var(--ui-lib-intent-highlight-color,#b2b5be);border-radius:4px;bottom:0;left:0;margin:calc(var(--ui-lib-control-border-width, 1px)*-1);pointer-events:none;position:absolute;right:0;top:0;visibility:hidden;z-index:3}html.theme-dark .highlight-1k6YPfiQ{border-color:var(--ui-lib-intent-highlight-color,#868993)}.highlight-1k6YPfiQ.no-corner-top-left-1CiWWKym{border-top-left-radius:0}.highlight-1k6YPfiQ.no-corner-top-right-3FhGiM-K{border-top-right-radius:0}.highlight-1k6YPfiQ.no-corner-bottom-right-7_q0YPc_{border-bottom-right-radius:0}.highlight-1k6YPfiQ.no-corner-bottom-left-3MCGXDki{border-bottom-left-radius:0}.highlight-1k6YPfiQ.shown-2dwiJlCW{visibility:visible}.inner-slot-2OKMGqSc{--ui-lib-control-inner-slot-gap:2px;align-items:center;box-sizing:border-box;display:flex;flex-shrink:0;height:calc(100% - (3px - var(--ui-lib-control-border-width, 1px))*2);justify-content:center;margin-bottom:calc(3px - var(--ui-lib-control-border-width, 1px));margin-right:var(--ui-lib-control-inner-slot-gap,2px);margin-top:calc(3px - var(--ui-lib-control-border-width, 1px));overflow:hidden}.inner-slot-2OKMGqSc:first-child{margin-left:calc(3px - var(--ui-lib-control-border-width, 1px))}.inner-slot-2OKMGqSc:nth-last-child(2){margin-right:calc(3px - var(--ui-lib-control-border-width, 1px))}.inner-slot-2OKMGqSc.interactive-3SE8kqul{color:var(--ui-lib-control-default-slot-color,currentColor)}.inner-slot-2OKMGqSc.icon-2tguASdP{flex:none;width:28px}.inner-middle-slot-FxLdcHA0{flex:1 1 auto}.before-slot-3KAG-INy{display:flex;margin-bottom:2px}.after-slot-34RFQaLb{display:flex;margin-top:4px}.input-3bEGcMc9{-webkit-text-fill-color:currentColor;-webkit-appearance:textfield;appearance:textfield;background-color:initial;border:0;display:block;font-family:inherit;font-size:inherit;height:100%;line-height:inherit;margin:0;min-width:0;order:0;outline:0;padding:0;padding:0 calc(8px - var(--ui-lib-control-border-width, 2px) - var(--ui-lib-control-inner-slot-gap, 2px));width:100%}.input-3bEGcMc9::placeholder{-webkit-text-fill-color:currentColor;color:#a3a6af;opacity:1}html.theme-dark .input-3bEGcMc9::placeholder{color:#434651}.input-3bEGcMc9::-webkit-calendar-picker-indicator,.input-3bEGcMc9::-webkit-clear-button,.input-3bEGcMc9::-webkit-inner-spin-button,.input-3bEGcMc9::-webkit-outer-spin-button,.input-3bEGcMc9::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.input-3bEGcMc9::-ms-clear,.input-3bEGcMc9::-ms-reveal{display:none}.input-3bEGcMc9:-webkit-autofill,.input-3bEGcMc9:-webkit-autofill:active,.input-3bEGcMc9:-webkit-autofill:focus{border-radius:3px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.input-3bEGcMc9:-webkit-autofill:hover{border-radius:3px}}html.theme-dark .input-3bEGcMc9::-webkit-calendar-picker-indicator{filter:invert(1)}.input-3bEGcMc9.with-start-slot-16sVynIv{padding-left:calc(4px - var(--ui-lib-control-inner-slot-gap, 2px))}.input-3bEGcMc9.with-end-slot-S5RrC8PC{padding-right:calc(4px - var(--ui-lib-control-inner-slot-gap, 2px))} \ No newline at end of file diff --git a/static/charting_library/bundles/16.d567c9db608f3d98d8de.rtl.css b/static/charting_library/bundles/16.d567c9db608f3d98d8de.rtl.css new file mode 100644 index 0000000..f5becb9 --- /dev/null +++ b/static/charting_library/bundles/16.d567c9db608f3d98d8de.rtl.css @@ -0,0 +1 @@ +.container-q0mjim9E{align-items:center;border-color:var(--ui-lib-intent-color,#d1d4dc);border-radius:4px;border-style:solid;border-width:var(--ui-lib-control-border-width,1px);box-sizing:border-box;color:#131722;display:inline-flex;position:relative}.container-q0mjim9E,html.theme-dark .container-q0mjim9E{--ui-lib-control-default-slot-color:#787b86}html.theme-dark .container-q0mjim9E{border-color:var(--ui-lib-intent-color,#50535e);color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.intent-default-1iFRsAl_:hover{--ui-lib-control-default-slot-color:#131722;border-color:#a3a6af}html.theme-dark .container-q0mjim9E.intent-default-1iFRsAl_:hover{--ui-lib-control-default-slot-color:#d1d4dc;border-color:#6a6d78}}.container-q0mjim9E.focused-3_QrLayY{border-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.focused-3_QrLayY:hover{border-color:#2962ff}}html.theme-dark .container-q0mjim9E.focused-3_QrLayY{border-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.focused-3_QrLayY:hover{border-color:#2962ff}}.container-q0mjim9E.readonly-2O87siLj{background-color:#f0f3fa;border-color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.readonly-2O87siLj:hover{background-color:#f0f3fa;border-color:#d1d4dc}}html.theme-dark .container-q0mjim9E.readonly-2O87siLj{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.readonly-2O87siLj:hover{background-color:#2a2e39}}html.theme-dark .container-q0mjim9E.readonly-2O87siLj{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.readonly-2O87siLj:hover{border-color:#50535e}}.container-q0mjim9E.disabled-1IdBwvKU{--default-slot-color:#787b86;background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.disabled-1IdBwvKU:hover{--default-slot-color:#787b86;background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{--default-slot-color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{--default-slot-color:#787b86}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{color:#50535e}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{background-color:#2a2e39}}html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.disabled-1IdBwvKU:hover{border-color:#50535e}}.container-q0mjim9E.with-highlight-1fw5sABK,.container-q0mjim9E.with-highlight-1fw5sABK.focused-3_QrLayY{border-color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.with-highlight-1fw5sABK:hover{border-color:#d1d4dc}}html.theme-dark .container-q0mjim9E.with-highlight-1fw5sABK,html.theme-dark .container-q0mjim9E.with-highlight-1fw5sABK.focused-3_QrLayY{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-q0mjim9E.with-highlight-1fw5sABK:hover{border-color:#50535e}}.container-q0mjim9E.grouped-OqOAs_gO.adjust-position-CZNDwrAs:not(.first-row-1TtmkJB5){margin-top:calc(var(--ui-lib-control-border-width, 1px)*-1)}.container-q0mjim9E.grouped-OqOAs_gO.adjust-position-CZNDwrAs:not(.first-col-3gkQgeTB){margin-right:calc(var(--ui-lib-control-border-width, 1px)*-1)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-q0mjim9E.grouped-OqOAs_gO:hover{z-index:1}}.container-q0mjim9E.grouped-OqOAs_gO.focused-3_QrLayY{z-index:2}.container-q0mjim9E.stretch-1ZwMxhiW{width:100%}.container-q0mjim9E.font-size-medium-2X_Vsy16{font-size:14px;font-style:normal;font-weight:400;line-height:21px}.container-q0mjim9E.font-size-large-3XsO4Jyv{font-size:16px;font-style:normal;font-weight:400;line-height:24px}.container-q0mjim9E.size-small-1yttw7pF{height:24px}.container-q0mjim9E.size-medium-JO0bzDKQ{height:34px}.container-q0mjim9E.size-large-3NHYwkZf{height:48px}.container-q0mjim9E.intent-default-1iFRsAl_{--ui-lib-intent-color:#d1d4dc;--ui-lib-intent-highlight-color:#b2b5be}html.theme-dark .container-q0mjim9E.intent-default-1iFRsAl_{--ui-lib-intent-highlight-color:#868993;--ui-lib-intent-color:#50535e}.container-q0mjim9E.intent-success-3d9hoQq6{--ui-lib-intent-color:#00897b;--ui-lib-intent-highlight-color:#00897b}html.theme-dark .container-q0mjim9E.intent-success-3d9hoQq6{--ui-lib-intent-color:#00897b}.container-q0mjim9E.intent-warning-2R7B-fcl{--ui-lib-intent-color:#ff9800;--ui-lib-intent-highlight-color:#ff9800}html.theme-dark .container-q0mjim9E.intent-warning-2R7B-fcl{--ui-lib-intent-color:#ff9800}.container-q0mjim9E.intent-danger-2aIQ0kCh{--ui-lib-intent-color:#f44336;--ui-lib-intent-highlight-color:#f44336}html.theme-dark .container-q0mjim9E.intent-danger-2aIQ0kCh{--ui-lib-intent-color:#d32f2f}.container-q0mjim9E.intent-primary-1uA2IWJE{--ui-lib-intent-color:#2962ff;--ui-lib-intent-highlight-color:#2962ff}html.theme-dark .container-q0mjim9E.intent-primary-1uA2IWJE{--ui-lib-intent-color:#2962ff}.container-q0mjim9E.border-none-1THKKmlu{--ui-lib-control-border-width:0px}.container-q0mjim9E.border-thin-xydp6U9V{--ui-lib-control-border-width:1px}.container-q0mjim9E.border-thick-2gyRxvRu{--ui-lib-control-border-width:2px}.container-q0mjim9E.no-corner-top-left-1CiWWKym{border-top-right-radius:0}.container-q0mjim9E.no-corner-top-right-3FhGiM-K{border-top-left-radius:0}.container-q0mjim9E.no-corner-bottom-right-7_q0YPc_{border-bottom-left-radius:0}.container-q0mjim9E.no-corner-bottom-left-3MCGXDki{border-bottom-right-radius:0}.highlight-1k6YPfiQ{border:2px solid;border-color:var(--ui-lib-intent-highlight-color,#b2b5be);border-radius:4px;bottom:0;left:0;margin:calc(var(--ui-lib-control-border-width, 1px)*-1);pointer-events:none;position:absolute;right:0;top:0;visibility:hidden;z-index:3}html.theme-dark .highlight-1k6YPfiQ{border-color:var(--ui-lib-intent-highlight-color,#868993)}.highlight-1k6YPfiQ.no-corner-top-left-1CiWWKym{border-top-right-radius:0}.highlight-1k6YPfiQ.no-corner-top-right-3FhGiM-K{border-top-left-radius:0}.highlight-1k6YPfiQ.no-corner-bottom-right-7_q0YPc_{border-bottom-left-radius:0}.highlight-1k6YPfiQ.no-corner-bottom-left-3MCGXDki{border-bottom-right-radius:0}.highlight-1k6YPfiQ.shown-2dwiJlCW{visibility:visible}.inner-slot-2OKMGqSc{--ui-lib-control-inner-slot-gap:2px;align-items:center;box-sizing:border-box;display:flex;flex-shrink:0;height:calc(100% - (3px - var(--ui-lib-control-border-width, 1px))*2);justify-content:center;margin-bottom:calc(3px - var(--ui-lib-control-border-width, 1px));margin-left:var(--ui-lib-control-inner-slot-gap,2px);margin-top:calc(3px - var(--ui-lib-control-border-width, 1px));overflow:hidden}.inner-slot-2OKMGqSc:first-child{margin-right:calc(3px - var(--ui-lib-control-border-width, 1px))}.inner-slot-2OKMGqSc:nth-last-child(2){margin-left:calc(3px - var(--ui-lib-control-border-width, 1px))}.inner-slot-2OKMGqSc.interactive-3SE8kqul{color:var(--ui-lib-control-default-slot-color,currentColor)}.inner-slot-2OKMGqSc.icon-2tguASdP{flex:none;width:28px}.inner-middle-slot-FxLdcHA0{flex:1 1 auto}.before-slot-3KAG-INy{display:flex;margin-bottom:2px}.after-slot-34RFQaLb{display:flex;margin-top:4px}.input-3bEGcMc9{-webkit-text-fill-color:currentColor;-webkit-appearance:textfield;appearance:textfield;background-color:initial;border:0;display:block;font-family:inherit;font-size:inherit;height:100%;line-height:inherit;margin:0;min-width:0;order:0;outline:0;padding:0;padding:0 calc(8px - var(--ui-lib-control-border-width, 2px) - var(--ui-lib-control-inner-slot-gap, 2px));width:100%}.input-3bEGcMc9::placeholder{-webkit-text-fill-color:currentColor;color:#a3a6af;opacity:1}html.theme-dark .input-3bEGcMc9::placeholder{color:#434651}.input-3bEGcMc9::-webkit-calendar-picker-indicator,.input-3bEGcMc9::-webkit-clear-button,.input-3bEGcMc9::-webkit-inner-spin-button,.input-3bEGcMc9::-webkit-outer-spin-button,.input-3bEGcMc9::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.input-3bEGcMc9::-ms-clear,.input-3bEGcMc9::-ms-reveal{display:none}.input-3bEGcMc9:-webkit-autofill,.input-3bEGcMc9:-webkit-autofill:active,.input-3bEGcMc9:-webkit-autofill:focus{border-radius:3px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.input-3bEGcMc9:-webkit-autofill:hover{border-radius:3px}}html.theme-dark .input-3bEGcMc9::-webkit-calendar-picker-indicator{filter:invert(1)}.input-3bEGcMc9.with-start-slot-16sVynIv{padding-right:calc(4px - var(--ui-lib-control-inner-slot-gap, 2px))}.input-3bEGcMc9.with-end-slot-S5RrC8PC{padding-left:calc(4px - var(--ui-lib-control-inner-slot-gap, 2px))} \ No newline at end of file diff --git a/static/charting_library/bundles/17.404a01f527881dfff424.js b/static/charting_library/bundles/17.404a01f527881dfff424.js new file mode 100644 index 0000000..da2bed4 --- /dev/null +++ b/static/charting_library/bundles/17.404a01f527881dfff424.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/17.ec35a19db935279c5b42.css b/static/charting_library/bundles/17.ec35a19db935279c5b42.css new file mode 100644 index 0000000..6e93132 --- /dev/null +++ b/static/charting_library/bundles/17.ec35a19db935279c5b42.css @@ -0,0 +1 @@ +.button-1iktpaT1{align-items:center;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-flex;justify-content:center;max-width:100%;outline:0;transition-duration:.35s;transition-property:border-color,background-color,color;transition-timing-function:ease}.button-1iktpaT1 .content-2PGssb8d{overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.button-1iktpaT1{outline:none;overflow:visible;position:relative}.button-1iktpaT1:focus{outline:none}.button-1iktpaT1:focus-visible{outline:none}.button-1iktpaT1:after{border-style:solid;border-width:2px;box-sizing:border-box;content:"";display:none;height:calc(100% + 10px);left:-5px;pointer-events:none;position:absolute;top:-5px;width:calc(100% + 10px);z-index:1}.button-1iktpaT1:focus:after{display:block}.button-1iktpaT1:focus-visible:after{display:block}.button-1iktpaT1:focus:not(:focus-visible):after{display:none}.button-1iktpaT1.noOutline-d9Yp4qvi:after{content:none}.button-1iktpaT1.grouped-2NxOpIxM.adjust-position-2zd-ooQC:not(.first-row-11wXF7aC){margin-top:-1px}.button-1iktpaT1.grouped-2NxOpIxM.adjust-position-2zd-ooQC:not(.first-col-pbJu53tK){margin-left:-1px;max-width:calc(100% + 1px);width:calc(100% + 1px)}.button-1iktpaT1.grouped-2NxOpIxM.adjust-position-2zd-ooQC:active:not(:disabled):not([aria-disabled=true]){transform:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1iktpaT1.grouped-2NxOpIxM:hover{z-index:1}}.button-1iktpaT1.grouped-2NxOpIxM:focus{z-index:2}.button-1iktpaT1.no-corner-top-left-3ZsS65Fk,.button-1iktpaT1.no-corner-top-left-3ZsS65Fk:after{border-top-left-radius:0}.button-1iktpaT1.no-corner-top-right-3MYQOwk_,.button-1iktpaT1.no-corner-top-right-3MYQOwk_:after{border-top-right-radius:0}.button-1iktpaT1.no-corner-bottom-right-3II18BAU,.button-1iktpaT1.no-corner-bottom-right-3II18BAU:after{border-bottom-right-radius:0}.button-1iktpaT1.no-corner-bottom-left-3KZuX8tv,.button-1iktpaT1.no-corner-bottom-left-3KZuX8tv:after{border-bottom-left-radius:0}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:link,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5;border-color:#1e53e5}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:#2962ff;border-color:#2962ff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#2962ff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:#2962ff}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:link,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:visited,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:after,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:link,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:visited{background-color:#009688;border-color:#009688;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:visited{background-color:#00796b;border-color:#00796b;color:#fff}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#009688;border-color:#009688;color:#fff}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus-visible{background-color:#00897b;border-color:#00897b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus-visible{border-color:#00897b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus-visible{background-color:#00897b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:#009688;border-color:#009688}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#00796b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:#00796b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:link,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:visited,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:after,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:link,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:visited{background-color:#9598a1;border-color:#9598a1;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:visited{background-color:#5d606b;border-color:#5d606b;color:#fff}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#5d606b;border-color:#5d606b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#9598a1;border-color:#9598a1;color:#fff}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86;border-color:#787b86}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus-visible{border-color:#787b86}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:#9598a1;border-color:#9598a1}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#5d606b}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:#5d606b}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:link,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:visited,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:after,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:link,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:visited{background-color:#ff9800;border-color:#ff9800;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:visited{background-color:#f57c00;border-color:#f57c00;color:#fff}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#f57c00;border-color:#f57c00;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#ff9800;border-color:#ff9800;color:#fff}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00;border-color:#fb8c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:#ff9800;border-color:#ff9800}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#f57c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:#f57c00}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:link,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:visited,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:after,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:link,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:visited{background-color:#ef5350;border-color:#ef5350;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:visited{background-color:#e53935;border-color:#e53935;color:#fff}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#e53935;border-color:#e53935;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#ef5350;border-color:#ef5350;color:#fff}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus-visible{background-color:#f44336;border-color:#f44336}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus-visible{border-color:#f44336}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus-visible{background-color:#f44336}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:#ef5350;border-color:#ef5350}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#e53935}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:#e53935}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:link,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:visited,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:after,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:link,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#2962ff;color:#2962ff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#2962ff;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5;color:#fff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:initial;border-color:#2962ff;color:#2962ff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#2962ff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){color:#2962ff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:link,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:visited,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:after,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:link,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:visited{background-color:initial;border-color:#009688;color:#009688}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:visited{background-color:initial;border-color:#00796b;color:#00796b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#009688;border-color:#009688;color:#fff}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b;color:#fff}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{border-color:#00897b}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{background-color:#00897b}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:initial;border-color:#009688;color:#009688}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#00796b}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){color:#00796b}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:link,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:visited,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:after,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:link,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#9598a1;color:#131722}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#5d606b;color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#5d606b;border-color:#5d606b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#9598a1;border-color:#9598a1;color:#fff}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86;color:#fff}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{border-color:#787b86}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:initial;border-color:#9598a1;color:#131722}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#5d606b}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){color:#d1d4dc}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:link,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:visited,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:after,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:link,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#ff9800;color:#ff9800}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#f57c00;color:#f57c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#f57c00;border-color:#f57c00;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#ff9800;border-color:#ff9800;color:#fff}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00;color:#fff}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:initial;border-color:#ff9800;color:#ff9800}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#f57c00}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){color:#f57c00}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:link,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:visited,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:after,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:link,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:visited{background-color:initial;border-color:#ef5350;color:#ef5350}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:visited{background-color:initial;border-color:#e53935;color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#e53935;border-color:#e53935;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#ef5350;border-color:#ef5350;color:#fff}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336;color:#fff}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{border-color:#f44336}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{background-color:#f44336}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:initial;border-color:#ef5350;color:#ef5350}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#e53935}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){color:#e53935}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:link,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:visited,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:after,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:link,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#0000;color:#2962ff}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#0000;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#1e53e5;color:#1e53e5}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#1e53e5;color:#1e53e5}}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus{border-color:#1e53e5}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:link,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:visited,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:after,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-success-25a4XZXM{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-success-25a4XZXM,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:link,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:visited{background-color:initial;border-color:#0000;color:#009688}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:link,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:visited{background-color:initial;border-color:#0000;color:#00796b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#00897b;color:#00897b}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#00897b;color:#00897b}}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#009688;border-color:#009688;color:#fff}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus{border-color:#00897b}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus-visible{border-color:#00897b}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus-visible{border-color:#00897b}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:link,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:visited,.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true],.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:after,.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:link,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#0000;color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#0000;color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#787b86;color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#787b86;color:#d1d4dc}}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#5d606b;border-color:#5d606b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#9598a1;border-color:#9598a1;color:#fff}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus{border-color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus{border-color:#d1d4dc}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus-visible{border-color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus-visible{border-color:#d1d4dc}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:link,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:visited,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:after,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:link,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#0000;color:#ff9800}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:link,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#0000;color:#f57c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#fb8c00;color:#fb8c00}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#fb8c00;color:#fb8c00}}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#f57c00;border-color:#f57c00;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#ff9800;border-color:#ff9800;color:#fff}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus{border-color:#fb8c00}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:link,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:visited,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true],.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:after,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-danger-1EETHCla{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-danger-1EETHCla,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:link,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:visited{background-color:initial;border-color:#0000;color:#ef5350}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:link,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:visited{background-color:initial;border-color:#0000;color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#f44336;color:#f44336}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#f44336;color:#f44336}}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#e53935;border-color:#e53935;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#ef5350;border-color:#ef5350;color:#fff}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus{border-color:#f44336}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus-visible{border-color:#f44336}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus-visible{border-color:#f44336}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:link,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:visited,.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true],.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:after,.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:link,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:visited{background-color:#fff;border-color:#fff;color:#2962ff}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:visited{color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#1e53e5}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){color:#1e53e5}}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#1848cc;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){color:#1848cc}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus{color:#1e53e5}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus-visible{color:#1e53e5}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus-visible{color:#1e53e5}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus:not(:focus-visible){color:#2962ff}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus:not(:focus-visible){color:#2962ff}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:link,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:after,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:link,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:visited{background-color:#fff;border-color:#fff;color:#009688}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:visited{color:#00796b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#00897b}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){color:#00897b}}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#00796b;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){color:#009688}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus{color:#00897b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus-visible{color:#00897b}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus-visible{color:#00897b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus:not(:focus-visible){color:#009688}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus:not(:focus-visible){color:#00796b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:link,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:after,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:link,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:visited{background-color:#fff;border-color:#fff;color:#9598a1}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:visited{color:#5d606b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#787b86}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){color:#787b86}}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#5d606b;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){color:#9598a1}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus{color:#787b86}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus-visible{color:#787b86}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus-visible{color:#787b86}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus:not(:focus-visible){color:#9598a1}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus:not(:focus-visible){color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:link,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:after,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:link,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:visited{background-color:#fff;border-color:#fff;color:#ff9800}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:visited{color:#f57c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#fb8c00}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){color:#fb8c00}}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#f57c00;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){color:#ff9800}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus{color:#fb8c00}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus-visible{color:#fb8c00}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus-visible{color:#fb8c00}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus:not(:focus-visible){color:#ff9800}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus:not(:focus-visible){color:#f57c00}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:link,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:after,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:link,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:visited{background-color:#fff;border-color:#fff;color:#ef5350}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:visited{color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#f44336}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){color:#f44336}}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#e53935;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){color:#ef5350}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus{color:#f44336}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus-visible{color:#f44336}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus-visible{color:#f44336}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus:not(:focus-visible){color:#ef5350}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus:not(:focus-visible){color:#e53935}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:link,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:after,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.size-s-3mait84m{border-radius:4px;height:26px;padding:0 11px}.size-s-3mait84m:after{border-radius:8px}.size-s-3mait84m .content-2PGssb8d{font-size:14px;text-transform:none}.size-m-2G7L7Qat{border-radius:4px;height:34px;padding:0 23px}.size-m-2G7L7Qat:after{border-radius:8px}.size-m-2G7L7Qat .content-2PGssb8d{font-size:16px;text-transform:none}.size-l-2NEs9_xt{border-radius:4px;height:48px;padding:0 31px}.size-l-2NEs9_xt:after{border-radius:8px}.size-l-2NEs9_xt .content-2PGssb8d{font-size:16px;text-transform:none}.full-width-1wU8ljjC{width:100%}.with-icon-yumghDr- .content-2PGssb8d{margin-right:3px}.icon-1grlgNdV{align-items:center;display:flex;height:28px;justify-content:center;margin-right:4px;width:28px} \ No newline at end of file diff --git a/static/charting_library/bundles/17.ec35a19db935279c5b42.rtl.css b/static/charting_library/bundles/17.ec35a19db935279c5b42.rtl.css new file mode 100644 index 0000000..fbde4ab --- /dev/null +++ b/static/charting_library/bundles/17.ec35a19db935279c5b42.rtl.css @@ -0,0 +1 @@ +.button-1iktpaT1{align-items:center;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-flex;justify-content:center;max-width:100%;outline:0;transition-duration:.35s;transition-property:border-color,background-color,color;transition-timing-function:ease}.button-1iktpaT1 .content-2PGssb8d{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.button-1iktpaT1{outline:none;overflow:visible;position:relative}.button-1iktpaT1:focus{outline:none}.button-1iktpaT1:focus-visible{outline:none}.button-1iktpaT1:after{border-style:solid;border-width:2px;box-sizing:border-box;content:"";display:none;height:calc(100% + 10px);pointer-events:none;position:absolute;right:-5px;top:-5px;width:calc(100% + 10px);z-index:1}.button-1iktpaT1:focus:after{display:block}.button-1iktpaT1:focus-visible:after{display:block}.button-1iktpaT1:focus:not(:focus-visible):after{display:none}.button-1iktpaT1.noOutline-d9Yp4qvi:after{content:none}.button-1iktpaT1.grouped-2NxOpIxM.adjust-position-2zd-ooQC:not(.first-row-11wXF7aC){margin-top:-1px}.button-1iktpaT1.grouped-2NxOpIxM.adjust-position-2zd-ooQC:not(.first-col-pbJu53tK){margin-right:-1px;max-width:calc(100% + 1px);width:calc(100% + 1px)}.button-1iktpaT1.grouped-2NxOpIxM.adjust-position-2zd-ooQC:active:not(:disabled):not([aria-disabled=true]){transform:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1iktpaT1.grouped-2NxOpIxM:hover{z-index:1}}.button-1iktpaT1.grouped-2NxOpIxM:focus{z-index:2}.button-1iktpaT1.no-corner-top-left-3ZsS65Fk,.button-1iktpaT1.no-corner-top-left-3ZsS65Fk:after{border-top-right-radius:0}.button-1iktpaT1.no-corner-top-right-3MYQOwk_,.button-1iktpaT1.no-corner-top-right-3MYQOwk_:after{border-top-left-radius:0}.button-1iktpaT1.no-corner-bottom-right-3II18BAU,.button-1iktpaT1.no-corner-bottom-right-3II18BAU:after{border-bottom-left-radius:0}.button-1iktpaT1.no-corner-bottom-left-3KZuX8tv,.button-1iktpaT1.no-corner-bottom-left-3KZuX8tv:after{border-bottom-right-radius:0}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:link,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5;border-color:#1e53e5}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:#2962ff;border-color:#2962ff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#2962ff}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:#2962ff}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:link,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:visited,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg:disabled:after,.appearance-default-dMjF_2Hu.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:link,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:visited{background-color:#009688;border-color:#009688;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:visited{background-color:#00796b;border-color:#00796b;color:#fff}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#009688;border-color:#009688;color:#fff}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus-visible{background-color:#00897b;border-color:#00897b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus-visible{border-color:#00897b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus-visible{background-color:#00897b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:#009688;border-color:#009688}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#00796b}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:#00796b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:link,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:visited,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-success-25a4XZXM:disabled:after,.appearance-default-dMjF_2Hu.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:link,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:visited{background-color:#9598a1;border-color:#9598a1;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:visited{background-color:#5d606b;border-color:#5d606b;color:#fff}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#5d606b;border-color:#5d606b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#9598a1;border-color:#9598a1;color:#fff}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86;border-color:#787b86}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus-visible{border-color:#787b86}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:#9598a1;border-color:#9598a1}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#5d606b}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:#5d606b}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:link,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:visited,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs:disabled:after,.appearance-default-dMjF_2Hu.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:link,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:visited{background-color:#ff9800;border-color:#ff9800;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:visited{background-color:#f57c00;border-color:#f57c00;color:#fff}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#f57c00;border-color:#f57c00;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#ff9800;border-color:#ff9800;color:#fff}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00;border-color:#fb8c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:#ff9800;border-color:#ff9800}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#f57c00}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:#f57c00}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:link,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:visited,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0:disabled:after,.appearance-default-dMjF_2Hu.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla{transform:translateY(0)}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:link,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:visited{background-color:#ef5350;border-color:#ef5350;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:visited{background-color:#e53935;border-color:#e53935;color:#fff}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla.grouped-2NxOpIxM.adjust-position-2zd-ooQC{z-index:2}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#e53935;border-color:#e53935;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#ef5350;border-color:#ef5350;color:#fff}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus-visible{background-color:#f44336;border-color:#f44336}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus-visible{border-color:#f44336}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus-visible{background-color:#f44336}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:#ef5350;border-color:#ef5350}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#e53935}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:#e53935}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:link,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:visited,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true],.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-default-dMjF_2Hu.intent-danger-1EETHCla:disabled:after,.appearance-default-dMjF_2Hu.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:link,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#2962ff;color:#2962ff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#2962ff;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#1e53e5;border-color:#1e53e5;color:#fff}}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus{background-color:#1e53e5;border-color:#1e53e5;color:#fff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5;border-color:#1e53e5;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{background-color:#1e53e5}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:initial;border-color:#2962ff;color:#2962ff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#2962ff}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:focus:not(:focus-visible){color:#2962ff}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:link,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:visited,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg:disabled:after,.appearance-stroke-12lxiUSM.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:link,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:visited{background-color:initial;border-color:#009688;color:#009688}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:visited{background-color:initial;border-color:#00796b;color:#00796b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#00897b;border-color:#00897b;color:#fff}}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#009688;border-color:#009688;color:#fff}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus{background-color:#00897b;border-color:#00897b;color:#fff}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{background-color:#00897b;border-color:#00897b;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{border-color:#00897b}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{background-color:#00897b}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:initial;border-color:#009688;color:#009688}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#00796b}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:focus:not(:focus-visible){color:#00796b}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:link,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:visited,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-success-25a4XZXM:disabled:after,.appearance-stroke-12lxiUSM.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:link,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#9598a1;color:#131722}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#5d606b;color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#787b86;border-color:#787b86;color:#fff}}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#5d606b;border-color:#5d606b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#9598a1;border-color:#9598a1;color:#fff}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus{background-color:#787b86;border-color:#787b86;color:#fff}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{border-color:#787b86}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{background-color:#787b86}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:initial;border-color:#9598a1;color:#131722}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#5d606b}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:focus:not(:focus-visible){color:#d1d4dc}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:link,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:visited,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs:disabled:after,.appearance-stroke-12lxiUSM.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:link,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#ff9800;color:#ff9800}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#f57c00;color:#f57c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fb8c00;border-color:#fb8c00;color:#fff}}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#f57c00;border-color:#f57c00;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#ff9800;border-color:#ff9800;color:#fff}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus{background-color:#fb8c00;border-color:#fb8c00;color:#fff}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00;border-color:#fb8c00;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{background-color:#fb8c00}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:initial;border-color:#ff9800;color:#ff9800}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#f57c00}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:focus:not(:focus-visible){color:#f57c00}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:link,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:visited,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0:disabled:after,.appearance-stroke-12lxiUSM.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla{transform:translateY(0)}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:link,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:visited{background-color:initial;border-color:#ef5350;color:#ef5350}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:visited{background-color:initial;border-color:#e53935;color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#f44336;border-color:#f44336;color:#fff}}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#e53935;border-color:#e53935;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#ef5350;border-color:#ef5350;color:#fff}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus{background-color:#f44336;border-color:#f44336;color:#fff}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{background-color:#f44336;border-color:#f44336;color:#fff}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{border-color:#f44336}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{background-color:#f44336}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus-visible{color:#fff}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:initial;border-color:#ef5350;color:#ef5350}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#e53935}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){background-color:initial}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:focus:not(:focus-visible){color:#e53935}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:link,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:visited,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true],.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-stroke-12lxiUSM.intent-danger-1EETHCla:disabled:after,.appearance-stroke-12lxiUSM.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:link,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#0000;color:#2962ff}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:visited{background-color:initial;border-color:#0000;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#1e53e5;color:#1e53e5}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#1e53e5;color:#1e53e5}}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#1848cc;border-color:#1848cc;color:#fff}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus{border-color:#1e53e5}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus-visible{border-color:#1e53e5}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:link,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:visited,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg:disabled:after,.appearance-text-DqKJVT3U.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-success-25a4XZXM{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-success-25a4XZXM,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:link,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:visited{background-color:initial;border-color:#0000;color:#009688}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:link,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:visited{background-color:initial;border-color:#0000;color:#00796b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#00897b;color:#00897b}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#00897b;color:#00897b}}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#009688;border-color:#009688;color:#fff}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus{border-color:#00897b}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus-visible{border-color:#00897b}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus-visible{border-color:#00897b}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:link,.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:visited,.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true],.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-success-25a4XZXM:disabled:after,.appearance-text-DqKJVT3U.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:link,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#0000;color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:visited{background-color:initial;border-color:#0000;color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#787b86;color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#787b86;color:#d1d4dc}}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#5d606b;border-color:#5d606b;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#9598a1;border-color:#9598a1;color:#fff}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus{border-color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus{border-color:#d1d4dc}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus-visible{border-color:#131722}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus-visible{border-color:#d1d4dc}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:link,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:visited,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs:disabled:after,.appearance-text-DqKJVT3U.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:link,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#0000;color:#ff9800}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:link,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:visited{background-color:initial;border-color:#0000;color:#f57c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#fb8c00;color:#fb8c00}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#fb8c00;color:#fb8c00}}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#f57c00;border-color:#f57c00;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#ff9800;border-color:#ff9800;color:#fff}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus{border-color:#fb8c00}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus-visible{border-color:#fb8c00}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:link,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:visited,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true],.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-warning-24j5HMi0:disabled:after,.appearance-text-DqKJVT3U.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-text-DqKJVT3U.intent-danger-1EETHCla{transform:translateY(0)}.appearance-text-DqKJVT3U.intent-danger-1EETHCla,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:link,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:visited{background-color:initial;border-color:#0000;color:#ef5350}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:link,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:visited{background-color:initial;border-color:#0000;color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-text-DqKJVT3U.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#f44336;color:#f44336}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:initial;border-color:#f44336;color:#f44336}}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#e53935;border-color:#e53935;color:#fff;transform:translateY(1px)}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#ef5350;border-color:#ef5350;color:#fff}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus{border-color:#f44336}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus-visible{border-color:#f44336}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus-visible{border-color:#f44336}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#0000}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:focus:not(:focus-visible){border-color:#0000}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:link,.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:visited,.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true],.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-text-DqKJVT3U.intent-danger-1EETHCla:disabled:after,.appearance-text-DqKJVT3U.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:link,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:visited{background-color:#fff;border-color:#fff;color:#2962ff}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:visited{color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#1e53e5}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:hover:not(:disabled):not([aria-disabled=true]){color:#1e53e5}}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#1848cc;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:active:not(:disabled):not([aria-disabled=true]){color:#1848cc}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:after,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:after{border-color:#2962ffcc}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus{color:#1e53e5}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus-visible{color:#1e53e5}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus-visible{color:#1e53e5}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus:not(:focus-visible){color:#2962ff}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:focus:not(:focus-visible){color:#2962ff}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:link,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg:disabled:after,.appearance-inverse-r1Y2JQg_.intent-primary-1-IOYcbg[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:link,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:visited{background-color:#fff;border-color:#fff;color:#009688}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:visited{color:#00796b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#00897b}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:hover:not(:disabled):not([aria-disabled=true]){color:#00897b}}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#00796b;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:active:not(:disabled):not([aria-disabled=true]){color:#009688}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:after{border-color:#009688cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:after{border-color:#00796bcc}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus{color:#00897b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus-visible{color:#00897b}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus-visible{color:#00897b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus:not(:focus-visible){color:#009688}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:focus:not(:focus-visible){color:#00796b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:link,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM:disabled:after,.appearance-inverse-r1Y2JQg_.intent-success-25a4XZXM[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:link,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:visited{background-color:#fff;border-color:#fff;color:#9598a1}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:visited{color:#5d606b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#787b86}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:hover:not(:disabled):not([aria-disabled=true]){color:#787b86}}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#5d606b;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:active:not(:disabled):not([aria-disabled=true]){color:#9598a1}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:after{border-color:#9598a1cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:after{border-color:#5d606bcc}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus{color:#787b86}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus-visible{color:#787b86}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus-visible{color:#787b86}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus:not(:focus-visible){color:#9598a1}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:focus:not(:focus-visible){color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:link,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs:disabled:after,.appearance-inverse-r1Y2JQg_.intent-default-2ZbSqQDs[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:link,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:visited{background-color:#fff;border-color:#fff;color:#ff9800}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:visited{color:#f57c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#fb8c00}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:hover:not(:disabled):not([aria-disabled=true]){color:#fb8c00}}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#f57c00;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:active:not(:disabled):not([aria-disabled=true]){color:#ff9800}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:after{border-color:#ff9800cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:after{border-color:#f57c00cc}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus{color:#fb8c00}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus-visible{color:#fb8c00}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus-visible{color:#fb8c00}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus:not(:focus-visible){color:#ff9800}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:focus:not(:focus-visible){color:#f57c00}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:link,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0:disabled:after,.appearance-inverse-r1Y2JQg_.intent-warning-24j5HMi0[aria-disabled=true]:after{opacity:0}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla{transform:translateY(0)}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:link,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:visited{background-color:#fff;border-color:#fff;color:#ef5350}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:visited{color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#f44336}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:hover:not(:disabled):not([aria-disabled=true]){color:#f44336}}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){background-color:#fff;border-color:#fff;color:#e53935;transform:translateY(1px)}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:active:not(:disabled):not([aria-disabled=true]){color:#ef5350}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:after{border-color:#ef5350cc}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:after{border-color:#e53935cc}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus{color:#f44336}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus-visible{color:#f44336}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus-visible{color:#f44336}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus:not(:focus-visible){color:#ef5350}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:focus:not(:focus-visible){color:#e53935}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:link,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:visited,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true],.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:link,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:visited,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true],html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:link,html.theme-dark .appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:visited{background-color:#363a45;border-color:#363a45;color:#5d606b}.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla:disabled:after,.appearance-inverse-r1Y2JQg_.intent-danger-1EETHCla[aria-disabled=true]:after{opacity:0}.size-s-3mait84m{border-radius:4px;height:26px;padding:0 11px}.size-s-3mait84m:after{border-radius:8px}.size-s-3mait84m .content-2PGssb8d{font-size:14px;text-transform:none}.size-m-2G7L7Qat{border-radius:4px;height:34px;padding:0 23px}.size-m-2G7L7Qat:after{border-radius:8px}.size-m-2G7L7Qat .content-2PGssb8d{font-size:16px;text-transform:none}.size-l-2NEs9_xt{border-radius:4px;height:48px;padding:0 31px}.size-l-2NEs9_xt:after{border-radius:8px}.size-l-2NEs9_xt .content-2PGssb8d{font-size:16px;text-transform:none}.full-width-1wU8ljjC{width:100%}.with-icon-yumghDr- .content-2PGssb8d{margin-left:3px}.icon-1grlgNdV{align-items:center;display:flex;height:28px;justify-content:center;margin-left:4px;width:28px} \ No newline at end of file diff --git a/static/charting_library/bundles/18.78de69cfba051874e071.js b/static/charting_library/bundles/18.78de69cfba051874e071.js new file mode 100644 index 0000000..1d092d4 --- /dev/null +++ b/static/charting_library/bundles/18.78de69cfba051874e071.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{"02pg":function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n("q1tI"),i=n("TSYQ"),a=n("XiJV");function o(e){return r.createElement("div",{className:i(a.separator,e.className)})}},"1LIl":function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var r=n("q1tI"),i=n.n(r),a=n("TSYQ"),o=n("H9Gg"),s=n("PSOE");function l(e){const{queryString:t,rules:n,text:l,className:c}=e,u=Object(r.useMemo)(()=>Object(o.b)(t,l,n),[t,n,l]);return i.a.createElement(r.Fragment,null,u.length?l.split("").map((e,t)=>i.a.createElement(r.Fragment,{key:t},u[t]?i.a.createElement("span",{className:a(s.highlighted,c)},e):i.a.createElement("span",null,e))):l)}},ASyk:function(e,t,n){e.exports={"tablet-normal-breakpoint":"screen and (max-width: 768px)","small-height-breakpoint":"screen and (max-height: 360px)","tablet-small-breakpoint":"screen and (max-width: 428px)"}},H9Gg:function(e,t,n){"use strict";n.d(t,"c",(function(){return i})),n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return o}));var r=n("ogJP");function i(e){const{data:t,rules:n,queryString:i,isPreventedFromFiltering:a,primaryKey:o,secondaryKey:s=o,optionalPrimaryKey:l}=e;return t.map(e=>{const t=l&&e[l]?e[l]:e[o],a=e[s];let c,u=0;return n.forEach(e=>{var n,o,s,l;const{re:d,fullMatch:h}=e;return d.lastIndex=0,t&&t.toLowerCase()===i.toLowerCase()?(u=3,void(c=null===(n=t.match(h))||void 0===n?void 0:n.index)):Object(r.isString)(t)&&h.test(t)?(u=2,void(c=null===(o=t.match(h))||void 0===o?void 0:o.index)):Object(r.isString)(a)&&h.test(a)?(u=1,void(c=null===(s=a.match(h))||void 0===s?void 0:s.index)):void(Object(r.isString)(a)&&d.test(a)&&(u=1,c=null===(l=a.match(d))||void 0===l?void 0:l.index))}),{matchPriority:u,matchIndex:c,item:e}}).filter(e=>a||e.matchPriority).sort((e,t)=>{if(e.matchPriorityt.matchPriority)return-1;if(e.matchPriority===t.matchPriority){if(void 0===e.matchIndex||void 0===t.matchIndex)return 0;if(e.matchIndex>t.matchIndex)return 1;if(e.matchIndexe)}function a(e,t){const n=[],r=e.toLowerCase(),i=e.split("").map((e,t)=>`(${0!==t?"[/\\s-]"+s(e):s(e)})`).join("(.*?)")+"(.*)";return n.push({fullMatch:new RegExp(`(${s(e)})`,"i"),re:new RegExp("^"+i,"i"),reserveRe:new RegExp(i,"i"),fuzzyHighlight:!0}),t&&t.hasOwnProperty(r)&&n.push({fullMatch:t[r],re:t[r],fuzzyHighlight:!1}),n}function o(e,t,n){const r=[];return e&&n?(n.forEach(e=>{const{fullMatch:n,re:i,reserveRe:a}=e;n.lastIndex=0,i.lastIndex=0;const o=n.exec(t),s=o||i.exec(t)||a&&a.exec(t);if(e.fuzzyHighlight=!o,s)if(e.fuzzyHighlight){let e=s.index;for(let t=1;ti.timeStamp)return;const a=i.target;void 0!==n&&null!==t&&null!==a&&a.ownerDocument===r&&(t.contains(a)||n(i))}return i.click&&r.addEventListener("click",a,!1),i.mouseDown&&r.addEventListener("mousedown",a,!1),i.touchEnd&&r.addEventListener("touchend",a,!1),i.touchStart&&r.addEventListener("touchstart",a,!1),()=>{r.removeEventListener("click",a,!1),r.removeEventListener("mousedown",a,!1),r.removeEventListener("touchend",a,!1),r.removeEventListener("touchstart",a,!1)}}n.d(t,"a",(function(){return r}))},XiJV:function(e,t,n){e.exports={separator:"separator-3No0pWrk"}},g89m:function(e,t,n){"use strict";var r=n("q1tI"),i=n.n(r),a=n("Eyy1"),o=n("TSYQ"),s=n.n(o),l=n("/3z9"),c=n("d700"),u=n("WXjp"),d=n("02pg"),h=n("uhCe"),m=n("/KDZ"),p=n("pafz"),f=n("ZjKI"),g=n("FQhm"),v=n("Iivm");const b=i.a.createContext({setHideClose:()=>{}});var E=n("zztK"),w=n("px1m");function x(e){const{title:t,subtitle:n,showCloseIcon:a=!0,onClose:o,renderBefore:l,renderAfter:c,draggable:u,className:d,unsetAlign:h}=e,[m,p]=Object(r.useState)(!1);return i.a.createElement(b.Provider,{value:{setHideClose:p}},i.a.createElement("div",{className:s()(w.container,d,(n||h)&&w.unsetAlign)},l,i.a.createElement("div",{"data-dragg-area":u,className:w.title},i.a.createElement("div",{className:w.ellipsis},t),n&&i.a.createElement("div",{className:s()(w.ellipsis,w.subtitle)},n)),c,a&&!m&&i.a.createElement(v.a,{className:w.close,icon:E,onClick:o,"data-name":"close","data-role":"button"})))}var C=n("ItnF");n.d(t,"a",(function(){return N}));const y={vertical:20},_={vertical:0};class N extends i.a.PureComponent{constructor(){super(...arguments),this._controller=null,this._reference=null,this._renderChildren=(e,t)=>(this._controller=e,this.props.render({requestResize:this._requestResize,centerAndFit:this._centerAndFit,isSmallWidth:t})),this._handleReference=e=>this._reference=e,this._handleClose=()=>{ +this.props.onClose()},this._handleKeyDown=e=>{var t;if(!e.defaultPrevented)switch(this.props.onKeyDown&&this.props.onKeyDown(e),Object(l.hashFromEvent)(e)){case 27:if(e.defaultPrevented)return;if(this.props.forceCloseOnEsc&&this.props.forceCloseOnEsc())return void this._handleClose();const{activeElement:n}=document,r=Object(a.ensureNotNull)(this._reference);if(null!==n){if(e.preventDefault(),"true"===(t=n).getAttribute("data-haspopup")&&"true"!==t.getAttribute("data-expanded"))return void this._handleClose();if(Object(c.b)(n))return void r.focus();if(r.contains(n))return void this._handleClose()}}},this._requestResize=()=>{null!==this._controller&&this._controller.recalculateBounds()},this._centerAndFit=()=>{null!==this._controller&&this._controller.centerAndFit()}}componentDidMount(){g.subscribe(f.CLOSE_POPUPS_AND_DIALOGS_COMMAND,this._handleClose,null)}componentWillUnmount(){g.unsubscribe(f.CLOSE_POPUPS_AND_DIALOGS_COMMAND,this._handleClose,null)}focus(){Object(a.ensureNotNull)(this._reference).focus()}getElement(){return this._reference}contains(e){var t,n;return null!==(n=null===(t=this._reference)||void 0===t?void 0:t.contains(e))&&void 0!==n&&n}render(){const{className:e,headerClassName:t,isOpened:n,title:r,dataName:a,onClickOutside:o,additionalElementPos:l,additionalHeaderElement:c,backdrop:f,shouldForceFocus:g=!0,showSeparator:v,subtitle:b,draggable:E=!0,fullScreen:w=!1,showCloseIcon:N=!0,rounded:I=!0,isAnimationEnabled:P,growPoint:S,dialogTooltip:O,unsetHeaderAlign:k}=this.props,A="after"!==l?c:void 0,L="after"===l?c:void 0;return i.a.createElement(m.a,{rule:h.a.SmallHeight},l=>i.a.createElement(m.a,{rule:h.a.TabletSmall},c=>i.a.createElement(u.a,{rounded:!(c||w)&&I,className:s()(C.dialog,e),isOpened:n,reference:this._handleReference,onKeyDown:this._handleKeyDown,onClickOutside:o,onClickBackdrop:o,fullscreen:c||w,guard:l?_:y,boundByScreen:c||w,shouldForceFocus:g,backdrop:f,draggable:E,isAnimationEnabled:P,growPoint:S,name:this.props.dataName,dialogTooltip:O},i.a.createElement("div",{className:C.wrapper,"data-name":a,"data-dialog-name":"string"==typeof r?r:""},void 0!==r&&i.a.createElement(x,{draggable:E&&!(c||w),onClose:this._handleClose,renderAfter:L,renderBefore:A,subtitle:b,title:r,showCloseIcon:N,className:t,unsetAlign:k}),v&&i.a.createElement(d.a,{className:C.separator}),i.a.createElement(p.a.Consumer,null,e=>this._renderChildren(e,c||w))))))}}},hYdZ:function(e,t){e.exports=''},ijHL:function(e,t,n){"use strict";function r(e){return a(e,o)}function i(e){return a(e,s)}function a(e,t){const n=Object.entries(e).filter(t),r={};for(const[e,t]of n)r[e]=t;return r}function o(e){const[t,n]=e;return 0===t.indexOf("data-")&&"string"==typeof n}function s(e){return 0===e[0].indexOf("aria-")}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return i})),n.d(t,"c",(function(){return a})),n.d(t,"e",(function(){return o})),n.d(t,"d",(function(){ +return s}))},px1m:function(e,t,n){e.exports={"small-height-breakpoint":"screen and (max-height: 360px)",container:"container-2sL5JydP",unsetAlign:"unsetAlign-2sL5JydP",title:"title-2sL5JydP",subtitle:"subtitle-2sL5JydP",ellipsis:"ellipsis-2sL5JydP",close:"close-2sL5JydP"}},uhCe:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n("ASyk");const i={SmallHeight:r["small-height-breakpoint"],TabletSmall:r["tablet-small-breakpoint"],TabletNormal:r["tablet-normal-breakpoint"]}},zztK:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/19.048f7f5d36fef428ca8d.js b/static/charting_library/bundles/19.048f7f5d36fef428ca8d.js new file mode 100644 index 0000000..eded22f --- /dev/null +++ b/static/charting_library/bundles/19.048f7f5d36fef428ca8d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/19.75c30426f9d3ad5ca0c5.css b/static/charting_library/bundles/19.75c30426f9d3ad5ca0c5.css new file mode 100644 index 0000000..34aefdf --- /dev/null +++ b/static/charting_library/bundles/19.75c30426f9d3ad5ca0c5.css @@ -0,0 +1 @@ +.container-3n5_2-hI{align-items:center;border-bottom:1px solid #e0e3eb;border-color:#e0e3eb currentcolor;border-top:1px solid #e0e3eb;cursor:default;display:flex;flex-shrink:0;position:relative}html.theme-dark .container-3n5_2-hI{border-color:#434651}.inputContainer-3n5_2-hI{height:24px;padding:8px 16px 8px 47px;width:100%}.inputContainer-3n5_2-hI.withCancel-3n5_2-hI{padding-right:70px}.input-3n5_2-hI{background-color:initial;border:none;color:#131722;font-size:16px;height:100%;margin:0;padding:0;width:100%}html.theme-dark .input-3n5_2-hI{color:#a3a6af}.input-3n5_2-hI::placeholder{color:#a3a6af;font-weight:400}html.theme-dark .input-3n5_2-hI::placeholder{color:#434651}.icon-3n5_2-hI{color:#a3a6af;height:18px;left:20px;pointer-events:none;position:absolute;top:calc(50% - 9px)}.cancel-3n5_2-hI{color:#787b86;position:absolute;right:20px}.highlighted-1Qud56dI,html.theme-dark .highlighted-1Qud56dI{color:#2962ff} \ No newline at end of file diff --git a/static/charting_library/bundles/19.75c30426f9d3ad5ca0c5.rtl.css b/static/charting_library/bundles/19.75c30426f9d3ad5ca0c5.rtl.css new file mode 100644 index 0000000..55caee2 --- /dev/null +++ b/static/charting_library/bundles/19.75c30426f9d3ad5ca0c5.rtl.css @@ -0,0 +1 @@ +.container-3n5_2-hI{align-items:center;border-bottom:1px solid #e0e3eb;border-color:#e0e3eb currentcolor;border-top:1px solid #e0e3eb;cursor:default;display:flex;flex-shrink:0;position:relative}html.theme-dark .container-3n5_2-hI{border-color:#434651}.inputContainer-3n5_2-hI{height:24px;padding:8px 47px 8px 16px;width:100%}.inputContainer-3n5_2-hI.withCancel-3n5_2-hI{padding-left:70px}.input-3n5_2-hI{background-color:initial;border:none;color:#131722;font-size:16px;height:100%;margin:0;padding:0;width:100%}html.theme-dark .input-3n5_2-hI{color:#a3a6af}.input-3n5_2-hI::placeholder{color:#a3a6af;font-weight:400}html.theme-dark .input-3n5_2-hI::placeholder{color:#434651}.icon-3n5_2-hI{color:#a3a6af;height:18px;pointer-events:none;position:absolute;right:20px;top:calc(50% - 9px)}.cancel-3n5_2-hI{color:#787b86;left:20px;position:absolute}.highlighted-1Qud56dI,html.theme-dark .highlighted-1Qud56dI{color:#2962ff} \ No newline at end of file diff --git a/static/charting_library/bundles/1df47f578aeef40dd1f2328338a133be.png b/static/charting_library/bundles/1df47f578aeef40dd1f2328338a133be.png new file mode 100644 index 0000000..9423e7c Binary files /dev/null and b/static/charting_library/bundles/1df47f578aeef40dd1f2328338a133be.png differ diff --git a/static/charting_library/bundles/2.60931787a6734697ac13.js b/static/charting_library/bundles/2.60931787a6734697ac13.js new file mode 100644 index 0000000..95d3ff4 --- /dev/null +++ b/static/charting_library/bundles/2.60931787a6734697ac13.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{RgaO:function(t,e,i){"use strict";i.d(e,"a",(function(){return n}));var s=i("8Rai");function n(t){const{children:e,...i}=t;return e(Object(s.a)(i))}},WXjp:function(t,e,i){"use strict";var s=i("q1tI"),n=i("TSYQ"),o=i("Eyy1"),a=i("+EG+"),r=i("jAh7"),h=i("ijHL"),l=i("aYmi");class d extends s.PureComponent{constructor(){super(...arguments),this._manager=new r.a,this._handleSlot=t=>{this._manager.setContainer(t)}}render(){const{rounded:t=!0,shadowed:e=!0,fullscreen:i=!1,darker:o=!1,className:r,backdrop:d}=this.props,c=n(r,l.dialog,t&&l.rounded,e&&l.shadowed,i&&l.fullscreen,o&&l.darker),u=Object(h.b)(this.props),p=this.props.style?{...this._createStyles(),...this.props.style}:this._createStyles();return s.createElement(s.Fragment,null,s.createElement(a.b.Provider,{value:this._manager},d&&s.createElement("div",{onClick:this.props.onClickBackdrop,className:l.backdrop}),s.createElement("div",{...u,className:c,style:p,ref:this.props.reference,onFocus:this.props.onFocus,onMouseDown:this.props.onMouseDown,onMouseUp:this.props.onMouseUp,onClick:this.props.onClick,onKeyDown:this.props.onKeyDown,tabIndex:-1},this.props.children)),s.createElement(a.a,{reference:this._handleSlot}))}_createStyles(){const{bottom:t,left:e,width:i,right:s,top:n,zIndex:o,height:a}=this.props;return{bottom:t,left:e,right:s,top:n,zIndex:o,maxWidth:i,height:a}}}var c=i("uqKQ"),u=i("RgaO"),p=i("Hr11");function g(t,e,i,s){return t+e>s&&(t=s-e),t{if(0!==t.button)return;t.preventDefault(),document.addEventListener("mousemove",this._onMouseDragMove),document.addEventListener("mouseup",this._onMouseDragEnd);const e=_(m(t));this._dragStart(e)},this._onTouchDragStart=t=>{this._canBeTouchClick=!0,t.preventDefault(),this._header.addEventListener("touchmove",this._onTouchDragMove,{passive:!1});const e=_(f(t));this._dragStart(e)},this._onMouseDragEnd=t=>{t.target instanceof Node&&this._header.contains(t.target)&&t.preventDefault(),document.removeEventListener("mousemove",this._onMouseDragMove),document.removeEventListener("mouseup",this._onMouseDragEnd),this._onDragStop()},this._onTouchDragEnd=t=>{this._header.removeEventListener("touchmove",this._onTouchDragMove),this._onDragStop(),this._canBeTouchClick&&(this._canBeTouchClick=!1,function(t){if(t instanceof SVGElement){const e=document.createEvent("SVGEvents");e.initEvent("click",!0,!0),t.dispatchEvent(e)}t instanceof HTMLElement&&t.click()}(t.target))},this._onMouseDragMove=t=>{const e=_(m(t));this._dragMove(e)},this._onTouchDragMove=t=>{this._canBeTouchClick=!1,t.preventDefault();const e=_(f(t));this._dragMove(e)},this._onDragStop=()=>{this._drag=null, +this._header.classList.remove("dragging")},this._dialog=t,this._header=e,this._options=i,this._header.addEventListener("mousedown",this._onMouseDragStart),this._header.addEventListener("touchstart",this._onTouchDragStart),this._header.addEventListener("touchend",this._onTouchDragEnd)}destroy(){null!==this._frame&&cancelAnimationFrame(this._frame),this._header.removeEventListener("mousedown",this._onMouseDragStart),document.removeEventListener("mouseup",this._onMouseDragEnd),this._header.removeEventListener("touchstart",this._onTouchDragStart),this._header.removeEventListener("touchend",this._onTouchDragEnd),document.removeEventListener("mouseleave",this._onMouseDragEnd)}updateOptions(t){this._options=t}_dragStart(t){const e=this._dialog.getBoundingClientRect();this._drag={startX:t.x,startY:t.y,finishX:t.x,finishY:t.y,dialogX:e.left,dialogY:e.top};const i=Math.round(e.left),s=Math.round(e.top);this._dialog.style.transform=`translate(${i}px, ${s}px)`,this._header.classList.add("dragging")}_dragMove(t){if(this._drag){if(this._drag.finishX=t.x,this._drag.finishY=t.y,null!==this._frame)return;this._frame=requestAnimationFrame(()=>{if(this._drag){const e=t.x-this._drag.startX,i=t.y-this._drag.startY;this._moveDialog(this._drag.dialogX+e,this._drag.dialogY+i)}this._frame=null})}}_moveDialog(t,e){const i=this._dialog.getBoundingClientRect(),{boundByScreen:s}=this._options,n=g(t,i.width,s?0:-1/0,s?window.innerWidth:1/0),o=g(e,i.height,s?0:-1/0,s?window.innerHeight:1/0);this._dialog.style.transform=`translate(${Math.round(n)}px, ${Math.round(o)}px)`}}class y{constructor(t,e={vertical:0}){this._frame=null,this._isFullscreen=!1,this._handleResize=()=>{null===this._frame&&(this._frame=requestAnimationFrame(()=>{this.recalculateBounds(),this._frame=null}))},this._dialog=t,this._options=e,this._initialHeight=t.style.height,window.addEventListener("resize",this._handleResize)}updateOptions(t={vertical:0}){this._options=t}setFullscreen(t){this._isFullscreen!==t&&(this._isFullscreen=t,this.recalculateBounds())}centerAndFit(){const{x:t,y:e}=this.getDialogsTopLeftCoordinates(),i=this._calcAvailableHeight(),s=this._calcDialogHeight();i===s&&(this._dialog.style.height=s+"px"),this._dialog.style.top="0px",this._dialog.style.left="0px",this._dialog.style.transform=`translate(${t}px, ${e}px)`}getDialogsTopLeftCoordinates(){const{clientHeight:t,clientWidth:e}=document.documentElement,i=this._calcDialogHeight(),s=e/2-this._dialog.clientWidth/2,n=t/2-i/2;return{x:Math.round(s),y:Math.round(n)}}recalculateBounds(){this._dialog.style.height="auto";const{clientHeight:t,clientWidth:e}=document.documentElement;if(this._isFullscreen)this._dialog.style.top="0px",this._dialog.style.left="0px",this._dialog.style.width=e+"px",this._dialog.style.height=t+"px",this._dialog.style.transform="none";else{const{vertical:i}=this._options;this._dialog.style.width="",this._dialog.style.height="";const s=this._dialog.getBoundingClientRect(),n=t-2*i,o=g(s.left,s.width,0,e),a=g(s.top,s.height,i,t);this._dialog.style.top="0px",this._dialog.style.left="0px", +this._dialog.style.transform=`translate(${Math.round(o)}px, ${Math.round(a)}px)`,this._dialog.style.height=n{const{reference:e}=this.props;this._dialog=t,"function"==typeof e&&e(t)},this._handleFocus=t=>{this._moveToTop()},this._handleMouseDown=t=>{this._moveToTop()},this._handleTouchStart=t=>{this._moveToTop()},this.state={canFitTooltip:!1}}render(){return s.createElement(x.a.Provider,{value:this},s.createElement(u.a,{mouseDown:!0,touchStart:!0,handler:this.props.onClickOutside},t=>s.createElement("div",{ref:t,"data-outside-boundary-for":this.props.name,onFocus:this._handleFocus,onMouseDown:this._handleMouseDown,onTouchStart:this._handleTouchStart,"data-dialog-name":this.props["data-dialog-name"]},s.createElement(d,{style:this._applyAnimationCSSVariables(),...this.props,reference:this._handleDialogRef,className:n(w.dialog,this.props.className)},!1,this.props.children))))}componentDidMount(){const t=Object(o.ensureNotNull)(this._dialog);if(this.props.draggable){const e=t.querySelector("[data-dragg-area]");e&&e instanceof HTMLElement&&(this._drag=new v(t,e,{boundByScreen:Boolean(this.props.boundByScreen)}))}this.props.autofocus&&!t.contains(document.activeElement)&&t.focus(),(this._isFullScreen()||this.props.fixedBody)&&Object(M.a)(!0),this._resize=new y(t,this.props.guard),this.props.isAnimationEnabled&&this.props.growPoint&&this._applyAppearanceAnimation(this.props.growPoint),this.props.centeredOnMount&&this._resize.centerAndFit(),this._resize.setFullscreen(this._isFullScreen()),this.props.shouldForceFocus&&t.focus()}componentDidUpdate(){this._resize&&(this._resize.updateOptions(this.props.guard),this._resize.setFullscreen(this._isFullScreen())),this._drag&&this._drag.updateOptions({boundByScreen:Boolean(this.props.boundByScreen)})}componentWillUnmount(){this._drag&&this._drag.destroy(),this._resize&&this._resize.destroy(),(this._isFullScreen()||this.props.fixedBody)&&Object(M.a)(!1)}focus(){this._dialog&&this._dialog.focus()}centerAndFit(){this._resize&&this._resize.centerAndFit()}recalculateBounds(){this._resize&&this._resize.recalculateBounds()}_moveToTop(){null!==this.context&&this.context.moveToTop()}_applyAnimationCSSVariables(){return{"--animationTranslateStartX":null,"--animationTranslateStartY":null,"--animationTranslateEndX":null,"--animationTranslateEndY":null}}_applyAppearanceAnimation(t){if(this._resize&&this._dialog){const{x:e,y:i}=t,{x:s,y:n}=this._resize.getDialogsTopLeftCoordinates() +;this._dialog.style.setProperty("--animationTranslateStartX",e+"px"),this._dialog.style.setProperty("--animationTranslateStartY",i+"px"),this._dialog.style.setProperty("--animationTranslateEndX",s+"px"),this._dialog.style.setProperty("--animationTranslateEndY",n+"px"),this._dialog.classList.add(w.dialogAnimatedAppearance)}}_handleTooltipFit(){0}_isFullScreen(){return Boolean(this.props.fullscreen)}}D.contextType=E.b,D.defaultProps={boundByScreen:!0,draggable:!0,centeredOnMount:!0};const S=Object(c.a)(D)},ZzSk:function(t,e,i){t.exports={"tablet-normal-breakpoint":"screen and (max-width: 768px)","tooltip-offset":"20px",dialog:"dialog-2AogBbC7",dragging:"dragging-2AogBbC7",dialogAnimatedAppearance:"dialogAnimatedAppearance-2AogBbC7",dialogAnimation:"dialogAnimation-2AogBbC7",dialogTooltip:"dialogTooltip-2AogBbC7"}},aYmi:function(t,e,i){t.exports={dialog:"dialog-UM6w7sFp",rounded:"rounded-UM6w7sFp",shadowed:"shadowed-UM6w7sFp",fullscreen:"fullscreen-UM6w7sFp",darker:"darker-UM6w7sFp",backdrop:"backdrop-UM6w7sFp"}},pafz:function(t,e,i){"use strict";i.d(e,"a",(function(){return n}));var s=i("q1tI");const n=s.createContext(null)},uqKQ:function(t,e,i){"use strict";i.d(e,"a",(function(){return o}));var s=i("q1tI"),n=i("AiMB");function o(t){return class extends s.PureComponent{render(){const{isOpened:e,root:i}=this.props;if(!e)return null;const o=s.createElement(t,{...this.props,zIndex:150});return"parent"===i?o:s.createElement(n.a,null,o)}}}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/20.bc09ed47c5a62e1bc5c2.js b/static/charting_library/bundles/20.bc09ed47c5a62e1bc5c2.js new file mode 100644 index 0000000..c8a985e --- /dev/null +++ b/static/charting_library/bundles/20.bc09ed47c5a62e1bc5c2.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{iR1w:function(t,e,r){"use strict";var n=r("wx14");function o(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}var i=r("JX7q"),a=Number.isNaN||function(t){return"number"==typeof t&&t!=t};function l(t,e){if(t.length!==e.length)return!1;for(var r=0;r=e?t.call(null):n.id=requestAnimationFrame(o)}))};return n}var h=null;function p(t){if(void 0===t&&(t=!1),null===h||t){var e=document.createElement("div"),r=e.style;r.width="50px",r.height="50px",r.overflow="scroll",r.direction="rtl";var n=document.createElement("div"),o=n.style;return o.width="100px",o.height="100px",e.appendChild(n),document.body.appendChild(e),e.scrollLeft>0?h="positive-descending":(e.scrollLeft=1,h=0===e.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(e),h}return h}var m=function(t,e){return t};function v(t){var e,r,a=t.getItemOffset,l=t.getEstimatedTotalSize,u=t.getItemSize,h=t.getOffsetForIndexAndAlignment,v=t.getStartIndexForOffset,S=t.getStopIndexForStartIndex,I=t.initInstanceProps,_=t.shouldResetStyleCacheOnItemSizeChange,M=t.validateProps;return r=e=function(t){function e(e){var r;return(r=t.call(this,e)||this)._instanceProps=I(r.props,Object(i.a)(Object(i.a)(r))),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:Object(i.a)(Object(i.a)(r)),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=s((function(t,e,n,o){return r.props.onItemsRendered({overscanStartIndex:t,overscanStopIndex:e,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=s((function(t,e,n){return r.props.onScroll({scrollDirection:t,scrollOffset:e,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(t){var e,n=r.props,o=n.direction,i=n.itemSize,l=n.layout,s=r._getItemStyleCache(_&&i,_&&l,_&&o);if(s.hasOwnProperty(t))e=s[t];else{var c=a(r.props,t,r._instanceProps),f=u(r.props,t,r._instanceProps),d="horizontal"===o||"horizontal"===l,h="rtl"===o,p=d?c:0;s[t]=e={position:"absolute",left:h?void 0:p,right:h?p:void 0,top:d?0:c,height:d?"100%":f,width:d?f:"100%"}}return e},r._getItemStyleCache=void 0,r._getItemStyleCache=s((function(t,e,r){return{}})),r._onScrollHorizontal=function(t){ +var e=t.currentTarget,n=e.clientWidth,o=e.scrollLeft,i=e.scrollWidth;r.setState((function(t){if(t.scrollOffset===o)return null;var e=r.props.direction,a=o;if("rtl"===e)switch(p()){case"negative":a=-o;break;case"positive-descending":a=i-n-o}return a=Math.max(0,Math.min(a,i-n)),{isScrolling:!0,scrollDirection:t.scrollOffset0)for(var R=w;R<=b;R++)C.push(Object(c.createElement)(e,{data:d,key:p(R,d),index:R,isScrolling:_?y:void 0,style:this._getItemStyle(R)}));var T=l(this.props,this._instanceProps);return Object(c.createElement)(g||S||"div",{className:r,onScroll:O,ref:this._outerRefSetter,style:Object(n.a)({position:"relative",height:i,width:M,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},I)},Object(c.createElement)(s||u||"div",{children:C,ref:a,style:{height:z?"100%":T,pointerEvents:y?"none":void 0,width:z?T:"100%"}}))},r._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var t=this._getRangeToRender(),e=t[0],r=t[1],n=t[2],o=t[3];this._callOnItemsRendered(e,r,n,o)}if("function"==typeof this.props.onScroll){var i=this.state,a=i.scrollDirection,l=i.scrollOffset,s=i.scrollUpdateWasRequested;this._callOnScroll(a,l,s)}},r._getRangeToRender=function(){var t=this.props,e=t.itemCount,r=t.overscanCount,n=this.state,o=n.isScrolling,i=n.scrollDirection,a=n.scrollOffset;if(0===e)return[0,0,0,0];var l=v(this.props,a,this._instanceProps),s=S(this.props,l,a,this._instanceProps),c=o&&"backward"!==i?1:Math.max(1,r),u=o&&"forward"!==i?1:Math.max(1,r);return[Math.max(0,l-c),Math.max(0,Math.min(e-1,s+u)),l,s]},e}(c.PureComponent),e.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},r}var g=function(t,e){t.children,t.direction,t.height,t.layout,t.innerTagName,t.outerTagName,t.width,e.instance},S=function(t,e,r){var n=t.itemSize,o=r.itemMetadataMap,i=r.lastMeasuredIndex;if(e>i){var a=0;if(i>=0){var l=o[i];a=l.offset+l.size}for(var s=i+1;s<=e;s++){var c=n(s);o[s]={offset:a,size:c},a+=c}r.lastMeasuredIndex=e}return o[e]},I=function(t,e,r,n,o){for(;n<=r;){var i=n+Math.floor((r-n)/2),a=S(t,i,e).offset;if(a===o)return i;ao&&(r=i-1)}return n>0?n-1:0},_=function(t,e,r,n){for(var o=t.itemCount,i=1;r=r&&(i=r-1),i>=0){var l=n[i];a=l.offset+l.size}return a+(r-i-1)*o},y=v({getItemOffset:function(t,e,r){return S(t,e,r).offset},getItemSize:function(t,e,r){return r.itemMetadataMap[e].size},getEstimatedTotalSize:M,getOffsetForIndexAndAlignment:function(t,e,r,n,o){var i=t.direction,a=t.height,l=t.layout,s=t.width,c="horizontal"===i||"horizontal"===l?s:a,u=S(t,e,o),f=M(t,o),d=Math.max(0,Math.min(f-c,u.offset)),h=Math.max(0,u.offset-c+u.size);switch("smart"===r&&(r=n>=h-c&&n<=d+c?"auto":"center"),r){case"start":return d;case"end":return h;case"center":return Math.round(h+(d-h)/2);case"auto":default:return n>=h&&n<=d?n:n0?n[o].offset:0)>=r?I(t,e,o,0,r):_(t,e,Math.max(0,o),r)}(t,r,e)},getStopIndexForStartIndex:function(t,e,r,n){ +for(var o=t.direction,i=t.height,a=t.itemCount,l=t.layout,s=t.width,c="horizontal"===o||"horizontal"===l?s:i,u=S(t,e,n),f=r+c,d=u.offset+u.size,h=e;h=h-u&&n<=d+u?"auto":"center"),r){case"start":return d;case"end":return h;case"center":var p=Math.round(h+(d-h)/2);return pf+Math.floor(u/2)?f:p;case"auto":default:return n>=h&&n<=d?n:n' + }, + "1pWb": function(e, t, n) { + "use strict"; + + function r(e) { + return !1 + } + n.d(t, "b", (function() { + return r + })), n.d(t, "a", (function() { + return "###" + })) + }, + "2gjO": function(e, t, n) { + e.exports = { + wrap: "wrap-1LtT-c03", + item: "item-1LtT-c03", + small: "small-1LtT-c03", + text: "text-1LtT-c03", + exchange: "exchange-1LtT-c03" + } + }, + "6rj1": function(e, t) { + e.exports = + '' + }, + "8q1k": function(e, t) { + e.exports = + '' + }, + "952j": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return c + })), n.d(t, "b", (function() { + return l + })); + var r = n("Kxc7"), + a = n("1pWb"); + const o = r.enabled("charting_library_base") ? + /(?:[^-+\/*^\s]'|[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF^])(?:[^-+\/*^\s]'|[a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!:.&])*|'.+?'/ : + /(?:[^-+\/*^\s]'|[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF])(?:[^-+\/*^\s]'|[a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!|:.&])*|'.+?'/, + c = /[+\-/*]/, + s = { + number: /\d+(?:\.\d*|(?![a-zA-Z0-9_!:.&]))|\.\d+/, + incompleteNumber: /\./, + symbol: o, + incompleteSymbol: /'[^']*/, + separatorPrefix: a.a, + openBrace: "(", + closeBrace: ")", + plus: "+", + minus: "-", + multiply: "*", + divide: "/", + power: "^", + whitespace: /[\0-\x20\s]+/, + unparsed: null + }, + i = new RegExp(Object.values(s).map(e => { + return null === e ? "" : + `(${"string"==typeof e?(t=e,t.replace(/[\^$()[\]{}*+?|\\]/g,"\\$&")):e.source})`; + var t + }).filter(e => "" !== e).concat(".").join("|"), "g"); + + function l(e) { + if (!e) return []; + const t = [], + n = Object.keys(s); + let r; + for (; r = i.exec(e);) { + let e = !1; + for (let a = n.length; a--;) + if (r[a + 1]) { + n[a] && t.push({ + value: r[a + 1], + type: n[a], + precedence: 0, + offset: r.index + }), e = !0; + break + } e || t.push({ + value: r[0], + type: "unparsed", + precedence: 0, + offset: r.index + }) + } + return t + } + }, + CJov: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var r = n("q1tI"); + const a = n.n(r).a.createContext(null) + }, + EBrf: function(e, t, n) { + "use strict"; + n.r(t), n.d(t, "splitThousands", (function() { + return a + })); + var r = n("ivNn"); + + function a(e, t = " ") { + let n = e + ""; - 1 !== n.indexOf("e") && (n = function(e) { + return Object(r.fixComputationError)(e).toFixed(10).replace(/\.?0+$/, "") + }(Number(e))); + const a = n.split("."); + return a[0].replace(/\B(?=(\d{3})+(?!\d))/g, t) + (a[1] ? "." + a[1] : "") + } + }, + FadI: function(e, t, n) { + "use strict"; + + function r(e) { + if (!c(e)) throw e + } + + function a(e) { + return (null == e ? void 0 : e.aborted) ? Promise.reject(o()) : new Promise((t, n) => { + null == e || e.addEventListener("abort", () => n(o()), { + once: !0 + }) + }) + } + + function o() { + return new DOMException("Aborted", "AbortError") + } + + function c(e) { + return e instanceof Error && "AbortError" === e.name + } + + function s(e, t) { + return Promise.race([a(e), t]) + } + async function i(e, t) { + let n; + try { + await s(e, new Promise(e => { + n = setTimeout(e, t) + })) + } finally { + clearTimeout(n) + } + } + n.d(t, "c", (function() { + return r + })), n.d(t, "b", (function() { + return s + })), n.d(t, "a", (function() { + return i + })) + }, + G4pG: function(e, t, n) { + e.exports = { + flagWrap: "flagWrap-1Xy6iEIs", + icon: "icon-1Xy6iEIs", + caret: "caret-1Xy6iEIs", + title: "title-1Xy6iEIs" + } + }, + GWR5: function(e, t, n) { + e.exports = { + wrap: "wrap-2TpXRNRX", + libAllExchange: "libAllExchange-2TpXRNRX", + container: "container-2TpXRNRX", + iconWrap: "iconWrap-2TpXRNRX", + icon: "icon-2TpXRNRX", + title: "title-2TpXRNRX", + highlighted: "highlighted-2TpXRNRX", + description: "description-2TpXRNRX", + mobile: "mobile-2TpXRNRX", + allExchange: "allExchange-2TpXRNRX", + desktop: "desktop-2TpXRNRX", + allExchangesIcon: "allExchangesIcon-2TpXRNRX", + selected: "selected-2TpXRNRX", + titleWithoutDesc: "titleWithoutDesc-2TpXRNRX", + textBlock: "textBlock-2TpXRNRX", + bordered: "bordered-2TpXRNRX" + } + }, + Gtzb: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return r + })), n.d(t, "b", (function() { + return a + })); + class r { + constructor() { + this._storage = new Map + } + setAsOpened(e, t) { + this._storage.set(e, t) + } + setAsClosed(e) { + this._storage.delete(e) + } + isOpened(e) { + return this._storage.has(e) + } + getDialogPayload(e) { + return this._storage.get(e) + } + } + const a = new r + }, + Iruf: function(e, t, n) { + e.exports = { + container: "container-oVVv2l_M", + contentList: "contentList-oVVv2l_M", + contentListDesktop: "contentListDesktop-oVVv2l_M", + exchangeItemsContainer: "exchangeItemsContainer-oVVv2l_M", + exchangeItemsContainerDesktop: "exchangeItemsContainerDesktop-oVVv2l_M", + groupTitleDesktop: "groupTitleDesktop-oVVv2l_M", + emptyText: "emptyText-oVVv2l_M", + noResultsDesktop: "noResultsDesktop-oVVv2l_M" + } + }, + "ML8+": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return i + })); + var r = n("q1tI"), + a = n("TSYQ"), + o = n("Iivm"), + c = n("cvzQ"), + s = n("R4+T"); + + function i(e) { + const { + dropped: t, + className: n + } = e; + return r.createElement(o.a, { + className: a(n, c.icon, { + [c.dropped]: t + }), + icon: s + }) + } + }, + OWoh: function(e, t) { + e.exports = + '' + }, + OoQL: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return o + })); + var r = n("q1tI"), + a = n("Eyy1"); + + function o(e) { + return Object(a.ensureNotNull)(Object(r.useContext)(e)) + } + }, + Pdm7: function(e, t, n) { + e.exports = { + actions: "actions-3cho5KDh", + actionButton: "actionButton-3cho5KDh" + } + }, + "R4+T": function(e, t) { + e.exports = + '' + }, + SAe1: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return c + })); + var r = n("q1tI"), + a = n("rzV7"), + o = n.n(a); + class c extends r.Component { + constructor(e) { + super(e), this._handleMediaChange = () => { + const e = i(this.state.queries, (e, t) => t.matches); + let t = !1; + for (const n in e) + if (e.hasOwnProperty(n) && this.state.matches[n] !== e[n]) { + t = !0; + break + } t && this.setState({ + matches: e + }) + }; + const { + rules: t + } = this.props; + this.state = s(t) + } + shouldComponentUpdate(e, t) { + return !o()(e, this.props) || (!o()(t.rules, this.state.rules) || !o()(t + .matches, this.state.matches)) + } + componentDidMount() { + this._migrate(null, this.state.queries) + } + componentDidUpdate(e, t) { + o()(e.rules, this.props.rules) || this._migrate(t.queries, this.state.queries) + } + componentWillUnmount() { + this._migrate(this.state.queries, null) + } + render() { + return this.props.children(this.state.matches) + } + static getDerivedStateFromProps(e, t) { + if (o()(e.rules, t.rules)) return null; + const { + rules: n + } = e; + return s(n) + } + _migrate(e, t) { + null !== e && i(e, (e, t) => { + t.removeListener(this._handleMediaChange) + }), null !== t && i(t, (e, t) => { + t.addListener(this._handleMediaChange) + }) + } + } + + function s(e) { + const t = i(e, (e, t) => window.matchMedia(t)); + return { + queries: t, + matches: i(t, (e, t) => t.matches), + rules: { + ...e + } + } + } + + function i(e, t) { + const n = {}; + for (const r in e) e.hasOwnProperty(r) && (n[r] = t(r, e[r])); + return n + } + }, + TgrR: function(e, t, n) { + "use strict"; + + function r(e) { + if (e.fullName) return e.fullName; + let t; + return t = e.prefix || e.exchange ? (e.prefix || e.exchange) + ":" + e.name : e.name, t + .replace(/<\/?[^>]+(>|$)/g, "") + } + + function a(e) { + return "" === e.value + } + + function o() { + const e = s(); + return e.find(a) || e[0] || null + } + + function c() { + return s() + } + + function s() { + return window.ChartApiInstance.supportedExchangesList().map(e => ({ + ...e, + country: "", + providerId: "", + flag: "" + })) + } + + function i() { + return window.ChartApiInstance.supportedSymbolsTypes() + } + + function l() { + return "" + } + + function u() { + return !1 + } + n.d(t, "f", (function() { + return r + })), n.d(t, "g", (function() { + return a + })), n.d(t, "e", (function() { + return o + })), n.d(t, "c", (function() { + return c + })), n.d(t, "d", (function() { + return i + })), n.d(t, "b", (function() { + return l + })), n.d(t, "a", (function() { + return u + })) + }, + U0JK: function(e, t) { + e.exports = + '' + }, + UEVQ: function(e, t, n) { + e.exports = { + bubbles: "bubbles-1cEBkyVM", + multiLine: "multiLine-1cEBkyVM", + bubble: "bubble-1cEBkyVM" + } + }, + UN6M: function(e, t, n) { + e.exports = { + childrenWrapper: "childrenWrapper-th__KurO", + container: "container-th__KurO" + } + }, + VogD: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var r = n("q1tI"); + const a = n.n(r).a.createContext(null) + }, + XDHQ: function(e, t) { + e.exports = + '' + }, + Y8Rb: function(e, t) { + e.exports = + '' + }, + ZrzP: function(e, t) { + e.exports = + '' + }, + anmh: function(e, t) { + e.exports = + '' + }, + bQ7Y: function(e, t, n) { + e.exports = { + button: "button-2Vpz_LXc", + hover: "hover-2Vpz_LXc", + isInteractive: "isInteractive-2Vpz_LXc", + isGrouped: "isGrouped-2Vpz_LXc", + isActive: "isActive-2Vpz_LXc", + isOpened: "isOpened-2Vpz_LXc", + isDisabled: "isDisabled-2Vpz_LXc", + text: "text-2Vpz_LXc", + icon: "icon-2Vpz_LXc" + } + }, + cvzQ: function(e, t, n) { + e.exports = { + icon: "icon-19OjtB6A", + dropped: "dropped-19OjtB6A" + } + }, + eIOu: function(e, t, n) { + e.exports = { + "tablet-small-breakpoint": "screen and (max-width: 428px)", + itemRow: "itemRow-ZzQNZGNo", + multiLine: "multiLine-ZzQNZGNo", + cell: "cell-ZzQNZGNo", + itemInfoCell: "itemInfoCell-ZzQNZGNo", + description: "description-ZzQNZGNo", + symbolDescription: "symbolDescription-ZzQNZGNo", + flag: "flag-ZzQNZGNo", + exchangeDescription: "exchangeDescription-ZzQNZGNo", + marketType: "marketType-ZzQNZGNo", + exchangeName: "exchangeName-ZzQNZGNo", + expandHandleWrap: "expandHandleWrap-ZzQNZGNo", + expandHandle: "expandHandle-ZzQNZGNo", + hover: "hover-ZzQNZGNo", + selected: "selected-ZzQNZGNo", + active: "active-ZzQNZGNo", + highlighted: "highlighted-ZzQNZGNo", + light: "light-ZzQNZGNo", + "highlight-animation-theme-light": "highlight-animation-theme-light-ZzQNZGNo", + dark: "dark-ZzQNZGNo", + "highlight-animation-theme-dark": "highlight-animation-theme-dark-ZzQNZGNo", + offset: "offset-ZzQNZGNo", + exchangeCell: "exchangeCell-ZzQNZGNo", + expanded: "expanded-ZzQNZGNo", + symbolTitle: "symbolTitle-ZzQNZGNo", + invalid: "invalid-ZzQNZGNo", + noDescription: "noDescription-ZzQNZGNo", + highlightedText: "highlightedText-ZzQNZGNo", + icon: "icon-ZzQNZGNo", + dataMode: "dataMode-ZzQNZGNo", + actionsCell: "actionsCell-ZzQNZGNo", + action: "action-ZzQNZGNo", + targetAction: "targetAction-ZzQNZGNo", + removeAction: "removeAction-ZzQNZGNo", + addAction: "addAction-ZzQNZGNo" + } + }, + gla1: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var r = n("q1tI"); + const a = () => { + const [, e] = Object(r.useReducer)((e, t) => e + 1, 0); + return e + } + }, + "h9B/": function(e, t, n) { + e.exports = { + wrap: "wrap-2WiKHt6t", + watchlist: "watchlist-2WiKHt6t", + noFeed: "noFeed-2WiKHt6t", + scrollContainer: "scrollContainer-2WiKHt6t", + listContainer: "listContainer-2WiKHt6t", + multiLineItemsContainer: "multiLineItemsContainer-2WiKHt6t" + } + }, + hYF9: function(e, t, n) { + e.exports = { + button: "button-P2GOgq9R", + desktop: "desktop-P2GOgq9R" + } + }, + jPOK: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return c + })); + var r = n("q1tI"), + a = n("TSYQ"), + o = n("Owlf"); + n("SzKR"); + + function c(e) { + const t = a("tv-spinner", "tv-spinner--shown", "tv-spinner--size_" + (e.size || o.a)); + return r.createElement("div", { + className: t, + style: e.style, + role: "progressbar" + }, r.createElement("div", { + className: "tv-spinner__spinner-layer" + }, r.createElement("div", { + className: "tv-spinner__background tv-spinner__width_element" + }), r.createElement("div", { + className: "tv-spinner__circle-clipper tv-spinner__width_element tv-spinner__circle-clipper--left" + }), r.createElement("div", { + className: "tv-spinner__circle-clipper tv-spinner__width_element tv-spinner__circle-clipper--right" + }))) + } + }, + ki38: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var r = n("q1tI"); + const a = n.n(r).a.createContext(null) + }, + mHCH: function(e, t, n) { + e.exports = { + bubble: "bubble-3MTPKAgt", + animated: "animated-3MTPKAgt", + content: "content-3MTPKAgt", + "appearance-default": "appearance-default-3MTPKAgt", + active: "active-3MTPKAgt", + red: "red-3MTPKAgt", + blue: "blue-3MTPKAgt", + green: "green-3MTPKAgt", + orange: "orange-3MTPKAgt", + purple: "purple-3MTPKAgt", + cyan: "cyan-3MTPKAgt", + pink: "pink-3MTPKAgt", + "appearance-text": "appearance-text-3MTPKAgt", + "size-m": "size-m-3MTPKAgt", + "size-l": "size-l-3MTPKAgt" + } + }, + mdyz: function(e, t, n) { + e.exports = { + search: "search-Hsmn_0WX", + upperCase: "upperCase-Hsmn_0WX", + symbolType: "symbolType-Hsmn_0WX", + spinnerWrap: "spinnerWrap-Hsmn_0WX", + emptyText: "emptyText-Hsmn_0WX", + noResultsDesktop: "noResultsDesktop-Hsmn_0WX", + brokerCheckboxWrap: "brokerCheckboxWrap-Hsmn_0WX" + } + }, + ozXl: function(e, t, n) { + e.exports = { + dialog: "dialog-1LLxyYSM", + tabletDialog: "tabletDialog-1LLxyYSM", + desktopDialog: "desktopDialog-1LLxyYSM" + } + }, + p04v: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return u + })); + var r = n("q1tI"), + a = n.n(r), + o = n("i8i4"), + c = n("+EG+"), + s = n("CJov"), + i = n("Gtzb"), + l = n("uTDg"); + + function u(e) { + const { + initialMode: t = "symbolSearch", + autofocus: n = !0, + defaultValue: r, + showSpreadActions: u, + selectSearchOnInit: d, + onSearchComplete: p, + onSearchFeedReady: m, + dialogTitle: f, + placeholder: h, + fullscreen: b, + initialScreen: v, + wrapper: g, + dialog: y, + contentItem: E, + onClose: x, + footer: O, + symbolTypes: k, + searchInput: N, + emptyState: w, + dialogWidth: S = "auto", + manager: C + } = e; + if (i.b.isOpened("SymbolSearch") || i.b.isOpened("ChangeIntervalDialog")) return; + const T = document.createElement("div"), + j = a.a.createElement(c.b.Provider, { + value: null != C ? C : null + }, a.a.createElement(s.a.Provider, { + value: null + }, a.a.createElement(l.a, { + onClose: I, + initialMode: t, + defaultValue: r, + showSpreadActions: u, + onSearchFeedReady: m, + selectSearchOnInit: d, + onSearchComplete: p, + dialogTitle: f, + placeholder: h, + fullscreen: b, + initialScreen: v, + wrapper: g, + dialog: y, + contentItem: E, + footer: O, + symbolTypes: k, + searchInput: N, + emptyState: w, + autofocus: n, + dialogWidth: S + }))); + + function I() { + o.unmountComponentAtNode(T), i.b.setAsClosed("SymbolSearch"), x && x() + } + return o.render(j, T), i.b.setAsOpened("SymbolSearch"), { + close: I + } + } + }, + poJS: function(e, t) { + e.exports = + '' + }, + qC62: function(e, t, n) { + "use strict"; + n.d(t, "b", (function() { + return c + })), n.d(t, "a", (function() { + return r + })); + var r, a = n("Eyy1"), + o = n("Kxc7"); + n("TgrR"); + + function c(e) { + return e + }! function(e) { + function t(e) { + return e.pro_name + } + + function n(e) { + { + const t = o.enabled("pay_attention_to_ticker_not_symbol") ? e.ticker : e.full_name; + return Object(a.ensureDefined)(t) + } + } + e.fromQuotesResponse = function(e) { + const { + values: n, + symbolname: r, + status: a + } = e; + return "error" === a && r ? r : t(n) + }, e.fromQuotes = t, e.fromSymbolSearchResult = function(e, t) { + { + const { + ticker: n, + full_name: r + } = null != t ? t : e; + return o.enabled("pay_attention_to_ticker_not_symbol") ? Object(a.ensureDefined) + (null != n ? n : r) : Object(a.ensureDefined)(r) + } + }, e.fromSymbolInfo = n, e.fromSymbolMessage = function(e, t) { + return "symbol_resolved" === t.method ? n(t.params[1]) : e + } + }(r || (r = {})) + }, + "rC+j": function(e, t, n) { + "use strict"; + n.d(t, "h", (function() { + return c + })), n.d(t, "a", (function() { + return s + })), n.d(t, "g", (function() { + return i + })), n.d(t, "e", (function() { + return u + })), n.d(t, "f", (function() { + return p + })), n.d(t, "c", (function() { + return m + })), n.d(t, "d", (function() { + return h + })), n.d(t, "b", (function() { + return b + })); + var r = n("Kxc7"), + a = n("952j"), + o = n("TgrR"); + + function c(e) { + const t = { + braceBalance: 0, + currentState: "var", + warnings: [], + errors: [] + }; + if (r.enabled("charting_library_base") && !r.enabled("show_spread_operators")) return t; + let n = "init"; + const a = []; + for (let r = 0; r < e.length; r++) { + const o = e[r]; + if ("whitespace" !== o.type) { + if ("incompleteSymbol" === o.type || "incompleteNumber" === o.type) { + const n = r !== e.length - 1, + a = { + status: n ? "error" : "incomplete", + reason: "incomplete_token", + offset: o.offset, + token: o + }; + if (n ? t.errors.push(a) : t.warnings.push(a), n) continue + } + switch (o.type) { + case "symbol": + case "number": + if ("var" === n) { + t.errors.push({ + status: "error", + reason: "unexpected_token", + offset: o.offset, + token: o + }); + continue + } + n = "var"; + break; + case "plus": + case "minus": + case "multiply": + case "divide": + case "power": + if ("var" !== n) { + t.errors.push({ + status: "error", + reason: "unexpected_token", + offset: o.offset, + token: o + }); + continue + } + n = "operator"; + break; + case "openBrace": + if ("var" === n) { + t.errors.push({ + status: "error", + reason: "unexpected_token", + offset: o.offset, + token: o + }); + continue + } + a.push(o), n = "init"; + break; + case "closeBrace": + if ("var" !== n) { + t.errors.push({ + status: "error", + reason: "unexpected_token", + offset: o.offset, + token: o + }); + continue + } + a.pop() || t.errors.push({ + status: "error", + reason: "unbalanced_brace", + offset: o.offset, + token: o + }), n = "var"; + break; + case "unparsed": + t.errors.push({ + status: "error", + reason: "unparsed_entity", + offset: o.offset, + token: o + }) + } + } + } + for (t.braceBalance = a.length, "var" !== n && t.warnings.push({ + status: "incomplete", + token: e[e.length - 1] + }); a.length;) { + const e = a.pop(); + e && t.warnings.push({ + status: "incomplete", + reason: "unbalanced_brace", + offset: e.offset, + token: e + }) + } + return t.currentState = n, t + } + + function s(e) { + const t = function(e) { + let t, n = 0, + r = 0; + for (let a = 0; a < e.length; a++) { + const o = e[a]; + if ("whitespace" !== o.type) switch (n) { + case 0: + if ("number" !== o.type || 1 != +o.value) return []; + n = 1; + break; + case 1: + if (1 !== n || "divide" !== o.type) return []; + n = 2, t = a + 1; + break; + case 2: + if ("openBrace" === o.type) n = 3, r = 1; + else if (l(o.type)) return []; + break; + case 3: + "openBrace" === o.type ? r++ : "closeBrace" === o.type && (r--, r <= + 0 && (n = 2)) + } + } + return e.slice(t) + }(e); + return t.length ? d(t) : d(Object(a.b)("1/(" + i(e) + ")")) + } + + function i(e) { + return e.reduce((e, t) => "symbol" === t.type && a.a.test(t.value) ? e + `'${t.value}'` : + e + t.value, "") + } + + function l(e) { + return "plus" === e || "minus" === e || "multiply" === e || "divide" === e || "power" === e + } + + function u(e) { + return e.length > 1 && e.some(e => l(e.type)) + } + + function d(e) { + e = function(e) { + const t = []; + for (const n of e) "whitespace" !== n.type && t.push(n); + return t + }(e); + const t = [], + n = []; + let r; + for (let a = 0; a < e.length; a++) { + const o = e[a]; + switch (o.type) { + case "plus": + case "minus": + case "multiply": + case "divide": + case "power": + n.length && n[n.length - 1].minPrecedence > o.precedence && (n[n.length - 1] + .minPrecedence = o.precedence); + break; + case "openBrace": + r = { + minPrecedence: 1 / 0, + openBraceIndex: a + }, n.push(r); + break; + case "closeBrace": { + if (r = n.pop(), !r) break; + const o = e[r.openBraceIndex - 1], + c = e[a + 1], + s = o && ("plus" === o.type || "multiply" === o.type); + (!l(null == c ? void 0 : c.type) || (null == c ? void 0 : c.precedence) <= r + .minPrecedence) && (!l(null == o ? void 0 : o.type) || (null == o ? void 0 : + o.precedence) < (null == r ? void 0 : r.minPrecedence) || (null == o ? + void 0 : o.precedence) === (null == r ? void 0 : r.minPrecedence) && s) && ( + t.unshift(r.openBraceIndex), t.push(a), n.length && n[n.length - 1] + .minPrecedence > r.minPrecedence && (n[n.length - 1].minPrecedence = r + .minPrecedence)) + } + } + } + for (let n = t.length; n--;) e.splice(t[n], 1); + return e + } + + function p(e) { + return d(Object(a.b)(e)).reduce((e, t) => { + if ("symbol" !== t.type) return e + t.value; + const [, n] = f(t); + return n ? e + n : e + }, "") + } + + function m(e) { + const t = function(e) { + const t = Object(a.b)(e), + n = []; + return t.forEach(e => { + if ("symbol" !== e.type) return; + const [t] = f(e); + t && n.push(t) + }), n + }(e); + if (1 === t.length) return t[0] + } + + function f(e) { + const t = /^'?(?:([A-Z0-9_]+):)?(.*?)'?$/i.exec(e.value); + return null === t ? [void 0, void 0] : [t[1], t[2]] + } + + function h(e, t, n) { + const r = e.value, + [c, s] = b(e, n), + i = Object(o.f)(t), + l = a.a.test(i) ? `'${i}'` : i; + return [r.substr(0, s) + l + r.substr(s + c.length), s + l.length] + } + + function b(e, t) { + const { + value: n, + selectionStart: r + } = e, o = Object(a.b)(t ? n.toUpperCase() : n), c = function(e, t) { + for (let n = 0; n < e.length; n++) { + const r = e[n], + a = "symbol" === r.type || "incompleteSymbol" === r.type || "number" === r + .type; + if (r.offset <= t && t <= r.offset + r.value.length && a) return r + } + return null + }(o, r || 0); + return [(null == c ? void 0 : c.value) || "", c ? c.offset : n.length, o] + } + }, + rzV7: function(e, t, n) { + "use strict"; + var r = Object.prototype.hasOwnProperty; + + function a(e, t) { + return e === t ? 0 !== e || 0 !== t || 1 / e == 1 / t : e != e && t != t + } + e.exports = function(e, t) { + if (a(e, t)) return !0; + if ("object" != typeof e || null === e || "object" != typeof t || null === t) return !1; + var n = Object.keys(e), + o = Object.keys(t); + if (n.length !== o.length) return !1; + for (var c = 0; c < n.length; c++) + if (!r.call(t, n[c]) || !a(e[n[c]], t[n[c]])) return !1; + return !0 + } + }, + tU7i: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return s + })), n.d(t, "b", (function() { + return i + })); + var r = n("q1tI"), + a = n("TSYQ"), + o = n("Iivm"), + c = n("bQ7Y"); + const s = c, + i = r.forwardRef((e, t) => { + const { + icon: n, + isActive: s, + isOpened: i, + isDisabled: l, + isGrouped: u, + isHovered: d, + onClick: p, + text: m, + textBeforeIcon: f, + title: h, + theme: b = c, + className: v, + forceInteractive: g, + "data-name": y, + ...E + } = e, x = a(v, b.button, h && "apply-common-tooltip", { + [b.isActive]: s, + [b.isOpened]: i, + [b.isInteractive]: (g || Boolean(p)) && !l, + [b.isDisabled]: l, + [b.isGrouped]: u, + [b.hover]: d + }), O = n && ("string" == typeof n ? r.createElement(o.a, { + className: b.icon, + icon: n + }) : r.cloneElement(n, { + className: a(b.icon, n.props.className) + })); + return r.createElement("div", { + ...E, + ref: t, + "data-role": "button", + className: x, + onClick: l ? void 0 : p, + title: h, + "data-name": y + }, f && m && r.createElement("div", { + className: a("js-button-text", b.text) + }, m), O, !f && m && r.createElement("div", { + className: a("js-button-text", b.text) + }, m)) + }) + }, + uTDg: function(e, t, n) { + "use strict"; + var r = n("q1tI"), + a = n.n(r), + o = n("TSYQ"), + c = n.n(o), + s = n("YFKU"), + i = (n("+GxX"), n("952j")), + l = n("rC+j"), + u = n("SAe1"), + d = n("Kxc7"), + p = n("uhCe"), + m = n("g89m"), + f = n("Eyy1"), + h = n("Iivm"), + b = n("VogD"), + v = n("QHWU"), + g = n("TgrR"), + y = n("UN6M"); + + function E(e) { + const { + children: t, + className: n + } = e; + return a.a.createElement("div", { + className: c()(y.container, n) + }, a.a.createElement("div", { + className: y.childrenWrapper + }, t)) + } + var x = n("1LIl"), + O = n("H9Gg"), + k = n("wy57"), + N = n("GWR5"); + + function w(e) { + const { + country: t, + providerId: n, + flag: o, + title: s, + description: i, + isActive: l, + isAllExchanges: u, + isMobile: d, + onClick: p, + queryString: m + } = e, f = Object(r.useMemo)(() => Object(O.a)(m), [m]), b = i && !u, v = c()(N.container, + d ? N.mobile : N.desktop, l && N.selected, u && N.allExchange, u && N + .libAllExchange, !u && d && N.bordered); + return a.a.createElement("div", { + className: c()(!d && N.wrap, u && N.libAllExchange), + onClick: p + }, a.a.createElement("div", { + className: v + }, a.a.createElement("div", { + className: N.iconWrap + }, !!u && a.a.createElement(h.a, { + className: c()(N.icon, N.allExchangesIcon), + icon: k + })), a.a.createElement("div", { + className: N.textBlock + }, a.a.createElement("div", { + className: c()(N.title, !b && !d && N.titleWithoutDesc) + }, a.a.createElement(x.a, { + className: c()(l && N.highlighted), + queryString: m, + text: s, + rules: f + })), b && a.a.createElement("div", { + className: N.description + }, a.a.createElement(x.a, { + className: N.highlighted, + queryString: m, + rules: f, + text: i + }))))) + } + var S = n("vqb8"), + C = n("OoQL"), + T = n("oiZD"), + j = n("zM7N"), + I = n("ki38"), + R = n("poJS"), + M = n("6rj1"), + _ = n("Iruf"); + const L = { + emptyTextClassName: _.emptyText + }; + + function D(e) { + const { + exchanges: t + } = e, { + selectedExchange: n, + setSelectedExchange: o, + setMode: i, + isMobile: l, + emptyState: u, + autofocus: d + } = Object(C.a)(b.a), p = Object(S.a)({ + watchedValue: T.watchedTheme + }) === j.a.Dark ? R : M, [m, y] = Object(r.useState)(""), x = Object(r.useCallback)(e => + e.name.toLowerCase().includes(m.toLowerCase()) || e.desc.toLowerCase().includes(m + .toLowerCase()), [m]), O = Object(r.useMemo)(() => [ + [...t] + ], [t]), k = Object(r.useMemo)(() => { + const e = O.filter(e => e.some(x)); + return e + }, [O, x]), N = Object(f.ensureNotNull)(n).value, D = Object(r.useRef)(null), A = + Object(r.useRef)(null); + Object(r.useLayoutEffect)(() => { + var e; + d && (null === (e = null == D ? void 0 : D.current) || void 0 === e || e + .focus()) + }, []); + const z = u ? a.a.createElement(u, null) : a.a.createElement(E, { + className: _.noResultsDesktop + }, a.a.createElement(h.a, { + icon: p + }), a.a.createElement("div", { + className: _.emptyText + }, Object(s.t)("No exchanges match your criteria"))); + return a.a.createElement(I.a.Provider, { + value: L + }, a.a.createElement(v.a, { + placeholder: Object(s.t)("Search"), + onChange: function(e) { + y(e.target.value), A && A.current && (A.current.scrollTop = 0) + }, + reference: D + }), k.length ? a.a.createElement("div", { + ref: A, + className: c()(_.contentList, !l && _.contentListDesktop), + onTouchStart: function() { + var e; + null === (e = D.current) || void 0 === e || e.blur() + } + }, k.map(e => { + const { + name: t, + group: n + } = e[0]; + return a.a.createElement(a.a.Fragment, { + key: t + }, !1, a.a.createElement("div", { + className: c()(_.exchangeItemsContainer, !l && _ + .exchangeItemsContainerDesktop) + }, e.filter(x).map(e => { + const t = Object(g.g)(e); + return a.a.createElement(w, { + key: e.desc, + country: e.country, + flag: e.flag, + providerId: e.providerId, + title: t ? Object(s.t)("All sources") : + e.name, + description: e.desc, + isActive: e.value === N, + isAllExchanges: t, + isMobile: l, + queryString: m, + onClick: P.bind(null, e) + }) + }))) + })) : z); + + function P(e) { + o(e), i("symbolSearch") + } + } + var A, z, P, B, Z, V, F, G, W, X, K, Q = n("i8i4"), + q = n("FadI"); + n("Wt0y"), n("wVAQ"), n("ivNn"), n("nc0P"); + ! function(e) { + e[e.CONNECTED = 1] = "CONNECTED", e[e.CONNECTING = 2] = "CONNECTING", e[e.DISCONNECTED = + 3] = "DISCONNECTED", e[e.ERROR = 4] = "ERROR" + }(A || (A = {})), + function(e) { + e[e.LIMIT = 1] = "LIMIT", e[e.MARKET = 2] = "MARKET", e[e.STOP = 3] = "STOP", e[e + .STOPLIMIT = 4] = "STOPLIMIT" + }(z || (z = {})), + function(e) { + e[e.BUY = 1] = "BUY", e[e.SELL = -1] = "SELL" + }(P || (P = {})), + function(e) { + e[e.CANCELED = 1] = "CANCELED", e[e.FILLED = 2] = "FILLED", e[e.INACTIVE = 3] = "INACTIVE", + e[e.PLACING = 4] = "PLACING", e[e.REJECTED = 5] = "REJECTED", e[e.WORKING = 6] = + "WORKING" + }(B || (B = {})), + function(e) { + e[e.ALL = 0] = "ALL", e[e.CANCELED = 1] = "CANCELED", e[e.FILLED = 2] = "FILLED", e[e + .INACTIVE = 3] = "INACTIVE", e[e.REJECTED = 5] = "REJECTED", e[e.WORKING = 6] = + "WORKING" + }(Z || (Z = {})), + function(e) { + e[e.ORDER = 1] = "ORDER", e[e.POSITION = 2] = "POSITION" + }(V || (V = {})), + function(e) { + e[e.LIMITPRICE = 1] = "LIMITPRICE", e[e.STOPPRICE = 2] = "STOPPRICE", e[e.TAKEPROFIT = 3] = + "TAKEPROFIT", e[e.STOPLOSS = 4] = "STOPLOSS" + }(F || (F = {})), + function(e) { + e[e.ERROR = 0] = "ERROR", e[e.SUCCESS = 1] = "SUCCESS" + }(G || (G = {})), + function(e) { + e.Information = "information", e.Warning = "warning", e.Error = "error" + }(W || (W = {})), + function(e) { + e.Demo = "demo", e.Live = "live" + }(X || (X = {})), + function(e) { + e[e.LogOut = 0] = "LogOut", e[e.FailedRestoring = 1] = "FailedRestoring", e[e.Offline = 2] = + "Offline", e[e.APIError = 3] = "APIError", e[e.TwoFactorRequired = 4] = + "TwoFactorRequired" + }(K || (K = {})); + n("EBrf"), n("ogJP"); + var H = n("txPx"); + n("25b6"); + Error; + Object(H.getLogger)("Trading.Utils"); + Object(s.t)("Failed to login"); + + function U(e) { + return e.hasOwnProperty("exchange") + } + async function Y(e) { + return new Promise(t => { + window.ChartApiInstance.searchSymbols(e.text || "", e.exchange || "", e + .type || "", "", !1, !0, "", !0, "", e => { + t(e) + }) + }) + } + var $ = n("K5cv"), + J = n("JWMC"), + ee = n("/3z9"), + te = n("tU7i"), + ne = n("ZrzP"), + re = n("XDHQ"), + ae = n("Y8Rb"), + oe = n("8q1k"), + ce = n("OWoh"), + se = n("anmh"), + ie = n("Pdm7"); + + function le(e) { + var t; + const { + state: n, + update: o + } = e, { + searchRef: c, + forceUpdate: s, + upperCaseEnabled: u + } = Object(f.ensureNotNull)(Object(r.useContext)(b.a)), p = Object(i.b)(null === (t = c + .current) || void 0 === t ? void 0 : t.value), m = Object(l.h)(p); + let h = [{ + icon: ne, + insert: "/", + type: "binaryOp", + name: "division" + }, { + icon: re, + insert: "-", + type: "binaryOp", + name: "subtraction" + }, { + icon: ae, + insert: "+", + type: "binaryOp", + name: "addition" + }, { + icon: oe, + insert: "*", + type: "binaryOp", + name: "multiplication" + }]; + return d.enabled("hide_exponentiation_spread_operator") || (h = h.concat([{ + icon: ce, + insert: "^", + type: "binaryOp", + name: "exponentiation" + }])), + d.enabled("hide_reciprocal_spread_operator") || (h = h.concat([{ + icon: se, + type: "complete", + name: "1/x", + callback: () => { + !c.current || m.errors.length || m.warnings.length || (c.current + .value = Object(l.g)(Object(l.a)(p)), s()) + } + }])), a.a.createElement("div", { + className: ie.actions + }, h.map(e => a.a.createElement(te.b, { + className: ie.actionButton, + icon: e.icon, + key: e.name, + isDisabled: ue(e, m), + onClick: () => function(e) { + var t; + if (!ue(e, m)) { + if (e.insert && c.current) { + const t = c.current.value + e.insert; + c.current.value = t, c.current.setSelectionRange(t + .length, t.length); + const [r, , a] = Object(l.b)(c.current, u); + n.current && (n.current.selectedIndexValue = -1, n + .current.searchSpreadsValue = Object(l.e)(a), n + .current.searchTokenValue = r), s(), o() + } + e.callback && e.callback(), null === (t = c.current) || + void 0 === t || t.focus(), Object(J.trackEvent)("GUI", + "SS", e.name) + } + }(e) + }))) + } + + function ue(e, t) { + let n = !1; + if (!t.errors.length) switch (e.type) { + case "binaryOp": + n = "var" === t.currentState; + break; + case "openBrace": + n = "var" !== t.currentState; + break; + case "closeBrace": + n = "var" === t.currentState && t.braceBalance > 0; + break; + case "complete": + n = !t.errors.length && !t.warnings.length + } + return !n + } + var de = n("ijHL"), + pe = n("mHCH"); + + function me(e) { + const { + isActive: t, + isAnimated: n, + activeColor: r, + size: a = "m", + appearance: o = "default", + className: s + } = e; + return c()(pe.bubble, t && pe.active, r && pe[r], a && pe["size-" + a], o && pe[ + "appearance-" + o], n && pe.animated, s) + } + + function fe(e) { + const { + id: t, + title: n, + tabIndex: r, + role: o, + contentClassName: s, + children: i, + onClick: l, + onMouseDown: u, + ...d + } = e; + return a.a.createElement("span", { + ...Object(de.a)(d), + ...Object(de.b)(d), + id: t, + title: n, + tabIndex: r, + role: o, + className: me(e), + onClick: l, + onMouseDown: u + }, a.a.createElement("span", { + className: c()(pe.content, s) + }, i)) + } + var he = n("UEVQ"); + + function be(e) { + const { + className: t, + itemClassName: n, + itemContentClassName: r, + items: c, + getItemTitle: s, + getItemKey: i, + checkItemIsActive: l, + getItemColor: u, + onBubbleClick: d, + multiline: p, + children: m + } = e; + return a.a.createElement("div", { + className: o(t, he.bubbles, p && he.multiLine) + }, c.map((e, t) => a.a.createElement(fe, { + key: i ? i(e) : t, + className: o(he.bubble, n), + contentClassName: r, + onClick: function() { + d(e) + }, + onMouseDown: function(e) { + e.preventDefault() + }, + isActive: !!l && l(e), + activeColor: u ? u(e) : void 0 + }, s(e))), m) + } + var ve = n("jPOK"), + ge = n("iR1w"), + ye = n("cvc5"), + Ee = n.n(ye), + xe = n("ML8+"), + Oe = n("G4pG"); + + function ke(e) { + const { + mode: t, + setMode: n, + searchRef: o, + cachedInputValue: i, + selectedExchange: l, + upperCaseEnabled: u + } = Object(f.ensureNotNull)(Object(r.useContext)(b.a)), d = Object(f.ensureNotNull)(l), p = + "symbolSearch" === t, m = Object(g.g)(d), { + country: v, + providerId: y, + flag: E + } = d; + return p ? a.a.createElement("div", { + className: c()(Oe.flagWrap, "apply-common-tooltip"), + title: Object(s.t)("Select source"), + onClick: function() { + o.current && (i.current = u ? o.current.value.toUpperCase() : o.current + .value); + n("exchange") + } + }, !!m && a.a.createElement(h.a, { + className: Oe.icon, + icon: k + }), a.a.createElement("div", { + className: Oe.title + }, m ? Object(s.t)("All sources") : d.name), a.a.createElement(xe.a, { + className: Oe.caret, + dropped: !1 + })) : null + } + var Ne = n("2gjO"); + const we = Object(g.c)(); + + function Se(e) { + const { + isSmallWidth: t, + selectedExchange: n + } = Object(f.ensureNotNull)(Object(r.useContext)(b.a)), o = n && we.length > 1 && !Object(g + .a)(); + return a.a.createElement("div", { + className: c()(Ne.wrap, t && Ne.small) + }, a.a.createElement("div", { + className: Ne.item + }, a.a.createElement("div", { + className: Ne.text + }, t ? Object(s.t)("Symbol & description") : Object(s.t)("Symbol"))), a.a + .createElement("div", { + className: Ne.item + }, !t && a.a.createElement("div", { + className: Ne.text + }, Object(s.t)("Description")), o && a.a.createElement("div", { + className: Ne.exchange + }, a.a.createElement(ke, null)))) + } + var Ce = n("Ialn"), + Te = n("h9B/"); + + function je(e) { + const { + onTouchMove: t, + listRef: n, + className: o, + listWrapRef: s, + virtualListKey: i, + items: l, + getItemSize: u, + hideFeed: d + } = e, { + mode: p, + isSmallWidth: m, + handleListWidth: h + } = Object(C.a)(b.a), [v, g] = Object(r.useState)(null), y = Object(r.useCallback)(e => { + const { + index: t, + style: n + } = e; + return a.a.createElement("div", { + style: n + }, l[t]) + }, [l]), E = Object(r.useCallback)(e => Object(f.ensure)(l[e].key), [l]), x = + "watchlist" === p && null !== v; + return a.a.createElement(Ee.a, { + onMeasure: function(e) { + g(e.height), h(e.width) + } + }, a.a.createElement("div", { + ref: s, + className: c()(Te.wrap, x && Te.watchlist, d && Te.noFeed, o), + onTouchMove: t + }, a.a.createElement("div", { + className: c()(Te.scrollContainer, d && Te.noFeed) + }, x ? a.a.createElement(ge.b, { + key: i, + ref: n, + className: Te.listContainer, + width: "100%", + height: Object(f.ensureNotNull)(v), + itemCount: l.length, + itemSize: u, + children: y, + itemKey: E, + overscanCount: 20, + direction: Object(Ce.isRtl)() ? "rtl" : "ltr" + }) : a.a.createElement("div", { + className: c()(Te.listContainer, m && Te.multiLineItemsContainer) + }, a.a.createElement(Se, null), l)))) + } + var Ie = n("zjoO"), + Re = n("mdyz"); + + function Me(e) { + const { + token: t, + state: n, + otherSymbolsCount: o, + onChangeSymbolTypeFilter: c, + onResetFilters: s, + onListTouchMove: i, + brokerTitle: l, + isBrokerChecked: u, + onBrokerCheckboxChange: d, + listRef: p, + listWrapRef: m + } = e, { + mode: f, + isMobile: h, + selectedExchange: v, + selectedSymbolType: g, + symbolTypes: y, + feedItems: E, + contentItem: x, + emptyState: O = _e + } = Object(C.a)(b.a), k = l && a.a.createElement(BrokerCheckbox, { + brokerTitle: l, + checked: u, + onCheckboxChange: d + }), N = "symbolSearch" === f && "good" === n, w = null != x ? x : Ie.a, S = Object(r + .useMemo)(() => E.map(e => a.a.createElement(w, { + ...e, + searchToken: t + })), [E]); + return a.a.createElement(a.a.Fragment, null, "symbolSearch" === f && a.a.createElement(a.a + .Fragment, null, y.length > 0 && a.a.createElement(be, { + itemClassName: Re.symbolType, + items: y, + getItemTitle: e => e.name, + getItemKey: e => e.value, + checkItemIsActive: e => e.value === g, + onBubbleClick: c, + multiline: !h + }, k), !1), a.a.createElement(je, { + listRef: p, + listWrapRef: m, + onTouchMove: i, + items: S, + getItemSize: () => De, + hideFeed: !N + }), "loading" === n && a.a.createElement("div", { + className: Re.spinnerWrap + }, a.a.createElement(ve.a, null)), "symbolSearch" === f && a.a.createElement(a.a + .Fragment, null, !1, "empty" === n && a.a.createElement(O, null))) + } + + function _e(e) { + const t = Object(S.a)({ + watchedValue: T.watchedTheme + }) === j.a.Dark ? R : M; + return a.a.createElement(E, { + className: Re.noResultsDesktop + }, a.a.createElement(h.a, { + icon: t + }), a.a.createElement("div", { + className: Re.emptyText + }, Object(s.t)("No symbols match your criteria"))) + } + const Le = Object(g.e)(), + De = 52; + + function Ae(e) { + const { + mode: t, + setMode: n, + setSelectedIndex: o, + isMobile: i, + selectedExchange: u, + setSelectedExchange: p, + selectedSymbolType: m, + setSelectedSymbolType: f, + setRenderSymbolSearchList: h, + searchRef: y, + cachedInputValue: E, + setSearchSpreads: x, + showSpreadActions: O, + selectedItem: k, + onSearchFeedReady: N, + forceUpdate: w, + placeholder: S, + initialScreen: T, + footer: j, + searchInput: R, + upperCaseEnabled: M, + externalInput: _, + handleKeyDown: L + } = Object(C.a)(b.a), D = Object(r.useRef)(t); + D.current = t; + const A = Object(r.useRef)(new AbortController), + [z, P] = Object(r.useState)(0), + [B, Z] = Object(r.useState)("noop"), + V = Object(r.useRef)(0), + [F, G] = Object(r.useState)(E.current), + W = Object(r.useRef)(null), + X = Object(r.useRef)(null), + K = Object(r.useRef)({ + selectedIndexValue: -1, + searchTokenValue: "", + searchSpreadsValue: !0 + }), + H = Object(r.useRef)(null), + te = Object(r.useRef)(null), + { + broker: ne = null, + brokerId: re, + brokerTitle: ae, + isBrokerChecked: oe = !1, + setIsBrokerChecked: ce = (() => {}), + unhideSymbolSearchGroups: se = "" + } = { + brokerId: void 0, + brokerTitle: void 0 + }; + Object(r.useEffect)(() => { + (null == y ? void 0 : y.current) && G(y.current.value) + }, []), Object(r.useEffect)(() => { + const e = y.current; + if (e) return e.addEventListener("input", be), e.addEventListener("focus", Ee), + e.addEventListener("select", he), e.addEventListener("click", he), e + .addEventListener("keyup", xe), _ && L && e.addEventListener("keydown", + L), () => { + e && (e.removeEventListener("input", be), e.removeEventListener( + "focus", Ee), e.removeEventListener("select", he), e + .removeEventListener("click", he), e.removeEventListener( + "keyup", xe), _ && L && e.removeEventListener("keydown", + L)) + } + }, [L]), Object(r.useEffect)(() => { + Boolean(T) && "" === F.trim() || (ge(F, m, null == u ? void 0 : u.value), W + .current && (W.current.scrollTop = 0)) + }, [F, m, u, oe, T]), Object(r.useEffect)(() => { + if (!k || !y.current) return; + if (!d.enabled("show_spread_operators")) return y.current.value = k.symbol, + void w(); + const e = U(k) ? k.exchange : k.parent.exchange, + t = { + name: k.symbol, + exchange: e, + prefix: k.prefix, + fullName: k.full_name + }, + [n, r] = Object(l.d)(y.current, t, M); + y.current.value = n, y.current.setSelectionRange(r, r), w() + }, [k]); + const ie = Object(r.useCallback)(e => N ? N(e) : e, [N]), + ue = null != T ? T : "div", + de = Boolean(T) && "symbolSearch" !== t, + pe = null != R ? R : v.a, + me = Object(r.useMemo)(() => ({ + listRef: X, + resetRecommends: ye, + updateRecommends: ge, + searchToken: F, + emptyTextClassName: Re.emptyText, + isBrokerChecked: oe, + symbolSearchState: B, + currentMode: D + }), [X, F, oe, B, D]); + return a.a.createElement(I.a.Provider, { + value: me + }, !(_ && "symbolSearch" === t) && a.a.createElement(pe, { + reference: y, + className: c()(Re.search, M && Re.upperCase), + placeholder: S || Object(s.t)("Search") + }, O && a.a.createElement(le, { + state: K, + update: ve + })), de ? a.a.createElement(ue, null) : a.a.createElement(Me, { + token: F, + state: B, + otherSymbolsCount: z, + onListTouchMove: function() { + var e; + null === (e = y.current) || void 0 === e || e.blur() + }, + onChangeSymbolTypeFilter: function(e) { + const { + value: t + } = e; + f(t), o(-1) + }, + onResetFilters: function() { + var e; + f(Object(g.b)()), Le && p(Le); + ce(!1), i || null === (e = y.current) || void 0 === e || e.focus() + }, + brokerTitle: ae, + isBrokerChecked: oe, + onBrokerCheckboxChange: function(e) { + ce("on" !== e) + }, + listRef: X, + listWrapRef: W + }), j); + + function fe() { + if (!y.current) return; + const [e, t, n] = Object(l.b)(y.current, M); + V.current = t, + K.current = { + selectedIndexValue: -1, + searchSpreadsValue: Object(l.e)(n), + searchTokenValue: e + }, H.current || (H.current = setTimeout(ve, 0)) + } + + function he() { + if (!y.current) return; + const [, e] = Object(l.b)(y.current, M); + e !== V.current && fe() + } + + function be() { + d.enabled("show_spread_operators") ? fe() : y.current && (K.current = { + selectedIndexValue: -1, + searchSpreadsValue: !1, + searchTokenValue: y.current.value + }, H.current || (H.current = setTimeout(ve, 0))) + } + + function ve() { + const { + selectedIndexValue: e, + searchTokenValue: t, + searchSpreadsValue: n + } = K.current; + H.current = null, Object(Q.unstable_batchedUpdates)(() => { + x(n), o(e), G(M ? t.toUpperCase() : t) + }) + } + async function ge(e, t, n) { + try { + "noop" === B ? Z("loading") : (Oe(), te.current = setTimeout(() => { + Z("loading") + }, 500)), ke(); + const r = await async function(e, t, n, r) { + var a, o, c; + const s = d.enabled("show_spread_operators") ? Object(l.f)(t) : + null === (a = y.current) || void 0 === a ? void 0 : a.value; + let i; + if (oe && ne) { + const t = await Object(q.b)(e, ne.accountMetainfo()); + i = t.prefix + } + const p = d.enabled("show_spread_operators") ? null !== (c = + null !== (o = Object(l.c)(t)) && void 0 !== o ? o : i) && + void 0 !== c ? c : r : null == u ? void 0 : u.value, + m = { + serverHighlight: !1, + text: s, + exchange: p, + type: n, + lang: window.language || "", + brokerId: re, + onlyTradable: Boolean(re) && oe, + unhideSymbolSearchGroups: se, + signal: e + }, + f = Object($.getSearchRequestDelay)(); + void 0 !== f && await Object(q.a)(e, f); + return Y(m) + }(A.current.signal, e, t, n), a = ie(function(e, t = window + .ChartApiInstance.symbolsGrouping()) { + var n; + const r = {}, + a = []; + for (let o = 0; o < e.length; ++o) { + const c = e[o]; + if (c.prefix || Array.isArray(c.contracts)) return e; + const s = t[c.type]; + if (void 0 === s) { + a.push(c); + continue + } + const i = s.exec(c.symbol); + if (i) { + const e = i[1]; + let t; + r.hasOwnProperty(e) ? t = r[e] : (t = a.length, r[e] = + t, a.push({ + type: c.type, + symbol: e, + exchange: c.exchange, + description: c.description, + full_name: c.exchange + ":" + e, + contracts: [] + })), null === (n = a[t].contracts) || void 0 === + n || n.push(c) + } else a.push(c) + } + return a + }(r)); + if (!a.length) return Oe(), void Z("empty"); + Oe(), h(a), Z("good") + } catch (e) { + Object(q.c)(e) + } + } + + function ye() { + ke(), Z("empty"), G(""), x(!1), Oe() + } + + function Ee() { + "watchlist" === D.current && (n("symbolSearch"), Object(J.trackEvent)("Watchlist", + "Mobile SS", "Go to SS page")) + } + + function xe(e) { + switch (Object(ee.hashFromEvent)(e)) { + case 37: + case 39: + he() + } + } + + function Oe() { + te.current && clearTimeout(te.current) + } + + function ke() { + A.current.abort(), A.current = new AbortController + } + } + var ze = n("U0JK"), + Pe = n("hYF9"); + + function Be(e) { + const { + theme: t = Pe + } = e, { + setMode: n, + isMobile: r + } = Object(C.a)(b.a); + return a.a.createElement(h.a, { + className: c()(e.className, t.button, !r && t.desktop), + icon: ze, + onClick: function() { + n("symbolSearch") + } + }) + } + var Ze = n("w3Pp"), + Ve = n("qC62"), + Fe = n("Vdly"); + + function Ge(e) { + const [t, n] = Object(r.useState)(() => { + const t = Fe.getValue("symboledit.exchangefilter", ""); + return e.exchanges.find(e => e.value === t) || e.defaultExchange + }); + return [t, Object(r.useCallback)(e => { + var t; + n(e), t = e, Fe.setValue("symboledit.exchangefilter", t.value) + }, [])] + } + + function We(e) { + const [t, n] = Object(r.useState)(() => { + if (1 === e.types.length) return e.types[0].value; + const t = Fe.getValue("symboledit.filter", Object(g.b)()); + return e.types.find(e => e.value === t) ? t : Object(g.b)() + }); + return [t, Object(r.useCallback)(e => { + var t; + n(e), t = e, Fe.setValue("symboledit.filter", t) + }, [])] + } + var Xe = n("gla1"), + Ke = n("ozXl"); + n.d(t, "a", (function() { + return Ue + })); + const Qe = Object(g.c)(), + qe = Object(g.e)(), + He = d.enabled("uppercase_instrument_names"); + + function Ue(e) { + var t; + const { + onClose: n, + initialMode: o, + defaultValue: c = "", + showSpreadActions: m, + selectSearchOnInit: f = !0, + onSearchComplete: h, + onSearchFeedReady: v, + dialogTitle: y = Object(s.t)("Symbol Search"), + placeholder: E, + fullscreen: x, + initialScreen: O, + wrapper: k, + dialog: N, + contentItem: w, + footer: S, + symbolTypes: C = Object(g.d)(), + searchInput: T, + emptyState: j, + autofocus: I, + dialogWidth: R, + onKeyDown: M, + exchangeScreen: _ + } = e, L = void 0 !== e.input, [A, z] = Object(r.useState)(o), P = Object(r.useRef)(c), [B, + Z + ] = Ge({ + exchanges: Qe, + defaultExchange: qe + }), [V, F] = We({ + types: C + }), [G, W] = Object(r.useState)([]), [X, K] = Object(r.useState)(!1), [Q, q] = Object(r + .useState)(-1), H = Object(r.useRef)(null !== (t = e.input) && void 0 !== t ? t : + null), [$, J] = Object(r.useState)(!1), te = Object(Xe.a)(), [ne, re] = Object(r + .useState)(new Set), { + broker: ae = null, + brokerId: oe, + unhideSymbolSearchGroups: ce = "", + displayBrokerSymbol: se = !1 + } = { + brokerId: void 0 + }; + Object(r.useLayoutEffect)(() => { + var e; + !(null == H ? void 0 : H.current) || !L && Boolean(null === (e = H.current) || + void 0 === e ? void 0 : e.value) || (L || "compare" === A || (H.current + .value = P.current), !I || L && "symbolSearch" !== A || H.current + .focus()) + }, [A]), Object(r.useEffect)(() => { + (null == H ? void 0 : H.current) && f && I && H.current.select() + }, []); + const ie = Object(r.useMemo)(() => G.reduce((e, t) => { + const n = Je(t), + r = ne.has(n); + return e.push(t), r && t.contracts && e.push(...t.contracts.map(e => ({ + ...e, + parent: t + }))), e + }, []), [G, ne]), + le = Object(r.useRef)(null); + Object(r.useEffect)(() => { + var e; - 1 !== Q && (null === (e = le.current) || void 0 === e || e + .scrollIntoView({ + block: "nearest" + })) + }, [Q, le]); + const ue = Object(r.useMemo)(() => ie.map((e, t) => { + var n, r, a, o; + if (U(e)) { + const a = Je(e), + o = e.contracts ? ne.has(a) : void 0, + c = t === Q; + return { + key: t, + id: a, + title: $e(e, se), + description: e.description, + isOffset: !1, + onClick: ve.bind(null, e), + providerId: e.provider_id, + country: null === (n = e.country) || void 0 === n ? void 0 : n + .toLocaleLowerCase(), + type: e.type, + exchangeName: e.exchange, + marketType: Object(Ze.marketType)(e.type, e.typespecs), + isEod: null === (r = e.params) || void 0 === r ? void 0 : r + .includes("eod"), + isExpanded: o, + onExpandClick: e.contracts ? ge.bind(null, a) : void 0, + fullSymbolName: Ve.a.fromSymbolSearchResult(e), + itemRef: c ? le : void 0, + isSelected: t === Q, + item: e + } + } { + const { + parent: n + } = e, r = Je(n), c = t === Q; + return { + key: t, + id: r + e.symbol, + dangerousTitleHTML: $e(e, se), + dangerousDescriptionHTML: `${n.description} (${e.description})`, + isOffset: !0, + isEod: null === (a = e.params) || void 0 === a ? void 0 : a + .includes("eod"), + onClick: ye.bind(null, e.parent, e), + providerId: n.provider_id, + country: null === (o = n.country) || void 0 === o ? void 0 : o + .toLowerCase(), + type: n.type, + exchangeName: n.exchange, + marketType: Object(Ze.marketType)(n.type, e.typespecs), + fullSymbolName: Ve.a.fromSymbolSearchResult(e.parent, e), + itemRef: c ? le : void 0, + isSelected: c, + item: e + } + } + }), [G, ne, A, Q, M]), + de = null != N ? N : tt, + pe = de !== tt && !L, + me = (e, t) => ({ + mode: A, + setMode: z, + selectedExchange: B, + setSelectedExchange: Z, + selectedSymbolType: V, + setSelectedSymbolType: F, + selectedIndex: Q, + setSelectedIndex: q, + onClose: n, + setRenderSymbolSearchList: W, + searchRef: H, + cachedInputValue: P, + searchSpreads: X, + setSearchSpreads: K, + handleListWidth: Ee, + isSmallWidth: $, + feedItems: ue, + isMobile: e, + showSpreadActions: m, + selectSearchOnInit: f, + isTablet: t, + selectedItem: ie[Q], + onSearchFeedReady: v, + forceUpdate: te, + placeholder: E, + initialScreen: O, + toggleExpand: ge, + openedItems: ne, + onSubmit: ke, + onSearchComplete: h, + footer: S, + symbolTypes: C, + contentItem: w, + searchInput: T, + emptyState: j, + autofocus: I, + upperCaseEnabled: He, + externalInput: L, + handleKeyDown: pe ? void 0 : Oe + }), + fe = null != _ ? _ : D, + he = "exchange" === A ? { + title: Object(s.t)("Sources"), + dataName: "exchanges-search", + render: () => a.a.createElement(fe, { + exchanges: Qe + }), + additionalHeaderElement: a.a.createElement(Be, null), + additionalElementPos: "before" + } : { + title: y, + dataName: "symbol-search-items-dialog", + render: () => a.a.createElement(Ae, null), + additionalElementPos: "after" + }, + be = null != k ? k : "div"; + return a.a.createElement(be, null, a.a.createElement(u.a, { + rules: p.a + }, ({ + TabletSmall: e, + TabletNormal: t + }) => a.a.createElement(b.a.Provider, { + value: me(e, t) + }, a.a.createElement(de, { + ...he, + fullScreen: x, + onClose: n, + onClickOutside: n, + onKeyDown: pe ? void 0 : Oe, + isOpened: !0 + })))); + + function ve(e) { + e.contracts ? ge(Je(e)) : ye(e) + } + + function ge(e) { + const t = new Set(ne); + t.has(e) ? t.delete(e) : t.add(e), re(t) + } + + function ye(e, t) { + const r = t || e, + { + exchange: a + } = e; + if (d.enabled("show_spread_operators")) { + const e = { + name: r.symbol, + exchange: a, + prefix: r.prefix, + fullName: r.full_name + }; + if (X) return xe(e), void te(); + if (H.current && H.current.value.includes(",")) return void xe(e) + } + const o = [{ + resolved: !0, + symbol: Ve.a.fromSymbolSearchResult(e, t), + result: r + }]; + h(o), n() + } + + function Ee(e) { + J("fixed" === R || e <= 640) + } + + function xe(e) { + if (!H.current) return; + const [t, n] = Object(l.d)(H.current, e, He); + H.current.value = t, H.current.setSelectionRange(n, n), H.current.focus() + } + + function Oe(e) { + switch (Object(ee.hashFromEvent)(e)) { + case 38: + if (e.preventDefault(), 0 === Q) return; + if (-1 === Q) return void q(0); + q(Q - 1); + break; + case 40: + if (e.preventDefault(), Q === ue.length - 1) return; + q(Q + 1); + break; + case 37: { + if (-1 === Q) return; + const t = ue[Q], + { + id: n, + isOffset: r, + onExpandClick: a + } = t; + !r && n && ne.has(n) && Boolean(a) && (e.preventDefault(), ge(n)); + break + } + case 39: { + if (-1 === Q) return; + const t = ue[Q], + { + id: n, + isOffset: r, + onExpandClick: a + } = t; + !r && n && !ne.has(n) && Boolean(a) && (e.preventDefault(), ge(n)); + break + } + case 13: + ke(!0); + break; + case 27: + e.preventDefault(), n() + } + null == M || M(e) + } + + function ke(e) { + if (!H.current) return; + const t = H.current.value; + if (d.enabled("show_spread_operators") && X && t) { + if (t.includes(",")) { + const r = et(t); + if (r.some(e => !Ne(e))) return; + return h(r.map(Ye)), void(e && n()) + } + if (!Ne(t)) return; + return h([{ + symbol: He ? t.toUpperCase() : t, + resolved: !1 + }]), void(e && n()) + } + if (t.includes(",")) return h(et(t).map(Ye)), void(e && n()); + if (-1 !== Q) { + ue[Q].onClick() + } else { + const r = He ? t.toUpperCase() : t; + if (r && "" !== r.trim()) { + const e = et(r); + if (void 0 !== oe && -1 === r.indexOf(":"))(function(e) { + let t = !1; + return Promise.all(e.map(e => -1 !== e.indexOf(":") || t ? Promise + .resolve({ + symbol: e, + resolved: !1 + }) : (t = !0, async function(e) { + var t; + null === (t = await (null == ae ? void 0 : + ae.accountMetainfo())) || void 0 === + t || t.prefix; + const n = await Y({ + strictMatch: !0, + serverHighlight: !1, + text: e, + lang: window.language || "", + brokerId: oe, + onlyTradable: !0, + unhideSymbolSearchGroups: ce, + exchange: void 0 + }); + if (0 !== n.length) { + const e = n[0], + { + contracts: t + } = e, + r = t && t.length > 0 ? t[0] : + void 0, + a = e.prefix || e.exchange, + o = r ? r.symbol : e.symbol; + if (a && o) return { + symbol: Ve.a + .fromSymbolSearchResult(e, + r), + resolved: !0, + result: e + } + } + return { + symbol: e, + resolved: !1 + } + }(e)))) + })(e).then(e => h(e)); + else { + const t = e.map(Ye); + h(t) + } + } + e && n() + } + } + + function Ne(e) { + const t = Object(i.b)(e), + n = Object(l.h)(t); + if (n.errors.length || n.warnings.length) return !1; + const r = ue[Q]; + return !r || void 0 === r.isExpanded || (r.onClick(), !1) + } + } + + function Ye(e) { + return { + symbol: He ? e.toUpperCase() : e, + resolved: !1 + } + } + + function $e(e, t) { + const { + broker_symbol: n, + symbol: r + } = e; + return `${r}${t&&n?` (${n})`:""}` + } + + function Je(e) { + return e.symbol + e.exchange + e.description + } + + function et(e) { + return e.split(",").map(e => e.trim()).filter(e => "" !== e) + } + + function tt(e) { + const { + isMobile: t, + isTablet: n + } = Object(C.a)(b.a); + return a.a.createElement(m.a, { + ...e, + className: c()(Ke.dialog, !t && (n ? Ke.tabletDialog : Ke.desktopDialog)), + backdrop: !0, + draggable: !1 + }) + } + }, + vqb8: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var r = n("q1tI"); + const a = e => { + const t = "watchedValue" in e ? e.watchedValue : void 0, + n = "defaultValue" in e ? e.defaultValue : e.watchedValue.value(), + [a, o] = Object(r.useState)(t ? t.value() : n); + return Object(r.useEffect)(() => { + if (t) { + o(t.value()); + const e = e => o(e); + return t.subscribe(e), () => t.unsubscribe(e) + } + return () => {} + }, [t]), a + } + }, + w3Pp: function(e, t, n) { + "use strict"; + n.r(t), n.d(t, "marketType", (function() { + return i + })); + var r = n("YFKU"); + n("HbRj"); + const a = new Map, + o = { + context: "market_type" + }, + c = { + cfd: Object(r.t)("cfd", o), + bitcoin: Object(r.t)("crypto", o), + crypto: Object(r.t)("crypto", o), + dr: Object(r.t)("dr", o), + forex: Object(r.t)("forex", o), + futures: Object(r.t)("futures", o), + index: Object(r.t)("index", o), + stock: Object(r.t)("stock", o) + }, + s = new Set(["cfd", "spreadbet", "defi"]); + + function i(e, t = []) { + const n = t.filter(e => s.has(e)), + i = `${e}_${n.sort().join("_")}`, + l = a.get(i); + if (void 0 !== l) return l; + const u = Boolean(t.length) ? Object(r.t)(e, o) + " " + n.join(" ") : c[e] || e; + return a.set(i, u), u + } + }, + wy57: function(e, t) { + e.exports = + '' + }, + zjoO: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return g + })); + var r = n("q1tI"), + a = n.n(r), + o = n("TSYQ"), + c = n.n(o), + s = n("Eyy1"), + i = n("Iivm"), + l = n("1LIl"), + u = n("H9Gg"), + d = n("VogD"), + p = n("FZIs"), + m = n("vqb8"), + f = n("oiZD"), + h = n("8+VR"), + b = n("+5L9"), + v = n("eIOu"); + + function g(e) { + const { + dangerousTitleHTML: t, + title: n, + dangerousDescriptionHTML: o, + description: g, + searchToken: y, + exchangeName: E, + marketType: x, + onClick: O, + isSelected: k, + isEod: N = !1, + isActive: w = !1, + isOffset: S = !1, + invalid: C = !1, + isHighlighted: T = !1, + hideExchange: j = !1, + onExpandClick: I, + isExpanded: R, + hoverComponent: M, + country: _, + providerId: L, + type: D, + flag: A, + itemRef: z, + onMouseOut: P, + onMouseOver: B, + className: Z, + actions: V, + reference: F + } = e, { + isSmallWidth: G, + isMobile: W + } = Object(s.ensureNotNull)(Object(r.useContext)(d.a)), X = Boolean(M), K = !C && !j && ( + W || !X), Q = Object(m.a)({ + watchedValue: f.watchedTheme + }) === p.a.Dark ? v.dark : v.light, q = M; + return a.a.createElement("div", { + className: c()(v.itemRow, G && v.multiLine, T && v.highlighted, T && Q, k && v + .selected, w && v.active, C && v.invalid, !W && h.mobiletouch && X && v + .hover, Z), + onClick: function(e, t) { + if (!e || t.defaultPrevented) return; + t.preventDefault(), e(t) + }.bind(null, O), + "data-role": e["data-role"] || "list-item", + "data-active": w, + "data-name": "symbol-search-dialog-content-item", + onMouseOut: P, + onMouseOver: B, + ref: F + }, a.a.createElement("div", { + ref: z, + className: c()(v.itemInfoCell, v.cell, S && v.offset) + }, a.a.createElement("div", { + className: v.expandHandleWrap, + onClick: function(e) { + if (!I || e.defaultPrevented) return; + e.preventDefault(), I(e) + } + }, I && a.a.createElement(i.a, { + className: c()(v.expandHandle, R && v.expanded), + icon: b + })), a.a.createElement("div", { + className: v.description + }, n && a.a.createElement("div", { + className: c()(v.symbolTitle, w && v.active, C && v.invalid, ! + Boolean(o) && v.noDescription), + "data-name": "list-item-title" + }, "string" == typeof n && y ? a.a.createElement(l.a, { + className: v.highlightedText, + text: n, + queryString: y, + rules: Object(u.a)(y) + }) : n, N && a.a.createElement("span", { + className: v.dataMode + }, "E")), !n && t && a.a.createElement("div", { + className: c()(v.symbolTitle, w && v.active, C && v.invalid), + "data-name": "list-item-title" + }, a.a.createElement("span", { + dangerouslySetInnerHTML: { + __html: t + } + }), N && a.a.createElement("span", { + className: v.dataMode + }, "E")), G && H())), !G && H(), q ? a.a.createElement(q, { + ...e, + className: v.cell, + onMouseOver: void 0, + onMouseOut: void 0 + }) : null, K && a.a.createElement("div", { + className: c()(v.exchangeCell, v.cell) + }, a.a.createElement("div", { + className: c()(v.exchangeDescription) + }, a.a.createElement("div", { + className: c()(v.marketType, w && v.active) + }, x), a.a.createElement("div", { + className: c()(v.exchangeName, w && v.active) + }, E)), !1), a.a.createElement("div", { + className: c()(v.cell, Boolean(V) && v.actionsCell) + }, V)); + + function H() { + if (C) return null; + const e = c()(v.symbolDescription, !G && v.cell, w && v.active, !h.mobiletouch && + "apply-overflow-tooltip apply-overflow-tooltip--allow-text"); + return g ? a.a.createElement("div", { + className: e + }, y ? a.a.createElement(l.a, { + className: v.highlightedText, + text: g, + queryString: y, + rules: Object(u.a)(y) + }) : g) : o ? a.a.createElement("div", { + className: e, + dangerouslySetInnerHTML: { + __html: o + } + }) : null + } + } + } + } +]); diff --git a/static/charting_library/bundles/26.3aeec391d4e6e19989ee.js b/static/charting_library/bundles/26.3aeec391d4e6e19989ee.js new file mode 100644 index 0000000..9dde153 --- /dev/null +++ b/static/charting_library/bundles/26.3aeec391d4e6e19989ee.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/26.69139a843bc1c84f790b.css b/static/charting_library/bundles/26.69139a843bc1c84f790b.css new file mode 100644 index 0000000..0a7c952 --- /dev/null +++ b/static/charting_library/bundles/26.69139a843bc1c84f790b.css @@ -0,0 +1 @@ +.childrenWrapper-th__KurO{align-items:center;cursor:default;display:flex;flex:1 0 auto;flex-direction:column;justify-content:center}.container-th__KurO{display:flex;flex-direction:column;padding-top:8px}.wrap-2TpXRNRX{-webkit-backface-visibility:hidden;backface-visibility:hidden;break-inside:avoid;cursor:default;overflow:hidden}.wrap-2TpXRNRX.libAllExchange-2TpXRNRX{column-span:all}.container-2TpXRNRX{align-items:center;background-color:#fff;box-sizing:border-box;display:flex}html.theme-dark .container-2TpXRNRX{background-color:#1e222d}.container-2TpXRNRX .icon-2TpXRNRX,.container-2TpXRNRX .iconWrap-2TpXRNRX{align-items:center;display:flex;justify-content:center}.container-2TpXRNRX .title-2TpXRNRX{color:#131722;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .container-2TpXRNRX .title-2TpXRNRX{color:#b2b5be}.container-2TpXRNRX .title-2TpXRNRX .highlighted-2TpXRNRX,html.theme-dark .container-2TpXRNRX .title-2TpXRNRX .highlighted-2TpXRNRX{color:#90bff9}.container-2TpXRNRX .description-2TpXRNRX{color:#787b86;line-height:17px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.container-2TpXRNRX.libAllExchange-2TpXRNRX{width:calc(50% - 2px)}@media screen and (max-width:479px){.container-2TpXRNRX.libAllExchange-2TpXRNRX{width:auto}}.container-2TpXRNRX.mobile-2TpXRNRX{height:52px}.container-2TpXRNRX.mobile-2TpXRNRX.allExchange-2TpXRNRX{height:40px}.container-2TpXRNRX.mobile-2TpXRNRX .iconWrap-2TpXRNRX{margin-left:2px;width:40px}.container-2TpXRNRX.mobile-2TpXRNRX .icon-2TpXRNRX{height:20px;width:20px}.container-2TpXRNRX.mobile-2TpXRNRX .title-2TpXRNRX{font-size:16px;line-height:24px}.container-2TpXRNRX.mobile-2TpXRNRX .description-2TpXRNRX{font-size:12px}.container-2TpXRNRX.desktop-2TpXRNRX{border-bottom:none;border-radius:4px;height:46px;padding-left:8px}.container-2TpXRNRX.desktop-2TpXRNRX.allExchange-2TpXRNRX{height:38px}.container-2TpXRNRX.desktop-2TpXRNRX .iconWrap-2TpXRNRX{margin-right:8px}.container-2TpXRNRX.desktop-2TpXRNRX .icon-2TpXRNRX{height:24px;width:24px}.container-2TpXRNRX.desktop-2TpXRNRX .allExchangesIcon-2TpXRNRX svg{height:20px;width:20px}.container-2TpXRNRX.desktop-2TpXRNRX .title-2TpXRNRX{font-size:14px;line-height:22px}.container-2TpXRNRX.desktop-2TpXRNRX .description-2TpXRNRX{font-size:12px;line-height:16px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-2TpXRNRX.desktop-2TpXRNRX:hover:not(.selected-2TpXRNRX){background-color:#f0f3fa}html.theme-dark .container-2TpXRNRX.desktop-2TpXRNRX:hover:not(.selected-2TpXRNRX){background-color:#2a2e39}}.container-2TpXRNRX.selected-2TpXRNRX,html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX{background-color:#2962ff}.container-2TpXRNRX.selected-2TpXRNRX .icon-2TpXRNRX{color:#fff}html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .icon-2TpXRNRX{color:#d1d4dc}.container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX,.container-2TpXRNRX.selected-2TpXRNRX .title-2TpXRNRX{color:#fff}html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX,html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .title-2TpXRNRX{color:#d1d4dc}.container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX .highlighted-2TpXRNRX,html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX .highlighted-2TpXRNRX{color:#90bff9}.titleWithoutDesc-2TpXRNRX{padding-bottom:8px;padding-top:8px}.textBlock-2TpXRNRX{display:flex;flex:0 1 auto;flex-direction:column;min-width:0}.bordered-2TpXRNRX{border-bottom:1px solid #f0f3fa}html.theme-dark .bordered-2TpXRNRX{border-bottom:1px solid #2a2e39}.container-oVVv2l_M{height:100%;overflow:hidden}.contentList-oVVv2l_M{overflow-y:auto;padding:6px 0}@media (pointer:fine){.contentList-oVVv2l_M{-ms-overflow-style:none;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .contentList-oVVv2l_M{scrollbar-color:#363a45 #0000}.contentList-oVVv2l_M::-webkit-scrollbar{height:5px;width:5px}.contentList-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .contentList-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.contentList-oVVv2l_M::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.contentList-oVVv2l_M::-webkit-scrollbar-corner{display:none}}.contentListDesktop-oVVv2l_M{padding:16px 0}.exchangeItemsContainer-oVVv2l_M{margin-bottom:16px}.exchangeItemsContainer-oVVv2l_M:last-child{margin-bottom:0}.exchangeItemsContainerDesktop-oVVv2l_M{column-count:2;column-gap:4px;margin-bottom:24px;padding:0 12px}.exchangeItemsContainerDesktop-oVVv2l_M:last-child{margin-bottom:0}@media (max-width:479px){.exchangeItemsContainerDesktop-oVVv2l_M{column-count:1}}.groupTitleDesktop-oVVv2l_M{padding-left:20px}.emptyText-oVVv2l_M{color:#131722;font-size:16px;line-height:24px;margin:12px 20px;text-align:center}html.theme-dark .emptyText-oVVv2l_M{color:#b2b5be}.noResultsDesktop-oVVv2l_M{-ms-overflow-style:none;flex:1 0;overflow:auto;padding-bottom:54px;padding-top:24px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .noResultsDesktop-oVVv2l_M{scrollbar-color:#363a45 #0000}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar{height:5px;width:5px}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .noResultsDesktop-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar-corner{display:none}.actions-3cho5KDh{align-items:center;display:flex;margin-right:9px;padding:0 5px;position:relative}.actions-3cho5KDh:before{background-color:var(--tv-color-platform-background,#e0e3eb);content:"";display:block;height:18px;left:0;position:absolute;width:1px}html.theme-dark .actions-3cho5KDh:before{background-color:var(--tv-color-platform-background,#2a2e39)}.actionButton-3cho5KDh{--tv-toolbar-explicit-hover-border-radius:4px;align-items:center;display:flex;height:26px;justify-content:center;width:26px}.bubble-3MTPKAgt{align-items:center;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-flex;flex:none;font-size:16px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;outline:none;overflow:visible;position:relative}.bubble-3MTPKAgt:focus{outline:none}.bubble-3MTPKAgt:focus-visible{outline:none}.bubble-3MTPKAgt:after{border-style:solid;border-width:2px;box-sizing:border-box;content:"";display:none;height:calc(100% + 10px);left:-5px;pointer-events:none;position:absolute;top:-5px;width:calc(100% + 10px);z-index:1}.bubble-3MTPKAgt:focus:after{display:block}.bubble-3MTPKAgt:focus-visible:after{display:block}.bubble-3MTPKAgt:focus:not(:focus-visible):after{display:none}.bubble-3MTPKAgt:after{border-color:#2962ffcc}.bubble-3MTPKAgt.animated-3MTPKAgt:after{display:block;opacity:0;transition:opacity .2s ease-in-out,visibility 0s ease-in-out .2s;visibility:hidden}.bubble-3MTPKAgt.animated-3MTPKAgt:focus:after{opacity:1;transition:opacity .2s ease-in-out;visibility:visible}.bubble-3MTPKAgt.animated-3MTPKAgt:focus-visible:after{opacity:1;transition:opacity .2s ease-in-out;visibility:visible}.bubble-3MTPKAgt.animated-3MTPKAgt:focus:not(:focus-visible):after{opacity:0;transition:opacity .2s ease-in-out,visibility 0s ease-in-out .2s;visibility:hidden}.bubble-3MTPKAgt .content-3MTPKAgt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bubble-3MTPKAgt.appearance-default-3MTPKAgt{background-color:#f0f3fa;border-color:#f0f3fa;color:#131722}html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt{background-color:#2a2e39;border-color:#2a2e39;color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt:hover{background-color:#e0e3eb;border-color:#e0e3eb}html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt:hover{background-color:#363a45;border-color:#363a45}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt{background-color:#2962ff;border-color:#2962ff;color:#fff}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt{background-color:#ff5252}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover{background-color:#f44336}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt{background-color:#2979ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover{background-color:#0c3299}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt{background-color:#4caf50}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover{background-color:#388e3c}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt{background-color:#ff9100}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover{background-color:#ef6c00}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt{background-color:#ab47bc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover{background-color:#7b1fa2}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt{background-color:#00e5ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover{background-color:#00b8d4}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt{background-color:#ff80ab}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover{background-color:#ec407a}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt{border-color:#ff5252}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover{border-color:#f44336}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt{border-color:#2979ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover{border-color:#0c3299}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt{border-color:#4caf50}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover{border-color:#388e3c}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt{border-color:#ff9100}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover{border-color:#ef6c00}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt{border-color:#ab47bc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover{border-color:#7b1fa2}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt{border-color:#00e5ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover{border-color:#00b8d4}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt{border-color:#ff80ab}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover{border-color:#ec407a}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:after{border-color:#ff5252cc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:after{border-color:#2979ffcc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:after{border-color:#4caf50cc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:after{border-color:#ff9100cc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:after{border-color:#ab47bccc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:after{border-color:#00e5ffcc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:after{border-color:#ff80abcc}.bubble-3MTPKAgt.appearance-text-3MTPKAgt{background-color:initial;border-color:#0000;color:#787b86}html.theme-dark .bubble-3MTPKAgt.appearance-text-3MTPKAgt{color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-text-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-text-3MTPKAgt:hover{border-color:#787b86}}.bubble-3MTPKAgt.appearance-text-3MTPKAgt.active-3MTPKAgt{border-color:#2962ff;color:#2962ff}html.theme-dark .bubble-3MTPKAgt.appearance-text-3MTPKAgt.active-3MTPKAgt{border-color:#2962ff;color:#2962ff}.bubble-3MTPKAgt.size-m-3MTPKAgt{border-radius:14px;height:28px;padding:0 11px}.bubble-3MTPKAgt.size-m-3MTPKAgt:after{border-radius:18px}.bubble-3MTPKAgt.size-l-3MTPKAgt{border-radius:24px;height:48px;padding:0 23px}.bubble-3MTPKAgt.size-l-3MTPKAgt:after{border-radius:28px}.bubbles-1cEBkyVM{-webkit-overflow-scrolling:touch;-ms-overflow-style:none;display:flex;flex:0 0 auto;overflow-x:auto;overflow-y:hidden;padding:4px 20px 12px;scrollbar-width:none}.bubbles-1cEBkyVM.sb-scrollbar-wrap{display:none}.bubbles-1cEBkyVM::-webkit-scrollbar{display:none;height:0;width:0}.bubbles-1cEBkyVM::-webkit-scrollbar-thumb,.bubbles-1cEBkyVM::-webkit-scrollbar-track{display:none}.bubbles-1cEBkyVM::-webkit-scrollbar-corner{display:none}.bubbles-1cEBkyVM.multiLine-1cEBkyVM{flex-flow:wrap}.bubbles-1cEBkyVM .bubble-1cEBkyVM{cursor:default;margin:8px 8px 0 0}.bubbles-1cEBkyVM .bubble-1cEBkyVM:last-child{margin-right:0}.bubbles-1cEBkyVM:after{content:"";display:flex;flex:0 0 auto;width:20px}.flagWrap-1Xy6iEIs{align-items:center;border-radius:4px;color:#2962ff;display:flex;justify-content:center;padding:3px}html.theme-dark .flagWrap-1Xy6iEIs{color:#2962ff}.flagWrap-1Xy6iEIs .icon-1Xy6iEIs{display:flex;height:20px;margin-right:4px;padding:4px;width:20px}.flagWrap-1Xy6iEIs .icon-1Xy6iEIs svg{height:20px;width:20px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.flagWrap-1Xy6iEIs:hover{background-color:#f0f3fa;color:#1e53e5}html.theme-dark .flagWrap-1Xy6iEIs:hover{background-color:#2a2e39;color:#1e53e5}.flagWrap-1Xy6iEIs:hover .caret-1Xy6iEIs{transform:translateY(2px)}}.title-1Xy6iEIs{white-space:nowrap}.caret-1Xy6iEIs{display:flex;height:18px;justify-content:center;width:18px}.wrap-1LtT-c03{display:contents}.item-1LtT-c03{height:40px;padding-right:24px}.item-1LtT-c03:first-child{min-width:0;padding-left:20px}.item-1LtT-c03:last-child{grid-column-start:span 3;padding-right:17px}.item-1LtT-c03,.wrap-1LtT-c03.small-1LtT-c03{align-items:center;background-color:#fff;display:flex;justify-content:space-between;position:sticky;top:0;z-index:1}html.theme-dark .item-1LtT-c03,html.theme-dark .wrap-1LtT-c03.small-1LtT-c03{background-color:#1e222d}.text-1LtT-c03{color:#787b86;font-size:11px;font-style:normal;font-weight:400;letter-spacing:.4px;line-height:16px;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}html.theme-dark .text-1LtT-c03{color:#787b86}.exchange-1LtT-c03{font-size:14px;font-style:normal;font-weight:400;line-height:21px}.wrap-2WiKHt6t{contain:strict;cursor:default;height:100%;overflow:hidden;position:relative;z-index:0}.wrap-2WiKHt6t.watchlist-2WiKHt6t{padding-top:0}.wrap-2WiKHt6t.noFeed-2WiKHt6t{max-height:40px}.scrollContainer-2WiKHt6t{height:100%;overflow:auto;scroll-padding-top:40px}@media (pointer:fine){.scrollContainer-2WiKHt6t{-ms-overflow-style:none;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollContainer-2WiKHt6t{scrollbar-color:#363a45 #0000}.scrollContainer-2WiKHt6t::-webkit-scrollbar{height:5px;width:5px}.scrollContainer-2WiKHt6t::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollContainer-2WiKHt6t::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollContainer-2WiKHt6t::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollContainer-2WiKHt6t::-webkit-scrollbar-corner{display:none}}.scrollContainer-2WiKHt6t.noFeed-2WiKHt6t{overflow:hidden}.listContainer-2WiKHt6t{align-items:center;box-sizing:border-box;display:grid;grid-template-columns:min-content auto min-content min-content;max-width:100%;padding-bottom:6px}.listContainer-2WiKHt6t.multiLineItemsContainer-2WiKHt6t{display:block}@keyframes highlight-animation-theme-light-ZzQNZGNo{50%{background-color:#e3effd}}@keyframes highlight-animation-theme-dark-ZzQNZGNo{50%{background-color:#132042}}.itemRow-ZzQNZGNo{display:contents}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo{align-items:center;display:flex}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .cell-ZzQNZGNo{height:51px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .itemInfoCell-ZzQNZGNo{flex:1 1 auto;padding-right:16px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .description-ZzQNZGNo{justify-content:flex-start}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .symbolDescription-ZzQNZGNo{color:#787b86;font-size:12px;height:17px;line-height:17px;padding-right:0}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .flag-ZzQNZGNo{margin-left:8px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .exchangeDescription-ZzQNZGNo{flex-direction:column-reverse}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .exchangeName-ZzQNZGNo,.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .marketType-ZzQNZGNo{text-align:right}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .exchangeName-ZzQNZGNo{margin:4px 0 0}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .marketType-ZzQNZGNo{line-height:17px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .expandHandleWrap-ZzQNZGNo{align-items:flex-start}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .expandHandle-ZzQNZGNo{margin-top:8px}.itemRow-ZzQNZGNo.hover-ZzQNZGNo .cell-ZzQNZGNo{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.itemRow-ZzQNZGNo:hover .cell-ZzQNZGNo{background-color:#f0f3fa}}html.theme-dark .itemRow-ZzQNZGNo.hover-ZzQNZGNo .cell-ZzQNZGNo{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .itemRow-ZzQNZGNo:hover .cell-ZzQNZGNo{background-color:#2a2e39}}.itemRow-ZzQNZGNo.selected-ZzQNZGNo .cell-ZzQNZGNo{background-color:#bbd9fb}html.theme-dark .itemRow-ZzQNZGNo.selected-ZzQNZGNo .cell-ZzQNZGNo{background-color:#142e61}.itemRow-ZzQNZGNo.active-ZzQNZGNo .cell-ZzQNZGNo,html.theme-dark .itemRow-ZzQNZGNo.active-ZzQNZGNo .cell-ZzQNZGNo{background-color:#2962ff}.itemRow-ZzQNZGNo.highlighted-ZzQNZGNo .cell-ZzQNZGNo{animation-duration:1s;animation-iteration-count:1;animation-timing-function:ease}.itemRow-ZzQNZGNo.highlighted-ZzQNZGNo.light-ZzQNZGNo .cell-ZzQNZGNo{animation-name:highlight-animation-theme-light-ZzQNZGNo}.itemRow-ZzQNZGNo.highlighted-ZzQNZGNo.dark-ZzQNZGNo .cell-ZzQNZGNo{animation-name:highlight-animation-theme-dark-ZzQNZGNo}.itemRow-ZzQNZGNo .itemInfoCell-ZzQNZGNo{display:flex;overflow:hidden;padding-right:24px}.itemRow-ZzQNZGNo .itemInfoCell-ZzQNZGNo.offset-ZzQNZGNo{padding-left:8px}.itemRow-ZzQNZGNo .itemInfoCell-ZzQNZGNo .description-ZzQNZGNo{display:flex;flex-direction:column;justify-content:center;overflow:hidden}.itemRow-ZzQNZGNo .exchangeCell-ZzQNZGNo{align-items:center;display:flex;flex-shrink:0;justify-content:flex-end;overflow:hidden;padding-right:20px}@media screen and (max-width:428px){.itemRow-ZzQNZGNo .exchangeCell-ZzQNZGNo{max-width:104px}}.expandHandleWrap-ZzQNZGNo{align-items:center;display:flex;flex-shrink:0;width:20px}.expandHandleWrap-ZzQNZGNo .expandHandle-ZzQNZGNo{display:flex;height:18px;margin-left:2px;width:18px}.expandHandleWrap-ZzQNZGNo .expandHandle-ZzQNZGNo.expanded-ZzQNZGNo{transform:rotate(90deg)}.symbolDescription-ZzQNZGNo,.symbolTitle-ZzQNZGNo{color:#131722;text-transform:uppercase}html.theme-dark .symbolDescription-ZzQNZGNo,html.theme-dark .symbolTitle-ZzQNZGNo{color:#b2b5be}.symbolDescription-ZzQNZGNo.invalid-ZzQNZGNo,.symbolTitle-ZzQNZGNo.invalid-ZzQNZGNo,html.theme-dark .symbolDescription-ZzQNZGNo.invalid-ZzQNZGNo,html.theme-dark .symbolTitle-ZzQNZGNo.invalid-ZzQNZGNo{color:#ef5350}.symbolDescription-ZzQNZGNo em,.symbolTitle-ZzQNZGNo em{color:#2962ff;font-style:normal;font-weight:700}.symbolDescription-ZzQNZGNo.noDescription-ZzQNZGNo,.symbolTitle-ZzQNZGNo.noDescription-ZzQNZGNo{padding-top:1px}.highlightedText-ZzQNZGNo{font-weight:700}.symbolTitle-ZzQNZGNo{font-size:16px;line-height:24px}.symbolDescription-ZzQNZGNo{font-size:14px;line-height:39px;padding-right:24px}.exchangeDescription-ZzQNZGNo{display:flex;overflow:hidden}.flag-ZzQNZGNo{align-items:center;display:flex;flex-shrink:0}.flag-ZzQNZGNo .icon-ZzQNZGNo{display:flex;height:18px;width:18px}.exchangeName-ZzQNZGNo{color:#131722;font-size:14px;line-height:21px;margin:0 8px}html.theme-dark .exchangeName-ZzQNZGNo{color:#b2b5be}.marketType-ZzQNZGNo{color:#787b86;font-size:12px;line-height:21px}.exchangeName-ZzQNZGNo,.marketType-ZzQNZGNo{text-align:left}.exchangeName-ZzQNZGNo,.marketType-ZzQNZGNo,.symbolDescription-ZzQNZGNo,.symbolTitle-ZzQNZGNo{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exchangeName-ZzQNZGNo.active-ZzQNZGNo,.marketType-ZzQNZGNo.active-ZzQNZGNo,.symbolDescription-ZzQNZGNo.active-ZzQNZGNo,.symbolTitle-ZzQNZGNo.active-ZzQNZGNo{color:#fff}html.theme-dark .exchangeName-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .marketType-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .symbolDescription-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .symbolTitle-ZzQNZGNo.active-ZzQNZGNo{color:#d1d4dc}.dataMode-ZzQNZGNo{color:#ab47bc;font-size:10px;font-weight:700;line-height:12px;margin-left:2px;text-transform:uppercase;vertical-align:top}.cell-ZzQNZGNo{border-bottom:1px solid #f0f3fa;cursor:default;height:39px}html.theme-dark .cell-ZzQNZGNo{border-bottom-color:#2a2e39}.cell-ZzQNZGNo.selected-ZzQNZGNo{background-color:#bbd9fb}html.theme-dark .cell-ZzQNZGNo.selected-ZzQNZGNo{background-color:#142e61}.cell-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .cell-ZzQNZGNo.active-ZzQNZGNo{background-color:#2962ff}.actionsCell-ZzQNZGNo{align-items:center;display:flex;padding-right:12px}.actionsCell-ZzQNZGNo .action-ZzQNZGNo{--tv-list-item-button-background-color:#fff;height:28px;margin-right:8px;width:28px}html.theme-dark .actionsCell-ZzQNZGNo .action-ZzQNZGNo{--tv-list-item-button-background-color:#1e222d}.actionsCell-ZzQNZGNo .action-ZzQNZGNo.selected-ZzQNZGNo{background-color:#90bff9}html.theme-dark .actionsCell-ZzQNZGNo .action-ZzQNZGNo.selected-ZzQNZGNo{background-color:#143a87}.actionsCell-ZzQNZGNo .targetAction-ZzQNZGNo.selected-ZzQNZGNo{color:#131722}html.theme-dark .actionsCell-ZzQNZGNo .targetAction-ZzQNZGNo.selected-ZzQNZGNo{color:#b2b5be}.actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo.selected-ZzQNZGNo{color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo:hover{color:#e53935}}html.theme-dark .actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo.selected-ZzQNZGNo{color:#f44336}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo:hover{color:#f44336}}.actionsCell-ZzQNZGNo .addAction-ZzQNZGNo{color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.actionsCell-ZzQNZGNo .addAction-ZzQNZGNo:hover{color:#2962ff}}html.theme-dark .actionsCell-ZzQNZGNo .addAction-ZzQNZGNo{color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .actionsCell-ZzQNZGNo .addAction-ZzQNZGNo:hover{color:#2962ff}}.search-Hsmn_0WX::placeholder{text-transform:none}.search-Hsmn_0WX.upperCase-Hsmn_0WX{text-transform:uppercase}.symbolType-Hsmn_0WX{max-width:180px}.spinnerWrap-Hsmn_0WX{height:100%;position:relative;width:100%}.emptyText-Hsmn_0WX{color:#131722;font-size:16px;line-height:24px;margin:0 20px;text-align:center}html.theme-dark .emptyText-Hsmn_0WX{color:#b2b5be}.noResultsDesktop-Hsmn_0WX{-ms-overflow-style:none;flex:1 0;overflow:auto;padding-bottom:54px;padding-top:24px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .noResultsDesktop-Hsmn_0WX{scrollbar-color:#363a45 #0000}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar{height:5px;width:5px}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-corner{display:none}.brokerCheckboxWrap-Hsmn_0WX{box-sizing:border-box;margin-right:auto;max-width:100%;padding:0 20px 8px}.button-P2GOgq9R{align-items:center;color:#131722;display:flex;flex:none;justify-content:center;margin-right:20px}html.theme-dark .button-P2GOgq9R{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-P2GOgq9R:hover{background-color:#f0f3fa}html.theme-dark .button-P2GOgq9R:hover{background-color:#2a2e39}}.button-P2GOgq9R.desktop-P2GOgq9R{border-radius:2px;height:34px;margin-left:-3px;margin-right:17px;width:34px}.dialog-1LLxyYSM{overflow:hidden;width:100%}.tabletDialog-1LLxyYSM{height:562px;max-width:560px}.desktopDialog-1LLxyYSM{height:680px;max-width:840px;min-width:719px;width:100%}@media (max-width:768px){.desktopDialog-1LLxyYSM{max-width:640px;min-width:480px}}@media (max-width:519px){.desktopDialog-1LLxyYSM{max-width:479px;min-width:380px}} \ No newline at end of file diff --git a/static/charting_library/bundles/26.69139a843bc1c84f790b.rtl.css b/static/charting_library/bundles/26.69139a843bc1c84f790b.rtl.css new file mode 100644 index 0000000..e77d6ed --- /dev/null +++ b/static/charting_library/bundles/26.69139a843bc1c84f790b.rtl.css @@ -0,0 +1 @@ +.childrenWrapper-th__KurO{align-items:center;cursor:default;display:flex;flex:1 0 auto;flex-direction:column;justify-content:center}.container-th__KurO{display:flex;flex-direction:column;padding-top:8px}.wrap-2TpXRNRX{-webkit-backface-visibility:hidden;backface-visibility:hidden;break-inside:avoid;cursor:default;overflow:hidden}.wrap-2TpXRNRX.libAllExchange-2TpXRNRX{column-span:all}.container-2TpXRNRX{align-items:center;background-color:#fff;box-sizing:border-box;display:flex}html.theme-dark .container-2TpXRNRX{background-color:#1e222d}.container-2TpXRNRX .icon-2TpXRNRX,.container-2TpXRNRX .iconWrap-2TpXRNRX{align-items:center;display:flex;justify-content:center}.container-2TpXRNRX .title-2TpXRNRX{color:#131722;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .container-2TpXRNRX .title-2TpXRNRX{color:#b2b5be}.container-2TpXRNRX .title-2TpXRNRX .highlighted-2TpXRNRX,html.theme-dark .container-2TpXRNRX .title-2TpXRNRX .highlighted-2TpXRNRX{color:#90bff9}.container-2TpXRNRX .description-2TpXRNRX{color:#787b86;line-height:17px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.container-2TpXRNRX.libAllExchange-2TpXRNRX{width:calc(50% - 2px)}@media screen and (max-width:479px){.container-2TpXRNRX.libAllExchange-2TpXRNRX{width:auto}}.container-2TpXRNRX.mobile-2TpXRNRX{height:52px}.container-2TpXRNRX.mobile-2TpXRNRX.allExchange-2TpXRNRX{height:40px}.container-2TpXRNRX.mobile-2TpXRNRX .iconWrap-2TpXRNRX{margin-right:2px;width:40px}.container-2TpXRNRX.mobile-2TpXRNRX .icon-2TpXRNRX{height:20px;width:20px}.container-2TpXRNRX.mobile-2TpXRNRX .title-2TpXRNRX{font-size:16px;line-height:24px}.container-2TpXRNRX.mobile-2TpXRNRX .description-2TpXRNRX{font-size:12px}.container-2TpXRNRX.desktop-2TpXRNRX{border-bottom:none;border-radius:4px;height:46px;padding-right:8px}.container-2TpXRNRX.desktop-2TpXRNRX.allExchange-2TpXRNRX{height:38px}.container-2TpXRNRX.desktop-2TpXRNRX .iconWrap-2TpXRNRX{margin-left:8px}.container-2TpXRNRX.desktop-2TpXRNRX .icon-2TpXRNRX{height:24px;width:24px}.container-2TpXRNRX.desktop-2TpXRNRX .allExchangesIcon-2TpXRNRX svg{height:20px;width:20px}.container-2TpXRNRX.desktop-2TpXRNRX .title-2TpXRNRX{font-size:14px;line-height:22px}.container-2TpXRNRX.desktop-2TpXRNRX .description-2TpXRNRX{font-size:12px;line-height:16px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-2TpXRNRX.desktop-2TpXRNRX:hover:not(.selected-2TpXRNRX){background-color:#f0f3fa}html.theme-dark .container-2TpXRNRX.desktop-2TpXRNRX:hover:not(.selected-2TpXRNRX){background-color:#2a2e39}}.container-2TpXRNRX.selected-2TpXRNRX,html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX{background-color:#2962ff}.container-2TpXRNRX.selected-2TpXRNRX .icon-2TpXRNRX{color:#fff}html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .icon-2TpXRNRX{color:#d1d4dc}.container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX,.container-2TpXRNRX.selected-2TpXRNRX .title-2TpXRNRX{color:#fff}html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX,html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .title-2TpXRNRX{color:#d1d4dc}.container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX .highlighted-2TpXRNRX,html.theme-dark .container-2TpXRNRX.selected-2TpXRNRX .description-2TpXRNRX .highlighted-2TpXRNRX{color:#90bff9}.titleWithoutDesc-2TpXRNRX{padding-bottom:8px;padding-top:8px}.textBlock-2TpXRNRX{display:flex;flex:0 1 auto;flex-direction:column;min-width:0}.bordered-2TpXRNRX{border-bottom:1px solid #f0f3fa}html.theme-dark .bordered-2TpXRNRX{border-bottom:1px solid #2a2e39}.container-oVVv2l_M{height:100%;overflow:hidden}.contentList-oVVv2l_M{overflow-y:auto;padding:6px 0}@media (pointer:fine){.contentList-oVVv2l_M{-ms-overflow-style:none;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .contentList-oVVv2l_M{scrollbar-color:#363a45 #0000}.contentList-oVVv2l_M::-webkit-scrollbar{height:5px;width:5px}.contentList-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .contentList-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.contentList-oVVv2l_M::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.contentList-oVVv2l_M::-webkit-scrollbar-corner{display:none}}.contentListDesktop-oVVv2l_M{padding:16px 0}.exchangeItemsContainer-oVVv2l_M{margin-bottom:16px}.exchangeItemsContainer-oVVv2l_M:last-child{margin-bottom:0}.exchangeItemsContainerDesktop-oVVv2l_M{column-count:2;column-gap:4px;margin-bottom:24px;padding:0 12px}.exchangeItemsContainerDesktop-oVVv2l_M:last-child{margin-bottom:0}@media (max-width:479px){.exchangeItemsContainerDesktop-oVVv2l_M{column-count:1}}.groupTitleDesktop-oVVv2l_M{padding-right:20px}.emptyText-oVVv2l_M{color:#131722;font-size:16px;line-height:24px;margin:12px 20px;text-align:center}html.theme-dark .emptyText-oVVv2l_M{color:#b2b5be}.noResultsDesktop-oVVv2l_M{-ms-overflow-style:none;flex:1 0;overflow:auto;padding-bottom:54px;padding-top:24px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .noResultsDesktop-oVVv2l_M{scrollbar-color:#363a45 #0000}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar{height:5px;width:5px}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .noResultsDesktop-oVVv2l_M::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.noResultsDesktop-oVVv2l_M::-webkit-scrollbar-corner{display:none}.actions-3cho5KDh{align-items:center;display:flex;margin-left:9px;padding:0 5px;position:relative}.actions-3cho5KDh:before{background-color:var(--tv-color-platform-background,#e0e3eb);content:"";display:block;height:18px;position:absolute;right:0;width:1px}html.theme-dark .actions-3cho5KDh:before{background-color:var(--tv-color-platform-background,#2a2e39)}.actionButton-3cho5KDh{--tv-toolbar-explicit-hover-border-radius:4px;align-items:center;display:flex;height:26px;justify-content:center;width:26px}.bubble-3MTPKAgt{align-items:center;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-flex;flex:none;font-size:16px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;outline:none;overflow:visible;position:relative}.bubble-3MTPKAgt:focus{outline:none}.bubble-3MTPKAgt:focus-visible{outline:none}.bubble-3MTPKAgt:after{border-style:solid;border-width:2px;box-sizing:border-box;content:"";display:none;height:calc(100% + 10px);pointer-events:none;position:absolute;right:-5px;top:-5px;width:calc(100% + 10px);z-index:1}.bubble-3MTPKAgt:focus:after{display:block}.bubble-3MTPKAgt:focus-visible:after{display:block}.bubble-3MTPKAgt:focus:not(:focus-visible):after{display:none}.bubble-3MTPKAgt:after{border-color:#2962ffcc}.bubble-3MTPKAgt.animated-3MTPKAgt:after{display:block;opacity:0;transition:opacity .2s ease-in-out,visibility 0s ease-in-out .2s;visibility:hidden}.bubble-3MTPKAgt.animated-3MTPKAgt:focus:after{opacity:1;transition:opacity .2s ease-in-out;visibility:visible}.bubble-3MTPKAgt.animated-3MTPKAgt:focus-visible:after{opacity:1;transition:opacity .2s ease-in-out;visibility:visible}.bubble-3MTPKAgt.animated-3MTPKAgt:focus:not(:focus-visible):after{opacity:0;transition:opacity .2s ease-in-out,visibility 0s ease-in-out .2s;visibility:hidden}.bubble-3MTPKAgt .content-3MTPKAgt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bubble-3MTPKAgt.appearance-default-3MTPKAgt{background-color:#f0f3fa;border-color:#f0f3fa;color:#131722}html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt{background-color:#2a2e39;border-color:#2a2e39;color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt:hover{background-color:#e0e3eb;border-color:#e0e3eb}html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt:hover{background-color:#363a45;border-color:#363a45}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt{background-color:#2962ff;border-color:#2962ff;color:#fff}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt{background-color:#ff5252}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover{background-color:#f44336}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt{background-color:#2979ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover{background-color:#0c3299}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt{background-color:#4caf50}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover{background-color:#388e3c}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt{background-color:#ff9100}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover{background-color:#ef6c00}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt{background-color:#ab47bc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover{background-color:#7b1fa2}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt{background-color:#00e5ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover{background-color:#00b8d4}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt{background-color:#ff80ab}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover{background-color:#ec407a}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt{border-color:#ff5252}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:hover{border-color:#f44336}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt{border-color:#2979ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:hover{border-color:#0c3299}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt{border-color:#4caf50}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:hover{border-color:#388e3c}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt{border-color:#ff9100}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:hover{border-color:#ef6c00}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt{border-color:#ab47bc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:hover{border-color:#7b1fa2}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt{border-color:#00e5ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:hover{border-color:#00b8d4}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt{border-color:#ff80ab}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:hover{border-color:#ec407a}}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.red-3MTPKAgt:after{border-color:#ff5252cc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.blue-3MTPKAgt:after{border-color:#2979ffcc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.green-3MTPKAgt:after{border-color:#4caf50cc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.orange-3MTPKAgt:after{border-color:#ff9100cc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.purple-3MTPKAgt:after{border-color:#ab47bccc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.cyan-3MTPKAgt:after{border-color:#00e5ffcc}.bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:after,html.theme-dark .bubble-3MTPKAgt.appearance-default-3MTPKAgt.active-3MTPKAgt.pink-3MTPKAgt:after{border-color:#ff80abcc}.bubble-3MTPKAgt.appearance-text-3MTPKAgt{background-color:initial;border-color:#0000;color:#787b86}html.theme-dark .bubble-3MTPKAgt.appearance-text-3MTPKAgt{color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.bubble-3MTPKAgt.appearance-text-3MTPKAgt:hover,html.theme-dark .bubble-3MTPKAgt.appearance-text-3MTPKAgt:hover{border-color:#787b86}}.bubble-3MTPKAgt.appearance-text-3MTPKAgt.active-3MTPKAgt{border-color:#2962ff;color:#2962ff}html.theme-dark .bubble-3MTPKAgt.appearance-text-3MTPKAgt.active-3MTPKAgt{border-color:#2962ff;color:#2962ff}.bubble-3MTPKAgt.size-m-3MTPKAgt{border-radius:14px;height:28px;padding:0 11px}.bubble-3MTPKAgt.size-m-3MTPKAgt:after{border-radius:18px}.bubble-3MTPKAgt.size-l-3MTPKAgt{border-radius:24px;height:48px;padding:0 23px}.bubble-3MTPKAgt.size-l-3MTPKAgt:after{border-radius:28px}.bubbles-1cEBkyVM{-webkit-overflow-scrolling:touch;-ms-overflow-style:none;display:flex;flex:0 0 auto;overflow-x:auto;overflow-y:hidden;padding:4px 20px 12px;scrollbar-width:none}.bubbles-1cEBkyVM.sb-scrollbar-wrap{display:none}.bubbles-1cEBkyVM::-webkit-scrollbar{display:none;height:0;width:0}.bubbles-1cEBkyVM::-webkit-scrollbar-thumb,.bubbles-1cEBkyVM::-webkit-scrollbar-track{display:none}.bubbles-1cEBkyVM::-webkit-scrollbar-corner{display:none}.bubbles-1cEBkyVM.multiLine-1cEBkyVM{flex-flow:wrap}.bubbles-1cEBkyVM .bubble-1cEBkyVM{cursor:default;margin:8px 0 0 8px}.bubbles-1cEBkyVM .bubble-1cEBkyVM:last-child{margin-left:0}.bubbles-1cEBkyVM:after{content:"";display:flex;flex:0 0 auto;width:20px}.flagWrap-1Xy6iEIs{align-items:center;border-radius:4px;color:#2962ff;display:flex;justify-content:center;padding:3px}html.theme-dark .flagWrap-1Xy6iEIs{color:#2962ff}.flagWrap-1Xy6iEIs .icon-1Xy6iEIs{display:flex;height:20px;margin-left:4px;padding:4px;width:20px}.flagWrap-1Xy6iEIs .icon-1Xy6iEIs svg{height:20px;width:20px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.flagWrap-1Xy6iEIs:hover{background-color:#f0f3fa;color:#1e53e5}html.theme-dark .flagWrap-1Xy6iEIs:hover{background-color:#2a2e39;color:#1e53e5}.flagWrap-1Xy6iEIs:hover .caret-1Xy6iEIs{transform:translateY(2px)}}.title-1Xy6iEIs{white-space:nowrap}.caret-1Xy6iEIs{display:flex;height:18px;justify-content:center;width:18px}.wrap-1LtT-c03{display:contents}.item-1LtT-c03{height:40px;padding-left:24px}.item-1LtT-c03:first-child{min-width:0;padding-right:20px}.item-1LtT-c03:last-child{grid-column-start:span 3;padding-left:17px}.item-1LtT-c03,.wrap-1LtT-c03.small-1LtT-c03{align-items:center;background-color:#fff;display:flex;justify-content:space-between;position:sticky;top:0;z-index:1}html.theme-dark .item-1LtT-c03,html.theme-dark .wrap-1LtT-c03.small-1LtT-c03{background-color:#1e222d}.text-1LtT-c03{color:#787b86;font-size:11px;font-style:normal;font-weight:400;letter-spacing:.4px;line-height:16px;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}html.theme-dark .text-1LtT-c03{color:#787b86}.exchange-1LtT-c03{font-size:14px;font-style:normal;font-weight:400;line-height:21px}.wrap-2WiKHt6t{contain:strict;cursor:default;height:100%;overflow:hidden;position:relative;z-index:0}.wrap-2WiKHt6t.watchlist-2WiKHt6t{padding-top:0}.wrap-2WiKHt6t.noFeed-2WiKHt6t{max-height:40px}.scrollContainer-2WiKHt6t{height:100%;overflow:auto;scroll-padding-top:40px}@media (pointer:fine){.scrollContainer-2WiKHt6t{-ms-overflow-style:none;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollContainer-2WiKHt6t{scrollbar-color:#363a45 #0000}.scrollContainer-2WiKHt6t::-webkit-scrollbar{height:5px;width:5px}.scrollContainer-2WiKHt6t::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollContainer-2WiKHt6t::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollContainer-2WiKHt6t::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollContainer-2WiKHt6t::-webkit-scrollbar-corner{display:none}}.scrollContainer-2WiKHt6t.noFeed-2WiKHt6t{overflow:hidden}.listContainer-2WiKHt6t{align-items:center;box-sizing:border-box;display:grid;grid-template-columns:min-content auto min-content min-content;max-width:100%;padding-bottom:6px}.listContainer-2WiKHt6t.multiLineItemsContainer-2WiKHt6t{display:block}@keyframes highlight-animation-theme-light-ZzQNZGNo{50%{background-color:#e3effd}}@keyframes highlight-animation-theme-dark-ZzQNZGNo{50%{background-color:#132042}}.itemRow-ZzQNZGNo{display:contents}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo{align-items:center;display:flex}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .cell-ZzQNZGNo{height:51px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .itemInfoCell-ZzQNZGNo{flex:1 1 auto;padding-left:16px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .description-ZzQNZGNo{justify-content:flex-start}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .symbolDescription-ZzQNZGNo{color:#787b86;font-size:12px;height:17px;line-height:17px;padding-left:0}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .flag-ZzQNZGNo{margin-right:8px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .exchangeDescription-ZzQNZGNo{flex-direction:column-reverse}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .exchangeName-ZzQNZGNo,.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .marketType-ZzQNZGNo{text-align:left}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .exchangeName-ZzQNZGNo{margin:4px 0 0}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .marketType-ZzQNZGNo{line-height:17px}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .expandHandleWrap-ZzQNZGNo{align-items:flex-start}.itemRow-ZzQNZGNo.multiLine-ZzQNZGNo .expandHandle-ZzQNZGNo{margin-top:8px}.itemRow-ZzQNZGNo.hover-ZzQNZGNo .cell-ZzQNZGNo{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.itemRow-ZzQNZGNo:hover .cell-ZzQNZGNo{background-color:#f0f3fa}}html.theme-dark .itemRow-ZzQNZGNo.hover-ZzQNZGNo .cell-ZzQNZGNo{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .itemRow-ZzQNZGNo:hover .cell-ZzQNZGNo{background-color:#2a2e39}}.itemRow-ZzQNZGNo.selected-ZzQNZGNo .cell-ZzQNZGNo{background-color:#bbd9fb}html.theme-dark .itemRow-ZzQNZGNo.selected-ZzQNZGNo .cell-ZzQNZGNo{background-color:#142e61}.itemRow-ZzQNZGNo.active-ZzQNZGNo .cell-ZzQNZGNo,html.theme-dark .itemRow-ZzQNZGNo.active-ZzQNZGNo .cell-ZzQNZGNo{background-color:#2962ff}.itemRow-ZzQNZGNo.highlighted-ZzQNZGNo .cell-ZzQNZGNo{animation-duration:1s;animation-iteration-count:1;animation-timing-function:ease}.itemRow-ZzQNZGNo.highlighted-ZzQNZGNo.light-ZzQNZGNo .cell-ZzQNZGNo{animation-name:highlight-animation-theme-light-ZzQNZGNo}.itemRow-ZzQNZGNo.highlighted-ZzQNZGNo.dark-ZzQNZGNo .cell-ZzQNZGNo{animation-name:highlight-animation-theme-dark-ZzQNZGNo}.itemRow-ZzQNZGNo .itemInfoCell-ZzQNZGNo{display:flex;overflow:hidden;padding-left:24px}.itemRow-ZzQNZGNo .itemInfoCell-ZzQNZGNo.offset-ZzQNZGNo{padding-right:8px}.itemRow-ZzQNZGNo .itemInfoCell-ZzQNZGNo .description-ZzQNZGNo{display:flex;flex-direction:column;justify-content:center;overflow:hidden}.itemRow-ZzQNZGNo .exchangeCell-ZzQNZGNo{align-items:center;display:flex;flex-shrink:0;justify-content:flex-end;overflow:hidden;padding-left:20px}@media screen and (max-width:428px){.itemRow-ZzQNZGNo .exchangeCell-ZzQNZGNo{max-width:104px}}.expandHandleWrap-ZzQNZGNo{align-items:center;display:flex;flex-shrink:0;width:20px}.expandHandleWrap-ZzQNZGNo .expandHandle-ZzQNZGNo{display:flex;height:18px;margin-right:2px;width:18px}.expandHandleWrap-ZzQNZGNo .expandHandle-ZzQNZGNo.expanded-ZzQNZGNo{transform:rotate(-90deg)}.symbolDescription-ZzQNZGNo,.symbolTitle-ZzQNZGNo{color:#131722;text-transform:uppercase}html.theme-dark .symbolDescription-ZzQNZGNo,html.theme-dark .symbolTitle-ZzQNZGNo{color:#b2b5be}.symbolDescription-ZzQNZGNo.invalid-ZzQNZGNo,.symbolTitle-ZzQNZGNo.invalid-ZzQNZGNo,html.theme-dark .symbolDescription-ZzQNZGNo.invalid-ZzQNZGNo,html.theme-dark .symbolTitle-ZzQNZGNo.invalid-ZzQNZGNo{color:#ef5350}.symbolDescription-ZzQNZGNo em,.symbolTitle-ZzQNZGNo em{color:#2962ff;font-style:normal;font-weight:700}.symbolDescription-ZzQNZGNo.noDescription-ZzQNZGNo,.symbolTitle-ZzQNZGNo.noDescription-ZzQNZGNo{padding-top:1px}.highlightedText-ZzQNZGNo{font-weight:700}.symbolTitle-ZzQNZGNo{font-size:16px;line-height:24px}.symbolDescription-ZzQNZGNo{font-size:14px;line-height:39px;padding-left:24px}.exchangeDescription-ZzQNZGNo{display:flex;overflow:hidden}.flag-ZzQNZGNo{align-items:center;display:flex;flex-shrink:0}.flag-ZzQNZGNo .icon-ZzQNZGNo{display:flex;height:18px;width:18px}.exchangeName-ZzQNZGNo{color:#131722;font-size:14px;line-height:21px;margin:0 8px}html.theme-dark .exchangeName-ZzQNZGNo{color:#b2b5be}.marketType-ZzQNZGNo{color:#787b86;font-size:12px;line-height:21px}.exchangeName-ZzQNZGNo,.marketType-ZzQNZGNo{text-align:right}.exchangeName-ZzQNZGNo,.marketType-ZzQNZGNo,.symbolDescription-ZzQNZGNo,.symbolTitle-ZzQNZGNo{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.exchangeName-ZzQNZGNo.active-ZzQNZGNo,.marketType-ZzQNZGNo.active-ZzQNZGNo,.symbolDescription-ZzQNZGNo.active-ZzQNZGNo,.symbolTitle-ZzQNZGNo.active-ZzQNZGNo{color:#fff}html.theme-dark .exchangeName-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .marketType-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .symbolDescription-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .symbolTitle-ZzQNZGNo.active-ZzQNZGNo{color:#d1d4dc}.dataMode-ZzQNZGNo{color:#ab47bc;font-size:10px;font-weight:700;line-height:12px;margin-right:2px;text-transform:uppercase;vertical-align:top}.cell-ZzQNZGNo{border-bottom:1px solid #f0f3fa;cursor:default;height:39px}html.theme-dark .cell-ZzQNZGNo{border-bottom-color:#2a2e39}.cell-ZzQNZGNo.selected-ZzQNZGNo{background-color:#bbd9fb}html.theme-dark .cell-ZzQNZGNo.selected-ZzQNZGNo{background-color:#142e61}.cell-ZzQNZGNo.active-ZzQNZGNo,html.theme-dark .cell-ZzQNZGNo.active-ZzQNZGNo{background-color:#2962ff}.actionsCell-ZzQNZGNo{align-items:center;display:flex;padding-left:12px}.actionsCell-ZzQNZGNo .action-ZzQNZGNo{--tv-list-item-button-background-color:#fff;height:28px;margin-left:8px;width:28px}html.theme-dark .actionsCell-ZzQNZGNo .action-ZzQNZGNo{--tv-list-item-button-background-color:#1e222d}.actionsCell-ZzQNZGNo .action-ZzQNZGNo.selected-ZzQNZGNo{background-color:#90bff9}html.theme-dark .actionsCell-ZzQNZGNo .action-ZzQNZGNo.selected-ZzQNZGNo{background-color:#143a87}.actionsCell-ZzQNZGNo .targetAction-ZzQNZGNo.selected-ZzQNZGNo{color:#131722}html.theme-dark .actionsCell-ZzQNZGNo .targetAction-ZzQNZGNo.selected-ZzQNZGNo{color:#b2b5be}.actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo.selected-ZzQNZGNo{color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo:hover{color:#e53935}}html.theme-dark .actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo.selected-ZzQNZGNo{color:#f44336}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .actionsCell-ZzQNZGNo .removeAction-ZzQNZGNo:hover{color:#f44336}}.actionsCell-ZzQNZGNo .addAction-ZzQNZGNo{color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.actionsCell-ZzQNZGNo .addAction-ZzQNZGNo:hover{color:#2962ff}}html.theme-dark .actionsCell-ZzQNZGNo .addAction-ZzQNZGNo{color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .actionsCell-ZzQNZGNo .addAction-ZzQNZGNo:hover{color:#2962ff}}.search-Hsmn_0WX::placeholder{text-transform:none}.search-Hsmn_0WX.upperCase-Hsmn_0WX{text-transform:uppercase}.symbolType-Hsmn_0WX{max-width:180px}.spinnerWrap-Hsmn_0WX{height:100%;position:relative;width:100%}.emptyText-Hsmn_0WX{color:#131722;font-size:16px;line-height:24px;margin:0 20px;text-align:center}html.theme-dark .emptyText-Hsmn_0WX{color:#b2b5be}.noResultsDesktop-Hsmn_0WX{-ms-overflow-style:none;flex:1 0;overflow:auto;padding-bottom:54px;padding-top:24px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .noResultsDesktop-Hsmn_0WX{scrollbar-color:#363a45 #0000}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar{height:5px;width:5px}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.noResultsDesktop-Hsmn_0WX::-webkit-scrollbar-corner{display:none}.brokerCheckboxWrap-Hsmn_0WX{box-sizing:border-box;margin-left:auto;max-width:100%;padding:0 20px 8px}.button-P2GOgq9R{align-items:center;color:#131722;display:flex;flex:none;justify-content:center;margin-left:20px;transform:scaleX(-1)}html.theme-dark .button-P2GOgq9R{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-P2GOgq9R:hover{background-color:#f0f3fa}html.theme-dark .button-P2GOgq9R:hover{background-color:#2a2e39}}.button-P2GOgq9R.desktop-P2GOgq9R{border-radius:2px;height:34px;margin-left:17px;margin-right:-3px;width:34px}.dialog-1LLxyYSM{overflow:hidden;width:100%}.tabletDialog-1LLxyYSM{height:562px;max-width:560px}.desktopDialog-1LLxyYSM{height:680px;max-width:840px;min-width:719px;width:100%}@media (max-width:768px){.desktopDialog-1LLxyYSM{max-width:640px;min-width:480px}}@media (max-width:519px){.desktopDialog-1LLxyYSM{max-width:479px;min-width:380px}} \ No newline at end of file diff --git a/static/charting_library/bundles/27.e3ec08b1fb9df5f36ada.js b/static/charting_library/bundles/27.e3ec08b1fb9df5f36ada.js new file mode 100644 index 0000000..4ced06e --- /dev/null +++ b/static/charting_library/bundles/27.e3ec08b1fb9df5f36ada.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{GOhO:function(e,t,n){"use strict";var r=n("+DwS");n("tc+8");var o=n("m/cY");function i(e,...t){const n=()=>e(...t.map(e=>e.value())),r=Object(o.a)(n()),i=()=>r.setValue(n()),u={};for(const e of t)e.subscribe(u,i);return r.destroy=()=>{t.forEach(e=>e.unsubscribeAll(u))},r}n.d(t,"b",(function(){return r.a})),n.d(t,"a",(function(){return i}))},HSjo:function(e,t,n){"use strict";function r(e,t){return{propType:"checkable",properties:e,...t}}function o(e,t,n){return{propType:"checkableSet",properties:e,childrenDefinitions:n,...t}}function i(e,t){return{propType:"color",properties:e,noAlpha:!1,...t}}var u=n("a7Ha"),s=n("8Uy/");const c=[s.LINESTYLE_SOLID,s.LINESTYLE_DOTTED,s.LINESTYLE_DASHED],p=[1,2,3,4],l=[u.LineEnd.Normal,u.LineEnd.Arrow];function d(e,t){const n={propType:"line",properties:e,...t};return void 0!==n.properties.style&&(n.styleValues=c),void 0!==n.properties.width&&(n.widthValues=p),void 0===n.properties.leftEnd&&void 0===n.properties.rightEnd||void 0!==n.endsValues||(n.endsValues=l),void 0!==n.properties.value&&void 0===n.valueType&&(n.valueType=1),n}const a=[s.LINESTYLE_SOLID,s.LINESTYLE_DOTTED,s.LINESTYLE_DASHED],f=[1,2,3,4];function v(e,t){const n={propType:"leveledLine",properties:e,...t};return void 0!==n.properties.style&&(n.styleValues=a),void 0!==n.properties.width&&(n.widthValues=f),n}function b(e,t){return{propType:"number",properties:e,type:1,...t}}function y(e,t){return{propType:"options",properties:e,...t}}function w(e,t){return{propType:"twoOptions",properties:e,...t}}n("YFKU");const T=[{id:"bottom",value:"bottom",title:window.t("Top")},{id:"middle",value:"middle",title:window.t("Middle")},{id:"top",value:"top",title:window.t("Bottom")}],m=[{id:"left",value:"left",title:window.t("Left")},{id:"center",value:"center",title:window.t("Center")},{id:"right",value:"right",title:window.t("Right")}],g=[{id:"horizontal",value:"horizontal",title:window.t("Horizontal")},{id:"vertical",value:"vertical",title:window.t("Vertical")}],h=[10,11,12,14,16,20,24,28,32,40].map(e=>({title:String(e),value:e})),E=[1,2,3,4],V=window.t("Text alignment"),S=window.t("Text orientation");function I(e,t){const n={propType:"text",properties:e,...t,isEditable:t.isEditable||!1};return void 0!==n.properties.size&&void 0===n.sizeItems&&(n.sizeItems=h),void 0!==n.properties.alignmentVertical&&void 0===n.alignmentVerticalItems&&(n.alignmentVerticalItems=T),void 0!==n.properties.alignmentHorizontal&&void 0===n.alignmentHorizontalItems&&(n.alignmentHorizontalItems=m),(n.alignmentVerticalItems||n.alignmentHorizontalItems)&&void 0===n.alignmentTitle&&(n.alignmentTitle=V),void 0!==n.properties.orientation&&(void 0===n.orientationItems&&(n.orientationItems=g),void 0===n.orientationTitle&&(n.orientationTitle=S)),void 0!==n.properties.borderWidth&&void 0===n.borderWidthItems&&(n.borderWidthItems=E),n}function L(e,t){return{propType:"twoColors",properties:e,noAlpha1:!1,noAlpha2:!1,...t}}function O(e,t){return{propType:"coordinates",properties:e,...t}}function A(e,t){return{ +propType:"range",properties:e,...t}}function D(e,t){return{propType:"transparency",properties:e,...t}}function z(e,t){return{propType:"symbol",properties:e,...t}}function H(e,t){return{propType:"session",properties:e,...t}}function j(e,t){return{propType:"emoji",properties:e,...t}}var Y=n("hY0g"),k=n.n(Y);function M(e,t,n){return{id:t,title:n,groupType:"general",definitions:new k.a(e)}}function N(e,t,n){return{id:t,title:n,groupType:"leveledLines",definitions:new k.a(e)}}function P(e,t){const n=new Map,r=void 0!==t?t[0]:e=>e,o=void 0!==t?void 0!==t[1]?t[1]:t[0]:e=>e,i={value:()=>r(e.value()),setValue:t=>{e.setValue(o(t))},subscribe:(t,r)=>{const o=e=>{r(i)};n.set(r,o),e.subscribe(t,o)},unsubscribe:(t,r)=>{const o=n.get(r);o&&(e.unsubscribe(t,o),n.delete(r))},unsubscribeAll:t=>{e.unsubscribeAll(t),n.clear()}};return i}function _(e,t,n,r){const o=P(t,r),i=void 0!==r?void 0!==r[1]?r[1]:r[0]:e=>e;return o.setValue=r=>e.setProperty(t,i(r),n),o}function x(e,t,n,r){const o=function(e,t){const n=new Map,r=void 0!==t?t[0]:e=>e,o=void 0!==t?void 0!==t[1]?t[1]:t[0]:e=>e,i={value:()=>r(e.value()),setValue:t=>{e.setValue(o(t))},subscribe:(t,r)=>{const o=()=>{r(i)};let u=n.get(t);void 0===u?(u=new Map,u.set(r,o),n.set(t,u)):u.set(r,o),e.subscribe(o)},unsubscribe:(t,r)=>{const o=n.get(t);if(void 0!==o){const t=o.get(r);void 0!==t&&(e.unsubscribe(t),o.delete(r))}},unsubscribeAll:t=>{const r=n.get(t);void 0!==r&&(r.forEach((t,n)=>{e.unsubscribe(t)}),r.clear())}};return i}(t,r),i=void 0!==r?void 0!==r[1]?r[1]:r[0]:e=>e;return o.setValue=r=>e.undoHistory().setWatchedValue(t,i(r),n),o}function U(e,t){const n=P(t);return n.setValue=t=>e.setPriceScaleSelectionStrategy(t),n}function W(e,t,n,r){const o=P(t);return o.setValue=t=>{const o={lockScale:t};e.setPriceScaleMode(o,n,r)},o}function C(e,t,n,r){const o=P(t,r);return o.setValue=r=>{e.setScaleRatioProperty(t,r,n)},o}var J=n("eJTA"),R=n("Tmoa"),G=n("GOhO");function q(e,t){if(Object(R.isHexColor)(e)){const n=Object(J.parseRgb)(e);return Object(J.rgbaToString)(Object(J.rgba)(n,(100-t)/100))}return e}function B(e,t,n,r,o){let i;if(null!==n){i=function(e){const t=P(e);return t.destroy=()=>{e.destroy()},t}(Object(G.a)(q,t,n))}else i=P(t,[()=>q(t.value(),0),e=>e]);return i.setValue=n=>{o&&e.beginUndoMacro(r),e.setProperty(t,n,r),o&&e.endUndoMacro()},i}function F(e,t,n,r,o,i){const u=[(s=n,c=t,e=>{const t=s(c);if(e===c.value()&&null!==t){const e=t.ticker||t.full_name;if(e)return e}return e}),e=>e];var s,c;const p=_(e,t,o,u);i&&(p.setValue=i);const l=new Map;p.subscribe=(e,n)=>{const r=e=>{n(p)};l.set(n,r),t.subscribe(e,r)},p.unsubscribe=(e,n)=>{const r=l.get(n);r&&(t.unsubscribe(e,r),l.delete(n))};const d={};return r.subscribe(d,()=>{l.forEach((e,t)=>{e(p)})}),p.destroy=()=>{r.unsubscribeAll(d),l.clear()},p}function K(e){return e.hasOwnProperty("groupType")}function Q(e){e.forEach(e=>{if(e.hasOwnProperty("propType")){Object.keys(e.properties).forEach(t=>{const n=e.properties[t];void 0!==n&&void 0!==n.destroy&&n.destroy()})}else Q(e.definitions.value())})}n.d(t,"A",(function(){return K})), +n.d(t,"u",(function(){return Q})),n.d(t,"c",(function(){return r})),n.d(t,"d",(function(){return o})),n.d(t,"e",(function(){return i})),n.d(t,"i",(function(){return d})),n.d(t,"h",(function(){return v})),n.d(t,"j",(function(){return b})),n.d(t,"k",(function(){return y})),n.d(t,"t",(function(){return w})),n.d(t,"q",(function(){return I})),n.d(t,"s",(function(){return L})),n.d(t,"f",(function(){return O})),n.d(t,"n",(function(){return A})),n.d(t,"r",(function(){return D})),n.d(t,"p",(function(){return z})),n.d(t,"o",(function(){return H})),n.d(t,"g",(function(){return j})),n.d(t,"l",(function(){return M})),n.d(t,"m",(function(){return N})),n.d(t,"b",(function(){return _})),n.d(t,"a",(function(){return x})),n.d(t,"x",(function(){return U})),n.d(t,"w",(function(){return W})),n.d(t,"y",(function(){return C})),n.d(t,"v",(function(){return B})),n.d(t,"z",(function(){return F}))}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/28.3140e8cb507ad2593c76.css b/static/charting_library/bundles/28.3140e8cb507ad2593c76.css new file mode 100644 index 0000000..7c2a6e9 --- /dev/null +++ b/static/charting_library/bundles/28.3140e8cb507ad2593c76.css @@ -0,0 +1 @@ +.loader-8x1ZxRwP{bottom:0;font-size:0;height:100%;left:0;margin:0 auto;opacity:1;position:absolute;right:0;text-align:center;top:0;transition:opacity .35s ease}.loader-8x1ZxRwP:after{content:" ";display:inline-block;height:100%;vertical-align:middle}.loader-8x1ZxRwP .item-2-89r_cd{animation:tv-button-loader-23vqS1uY .96s ease-in-out infinite both;border-radius:100%;display:inline-block;height:10px;margin-left:2px;margin-right:2px;opacity:1;transform:translateY(0) scale(.6);transition:transform .35s cubic-bezier(.68,-.55,.265,1.55);vertical-align:middle;width:10px}.loader-8x1ZxRwP .item-2-89r_cd:nth-child(2){animation-delay:.151s;transition-delay:.11666667s}.loader-8x1ZxRwP .item-2-89r_cd:nth-child(3){animation-delay:.32s;transition-delay:233.33333ms}.loader-8x1ZxRwP .item-2-89r_cd.black-20Ytsf0V{background-color:#787b86}.loader-8x1ZxRwP .item-2-89r_cd.white-1ucCcc2I{background-color:#fff}.loader-8x1ZxRwP .item-2-89r_cd.gray-XDhHSS-T{background-color:#b2b5be}.loader-8x1ZxRwP.loader-initial-1deQDeio{opacity:.1}.loader-8x1ZxRwP.loader-initial-1deQDeio .item-2-89r_cd{animation:none;transform:translateY(12px) scale(.6)}.loader-8x1ZxRwP.loader-appear-2krFtMrd{opacity:1;transition:opacity .7s ease}.loader-8x1ZxRwP.loader-appear-2krFtMrd .item-2-89r_cd{animation:none;transform:translateY(0) scale(.6)}@keyframes tv-button-loader-23vqS1uY{0%,to{transform:scale(.6)}50%{transform:scale(.9)}} \ No newline at end of file diff --git a/static/charting_library/bundles/28.3140e8cb507ad2593c76.rtl.css b/static/charting_library/bundles/28.3140e8cb507ad2593c76.rtl.css new file mode 100644 index 0000000..7c2a6e9 --- /dev/null +++ b/static/charting_library/bundles/28.3140e8cb507ad2593c76.rtl.css @@ -0,0 +1 @@ +.loader-8x1ZxRwP{bottom:0;font-size:0;height:100%;left:0;margin:0 auto;opacity:1;position:absolute;right:0;text-align:center;top:0;transition:opacity .35s ease}.loader-8x1ZxRwP:after{content:" ";display:inline-block;height:100%;vertical-align:middle}.loader-8x1ZxRwP .item-2-89r_cd{animation:tv-button-loader-23vqS1uY .96s ease-in-out infinite both;border-radius:100%;display:inline-block;height:10px;margin-left:2px;margin-right:2px;opacity:1;transform:translateY(0) scale(.6);transition:transform .35s cubic-bezier(.68,-.55,.265,1.55);vertical-align:middle;width:10px}.loader-8x1ZxRwP .item-2-89r_cd:nth-child(2){animation-delay:.151s;transition-delay:.11666667s}.loader-8x1ZxRwP .item-2-89r_cd:nth-child(3){animation-delay:.32s;transition-delay:233.33333ms}.loader-8x1ZxRwP .item-2-89r_cd.black-20Ytsf0V{background-color:#787b86}.loader-8x1ZxRwP .item-2-89r_cd.white-1ucCcc2I{background-color:#fff}.loader-8x1ZxRwP .item-2-89r_cd.gray-XDhHSS-T{background-color:#b2b5be}.loader-8x1ZxRwP.loader-initial-1deQDeio{opacity:.1}.loader-8x1ZxRwP.loader-initial-1deQDeio .item-2-89r_cd{animation:none;transform:translateY(12px) scale(.6)}.loader-8x1ZxRwP.loader-appear-2krFtMrd{opacity:1;transition:opacity .7s ease}.loader-8x1ZxRwP.loader-appear-2krFtMrd .item-2-89r_cd{animation:none;transform:translateY(0) scale(.6)}@keyframes tv-button-loader-23vqS1uY{0%,to{transform:scale(.6)}50%{transform:scale(.9)}} \ No newline at end of file diff --git a/static/charting_library/bundles/28.9f103042c27ea2df422f.js b/static/charting_library/bundles/28.9f103042c27ea2df422f.js new file mode 100644 index 0000000..3e06c21 --- /dev/null +++ b/static/charting_library/bundles/28.9f103042c27ea2df422f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/29.07af6dca962ea27209f0.css b/static/charting_library/bundles/29.07af6dca962ea27209f0.css new file mode 100644 index 0000000..aac484a --- /dev/null +++ b/static/charting_library/bundles/29.07af6dca962ea27209f0.css @@ -0,0 +1 @@ +.separator-eqcGT_ow{background-color:#e0e3eb;flex-shrink:0;height:1px;margin:6px 0}html.theme-dark .separator-eqcGT_ow{background-color:#434651}.small-eqcGT_ow{margin-bottom:4px;margin-top:4px}.normal-eqcGT_ow{margin-bottom:6px;margin-top:6px}.large-eqcGT_ow{margin-bottom:8px;margin-top:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/29.07af6dca962ea27209f0.rtl.css b/static/charting_library/bundles/29.07af6dca962ea27209f0.rtl.css new file mode 100644 index 0000000..aac484a --- /dev/null +++ b/static/charting_library/bundles/29.07af6dca962ea27209f0.rtl.css @@ -0,0 +1 @@ +.separator-eqcGT_ow{background-color:#e0e3eb;flex-shrink:0;height:1px;margin:6px 0}html.theme-dark .separator-eqcGT_ow{background-color:#434651}.small-eqcGT_ow{margin-bottom:4px;margin-top:4px}.normal-eqcGT_ow{margin-bottom:6px;margin-top:6px}.large-eqcGT_ow{margin-bottom:8px;margin-top:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/29.3df8712b85d45a626aa0.js b/static/charting_library/bundles/29.3df8712b85d45a626aa0.js new file mode 100644 index 0000000..5f320a5 --- /dev/null +++ b/static/charting_library/bundles/29.3df8712b85d45a626aa0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/3.76c398b01b707e5b251c.js b/static/charting_library/bundles/3.76c398b01b707e5b251c.js new file mode 100644 index 0000000..5bc43e3 --- /dev/null +++ b/static/charting_library/bundles/3.76c398b01b707e5b251c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/3.eeb90413029441681f91.css b/static/charting_library/bundles/3.eeb90413029441681f91.css new file mode 100644 index 0000000..6ab7e72 --- /dev/null +++ b/static/charting_library/bundles/3.eeb90413029441681f91.css @@ -0,0 +1 @@ +.dialog-UM6w7sFp{background-color:#fff;box-sizing:border-box;display:flex;flex-direction:column;min-width:280px;text-align:left}html.theme-dark .dialog-UM6w7sFp{background-color:#1e222d}.dialog-UM6w7sFp.rounded-UM6w7sFp{border-radius:6px}.dialog-UM6w7sFp.shadowed-UM6w7sFp{box-shadow:0 2px 4px #0003}html.theme-dark .dialog-UM6w7sFp.shadowed-UM6w7sFp{box-shadow:0 2px 4px #0006}.dialog-UM6w7sFp.fullscreen-UM6w7sFp{bottom:0;height:100%;left:0;max-height:100%;max-width:100%;min-height:100%;position:fixed;right:0;top:0;width:100%}.dialog-UM6w7sFp.darker-UM6w7sFp{background-color:#fff}html.theme-dark .dialog-UM6w7sFp.darker-UM6w7sFp{background-color:#131722}.backdrop-UM6w7sFp{background-color:#9598a1;bottom:0;left:0;opacity:.5;position:fixed;right:0;top:0;transform:translateZ(0);z-index:-1}html.theme-dark .backdrop-UM6w7sFp{background-color:#0c0e15}.dialog-2AogBbC7{max-width:380px;min-width:280px;position:fixed;width:100%}.dialog-2AogBbC7 [data-dragg-area=true]{cursor:grab}.dialog-2AogBbC7 [data-dragg-area=true].dragging-2AogBbC7{cursor:grabbing}.dialogAnimatedAppearance-2AogBbC7{animation-duration:.3s;animation-name:dialogAnimation-2AogBbC7;transform-origin:0 0}@keyframes dialogAnimation-2AogBbC7{0%{opacity:0;transform:translate(var(--animationTranslateStartX),var(--animationTranslateStartY)) scale(0)}to{opacity:1;transform:translate(var(--animationTranslateEndX),var(--animationTranslateEndY)) scale(1)}}.dialogTooltip-2AogBbC7{color:#fff;font-size:14px;left:50%;line-height:21px;max-width:540px;position:absolute;top:-20px;transform:translateX(-50%);width:max-content}@media screen and (max-width:768px){.dialogTooltip-2AogBbC7{max-width:240px}} \ No newline at end of file diff --git a/static/charting_library/bundles/3.eeb90413029441681f91.rtl.css b/static/charting_library/bundles/3.eeb90413029441681f91.rtl.css new file mode 100644 index 0000000..1fee331 --- /dev/null +++ b/static/charting_library/bundles/3.eeb90413029441681f91.rtl.css @@ -0,0 +1 @@ +.dialog-UM6w7sFp{background-color:#fff;box-sizing:border-box;display:flex;flex-direction:column;min-width:280px;text-align:right}html.theme-dark .dialog-UM6w7sFp{background-color:#1e222d}.dialog-UM6w7sFp.rounded-UM6w7sFp{border-radius:6px}.dialog-UM6w7sFp.shadowed-UM6w7sFp{box-shadow:0 2px 4px #0003}html.theme-dark .dialog-UM6w7sFp.shadowed-UM6w7sFp{box-shadow:0 2px 4px #0006}.dialog-UM6w7sFp.fullscreen-UM6w7sFp{bottom:0;height:100%;left:0;max-height:100%;max-width:100%;min-height:100%;position:fixed;right:0;top:0;width:100%}.dialog-UM6w7sFp.darker-UM6w7sFp{background-color:#fff}html.theme-dark .dialog-UM6w7sFp.darker-UM6w7sFp{background-color:#131722}.backdrop-UM6w7sFp{background-color:#9598a1;bottom:0;left:0;opacity:.5;position:fixed;right:0;top:0;transform:translateZ(0);z-index:-1}html.theme-dark .backdrop-UM6w7sFp{background-color:#0c0e15}.dialog-2AogBbC7{max-width:380px;min-width:280px;position:fixed;width:100%}.dialog-2AogBbC7 [data-dragg-area=true]{cursor:grab}.dialog-2AogBbC7 [data-dragg-area=true].dragging-2AogBbC7{cursor:grabbing}.dialogAnimatedAppearance-2AogBbC7{animation-duration:.3s;animation-name:dialogAnimation-2AogBbC7;transform-origin:100% 0}@keyframes dialogAnimation-2AogBbC7{0%{opacity:0;transform:translate(var(--animationTranslateStartX),var(--animationTranslateStartY)) scale(0)}to{opacity:1;transform:translate(var(--animationTranslateEndX),var(--animationTranslateEndY)) scale(1)}}.dialogTooltip-2AogBbC7{color:#fff;font-size:14px;line-height:21px;max-width:540px;position:absolute;right:50%;top:-20px;transform:translateX(50%);width:max-content}@media screen and (max-width:768px){.dialogTooltip-2AogBbC7{max-width:240px}} \ No newline at end of file diff --git a/static/charting_library/bundles/30.0b732ccb122d160480b6.js b/static/charting_library/bundles/30.0b732ccb122d160480b6.js new file mode 100644 index 0000000..62a9de8 --- /dev/null +++ b/static/charting_library/bundles/30.0b732ccb122d160480b6.js @@ -0,0 +1,8 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{"+l/S":function(e,t,n){},"1Kfe":function(e,t,n){e.exports={container:"container-TZggBcGZ",sectionTitle:"sectionTitle-TZggBcGZ",separator:"separator-TZggBcGZ",customButton:"customButton-TZggBcGZ"}},"2A9e":function(e){e.exports=JSON.parse('{"button":"button-1iktpaT1","content":"content-2PGssb8d","noOutline":"noOutline-d9Yp4qvi","grouped":"grouped-2NxOpIxM","adjust-position":"adjust-position-2zd-ooQC","first-row":"first-row-11wXF7aC","first-col":"first-col-pbJu53tK","no-corner-top-left":"no-corner-top-left-3ZsS65Fk","no-corner-top-right":"no-corner-top-right-3MYQOwk_","no-corner-bottom-right":"no-corner-bottom-right-3II18BAU","no-corner-bottom-left":"no-corner-bottom-left-3KZuX8tv","appearance-default":"appearance-default-dMjF_2Hu","intent-primary":"intent-primary-1-IOYcbg","intent-success":"intent-success-25a4XZXM","intent-default":"intent-default-2ZbSqQDs","intent-warning":"intent-warning-24j5HMi0","intent-danger":"intent-danger-1EETHCla","appearance-stroke":"appearance-stroke-12lxiUSM","appearance-text":"appearance-text-DqKJVT3U","appearance-inverse":"appearance-inverse-r1Y2JQg_","size-s":"size-s-3mait84m","size-m":"size-m-2G7L7Qat","size-l":"size-l-2NEs9_xt","full-width":"full-width-1wU8ljjC","with-icon":"with-icon-yumghDr-","icon":"icon-1grlgNdV"}')},"9dlw":function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var o=n("q1tI"),i=n.n(o),s=n("i8i4"),r=n.n(s),a=n("AiMB"),c=n("DTHj"),l=n("X0gx"),u=n("8Rai");function h(e){const{controller:t,children:n,isOpened:s,closeOnClickOutside:h=!0,doNotCloseOn:d,onClickOutside:p,onClose:m,...v}=e,f=Object(o.useContext)(l.a),b=Object(u.a)({handler:function(e){p&&p(e);if(!h)return;if(d&&e.target instanceof Node){const t=r.a.findDOMNode(d);if(t instanceof Node&&t.contains(e.target))return}m()},mouseDown:!0,touchStart:!0});return s?i.a.createElement(a.a,{top:"0",left:"0",right:"0",bottom:"0",pointerEvents:"none"},i.a.createElement("span",{ref:b,style:{pointerEvents:"auto"}},i.a.createElement(c.b,{...v,onClose:m,onScroll:function(t){const{onScroll:n}=e;n&&n(t)},customCloseDelegate:f,ref:t},n))):null}},DXuF:function(e,t,n){e.exports={swatches:"swatches-vBKBthtD",swatch:"swatch-vBKBthtD",hover:"hover-vBKBthtD",empty:"empty-vBKBthtD",white:"white-vBKBthtD",selected:"selected-vBKBthtD",contextItem:"contextItem-vBKBthtD"}},F0Qt:function(e){e.exports=JSON.parse('{"wrapper":"wrapper-21v50zE8","input":"input-24iGIobO","box":"box-3574HVnv","icon":"icon-2jsUbtec","noOutline":"noOutline-3VoWuntz","intent-danger":"intent-danger-1Sr9dowC","check":"check-382c8Fu1","dot":"dot-3gRd-7Qt"}')},N5tr:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return p}));var o=n("q1tI"),i=n.n(o),s=n("TSYQ"),r=n("tWVy"),a=n("JWMC"),c=n("ijHL"),l=n("v1bN");const u=l;function h(e){const{reference:t,...n}=e,o={...n,ref:t};return i.a.createElement(e.href?"a":"div",o)}function d(e){e.stopPropagation()}function p(e){ +const{id:t,role:n,"aria-selected":u,className:p,title:m,labelRowClassName:v,labelClassName:f,shortcut:b,forceShowShortcuts:g,icon:w,isActive:C,isDisabled:_,isHovered:E,appearAsDisabled:y,label:O,link:S,showToolboxOnHover:N,target:k,rel:I,toolbox:T,reference:x,onMouseOut:j,onMouseOver:P,suppressToolboxClick:M=!0,theme:U=l}=e,D=Object(c.b)(e),B=Object(o.useRef)(null);return i.a.createElement(h,{...D,id:t,role:n,"aria-selected":u,className:s(p,U.item,w&&U.withIcon,{[U.isActive]:C,[U.isDisabled]:_||y,[U.hovered]:E}),title:m,href:S,target:k,rel:I,reference:function(e){B.current=e,"function"==typeof x&&x(e);"object"==typeof x&&(x.current=e)},onClick:function(t){const{dontClosePopup:n,onClick:o,onClickArg:i,trackEventObject:s}=e;if(_)return;s&&Object(a.trackEvent)(s.category,s.event,s.label);o&&o(i,t);n||Object(r.b)()},onContextMenu:function(t){const{trackEventObject:n,trackRightClick:o}=e;n&&o&&Object(a.trackEvent)(n.category,n.event,n.label+"_rightClick")},onMouseUp:function(t){const{trackEventObject:n,trackMouseWheelClick:o}=e;if(1===t.button&&S&&n){let e=n.label;o&&(e+="_mouseWheelClick"),Object(a.trackEvent)(n.category,n.event,e)}},onMouseOver:P,onMouseOut:j},void 0!==w&&i.a.createElement("div",{className:U.icon,dangerouslySetInnerHTML:{__html:w}}),i.a.createElement("div",{className:s(U.labelRow,v)},i.a.createElement("div",{className:s(U.label,f)},O)),(void 0!==b||g)&&i.a.createElement("div",{className:U.shortcut},(A=b)&&A.split("+").join(" + ")),void 0!==T&&i.a.createElement("div",{onClick:M?d:void 0,className:s(U.toolbox,{[U.showOnHover]:N})},T));var A}},Oqo1:function(e,t,n){e.exports={opacity:"opacity-2UqCUhku",opacitySlider:"opacitySlider-2UqCUhku",opacitySliderGradient:"opacitySliderGradient-2UqCUhku",pointer:"pointer-2UqCUhku",dragged:"dragged-2UqCUhku",opacityPointerWrap:"opacityPointerWrap-2UqCUhku",opacityInputWrap:"opacityInputWrap-2UqCUhku",opacityInput:"opacityInput-2UqCUhku",opacityInputPercent:"opacityInputPercent-2UqCUhku"}},"P4l+":function(e,t,n){},U1eG:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var o=n("q1tI"),i=n("TSYQ"),s=n("Eyy1"),r=n("Hr11"),a=n("Oqo1");class c extends o.PureComponent{constructor(e){super(e),this._container=null,this._pointer=null,this._raf=null,this._refContainer=e=>{this._container=e},this._refPointer=e=>{this._pointer=e},this._handlePosition=e=>{null===this._raf&&(this._raf=requestAnimationFrame(()=>{const t=Object(s.ensureNotNull)(this._container),n=Object(s.ensureNotNull)(this._pointer),o=t.getBoundingClientRect(),i=n.offsetWidth,a=e.clientX-i/2-o.left,c=Object(r.clamp)(a/(o.width-i),0,1);this.setState({inputOpacity:Math.round(100*c).toString()}),this.props.onChange(c),this._raf=null}))},this._onSliderClick=e=>{this._handlePosition(e.nativeEvent),this._dragSubscribe()},this._mouseUp=e=>{this.setState({isPointerDragged:!1}),this._dragUnsubscribe(),this._handlePosition(e)},this._mouseMove=e=>{this.setState({isPointerDragged:!0}),this._handlePosition(e)},this._onTouchStart=e=>{this._handlePosition(e.nativeEvent.touches[0])},this._handleTouch=e=>{ +this.setState({isPointerDragged:!0}),this._handlePosition(e.nativeEvent.touches[0])},this._handleTouchEnd=()=>{this.setState({isPointerDragged:!1})},this._handleInput=e=>{const t=e.currentTarget.value,n=Number(t)/100;this.setState({inputOpacity:t}),Number.isNaN(n)||n>1||this.props.onChange(n)},this.state={inputOpacity:Math.round(100*e.opacity).toString(),isPointerDragged:!1}}componentWillUnmount(){null!==this._raf&&(cancelAnimationFrame(this._raf),this._raf=null),this._dragUnsubscribe()}render(){const{color:e,opacity:t,hideInput:n}=this.props,{inputOpacity:s,isPointerDragged:r}=this.state,c={color:e||void 0};return o.createElement("div",{className:a.opacity},o.createElement("div",{className:a.opacitySlider,style:c,ref:this._refContainer,onMouseDown:this._onSliderClick,onTouchStart:this._onTouchStart,onTouchMove:this._handleTouch,onTouchEnd:this._handleTouchEnd},o.createElement("div",{className:a.opacitySliderGradient,style:{backgroundImage:`linear-gradient(90deg, transparent, ${e})`}}),o.createElement("div",{className:a.opacityPointerWrap},o.createElement("div",{className:i(a.pointer,r&&a.dragged),style:{left:100*t+"%"},ref:this._refPointer}))),!n&&o.createElement("div",{className:a.opacityInputWrap},o.createElement("input",{type:"text",className:a.opacityInput,value:s,onChange:this._handleInput}),o.createElement("span",{className:a.opacityInputPercent},"%")))}_dragSubscribe(){const e=Object(s.ensureNotNull)(this._container).ownerDocument;e&&(e.addEventListener("mouseup",this._mouseUp),e.addEventListener("mousemove",this._mouseMove))}_dragUnsubscribe(){const e=Object(s.ensureNotNull)(this._container).ownerDocument;e&&(e.removeEventListener("mousemove",this._mouseMove),e.removeEventListener("mouseup",this._mouseUp))}}},V3OP:function(e,t,n){"use strict";var o=n("q1tI"),i=n("Vdly"),s=n("FQhm");function r(e,t){Object(o.useEffect)(()=>(s.subscribe(e,t,null),()=>{s.unsubscribe(e,t,null)}),[e,t])}var a=n("eJTA");function c(){const[e,t]=Object(o.useState)(Object(i.getJSON)("pickerCustomColors",[]));r("add_new_custom_color",n=>t(l(n,e))),r("remove_custom_color",n=>t(u(n,e)));const n=Object(o.useCallback)(t=>{const n=t?Object(a.parseRgb)(t):null;e.some(e=>null!==e&&null!==n&&Object(a.areEqualRgb)(Object(a.parseRgb)(e),n))||(s.emit("add_new_custom_color",t),Object(i.setJSON)("pickerCustomColors",l(t,e)))},[e]),c=Object(o.useCallback)(t=>{(t>=0||t29&&n.shift(),n}function u(e,t){return t.filter((t,n)=>e!==n)}n.d(t,"a",(function(){return c}))},htM8:function(e,t,n){"use strict";var o=n("YFKU"),i=n("q1tI"),s=n.n(i),r=n("TSYQ"),a=n.n(r),c=n("eJTA"),l=n("Eyy1"),u=n("qFKp"),h=n("9dlw"),d=n("N5tr");const p=i.createContext(void 0);var m=n("wLjq"),v=n("aVjL"),f=n("DXuF");function b(e){const{index:t,color:n,selected:a,onSelect:c}=e,[b,g]=Object(i.useState)(!1),w=Object(i.useContext)(p),C=Object(i.useRef)(null),_=Boolean(w)&&!u.CheckMobile.any() +;return s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{ref:C,style:n?{color:n}:void 0,className:r(f.swatch,b&&f.hover,a&&f.selected,!n&&f.empty,String(n).toLowerCase()===m.c&&f.white),onClick:function(){c(n)},onContextMenu:_?E:void 0}),_&&s.a.createElement(h.a,{isOpened:b,onClose:E,position:function(){const e=Object(l.ensureNotNull)(C.current).getBoundingClientRect();return{x:e.left,y:e.top+e.height+4}},onClickOutside:E},s.a.createElement(d.b,{className:f.contextItem,label:Object(o.t)("Remove color"),icon:v,onClick:function(){E(),Object(l.ensureDefined)(w)(t)},dontClosePopup:!0})));function E(){g(!b)}}class g extends i.PureComponent{constructor(){super(...arguments),this._onSelect=e=>{const{onSelect:t}=this.props;t&&t(e)}}render(){const{colors:e,color:t,children:n}=this.props;if(!e)return null;const o=t?Object(c.parseRgb)(String(t)):void 0;return i.createElement("div",{className:f.swatches},e.map((e,t)=>i.createElement(b,{key:String(e)+t,index:t,color:e,selected:o&&Object(c.areEqualRgb)(o,Object(c.parseRgb)(String(e))),onSelect:this._onSelect})),n)}}var w=n("U1eG"),C=n("mwqF");function _(e){const t="Invalid RGB color: "+e;if(null===e)throw new Error(t);const n=e.match(/^#?([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i);if(null===n)throw new Error(t);const[,o,i,s]=n;if(!o||!i||!s)throw new Error(t);const r=parseInt(o,16)/255,a=parseInt(i,16)/255,c=parseInt(s,16)/255,l=Math.max(r,a,c),u=Math.min(r,a,c);let h;const d=l,p=l-u,m=0===l?0:p/l;if(l===u)h=0;else{switch(l){case r:h=(a-c)/p+(a{this._container=e},this._handlePosition=e=>{const{hsv:{h:t},onChange:n}=this.props;if(!n)return;const o=Object(l.ensureNotNull)(this._container).getBoundingClientRect(),i=e.clientX-o.left,s=e.clientY-o.top;let r=i/o.width;r<0?r=0:r>1&&(r=1);let a=1-s/o.height;a<0?a=0:a>1&&(a=1),n({h:t,s:r,v:a})},this._mouseDown=e=>{window.addEventListener("mouseup",this._mouseUp),window.addEventListener("mousemove",this._mouseMove)},this._mouseUp=e=>{window.removeEventListener("mousemove",this._mouseMove),window.removeEventListener("mouseup",this._mouseUp),this._handlePosition(e)},this._mouseMove=Object(E.default)(this._handlePosition,100),this._handleTouch=e=>{this._handlePosition(e.nativeEvent.touches[0])}}render(){const{className:e,hsv:{h:t,s:n,v:o}}=this.props,s=`hsl(${360*t}, 100%, 50%)`;return i.createElement("div",{className:a()(y.saturation,e),style:{backgroundColor:s},ref:this._refContainer,onMouseDown:this._mouseDown,onTouchStart:this._handleTouch,onTouchMove:this._handleTouch},i.createElement("div",{className:y.pointer,style:{left:100*n+"%",top:100*(1-o)+"%"}}))}}var S=n("jpE+");class N extends i.PureComponent{constructor(){super(...arguments),this._container=null,this._refContainer=e=>{this._container=e},this._handlePosition=e=>{const{hsv:{s:t,v:n},onChange:o}=this.props;if(!o)return +;const i=Object(l.ensureNotNull)(this._container).getBoundingClientRect();let s=(e.clientY-i.top)/i.height;s<0?s=0:s>1&&(s=1),o({h:s,s:t,v:n})},this._mouseDown=e=>{window.addEventListener("mouseup",this._mouseUp),window.addEventListener("mousemove",this._mouseMove)},this._mouseUp=e=>{window.removeEventListener("mousemove",this._mouseMove),window.removeEventListener("mouseup",this._mouseUp),this._handlePosition(e)},this._mouseMove=Object(E.default)(this._handlePosition,100),this._handleTouch=e=>{this._handlePosition(e.nativeEvent.touches[0])}}render(){const{className:e,hsv:{h:t}}=this.props;return i.createElement("div",{className:a()(S.hue,e)},i.createElement("div",{className:S.pointerContainer,ref:this._refContainer,onMouseDown:this._mouseDown,onTouchStart:this._handleTouch,onTouchMove:this._handleTouch},i.createElement("div",{className:S.pointer,style:{top:100*t+"%"}})))}}var k=n("uJfL");const I=window.t("Add",{context:"Color Picker"});class T extends i.PureComponent{constructor(e){super(e),this._handleHSV=e=>{const t=function(e){const{h:t,s:n,v:o}=e;let i,s,r;const a=Math.floor(6*t),c=6*t-a,l=o*(1-n),u=o*(1-c*n),h=o*(1-(1-c)*n);switch(a%6){case 0:i=o,s=h,r=l;break;case 1:i=u,s=o,r=l;break;case 2:i=l,s=o,r=h;break;case 3:i=l,s=u,r=o;break;case 4:i=h,s=l,r=o;break;case 5:i=o,s=l,r=u;break;default:i=0,s=0,r=0}return"#"+[255*i,255*s,255*r].map(e=>("0"+Math.round(e).toString(16)).replace(/.+?([a-f0-9]{2})$/i,"$1")).join("")}(e)||"#000000";this.setState({color:t,inputColor:t.replace(/^#/,""),hsv:e}),this.props.onSelect(t)},this._handleInput=e=>{const t=e.currentTarget.value;try{const e=_(t),n="#"+t;this.setState({color:n,inputColor:t,hsv:e}),this.props.onSelect(n)}catch(e){this.setState({inputColor:t})}},this._handleAddColor=()=>this.props.onAdd(this.state.color);const t=e.color||"#000000";this.state={color:t,inputColor:t.replace(/^#/,""),hsv:_(t)}}render(){const{color:e,hsv:t,inputColor:n}=this.state;return i.createElement("div",{className:k.container},i.createElement("div",{className:k.form},i.createElement("div",{className:k.swatch,style:{backgroundColor:e}}),i.createElement("div",{className:k.inputWrap},i.createElement("span",{className:k.inputHash},"#"),i.createElement("input",{type:"text",className:k.input,value:n,onChange:this._handleInput})),i.createElement("div",{className:k.buttonWrap},i.createElement(C.a,{size:"s",onClick:this._handleAddColor},I))),i.createElement("div",{className:k.hueSaturationWrap},i.createElement(O,{className:k.saturation,hsv:t,onChange:this._handleHSV}),i.createElement(N,{className:k.hue,hsv:t,onChange:this._handleHSV})))}}var x=n("1Kfe");n.d(t,"a",(function(){return M}));const j=window.t("Add Custom Color",{context:"Color Picker"}),P=window.t("Opacity",{context:"Color Picker"});class M extends i.PureComponent{constructor(e){super(e),this._handleAddColor=e=>{this.setState({isCustom:!1}),this._onToggleCustom(!1);const{onAddColor:t}=this.props;t&&t(e)},this._handleSelectColor=e=>{const{onColorChange:t}=this.props,{isCustom:n}=this.state;t&&t(e,n)},this._handleCustomClick=()=>{ +this.setState({isCustom:!0}),this._onToggleCustom(!0)},this._handleOpacity=e=>{const{onOpacityChange:t}=this.props;t&&t(e)},this.state={isCustom:!1}}componentDidUpdate(e,t){e.selectOpacity!==this.props.selectOpacity&&this.props.menu&&this.props.menu.update()}render(){const{color:e,opacity:t,selectCustom:n,selectOpacity:o,customColors:s,onRemoveCustomColor:r}=this.props,{isCustom:c}=this.state,l="number"==typeof t?t:1;return c?i.createElement(T,{color:e,onSelect:this._handleSelectColor,onAdd:this._handleAddColor}):i.createElement("div",{className:x.container},i.createElement(g,{colors:m.a,color:e,onSelect:this._handleSelectColor}),i.createElement(g,{colors:m.b,color:e,onSelect:this._handleSelectColor}),i.createElement("div",{className:x.separator}),i.createElement(p.Provider,{value:r},i.createElement(g,{colors:s,color:e,onSelect:this._handleSelectColor},n&&i.createElement("div",{className:a()(x.customButton,"apply-common-tooltip"),onClick:this._handleCustomClick,title:j}))),o&&i.createElement(i.Fragment,null,i.createElement("div",{className:x.sectionTitle},P),i.createElement(w.a,{color:e,opacity:l,onChange:this._handleOpacity})))}_onToggleCustom(e){const{onToggleCustom:t}=this.props;t&&t(e)}}},"jpE+":function(e,t,n){e.exports={hue:"hue-1Mi0KyO-",pointer:"pointer-1Mi0KyO-",pointerContainer:"pointerContainer-1Mi0KyO-"}},lY1a:function(e,t,n){e.exports={saturation:"saturation-2uNV-KY0",pointer:"pointer-2uNV-KY0"}},mwqF:function(e,t,n){"use strict";var o=n("q1tI"),i=n.n(o),s=n("TSYQ"),r=n("wwkJ"),a=n("ZWNO");function c(e,t){const{intent:n="primary",size:o="m",appearance:i="default",useFullWidth:r=!1,tabIndex:c=0,icon:l,className:u,isGrouped:h,cellState:d,disablePositionAdjustment:p=!1}=t,m=function(e,t){let n="";return 0!==e&&(1&e&&(n=s(n,t["no-corner-top-left"])),2&e&&(n=s(n,t["no-corner-top-right"])),4&e&&(n=s(n,t["no-corner-bottom-right"])),8&e&&(n=s(n,t["no-corner-bottom-left"]))),n}(Object(a.a)(d),e);return s(u,e.button,e["size-"+o],e["intent-"+n],e["appearance-"+i],r&&e["full-width"],-1===c&&e.noOutline,l&&"s"!==o&&e["with-icon"],m,h&&e.grouped,!p&&e["adjust-position"],d.isTop&&e["first-row"],d.isLeft&&e["first-col"])}var l=n("2A9e");n("+l/S");function u(e){const{className:t,intent:n,size:a,appearance:u,disabled:h,useFullWidth:d,reference:p,icon:m,children:v,tabIndex:f,...b}=e,{isGrouped:g,cellState:w,disablePositionAdjustment:C}=Object(o.useContext)(r.a),_=c(l,{intent:n,size:a,appearance:u,disabled:h,useFullWidth:d,tabIndex:f,icon:m,isGrouped:g,cellState:w,disablePositionAdjustment:C});return i.a.createElement("button",{className:s(_,t),disabled:h,ref:p,tabIndex:f,...b},m&&"s"!==a&&i.a.createElement("span",{className:l.icon},m),i.a.createElement("span",{className:l.content},v))}n.d(t,"a",(function(){return u}))},tUxN:function(e,t){e.exports=''},uJfL:function(e,t,n){e.exports={container:"container-1r82-bI2",form:"form-1r82-bI2",swatch:"swatch-1r82-bI2", +inputWrap:"inputWrap-1r82-bI2",inputHash:"inputHash-1r82-bI2",input:"input-1r82-bI2",buttonWrap:"buttonWrap-1r82-bI2",hueSaturationWrap:"hueSaturationWrap-1r82-bI2",saturation:"saturation-1r82-bI2",hue:"hue-1r82-bI2"}},v1bN:function(e,t,n){e.exports={"tablet-small-breakpoint":"screen and (max-width: 428px)",item:"item-2IihgTnv",hovered:"hovered-2IihgTnv",isDisabled:"isDisabled-2IihgTnv",isActive:"isActive-2IihgTnv",shortcut:"shortcut-2IihgTnv",toolbox:"toolbox-2IihgTnv",withIcon:"withIcon-2IihgTnv",icon:"icon-2IihgTnv",labelRow:"labelRow-2IihgTnv",label:"label-2IihgTnv",showOnHover:"showOnHover-2IihgTnv"}},vCF3:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var o=n("q1tI"),i=n("TSYQ"),s=n("Iivm"),r=n("tUxN"),a=n("F0Qt");n("P4l+");function c(e){const t=i(a.box,a["intent-"+e.intent],{[a.check]:!Boolean(e.indeterminate),[a.dot]:Boolean(e.indeterminate),[a.noOutline]:-1===e.tabIndex}),n=i(a.wrapper,e.className);return o.createElement("span",{className:n,title:e.title},o.createElement("input",{id:e.id,tabIndex:e.tabIndex,className:a.input,type:"checkbox",name:e.name,checked:e.checked,disabled:e.disabled,value:e.value,autoFocus:e.autoFocus,role:e.role,onChange:function(){e.onChange&&e.onChange(e.value)},ref:e.reference}),o.createElement("span",{className:t},o.createElement(s.a,{icon:r,className:a.icon})))}},wLjq:function(e,t,n){"use strict";n.d(t,"c",(function(){return i})),n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return l}));var o=n("HGP3");const i=o.colorsPalette["color-white"],s=["ripe-red","tan-orange","banana-yellow","iguana-green","minty-green","sky-blue","tv-blue","deep-blue","grapes-purple","berry-pink"],r=[200,300,400,500,600,700,800,900].map(e=>"color-cold-gray-"+e);r.unshift("color-white"),r.push("color-black"),s.forEach(e=>{r.push(`color-${e}-500`)});const a=r.map(e=>o.colorsPalette[e]),c=[];[100,200,300,400,700,900].forEach(e=>{s.forEach(t=>{c.push(`color-${t}-${e}`)})});const l=c.map(e=>o.colorsPalette[e])},"x0D+":function(e,t,n){var o,i,s;i=[t],void 0===(s="function"==typeof(o=function(e){"use strict";function t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t{const{listboxId:n,className:r,listboxClassName:d,listboxTabIndex:b,hideArrowButton:h,matchButtonAndListboxWidths:f,disabled:v,isOpened:g,scrollWrapReference:C,listboxReference:j,size:w="medium",onClose:E,onOpen:y,onListboxFocus:S,onListboxBlur:N,onListboxKeyDown:_,buttonChildren:k,children:x,caretClassName:B,listboxAria:R,...z}=e,F=Object(o.useRef)(null),D=Object(o.useCallback)(()=>{const e=Object(c.ensureNotNull)(F.current).getBoundingClientRect(),t={x:e.left,y:e.top+e.height};return f&&(t.overrideWidth=e.width),t},[]),W=!h&&l.a.createElement(u.b,null,l.a.createElement(m,{isDropped:g,disabled:v,className:B}));return l.a.createElement(l.a.Fragment,null,l.a.createElement(a.a,{...z,"data-role":"listbox","aria-expanded":g,"aria-owns":n,"aria-controls":n,"aria-disabled":v,disabled:v,className:i()(O.button,r),size:w,ref:Object(s.a)([F,t]),middleSlot:l.a.createElement(u.c,null,l.a.createElement("span",{className:i()(O["button-children"],h&&O.hiddenArrow)},k)),endSlot:W}),l.a.createElement(p.a,{...R,id:n,className:d,tabIndex:b,isOpened:g,position:D,onClose:E,onOpen:y,doNotCloseOn:F.current,reference:j,scrollWrapReference:C,onFocus:S,onBlur:N,onKeyDown:_},x))});v.displayName="DisclosureMenuView"},GQPI:function(e,t,n){"use strict";n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return c}));var o=n("q1tI"),l=n("/3z9");function r(e){return Object(o.useCallback)(t=>{switch(t){case 13:case 32:return e(),!0;default:return!1}},[e])}function i(e,t){return Object(o.useCallback)(n=>{if(!e)return!1;switch(n){case 9:case l.Modifiers.Shift+9:case 27:return t(),!0;default:return!1}},[e,t])}function c(e,t){return Object(o.useCallback)(n=>{if(e)return!1;switch(n){case 40:case 38:return t(),!0;default:return!1}},[e,t])}},PECq:function(e,t,n){"use strict";var o=n("q1tI"),l=n.n(o),r=n("Eyy1"),i=n("RMU6"),c=n("K9GE");const s={duration:200},a={vertical:{scrollSize:"scrollHeight",clientSize:"clientHeight",start:"top",end:"bottom",size:"height"},horizontal:{scrollSize:"scrollWidth",clientSize:"clientWidth",start:"left",end:"right",size:"width"}};function u(e,t){const n=a[e];return t[n.scrollSize]>t[n.clientSize]}function d(e,t,n,o,l,r){const i=function(e,t,n){const o=a[e];return{start:0, +middle:-1*(Math.floor(n[o.size]/2)-Math.floor(t[o.size]/2)),end:-1*(n[o.size]-t[o.size])}}(e,o,l);let s=0;if(function(e,t,n){const o=a[e];return t[o.start]n[o.end]+n[o.size]/2}(e,o,l))s=i.middle;else{const t=function(e){const{start:t,middle:n,end:o}=e,l=new Map([[Math.abs(t),{key:"start",value:Math.sign(t)}],[Math.abs(n),{key:"middle",value:Math.sign(n)}],[Math.abs(o),{key:"end",value:Math.sign(o)}]]),r=Math.min(...l.keys());return l.get(r)}(function(e,t,n){const o=a[e],l=t[o.start]+Math.floor(t[o.size]/2),r=n[o.start]+Math.floor(n[o.size]/2);return{start:t[o.start]-n[o.start],middle:l-r,end:t[o.end]-n[o.end]}}(e,o,l));s=void 0!==t?i[t.key]:0}return function(e){const{additionalScroll:t=0,duration:n=c.b,func:o=c.c.easeInOutCubic,onScrollEnd:l,target:r,wrap:i,direction:s="vertical"}=e;let{targetRect:a,wrapRect:u}=e;a=null!=a?a:r.getBoundingClientRect(),u=null!=u?u:i.getBoundingClientRect();const d=("vertical"===s?a.top-u.top:a.left-u.left)+t,b="vertical"===s?"scrollTop":"scrollLeft",h=i?i[b]:0;let f,m=0;return m=window.requestAnimationFrame((function e(t){let r;if(f?r=t-f:(r=0,f=t),r>=n)return i[b]=h+d,void(l&&l());const c=h+d*o(r/n);i[b]=Math.floor(c),m=window.requestAnimationFrame(e)})),function(){window.cancelAnimationFrame(m),l&&l()}}({...r,target:t,targetRect:o,wrap:n,wrapRect:l,additionalScroll:s,direction:e})}class b{constructor(e=null){this._container=null,this._lastScrolledElement=null,this._stopVerticalScroll=null,this._stopHorizontalScroll=null,this._container=e}scrollTo(e,t=s){if(null!==this._container&&null!==e&&!function(e,t){const n=e.getBoundingClientRect(),o=t.getBoundingClientRect();return n.top>=o.top&&n.bottom<=o.bottom&&n.left>=o.left&&n.right<=o.right}(e,this._container)){const n=e.getBoundingClientRect(),o=this._container.getBoundingClientRect();this.stopScroll(),u("vertical",this._container)&&(this._stopVerticalScroll=d("vertical",e,this._container,n,o,this._modifyOptions("vertical",t))),u("horizontal",this._container)&&(this._stopHorizontalScroll=d("horizontal",e,this._container,n,o,this._modifyOptions("horizontal",t)))}this._lastScrolledElement=e}scrollToLastElement(e){this.scrollTo(this._lastScrolledElement,e)}stopScroll(){null!==this._stopVerticalScroll&&this._stopVerticalScroll(),null!==this._stopHorizontalScroll&&this._stopHorizontalScroll()}setContainer(e){var t;this._container=e,(null===(t=this._container)||void 0===t?void 0:t.contains(this._lastScrolledElement))||(this._lastScrolledElement=null)}destroy(){this.stopScroll(),this._container=null,this._lastScrolledElement=null}_handleScrollEnd(e){"vertical"===e?this._stopVerticalScroll=null:this._stopHorizontalScroll=null}_modifyOptions(e,t){return Object.assign({},t,{onScrollEnd:()=>{this._handleScrollEnd(e),void 0!==t.onScrollEnd&&t.onScrollEnd()}})}}var h=n("ECWH"),f=n("N5tr"),m=n("hbEN"),p=n("UXvI");var O=n("AnDN"),v=n("GQPI"),g=n("zS+2"),C=n("/3z9"),j=n("p4SX");function w(e){return!e.readonly}function E(e,t){var n +;return null!==(n=null==t?void 0:t.id)&&void 0!==n?n:Object(i.a)(e,"item",null==t?void 0:t.value)}function y(e){var t,n;const{selectedItem:o,placeholder:r}=e;if(!o)return l.a.createElement("span",{className:j.placeholder},r);const i=null!==(n=null!==(t=o.selectedContent)&&void 0!==t?t:o.content)&&void 0!==n?n:o.value;return l.a.createElement("span",null,i)}n.d(t,"a",(function(){return S}));const S=l.a.forwardRef((e,t)=>{const{id:n,menuClassName:c,menuItemClassName:s,tabIndex:a=0,disabled:u,highlight:d,intent:j,hideArrowButton:S,placeholder:N,value:_,"aria-labelledby":k,onFocus:x,onBlur:B,onClick:R,onChange:z,...F}=e;let{items:D}=e;if(N){D=[{value:void 0,content:N,id:Object(i.a)(n,"placeholder")},...D]}const{isOpened:W,isFocused:K,highlight:A,intent:M,open:I,onOpen:q,close:T,toggle:L,buttonFocusBindings:H,onButtonClick:V,buttonRef:J,listboxRef:U}=Object(g.a)({disabled:u,intent:j,highlight:d,onFocus:x,onBlur:B,onClick:R}),Y=function(e){const t=Object(o.useRef)(null);return Object(o.useEffect)(()=>(t.current=new b(e),()=>Object(r.ensureNotNull)(t.current).destroy()),[]),t}(),G=Object(o.useRef)(null),P=Object(o.useRef)(new WeakMap),Q=D.filter(w),X=Q.find(e=>e.value===_);Object(o.useEffect)(()=>se(),[X,se]);const Z=Object(i.b)(k,n),$=Z.length>0?Z:void 0,ee=Object(i.a)(n,"listbox"),te=Object(o.useMemo)(()=>({role:"listbox","aria-labelledby":k,"aria-activedescendant":E(n,X)}),[k,X]),ne=function(e,t,n){const l=Object(o.useCallback)(()=>{const o=e.findIndex(e=>e.value===t);o!==e.length-1&&n&&n(e[o+1].value)},[e,t,n]),r=Object(o.useCallback)(()=>{const o=e.findIndex(e=>e.value===t);if(0===o)return;n&&n(e[o>0?o-1:0].value)},[e,t,n]),i=Object(o.useCallback)(()=>{n&&n(e[0].value)},[n,e]),c=Object(o.useCallback)(()=>{n&&n(e[e.length-1].value)},[n,e]);return Object(o.useCallback)(e=>{switch(e){case 40:return l(),!0;case 38:return r(),!0;case 34:return c(),!0;case 33:return i(),!0;default:return!1}},[l,r,i,c])}(Q,_,z),oe=Object(v.c)(L),le=Object(v.a)(W,T),re=Object(v.b)(W,I),ie=function(e){const t=Object(o.useRef)(""),n=Object(o.useMemo)(()=>Object(m.default)(()=>{t.current=""},500),[]),l=Object(o.useMemo)(()=>Object(p.default)(e,200),[e]);return Object(o.useCallback)(e=>{e.key.length>0&&e.key.length<3&&(t.current+=e.key,l(t.current,e),n())},[n,l])}((e,t)=>{const n=function(e,t){return e.find(e=>{var n;const o=t.toLowerCase();return"string"==typeof e.content&&e.content.toLowerCase().startsWith(o)||String(null!==(n=e.value)&&void 0!==n?n:"").toLowerCase().startsWith(o)})}(Q,e);void 0!==n&&z&&(t.stopPropagation(),W||I(),z(n.value))});return l.a.createElement(O.a,{...F,...H,id:n,role:"button",tabIndex:u?-1:a,"aria-haspopup":"listbox","aria-labelledby":$,disabled:u,hideArrowButton:S,isFocused:K,isOpened:W,highlight:A,intent:M,ref:Object(h.a)([J,t]),onClick:V,onOpen:function(){se({duration:0}),q()},onClose:T,onKeyDown:function(e){const t=Object(C.hashFromEvent)(e);if(oe(t)||le(t)||re(t))return void e.preventDefault();ie(e)},listboxId:ee,listboxTabIndex:-1,listboxClassName:c,listboxAria:te,listboxReference:U, +scrollWrapReference:function(e){G.current=e,Object(r.ensureNotNull)(Y.current).setContainer(e)},onListboxKeyDown:function(e){const t=Object(C.hashFromEvent)(e);if(ne(t)||oe(t)||le(t))return void e.preventDefault();ie(e)},buttonChildren:l.a.createElement(y,{selectedItem:X,placeholder:N})},D.map((e,t)=>{var o;if(e.readonly)return l.a.createElement(l.a.Fragment,{key:"readonly_item_"+t},e.content);const r=E(n,e);return l.a.createElement(f.b,{key:r,id:r,className:s,role:"option","aria-selected":_===e.value,isActive:_===e.value,label:null!==(o=e.content)&&void 0!==o?o:e.value,onClick:ce,onClickArg:e.value,reference:t=>function(e,t){P.current.set(e,t)}(e,t)})}));function ce(e){z&&z(e)}function se(e){if(W&&void 0!==X){const t=P.current.get(X);null!=t&&Object(r.ensureNotNull)(Y.current).scrollTo(t,e)}}});S.displayName="Select"},RMU6:function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return a}));const o=/\s/g;function l(e){return"string"==typeof e}function r(e){switch(typeof e){case"string":return e;case"number":case"bigint":return e.toString(10);case"boolean":case"symbol":return e.toString();default:return null}}function i(e){return e.trim().length>0}function c(e){return e.replace(o,"-")}function s(...e){const t=e.map(r).filter(l).filter(i).map(c);return(t.length>0&&t[0].startsWith("id_")?t:["id",...t]).join("_")}function a(...e){return e.map(r).filter(l).filter(i).join(" ")}},UmON:function(e,t,n){e.exports={button:"button-1WqyvKNY","button-children":"button-children-1WqyvKNY",hiddenArrow:"hiddenArrow-1WqyvKNY",invisibleFocusHandler:"invisibleFocusHandler-1WqyvKNY"}},"VGf/":function(e,t){e.exports=''},lVA2:function(e,t,n){e.exports={button:"button-14c_DKWJ",disabled:"disabled-14c_DKWJ",hidden:"hidden-14c_DKWJ",icon:"icon-14c_DKWJ",dropped:"dropped-14c_DKWJ"}},p4SX:function(e,t,n){e.exports={placeholder:"placeholder-1J6emFeA"}},tmL0:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var o=n("q1tI"),l=n.n(o),r=n("x0D+"),i=n("Eyy1"),c=n("qFKp");function s(e){const{reference:t,children:n,...i}=e,s=Object(o.useRef)(null),u=Object(o.useCallback)(e=>{t&&(t.current=e),c.CheckMobile.iOS()&&(null!==s.current&&Object(r.enableBodyScroll)(s.current),s.current=e,null!==s.current&&Object(r.disableBodyScroll)(s.current,{allowTouchMove:a(s)}))},[t]);return l.a.createElement("div",{ref:u,...i},n)}function a(e){return t=>{const n=Object(i.ensureNotNull)(e.current),o=document.activeElement;return!n.contains(t)||null!==o&&n.contains(o)&&o.contains(t)}}},ycFu:function(e,t,n){"use strict";n.d(t,"a",(function(){return b}));var o=n("q1tI"),l=n.n(o),r=n("TSYQ"),i=n.n(r),c=n("mwqF"),s=n("Eyy1"),a=(n("YFKU"),n("/3z9")),u=n("g89m"),d=n("8NUT");class b extends l.a.PureComponent{constructor(){super(...arguments),this._dialogRef=l.a.createRef(),this._handleClose=()=>{const{defaultActionOnClose:e,onSubmit:t,onCancel:n,onClose:o}=this.props +;switch(e){case"submit":t();break;case"cancel":n()}o()},this._handleCancel=()=>{this.props.onCancel(),this.props.onClose()},this._handleKeyDown=e=>{const{onSubmit:t,submitButtonDisabled:n,submitOnEnterKey:o}=this.props;switch(Object(a.hashFromEvent)(e)){case 13:!n&&o&&(e.preventDefault(),t())}}}render(){const{render:e,onClose:t,onSubmit:n,onCancel:o,footerLeftRenderer:r,submitButtonText:i,submitButtonDisabled:c,defaultActionOnClose:s,submitOnEnterKey:a,...d}=this.props;return l.a.createElement(u.a,{...d,ref:this._dialogRef,onKeyDown:this._handleKeyDown,render:this._renderChildren(),onClose:this._handleClose})}focus(){Object(s.ensureNotNull)(this._dialogRef.current).focus()}_renderChildren(){return e=>{const{render:t,footerLeftRenderer:n,additionalButtons:o,submitButtonText:r,submitButtonDisabled:s,onSubmit:a,cancelButtonText:u,showCancelButton:b=!0,submitButtonClassName:h,cancelButtonClassName:f,buttonsWrapperClassName:m}=this.props;return l.a.createElement(l.a.Fragment,null,t(e),l.a.createElement("div",{className:d.footer},n&&n(e.isSmallWidth),l.a.createElement("div",{className:i()(d.buttons,m)},o,b&&l.a.createElement(c.a,{className:f,name:"cancel",appearance:"stroke",onClick:this._handleCancel},null!=u?u:window.t("Cancel")),l.a.createElement("span",{className:d.submitButton},l.a.createElement(c.a,{className:h,disabled:s,name:"submit",onClick:a,"data-name":"submit-button"},null!=r?r:window.t("Ok"))))))}}}b.defaultProps={defaultActionOnClose:"submit",submitOnEnterKey:!0}},"zS+2":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var o=n("q1tI"),l=n("Eyy1"),r=n("SpAO"),i=n("3F0O"),c=n("d700");function s(e){const{disabled:t,intent:n,highlight:s,onFocus:a,onBlur:u,onClick:d}=e,[b,h]=Object(o.useState)(!1),[f,m]=Object(r.a)(),p=f||b,O=null!=s?s:p,v=null!=n?n:p?"primary":"default",g=Object(o.useRef)(null),C=Object(o.useCallback)(()=>Object(l.ensureNotNull)(g.current).focus(),[g]),j=Object(o.useRef)(null),w=Object(o.useCallback)(()=>Object(l.ensureNotNull)(j.current).focus(),[j]),E=Object(o.useCallback)(()=>h(!0),[h]),y=Object(o.useCallback)(()=>{h(!1);const{activeElement:e}=document;e&&Object(c.b)(e)||C()},[h,C]),S=Object(o.useCallback)(()=>{b?y():E()},[b,y,E]),N=t?[]:[a,m.onFocus],_=t?[]:[u,m.onBlur],k=t?[]:[d,S],x=Object(i.a)(...N),B=Object(i.a)(..._),R=Object(i.a)(...k);return{isOpened:b,isFocused:p,highlight:O,intent:v,open:E,onOpen:w,close:y,toggle:S,buttonFocusBindings:{onFocus:x,onBlur:B},onButtonClick:R,buttonRef:g,listboxRef:j}}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/32.13ce02217cf8f9dd6d90.js b/static/charting_library/bundles/32.13ce02217cf8f9dd6d90.js new file mode 100644 index 0000000..eb1537d --- /dev/null +++ b/static/charting_library/bundles/32.13ce02217cf8f9dd6d90.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{"1shM":function(t,e,r){t.exports={"error-icon":"error-icon-3x-w99oG","intent-danger":"intent-danger-3x-w99oG","intent-warning":"intent-warning-3x-w99oG"}},"8d0Q":function(t,e,r){"use strict";var s=r("q1tI");function o(){const[t,e]=Object(s.useState)(!1);return[t,{onMouseOver:function(t){n(t)&&e(!0)},onMouseOut:function(t){n(t)&&e(!1)}}]}function n(t){return!t.currentTarget.contains(t.relatedTarget)}function a(t){const[e,r]=Object(s.useState)(!1);return Object(s.useEffect)(()=>{const e=e=>{if(null===t.current)return;const s=t.current.contains(e.target);r(s)};return document.addEventListener("mouseover",e),()=>document.removeEventListener("mouseover",e)},[]),e}r.d(e,"c",(function(){return o})),r.d(e,"a",(function(){return n})),r.d(e,"b",(function(){return a}))},"Db/h":function(t,e,r){t.exports={errors:"errors-3rBjZvef",show:"show-3rBjZvef",error:"error-3rBjZvef"}},VB86:function(t,e){t.exports=''},VET0:function(t,e,r){"use strict";r.d(e,"a",(function(){return s}));r("q1tI");const s={bottom:{attachment:{horizontal:"left",vertical:"top"},targetAttachment:{horizontal:"left",vertical:"bottom"}},top:{attachment:{horizontal:"left",vertical:"bottom"},targetAttachment:{horizontal:"left",vertical:"top"}},topRight:{attachment:{horizontal:"right",vertical:"bottom"},targetAttachment:{horizontal:"right",vertical:"top"}},bottomRight:{attachment:{horizontal:"right",vertical:"top"},targetAttachment:{horizontal:"right",vertical:"bottom"}}}},dKnb:function(t,e,r){"use strict";r.d(e,"a",(function(){return h}));var s=r("q1tI"),o=r("wHCJ"),n=r("jh7f"),a=r("xADF"),i=r("3F0O"),c=r("ECWH");function h(t){var e;const{intent:r,onFocus:h,onBlur:l,onMouseOver:m,onMouseOut:d,containerReference:g=null,endSlot:p,hasErrors:u,hasWarnings:f,errors:w,warnings:b,alwaysShowAttachedErrors:v,iconHidden:E,messagesPosition:A,messagesAttachment:O,customErrorsAttachment:M,messagesRoot:S,inheritMessagesWidthFromTarget:R,disableMessagesRtlStyles:W,..._}=t,T=Object(n.b)({hasErrors:u,hasWarnings:f,errors:w,warnings:b,alwaysShowAttachedErrors:v,iconHidden:E,messagesPosition:A,messagesAttachment:O,customErrorsAttachment:M,messagesRoot:S,inheritMessagesWidthFromTarget:R,disableMessagesRtlStyles:W}),x=Object(i.a)(h,T.onFocus),y=Object(i.a)(l,T.onBlur),F=Object(i.a)(m,T.onMouseOver),z=Object(i.a)(d,T.onMouseOut);return s.createElement(s.Fragment,null,s.createElement(o.a,{..._,intent:null!==(e=T.intent)&&void 0!==e?e:r,onFocus:x,onBlur:y,onMouseOver:F,onMouseOut:z,containerReference:Object(c.a)([g,T.containerReference]),endSlot:s.createElement(s.Fragment,null,T.icon&&s.createElement(a.b,{icon:!0 +},T.icon),p)}),T.renderedErrors)}},jh7f:function(t,e,r){"use strict";var s=r("q1tI"),o=r.n(s),n=r("TSYQ"),a=r("SpAO"),i=r("8d0Q"),c=r("xADF"),h=r("VET0"),l=r("uqKQ"),m=r("i8i4");var d=r("Db/h"),g=r("Ialn");class p extends s.PureComponent{render(){const{children:t=[],show:e=!1,customErrorClass:r,disableRtlStyles:o}=this.props,a=n(d.errors,{[d.show]:e},r),i=t.map((t,e)=>s.createElement("div",{className:d.error,key:e},t));let c={position:"absolute",top:this.props.top,width:this.props.width,height:this.props.height,bottom:void 0!==this.props.bottom?this.props.bottom:"100%",right:void 0!==this.props.right?this.props.right:0,left:this.props.left,zIndex:this.props.zIndex,maxWidth:this.props.maxWidth};if(Object(g.isRtl)()&&!o){const{left:t,right:e}=c;c={...c,left:e,right:t}}return s.createElement("div",{style:c,className:a},i)}}const u=Object(l.a)((f=p,(w=class extends s.PureComponent{constructor(t){super(t),this._getComponentInstance=t=>{this._instance=t},this._throttleCalcProps=()=>{requestAnimationFrame(()=>this.setState(this._calcProps(this.props)))},this.state=this._getStateFromProps()}componentDidMount(){this._instanceElem=m.findDOMNode(this._instance),this.props.attachOnce||this._subscribe(),this.setState(this._calcProps(this.props))}componentDidUpdate(t){t.children===this.props.children&&t.top===this.props.top&&t.left===this.props.left&&t.width===this.props.width||this.setState(this._getStateFromProps(),()=>this.setState(this._calcProps(this.props)))}render(){return s.createElement("div",{style:{position:"absolute",width:"100%",top:0,left:0}},s.createElement(f,{...this.props,ref:this._getComponentInstance,top:this.state.top,bottom:void 0!==this.state.bottom?this.state.bottom:"auto",right:void 0!==this.state.right?this.state.right:"auto",left:this.state.left,width:this.state.width,maxWidth:this.state.maxWidth},this.props.children))}componentWillUnmount(){this._unsubsribe()}_getStateFromProps(){return{bottom:this.props.bottom,left:this.props.left,right:this.props.right,top:void 0!==this.props.top?this.props.top:-1e4,width:this.props.inheritWidthFromTarget?this.props.target&&this.props.target.getBoundingClientRect().width:this.props.width,maxWidth:this.props.inheritMaxWidthFromTarget&&this.props.target&&this.props.target.getBoundingClientRect().width}}_calcProps(t){if(t.target&&t.attachment&&t.targetAttachment){const e=this._calcTargetProps(t.target,t.attachment,t.targetAttachment);if(null===e)return{};const{width:r,inheritWidthFromTarget:s=!0,inheritMaxWidthFromTarget:o=!1}=this.props,n={width:s?e.width:r,maxWidth:o?e.width:void 0};switch(t.attachment.vertical){case"bottom":case"middle":n.top=e.y;break;default:n[t.attachment.vertical]=e.y}switch(t.attachment.horizontal){case"right":case"center":n.left=e.x;break;default:n[t.attachment.horizontal]=e.x}return n}return{}}_calcTargetProps(t,e,r){const s=t.getBoundingClientRect(),o=this._instanceElem.getBoundingClientRect(),n="parent"===this.props.root?this._getCoordsRelToParentEl(t,s):this._getCoordsRelToDocument(s);if(null===n)return null +;const a=this._getDimensions(o),i=this._getDimensions(s).width;let c=0,h=0;switch(e.vertical){case"top":h=n[r.vertical];break;case"bottom":h=n[r.vertical]-a.height;break;case"middle":h=n[r.vertical]-a.height/2}switch(e.horizontal){case"left":c=n[r.horizontal];break;case"right":c=n[r.horizontal]-a.width;break;case"center":c=n[r.horizontal]-a.width/2}return"number"==typeof this.props.attachmentOffsetY&&(h+=this.props.attachmentOffsetY),"number"==typeof this.props.attachmentOffsetX&&(c+=this.props.attachmentOffsetX),{x:c,y:h,width:i}}_getCoordsRelToDocument(t){const e=pageYOffset,r=pageXOffset,s=t.top+e,o=t.bottom+e,n=t.left+r;return{top:s,bottom:o,left:n,right:t.right+r,middle:(s+t.height)/2,center:n+t.width/2}}_getCoordsRelToParentEl(t,e){const r=t.offsetParent;if(null===r)return null;const s=r.scrollTop,o=r.scrollLeft,n=t.offsetTop+s,a=t.offsetLeft+o,i=e.width+a;return{top:n,bottom:e.height+n,left:a,right:i,middle:(n+e.height)/2,center:(a+e.width)/2}}_getDimensions(t){return{height:t.height,width:t.width}}_subscribe(){"document"===this.props.root&&(window.addEventListener("scroll",this._throttleCalcProps,!0),window.addEventListener("resize",this._throttleCalcProps))}_unsubsribe(){window.removeEventListener("scroll",this._throttleCalcProps,!0),window.removeEventListener("resize",this._throttleCalcProps)}}).displayName="Attachable Component",w));var f,w,b=r("Iivm"),v=r("VB86"),E=r("1shM");function A(t){const{intent:e="danger"}=t;return s.createElement(b.a,{icon:v,className:n(E["error-icon"],E["intent-"+e])})}var O,M,S=r("rOyT");r.d(e,"a",(function(){return O})),r.d(e,"b",(function(){return F})),function(t){t[t.Attached=0]="Attached",t[t.Static=1]="Static",t[t.Hidden=2]="Hidden"}(O||(O={})),function(t){t.Top="top",t.Bottom="bottom"}(M||(M={}));const R={top:{attachment:h.a.topRight.attachment,targetAttachment:h.a.topRight.targetAttachment,attachmentOffsetY:-4},bottom:{attachment:h.a.bottomRight.attachment,targetAttachment:h.a.bottomRight.targetAttachment,attachmentOffsetY:4}};function W(t){const{isOpened:e,target:r,errorAttachment:s=M.Top,customErrorsAttachment:n,root:a="parent",inheritWidthFromTarget:i=!1,disableRtlStyles:c,children:h}=t,{attachment:l,targetAttachment:m,attachmentOffsetY:d}=null!=n?n:R[s];return o.a.createElement(u,{isOpened:e,target:r,root:a,inheritWidthFromTarget:i,attachment:l,targetAttachment:m,attachmentOffsetY:d,disableRtlStyles:c,inheritMaxWidthFromTarget:!0,show:!0},h)}function _(t,e){return Boolean(t)&&void 0!==e&&e.length>0}function T(t,e,r){return t===O.Attached&&_(e,r)}function x(t,e,r){return t===O.Static&&_(e,r)}function y(t,e,r){const{hasErrors:s,hasWarnings:o,alwaysShowAttachedErrors:n,iconHidden:a,errors:i,warnings:c,messagesPosition:h=O.Static}=t,l=T(h,s,i),m=T(h,o,c),d=l&&(e||r||Boolean(n)),g=!d&&m&&(e||r),p=x(h,s,i),u=!p&&x(h,o,c),f=!a&&Boolean(s);return{hasAttachedErrorMessages:l,hasAttachedWarningMessages:m,showAttachedErrorMessages:d,showAttachedWarningMessages:g,showStaticErrorMessages:p,showStaticWarningMessages:u,showErrorIcon:f,showWarningIcon:!a&&!f&&Boolean(o), +intent:function(t,e){return Boolean(t)?"danger":Boolean(e)?"warning":void 0}(s,o)}}function F(t){var e,r;const{errors:h,warnings:l,messagesAttachment:m,customErrorsAttachment:d,messagesRoot:g,inheritMessagesWidthFromTarget:p,disableMessagesRtlStyles:u}=t,[f,w]=Object(a.a)(),[b,v]=Object(i.c)(),E=Object(s.useRef)(null),{hasAttachedErrorMessages:O,hasAttachedWarningMessages:M,showAttachedErrorMessages:R,showAttachedWarningMessages:_,showStaticErrorMessages:T,showStaticWarningMessages:x,showErrorIcon:F,showWarningIcon:z,intent:C}=y(t,f,b),P=F||z?o.a.createElement(A,{intent:F?"danger":"warning"}):void 0,B=O?o.a.createElement(W,{errorAttachment:m,customErrorsAttachment:d,isOpened:R,target:E.current,root:g,inheritWidthFromTarget:p,disableRtlStyles:u,children:h}):void 0,j=M?o.a.createElement(W,{errorAttachment:m,isOpened:_,target:E.current,root:g,inheritWidthFromTarget:p,disableRtlStyles:u,children:l}):void 0,I=T?o.a.createElement(c.a,{className:n(S["static-messages"],S.errors)},null==h?void 0:h.map((t,e)=>o.a.createElement("p",{key:e,className:S.message},t))):void 0,N=x?o.a.createElement(c.a,{className:n(S["static-messages"],S.warnings)},null==l?void 0:l.map((t,e)=>o.a.createElement("p",{key:e,className:S.message},t))):void 0;return{icon:P,renderedErrors:null!==(r=null!==(e=null!=B?B:j)&&void 0!==e?e:I)&&void 0!==r?r:N,containerReference:E,intent:C,...w,...v}}},rOyT:function(t,e,r){t.exports={"static-messages":"static-messages-1hgcN2c2",errors:"errors-1hgcN2c2",warnings:"warnings-1hgcN2c2",message:"message-1hgcN2c2"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/3293616ec0c605c7c2db25829a0a509e.woff b/static/charting_library/bundles/3293616ec0c605c7c2db25829a0a509e.woff new file mode 100644 index 0000000..8c1748a Binary files /dev/null and b/static/charting_library/bundles/3293616ec0c605c7c2db25829a0a509e.woff differ diff --git a/static/charting_library/bundles/33.02ed7df481ae8243d2f2.css b/static/charting_library/bundles/33.02ed7df481ae8243d2f2.css new file mode 100644 index 0000000..82b27bf --- /dev/null +++ b/static/charting_library/bundles/33.02ed7df481ae8243d2f2.css @@ -0,0 +1 @@ +.swatches-vBKBthtD{display:flex;flex-wrap:wrap;margin:0 -3px 6px}.swatch-vBKBthtD{background-color:currentColor;border:1px solid;border-radius:2px;flex:0 0 15px;height:15px;margin:3px;position:relative;width:15px}.swatch-vBKBthtD:after{border:2px solid #0000;border-radius:6px;box-sizing:initial;content:"";height:100%;left:-5px;padding:3px;position:absolute;top:-5px;transition:border-color .35s ease;width:100%}.swatch-vBKBthtD.hover-vBKBthtD:after{border-color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.swatch-vBKBthtD:hover:after{border-color:#d1d4dc}}html.theme-dark .swatch-vBKBthtD.hover-vBKBthtD:after{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .swatch-vBKBthtD:hover:after{border-color:#50535e}}.swatch-vBKBthtD.empty-vBKBthtD{background-color:initial;border-color:#000}html.theme-dark .swatch-vBKBthtD.empty-vBKBthtD{border-color:#fff}.swatch-vBKBthtD.empty-vBKBthtD:before{background-color:#ef5350;content:"";height:21px;left:7px;position:absolute;top:-3px;transform:rotate(45deg);width:1px}html.theme-dark .swatch-vBKBthtD.empty-vBKBthtD:before{background-color:#ef5350}.swatch-vBKBthtD.white-vBKBthtD{border-color:#d1d4dc}html.theme-dark .swatch-vBKBthtD.white-vBKBthtD{border-color:#0000}.swatch-vBKBthtD.selected-vBKBthtD:after{border-color:#2962ff;z-index:1}html.theme-dark .swatch-vBKBthtD.selected-vBKBthtD:after{border-color:#2962ff}.contextItem-vBKBthtD{box-sizing:border-box;height:32px}.opacity-2UqCUhku{align-items:center;display:flex}.opacitySlider-2UqCUhku{background-color:#fff;background-image:url(a6506134daec7169f68f563f084a9d41.svg);background-position:1px;border-radius:5px;flex:1 0 auto;height:10px;position:relative}html.theme-dark .opacitySlider-2UqCUhku{background-color:#000}.opacitySliderGradient-2UqCUhku{background-color:initial;background-image:linear-gradient(90deg,#0000,currentColor);border:1px solid;border-radius:4px;box-sizing:border-box;color:inherit;display:block;height:100%;width:100%}.pointer-2UqCUhku{background-color:initial;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 2px #00000080;box-sizing:border-box;height:12px;margin:-1px 0 0;position:absolute;transition:left .1s,top .1s;width:12px}.pointer-2UqCUhku,html.theme-dark .pointer-2UqCUhku{background-color:#fff}html.theme-dark .pointer-2UqCUhku{border:2px solid #fff}.pointer-2UqCUhku.dragged-2UqCUhku{transition:left 0s}.opacityPointerWrap-2UqCUhku{left:0;position:absolute;top:0;width:calc(100% - 12px)}.opacityInputWrap-2UqCUhku{align-items:center;color:#131722;display:flex;position:relative}html.theme-dark .opacityInputWrap-2UqCUhku{color:#b2b5be}.opacityInput-2UqCUhku{background-color:initial;border:1px solid #d1d4dc;border-radius:4px;box-sizing:border-box;display:flex;height:26px;line-height:24px;margin-left:8px;padding:0 14px 0 5px;text-align:right;width:47px}html.theme-dark .opacityInput-2UqCUhku{border:1px solid #50535e}.opacityInput-2UqCUhku:focus,html.theme-dark .opacityInput-2UqCUhku:focus{border-color:#2962ff}.opacityInputPercent-2UqCUhku{left:40px;pointer-events:none;position:absolute;text-align:right;top:5px}.saturation-2uNV-KY0{border-radius:2px;overflow:hidden;position:relative;z-index:0}.saturation-2uNV-KY0:after,.saturation-2uNV-KY0:before{content:"";height:100%;left:0;position:absolute;top:0;width:100%}.saturation-2uNV-KY0:before{background-image:linear-gradient(90deg,#fff,#fff0)}.saturation-2uNV-KY0:after{background-image:linear-gradient(0deg,#000,#0000)}.saturation-2uNV-KY0 .pointer-2uNV-KY0{background-color:initial;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 2px #00000080;height:10px;margin:-6px 0 0 -6px;position:absolute;transition:left .1s,top .1s;width:10px;z-index:1}html.theme-dark .saturation-2uNV-KY0 .pointer-2uNV-KY0{border:2px solid #fff}.hue-1Mi0KyO-{align-items:stretch;background-image:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);border-radius:2px;display:flex}.hue-1Mi0KyO- .pointer-1Mi0KyO-{background-color:initial;border:2px solid #fff;border-radius:2px;box-shadow:0 1px 2px #00000080;height:5px;margin:-4px 0 0 -2px;position:absolute;transition:left .1s,top .1s;width:100%}html.theme-dark .hue-1Mi0KyO- .pointer-1Mi0KyO-{border:2px solid #fff}.pointerContainer-1Mi0KyO-{margin:3px 0;position:relative;width:100%}.container-1r82-bI2{padding:6px 12px;width:224px}.form-1r82-bI2{display:flex;margin-bottom:12px}.swatch-1r82-bI2{border-radius:4px;box-sizing:border-box;height:26px;width:26px}.inputWrap-1r82-bI2{align-items:center;color:#131722;display:flex;position:relative}html.theme-dark .inputWrap-1r82-bI2{color:#b2b5be}.inputHash-1r82-bI2{pointer-events:none;position:absolute;text-align:right;top:5px;width:21px}.input-1r82-bI2{background-color:initial;border:1px solid #d1d4dc;border-radius:4px;box-sizing:border-box;display:flex;height:26px;line-height:24px;margin-left:8px;padding:0 5px 0 12px;width:68px}html.theme-dark .input-1r82-bI2{border:1px solid #50535e}.input-1r82-bI2:focus,html.theme-dark .input-1r82-bI2:focus{border-color:#2962ff}.buttonWrap-1r82-bI2{height:26px;margin-left:auto}.hueSaturationWrap-1r82-bI2{display:flex;height:184px}.saturation-1r82-bI2{height:100%;margin-right:7px;width:200px}.hue-1r82-bI2{height:100%;width:17px}.container-TZggBcGZ{padding:6px 12px;width:224px}.sectionTitle-TZggBcGZ{color:#787b86;font-size:12px;line-height:14px;margin:12px 0 4px}html.theme-dark .sectionTitle-TZggBcGZ{color:#787b86}.separator-TZggBcGZ{background-color:#d1d4dc;height:1px;margin:12px 0}html.theme-dark .separator-TZggBcGZ{background-color:#434651}.separator-TZggBcGZ:last-child{display:none}.customButton-TZggBcGZ{border-radius:2px;flex:0 0 17px;height:17px;margin:3px;position:relative;transition:background-color .35s;width:17px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.customButton-TZggBcGZ:hover{background-color:#f0f3fa}html.theme-dark .customButton-TZggBcGZ:hover{background-color:#2a2e39}}.customButton-TZggBcGZ:after,.customButton-TZggBcGZ:before{background-color:#131722;content:"";position:absolute}html.theme-dark .customButton-TZggBcGZ:after,html.theme-dark .customButton-TZggBcGZ:before{background-color:#b2b5be}.customButton-TZggBcGZ:before{height:13px;left:8px;top:2px;width:1px}.customButton-TZggBcGZ:after{height:1px;left:2px;top:8px;width:13px} \ No newline at end of file diff --git a/static/charting_library/bundles/33.02ed7df481ae8243d2f2.rtl.css b/static/charting_library/bundles/33.02ed7df481ae8243d2f2.rtl.css new file mode 100644 index 0000000..e92b91d --- /dev/null +++ b/static/charting_library/bundles/33.02ed7df481ae8243d2f2.rtl.css @@ -0,0 +1 @@ +.swatches-vBKBthtD{display:flex;flex-wrap:wrap;margin:0 -3px 6px}.swatch-vBKBthtD{background-color:currentColor;border:1px solid;border-radius:2px;flex:0 0 15px;height:15px;margin:3px;position:relative;width:15px}.swatch-vBKBthtD:after{border:2px solid #0000;border-radius:6px;box-sizing:initial;content:"";height:100%;padding:3px;position:absolute;right:-5px;top:-5px;transition:border-color .35s ease;width:100%}.swatch-vBKBthtD.hover-vBKBthtD:after{border-color:#d1d4dc}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.swatch-vBKBthtD:hover:after{border-color:#d1d4dc}}html.theme-dark .swatch-vBKBthtD.hover-vBKBthtD:after{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .swatch-vBKBthtD:hover:after{border-color:#50535e}}.swatch-vBKBthtD.empty-vBKBthtD{background-color:initial;border-color:#000}html.theme-dark .swatch-vBKBthtD.empty-vBKBthtD{border-color:#fff}.swatch-vBKBthtD.empty-vBKBthtD:before{background-color:#ef5350;content:"";height:21px;position:absolute;right:7px;top:-3px;transform:rotate(-45deg);width:1px}html.theme-dark .swatch-vBKBthtD.empty-vBKBthtD:before{background-color:#ef5350}.swatch-vBKBthtD.white-vBKBthtD{border-color:#d1d4dc}html.theme-dark .swatch-vBKBthtD.white-vBKBthtD{border-color:#0000}.swatch-vBKBthtD.selected-vBKBthtD:after{border-color:#2962ff;z-index:1}html.theme-dark .swatch-vBKBthtD.selected-vBKBthtD:after{border-color:#2962ff}.contextItem-vBKBthtD{box-sizing:border-box;height:32px}.opacity-2UqCUhku{align-items:center;display:flex}.opacitySlider-2UqCUhku{background-color:#fff;background-image:url(a6506134daec7169f68f563f084a9d41.svg);background-position:1px;border-radius:5px;flex:1 0 auto;height:10px;position:relative}html.theme-dark .opacitySlider-2UqCUhku{background-color:#000}.opacitySliderGradient-2UqCUhku{background-color:initial;background-image:linear-gradient(270deg,#0000,currentColor);border:1px solid;border-radius:4px;box-sizing:border-box;color:inherit;display:block;height:100%;width:100%}.pointer-2UqCUhku{background-color:initial;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 2px #00000080;box-sizing:border-box;height:12px;margin:-1px 0 0;position:absolute;transition:right .1s,top .1s;width:12px}.pointer-2UqCUhku,html.theme-dark .pointer-2UqCUhku{background-color:#fff}html.theme-dark .pointer-2UqCUhku{border:2px solid #fff}.pointer-2UqCUhku.dragged-2UqCUhku{transition:right 0s}.opacityPointerWrap-2UqCUhku{left:0;position:absolute;top:0;width:calc(100% - 12px)}.opacityInputWrap-2UqCUhku{align-items:center;color:#131722;display:flex;position:relative}html.theme-dark .opacityInputWrap-2UqCUhku{color:#b2b5be}.opacityInput-2UqCUhku{background-color:initial;border:1px solid #d1d4dc;border-radius:4px;box-sizing:border-box;display:flex;height:26px;line-height:24px;margin-right:8px;padding:0 5px 0 14px;text-align:left;width:47px}html.theme-dark .opacityInput-2UqCUhku{border:1px solid #50535e}.opacityInput-2UqCUhku:focus,html.theme-dark .opacityInput-2UqCUhku:focus{border-color:#2962ff}.opacityInputPercent-2UqCUhku{pointer-events:none;position:absolute;right:40px;text-align:left;top:5px}.saturation-2uNV-KY0{border-radius:2px;overflow:hidden;position:relative;z-index:0}.saturation-2uNV-KY0:after,.saturation-2uNV-KY0:before{content:"";height:100%;position:absolute;right:0;top:0;width:100%}.saturation-2uNV-KY0:before{background-image:linear-gradient(270deg,#fff,#fff0)}.saturation-2uNV-KY0:after{background-image:linear-gradient(0deg,#000,#0000)}.saturation-2uNV-KY0 .pointer-2uNV-KY0{background-color:initial;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 2px #00000080;height:10px;margin:-6px -6px 0 0;position:absolute;transition:right .1s,top .1s;width:10px;z-index:1}html.theme-dark .saturation-2uNV-KY0 .pointer-2uNV-KY0{border:2px solid #fff}.hue-1Mi0KyO-{align-items:stretch;background-image:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);border-radius:2px;display:flex}.hue-1Mi0KyO- .pointer-1Mi0KyO-{background-color:initial;border:2px solid #fff;border-radius:2px;box-shadow:0 1px 2px #00000080;height:5px;margin:-4px -2px 0 0;position:absolute;transition:right .1s,top .1s;width:100%}html.theme-dark .hue-1Mi0KyO- .pointer-1Mi0KyO-{border:2px solid #fff}.pointerContainer-1Mi0KyO-{margin:3px 0;position:relative;width:100%}.container-1r82-bI2{padding:6px 12px;width:224px}.form-1r82-bI2{display:flex;margin-bottom:12px}.swatch-1r82-bI2{border-radius:4px;box-sizing:border-box;height:26px;width:26px}.inputWrap-1r82-bI2{align-items:center;color:#131722;display:flex;position:relative}html.theme-dark .inputWrap-1r82-bI2{color:#b2b5be}.inputHash-1r82-bI2{pointer-events:none;position:absolute;text-align:left;top:5px;width:21px}.input-1r82-bI2{background-color:initial;border:1px solid #d1d4dc;border-radius:4px;box-sizing:border-box;display:flex;height:26px;line-height:24px;margin-right:8px;padding:0 12px 0 5px;width:68px}html.theme-dark .input-1r82-bI2{border:1px solid #50535e}.input-1r82-bI2:focus,html.theme-dark .input-1r82-bI2:focus{border-color:#2962ff}.buttonWrap-1r82-bI2{height:26px;margin-right:auto}.hueSaturationWrap-1r82-bI2{display:flex;height:184px}.saturation-1r82-bI2{height:100%;margin-left:7px;width:200px}.hue-1r82-bI2{height:100%;width:17px}.container-TZggBcGZ{padding:6px 12px;width:224px}.sectionTitle-TZggBcGZ{color:#787b86;font-size:12px;line-height:14px;margin:12px 0 4px}html.theme-dark .sectionTitle-TZggBcGZ{color:#787b86}.separator-TZggBcGZ{background-color:#d1d4dc;height:1px;margin:12px 0}html.theme-dark .separator-TZggBcGZ{background-color:#434651}.separator-TZggBcGZ:last-child{display:none}.customButton-TZggBcGZ{border-radius:2px;flex:0 0 17px;height:17px;margin:3px;position:relative;transition:background-color .35s;width:17px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.customButton-TZggBcGZ:hover{background-color:#f0f3fa}html.theme-dark .customButton-TZggBcGZ:hover{background-color:#2a2e39}}.customButton-TZggBcGZ:after,.customButton-TZggBcGZ:before{background-color:#131722;content:"";position:absolute}html.theme-dark .customButton-TZggBcGZ:after,html.theme-dark .customButton-TZggBcGZ:before{background-color:#b2b5be}.customButton-TZggBcGZ:before{height:13px;right:8px;top:2px;width:1px}.customButton-TZggBcGZ:after{height:1px;right:2px;top:8px;width:13px} \ No newline at end of file diff --git a/static/charting_library/bundles/33.4d0dd1f7001fc02099bb.js b/static/charting_library/bundles/33.4d0dd1f7001fc02099bb.js new file mode 100644 index 0000000..28ac26b --- /dev/null +++ b/static/charting_library/bundles/33.4d0dd1f7001fc02099bb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/34.4b6099931f57311efc1a.css b/static/charting_library/bundles/34.4b6099931f57311efc1a.css new file mode 100644 index 0000000..81a7aa4 --- /dev/null +++ b/static/charting_library/bundles/34.4b6099931f57311efc1a.css @@ -0,0 +1 @@ +.errors-3rBjZvef{background-color:#2a2e39;border-radius:3px;box-sizing:border-box;color:#fff;opacity:0;padding:10px 15px;pointer-events:none;position:absolute;text-align:center;z-index:2}html.theme-dark .errors-3rBjZvef{background-color:#363c4e}.errors-3rBjZvef:empty{display:none}.errors-3rBjZvef.show-3rBjZvef{opacity:1}.errors-3rBjZvef .error-3rBjZvef{font-size:12px;line-height:1.4;margin-top:10px;text-transform:none;word-break:break-word}.errors-3rBjZvef .error-3rBjZvef:first-child{margin-top:0}.error-icon-3x-w99oG{display:inline-flex}.error-icon-3x-w99oG.intent-danger-3x-w99oG{color:#f44336}html.theme-dark .error-icon-3x-w99oG.intent-danger-3x-w99oG{color:#d32f2f}.error-icon-3x-w99oG.intent-warning-3x-w99oG,html.theme-dark .error-icon-3x-w99oG.intent-warning-3x-w99oG{color:#ff9800}.error-icon-3x-w99oG svg{height:16px;width:16px}.static-messages-1hgcN2c2{flex-flow:column nowrap;font-size:12px;font-style:normal;font-weight:400;line-height:17px}.static-messages-1hgcN2c2.errors-1hgcN2c2{color:#f44336}html.theme-dark .static-messages-1hgcN2c2.errors-1hgcN2c2{color:#d32f2f}.static-messages-1hgcN2c2.warnings-1hgcN2c2,html.theme-dark .static-messages-1hgcN2c2.warnings-1hgcN2c2{color:#ff9800}.static-messages-1hgcN2c2 .message-1hgcN2c2{margin:0} \ No newline at end of file diff --git a/static/charting_library/bundles/34.4b6099931f57311efc1a.rtl.css b/static/charting_library/bundles/34.4b6099931f57311efc1a.rtl.css new file mode 100644 index 0000000..81a7aa4 --- /dev/null +++ b/static/charting_library/bundles/34.4b6099931f57311efc1a.rtl.css @@ -0,0 +1 @@ +.errors-3rBjZvef{background-color:#2a2e39;border-radius:3px;box-sizing:border-box;color:#fff;opacity:0;padding:10px 15px;pointer-events:none;position:absolute;text-align:center;z-index:2}html.theme-dark .errors-3rBjZvef{background-color:#363c4e}.errors-3rBjZvef:empty{display:none}.errors-3rBjZvef.show-3rBjZvef{opacity:1}.errors-3rBjZvef .error-3rBjZvef{font-size:12px;line-height:1.4;margin-top:10px;text-transform:none;word-break:break-word}.errors-3rBjZvef .error-3rBjZvef:first-child{margin-top:0}.error-icon-3x-w99oG{display:inline-flex}.error-icon-3x-w99oG.intent-danger-3x-w99oG{color:#f44336}html.theme-dark .error-icon-3x-w99oG.intent-danger-3x-w99oG{color:#d32f2f}.error-icon-3x-w99oG.intent-warning-3x-w99oG,html.theme-dark .error-icon-3x-w99oG.intent-warning-3x-w99oG{color:#ff9800}.error-icon-3x-w99oG svg{height:16px;width:16px}.static-messages-1hgcN2c2{flex-flow:column nowrap;font-size:12px;font-style:normal;font-weight:400;line-height:17px}.static-messages-1hgcN2c2.errors-1hgcN2c2{color:#f44336}html.theme-dark .static-messages-1hgcN2c2.errors-1hgcN2c2{color:#d32f2f}.static-messages-1hgcN2c2.warnings-1hgcN2c2,html.theme-dark .static-messages-1hgcN2c2.warnings-1hgcN2c2{color:#ff9800}.static-messages-1hgcN2c2 .message-1hgcN2c2{margin:0} \ No newline at end of file diff --git a/static/charting_library/bundles/34.c9baa59add71a1e48fd2.js b/static/charting_library/bundles/34.c9baa59add71a1e48fd2.js new file mode 100644 index 0000000..34f0a44 --- /dev/null +++ b/static/charting_library/bundles/34.c9baa59add71a1e48fd2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/35.999f0e072062b7369a1a.css b/static/charting_library/bundles/35.999f0e072062b7369a1a.css new file mode 100644 index 0000000..8e140b7 --- /dev/null +++ b/static/charting_library/bundles/35.999f0e072062b7369a1a.css @@ -0,0 +1 @@ +.button-14c_DKWJ{align-items:center;background-color:initial;border:none;border-radius:2px;box-sizing:border-box;cursor:default;display:flex;flex:none;height:100%;justify-content:center;margin:0;outline:none!important;padding:0;width:21px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-14c_DKWJ:hover:not(.disabled-14c_DKWJ){background-color:#f0f3fa}html.theme-dark .button-14c_DKWJ:hover:not(.disabled-14c_DKWJ){background-color:#363a45}}.button-14c_DKWJ.hidden-14c_DKWJ{display:none}.icon-14c_DKWJ{align-items:center;display:flex;flex:none;justify-content:center;transition:transform .35s ease}.icon-14c_DKWJ.dropped-14c_DKWJ{transform:rotate(180deg)}.button-1WqyvKNY{cursor:default;-webkit-user-select:none;user-select:none}.button-children-1WqyvKNY{display:block;overflow:hidden;padding:0 2px 0 6px;text-overflow:ellipsis;white-space:nowrap;width:100%}.button-children-1WqyvKNY.hiddenArrow-1WqyvKNY{padding-right:6px}.invisibleFocusHandler-1WqyvKNY{height:0;opacity:0;pointer-events:none;width:0}.placeholder-1J6emFeA{-webkit-text-fill-color:currentColor;color:#a3a6af;opacity:1}html.theme-dark .placeholder-1J6emFeA{color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/35.999f0e072062b7369a1a.rtl.css b/static/charting_library/bundles/35.999f0e072062b7369a1a.rtl.css new file mode 100644 index 0000000..5f82f53 --- /dev/null +++ b/static/charting_library/bundles/35.999f0e072062b7369a1a.rtl.css @@ -0,0 +1 @@ +.button-14c_DKWJ{align-items:center;background-color:initial;border:none;border-radius:2px;box-sizing:border-box;cursor:default;display:flex;flex:none;height:100%;justify-content:center;margin:0;outline:none!important;padding:0;width:21px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-14c_DKWJ:hover:not(.disabled-14c_DKWJ){background-color:#f0f3fa}html.theme-dark .button-14c_DKWJ:hover:not(.disabled-14c_DKWJ){background-color:#363a45}}.button-14c_DKWJ.hidden-14c_DKWJ{display:none}.icon-14c_DKWJ{align-items:center;display:flex;flex:none;justify-content:center;transition:transform .35s ease}.icon-14c_DKWJ.dropped-14c_DKWJ{transform:rotate(-180deg)}.button-1WqyvKNY{cursor:default;-webkit-user-select:none;user-select:none}.button-children-1WqyvKNY{display:block;overflow:hidden;padding:0 6px 0 2px;text-overflow:ellipsis;white-space:nowrap;width:100%}.button-children-1WqyvKNY.hiddenArrow-1WqyvKNY{padding-left:6px}.invisibleFocusHandler-1WqyvKNY{height:0;opacity:0;pointer-events:none;width:0}.placeholder-1J6emFeA{-webkit-text-fill-color:currentColor;color:#a3a6af;opacity:1}html.theme-dark .placeholder-1J6emFeA{color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/35.ed9e360f9686ad3a9497.js b/static/charting_library/bundles/35.ed9e360f9686ad3a9497.js new file mode 100644 index 0000000..8cc7499 --- /dev/null +++ b/static/charting_library/bundles/35.ed9e360f9686ad3a9497.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/36.1882d1a8d312a0e193e9.js b/static/charting_library/bundles/36.1882d1a8d312a0e193e9.js new file mode 100644 index 0000000..5222a3a --- /dev/null +++ b/static/charting_library/bundles/36.1882d1a8d312a0e193e9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/36.f315a19c17d5636af8f7.css b/static/charting_library/bundles/36.f315a19c17d5636af8f7.css new file mode 100644 index 0000000..8043338 --- /dev/null +++ b/static/charting_library/bundles/36.f315a19c17d5636af8f7.css @@ -0,0 +1 @@ +.checkbox-3xZUD-2M{-webkit-tap-highlight-color:transparent;align-items:center;cursor:default;display:inline-flex;font-size:14px;font-stretch:normal;font-style:normal;font-weight:400;letter-spacing:normal;line-height:normal;position:relative;-webkit-user-select:none;user-select:none}.checkbox-3xZUD-2M.reverse-3xeTx96y{flex-direction:row-reverse}.checkbox-3xZUD-2M.reverse-3xeTx96y .label-cyItEVpF{margin-left:0;margin-right:8px}.checkbox-3xZUD-2M.baseline-6TXKro4X{align-items:baseline}.checkbox-3xZUD-2M .label-cyItEVpF{color:#000;margin-left:8px;min-width:0}html.theme-dark .checkbox-3xZUD-2M .label-cyItEVpF{color:#b2b5be} \ No newline at end of file diff --git a/static/charting_library/bundles/36.f315a19c17d5636af8f7.rtl.css b/static/charting_library/bundles/36.f315a19c17d5636af8f7.rtl.css new file mode 100644 index 0000000..31db84d --- /dev/null +++ b/static/charting_library/bundles/36.f315a19c17d5636af8f7.rtl.css @@ -0,0 +1 @@ +.checkbox-3xZUD-2M{-webkit-tap-highlight-color:transparent;align-items:center;cursor:default;display:inline-flex;font-size:14px;font-stretch:normal;font-style:normal;font-weight:400;letter-spacing:normal;line-height:normal;position:relative;-webkit-user-select:none;user-select:none}.checkbox-3xZUD-2M.reverse-3xeTx96y{flex-direction:row-reverse}.checkbox-3xZUD-2M.reverse-3xeTx96y .label-cyItEVpF{margin-left:8px;margin-right:0}.checkbox-3xZUD-2M.baseline-6TXKro4X{align-items:baseline}.checkbox-3xZUD-2M .label-cyItEVpF{color:#000;margin-right:8px;min-width:0}html.theme-dark .checkbox-3xZUD-2M .label-cyItEVpF{color:#b2b5be} \ No newline at end of file diff --git a/static/charting_library/bundles/37.90129e4904155350d6a1.js b/static/charting_library/bundles/37.90129e4904155350d6a1.js new file mode 100644 index 0000000..b3beb54 --- /dev/null +++ b/static/charting_library/bundles/37.90129e4904155350d6a1.js @@ -0,0 +1,8 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{"++uw":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n("q1tI"),o=n("yqnI");const r=e=>{const t="property"in e?e.property:void 0,n="defaultValue"in e?e.defaultValue:e.property.value(),[r,s]=Object(a.useState)(t?t.value():n);Object(a.useEffect)(()=>{if(t){const n={};return s(t.value()),t.subscribe(n,t=>{const n=t.value();e.handler&&e.handler(n),s(n)}),()=>t.unsubscribeAll(n)}return()=>{}},[t]);return[r,e=>{if(void 0!==t){const n=t.value();o.a.logNormal(`Changing property value from "${n}" to "${e}"`),t.setValue(e)}}]}},"+8gn":function(e,t,n){"use strict";n.d(t,"b",(function(){return c})),n.d(t,"a",(function(){return l}));var a=n("q1tI"),o=n("Eyy1"),r=n("txPx");const s=Object(r.getLogger)("Platform.GUI.StudyInputPropertyContainer"),c=a.createContext(null);class l extends a.PureComponent{constructor(e){super(e),this._setValue=(e,t,n)=>{const{property:a,model:r}=this.props,c=Object(o.ensureDefined)(a.child(e));s.logNormal(`Changing property "${e}" value from "${a.value()}" to "${t}"`),r.setProperty(c,t,"Change "+n)};const{property:t}=e,n={};t.childNames().forEach(e=>{const a=Object(o.ensureDefined)(t.child(e));n.hasOwnProperty(e)||(n[e]=a.value())}),this.state=n}componentDidMount(){const{property:e}=this.props;e.childNames().forEach(t=>{Object(o.ensureDefined)(e.child(t)).subscribe(this,e=>{const n=e.value();s.logNormal(`Property "${t}" updated to value "${n}"`),this.setState({[t]:n})})})}componentWillUnmount(){const{property:e}=this.props;e.childNames().forEach(t=>{Object(o.ensureDefined)(e.child(t)).unsubscribeAll(this)})}render(){const{study:e,model:t,children:n}=this.props,o={study:e,model:t,values:this.state,setValue:this._setValue};return a.createElement(c.Provider,{value:o},n)}}},"07LS":function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var a=n("q1tI"),o=n.n(a),r=n("Q+1u"),s=n("fktV"),c=n("Q40t");function l(e){return o.a.createElement(r.a.Row,null,o.a.createElement(r.a.Cell,{className:c.titleWrap,placement:"first",verticalAlign:"adaptive",colSpan:2,"data-section-name":e.name,checkableTitle:!0},o.a.createElement(s.a,{title:e.title,name:"is-enabled-"+e.name})))}},"0W35":function(e,t,n){"use strict";var a=n("q1tI"),o=n("17x9");class r extends a.PureComponent{constructor(){super(...arguments),this._subscriptions=new Set,this._getName=()=>this.props.name,this._getValues=()=>this.props.values,this._getOnChange=()=>this.props.onChange,this._subscribe=e=>{this._subscriptions.add(e)},this._unsubscribe=e=>{this._subscriptions.delete(e)}}getChildContext(){return{switchGroupContext:{getName:this._getName,getValues:this._getValues,getOnChange:this._getOnChange,subscribe:this._subscribe,unsubscribe:this._unsubscribe}}}render(){return this.props.children}componentDidUpdate(e){this._notify(this._getUpdates(this.props.values,e.values))}_notify(e){this._subscriptions.forEach(t=>t(e))}_getUpdates(e,t){return[...t,...e].filter(n=>t.includes(n)?!e.includes(n):e.includes(n))}}function s(e){var t;return(t=class extends a.PureComponent{ +constructor(){super(...arguments),this._onChange=e=>{this.context.switchGroupContext.getOnChange()(e)},this._onUpdate=e=>{e.includes(this.props.value)&&this.forceUpdate()}}componentDidMount(){this.context.switchGroupContext.subscribe(this._onUpdate)}render(){return a.createElement(e,{...this.props,name:this._getName(),onChange:this._onChange,checked:this._isChecked()})}componentWillUnmount(){this.context.switchGroupContext.unsubscribe(this._onUpdate)}_getName(){return this.context.switchGroupContext.getName()}_isChecked(){return this.context.switchGroupContext.getValues().includes(this.props.value)}}).contextTypes={switchGroupContext:o.any.isRequired},t}r.childContextTypes={switchGroupContext:o.any.isRequired},n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return s}))},"4bOu":function(e,t,n){e.exports={colorPickerWrap:"colorPickerWrap-3gSLMlhu",focused:"focused-3gSLMlhu",readonly:"readonly-3gSLMlhu",disabled:"disabled-3gSLMlhu","size-small":"size-small-3gSLMlhu","size-medium":"size-medium-3gSLMlhu","size-large":"size-large-3gSLMlhu","font-size-small":"font-size-small-3gSLMlhu","font-size-medium":"font-size-medium-3gSLMlhu","font-size-large":"font-size-large-3gSLMlhu","border-none":"border-none-3gSLMlhu",shadow:"shadow-3gSLMlhu","border-thin":"border-thin-3gSLMlhu","border-thick":"border-thick-3gSLMlhu","intent-default":"intent-default-3gSLMlhu","intent-success":"intent-success-3gSLMlhu","intent-warning":"intent-warning-3gSLMlhu","intent-danger":"intent-danger-3gSLMlhu","intent-primary":"intent-primary-3gSLMlhu","corner-top-left":"corner-top-left-3gSLMlhu","corner-top-right":"corner-top-right-3gSLMlhu","corner-bottom-right":"corner-bottom-right-3gSLMlhu","corner-bottom-left":"corner-bottom-left-3gSLMlhu",colorPicker:"colorPicker-3gSLMlhu",swatch:"swatch-3gSLMlhu",placeholderContainer:"placeholderContainer-3gSLMlhu",placeholder:"placeholder-3gSLMlhu",white:"white-3gSLMlhu",opacitySwatch:"opacitySwatch-3gSLMlhu",colorLine:"colorLine-3gSLMlhu",thicknessContainer:"thicknessContainer-3gSLMlhu",thicknessTitle:"thicknessTitle-3gSLMlhu"}},"5YG5":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n("CW80"),o=n("3ClC");function r(e){if(Object(a.isLineTool)(e))return{isPine:()=>!1,isStandardPine:()=>!1,canOverrideMinTick:()=>!1,resolvedSymbolInfoBySymbol:()=>{throw new TypeError("Only study is supported.")},symbolsResolved:()=>{throw new TypeError("Only study is supported.")},parentSource:()=>{throw new TypeError("Only study is supported.")},getAllChildren:()=>[],sourceId:()=>{throw new TypeError("Only study is supported.")}};if(Object(o.isStudy)(e))return e;if("isInputsStudy"in e)return e;throw new TypeError("Unsupported source type.")}},"6ix9":function(e,t,n){e.exports={content:"content-22S1W3v8",cell:"cell-22S1W3v8",inner:"inner-22S1W3v8",first:"first-22S1W3v8",inlineCell:"inlineCell-22S1W3v8",fill:"fill-22S1W3v8",top:"top-22S1W3v8",topCenter:"topCenter-22S1W3v8",offset:"offset-22S1W3v8",inlineRow:"inlineRow-22S1W3v8",grouped:"grouped-22S1W3v8",separator:"separator-22S1W3v8", +groupSeparator:"groupSeparator-22S1W3v8",big:"big-22S1W3v8",adaptive:"adaptive-22S1W3v8",checkableTitle:"checkableTitle-22S1W3v8"}},"7MId":function(e,t,n){"use strict";var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),s=n.n(r),c=n("Eyy1"),l=n("/3z9"),i=n("9dlw"),u=n("SpAO"),d=n("htM8"),p=n("PN6A");function h(e){const{button:t,children:n,className:r,onPopupClose:s,...h}=e,[m,b]=Object(a.useState)(!1),[f,g]=Object(a.useState)(!1),[v,C]=Object(u.a)(),y=Object(a.useRef)(null);return o.a.createElement("div",{className:r},o.a.createElement("div",{tabIndex:e.disabled?void 0:-1,ref:y,onClick:S,onFocus:C.onFocus,onBlur:C.onBlur,onKeyDown:E},"function"==typeof t?t(f,v):t),o.a.createElement(i.a,{isOpened:f,onClose:N,position:function(){const e=Object(c.ensureNotNull)(y.current).getBoundingClientRect();return{x:e.left,y:e.top+e.height}},doNotCloseOn:y.current,onKeyDown:E},o.a.createElement(p.a.Consumer,null,e=>o.a.createElement(d.a,{...h,onToggleCustom:b,menu:e})),!m&&n));function S(){e.disabled||(g(e=>!e),b(!1))}function E(e){switch(Object(l.hashFromEvent)(e)){case 27:f&&(e.preventDefault(),N())}}function N(){S(),Object(c.ensureNotNull)(y.current).focus(),s&&s()}}var m=n("V3OP"),b=n("Tmoa"),f=n("wLjq"),g=(n("YFKU"),n("0W35")),v=n("95N5");const C=Object(g.b)(class extends a.PureComponent{constructor(){super(...arguments),this._onChange=()=>{this.props.onChange&&this.props.onChange(this.props.value)}}render(){const{name:e,checked:t,value:n}=this.props,o=r(v.thicknessItem,{[v.checked]:t}),s=r(v.bar,{[v.checked]:t}),c={borderTopWidth:parseInt(n)};return a.createElement("div",{className:o},a.createElement("input",{type:"radio",className:v.radio,name:e,value:n,onChange:this._onChange,checked:t}),a.createElement("div",{className:s,style:c}," "))}});function y(e){const{name:t,values:n,selectedValues:o,onChange:r}=e,s=n.map((e,t)=>a.createElement(C,{key:t,value:e.toString()})),c=o.map(e=>e.toString());return a.createElement("div",{className:v.wrap},a.createElement(g.a,{name:t,onChange:e=>{r(parseInt(e))},values:c},s))}var S=n("85uA");const E=window.t("Thickness");function N(e){return o.a.createElement("div",{className:S.thicknessContainer},o.a.createElement("div",{className:S.thicknessTitle},E),o.a.createElement(y,{name:"color_picker_thickness_select",onChange:e.onChange,values:e.items,selectedValues:[e.value]}))}var w=n("4bOu");function k(e){const{className:t,selectOpacity:n=void 0!==e.opacity,thickness:a,color:r,disabled:c,opacity:l=1,onColorChange:i,onOpacityChange:u,onThicknessChange:d,thicknessItems:p,onPopupClose:b}=e,[f,g,v]=Object(m.a)();return o.a.createElement(h,{className:t,disabled:c,color:r,selectOpacity:n,opacity:l,selectCustom:!0,customColors:f,onColorChange:i,onOpacityChange:r?u:void 0,onAddColor:g,onRemoveCustomColor:v,button:function(e,t){const n=e||t,i=n?"primary":"default";return o.a.createElement("div",{className:s()(w.colorPickerWrap,w["intent-"+i],w["border-thin"],w["size-medium"],n&&w.highlight,n&&w.focused,c&&w.disabled),"data-role":"button","data-name":a?"color-with-thickness-select":"color-select" +},o.a.createElement("div",{className:s()(w.colorPicker,c&&w.disabled)},r?function(){const e=x(r,l),t=l>=.95&&O(r);return o.a.createElement("div",{className:w.opacitySwatch},o.a.createElement("div",{style:{backgroundColor:e},className:s()(w.swatch,t&&w.white)}))}():o.a.createElement("div",{className:w.placeholderContainer},o.a.createElement("div",{className:w.placeholder})),a&&o.a.createElement("span",{className:s()(w.colorLine,O(r)&&w.white),style:{height:a,backgroundColor:x(r,l)}})),n&&o.a.createElement("span",{className:w.shadow}))},onPopupClose:b},a&&p&&o.a.createElement(N,{value:a,items:p,onChange:function(e){d&&d(e)}}))}function x(e,t){return e?Object(b.generateColor)(e,Object(b.alphaToTransparency)(t)):"#000000"}function O(e){return!!e&&e.toLowerCase()===f.c}n.d(t,"a",(function(){return k}))},"85uA":function(e,t,n){e.exports={thicknessContainer:"thicknessContainer-2K1QSVfY",thicknessTitle:"thicknessTitle-2K1QSVfY"}},"95N5":function(e,t,n){e.exports={wrap:"wrap-kAIcH6Vi",thicknessItem:"thicknessItem-kAIcH6Vi",checked:"checked-kAIcH6Vi",radio:"radio-kAIcH6Vi",bar:"bar-kAIcH6Vi"}},E9Pn:function(e,t,n){},EYfA:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n("q1tI"),o=n.n(a),r=n("Q+1u"),s=n("fktV");function c(e){const{id:t,offset:n,disabled:a,checked:c,title:l,children:i}=e;return o.a.createElement(r.a.Row,null,o.a.createElement(r.a.Cell,{placement:"first",verticalAlign:"adaptive",offset:n,"data-section-name":t,colSpan:Boolean(i)?void 0:2,checkableTitle:!0},o.a.createElement(s.a,{name:"is-enabled-"+t,title:l,disabled:a,property:c})),Boolean(i)&&o.a.createElement(r.a.Cell,{placement:"last","data-section-name":t},i))}},HfwS:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return s}));var a=n("q1tI"),o=n("+8gn");function r(e){var t;return(t=class extends a.PureComponent{constructor(){super(...arguments),this._getTimezoneName=e=>{const t=e.model().timezone();if("exchange"!==t)return t;const n=e.model().mainSeries().symbolInfo();return null==n?void 0:n.timezone},this._onChange=(e,t,n)=>{const{setValue:a}=this.context,{onChange:o}=this.props;s(a,o)(e,t,n)}}render(){const{input:t}=this.props,{values:n,model:o}=this.context;return a.createElement(e,{...this.props,value:n[t.id],tzName:this._getTimezoneName(o),onChange:this._onChange})}}).contextType=o.b,t}function s(e,t){return(n,a,o)=>{e(a,n,o),t&&t(n,a,o)}}},"Q+1u":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),s=n("ijHL"),c=n("6ix9");const l=o.a.createContext(!1);class i extends o.a.PureComponent{render(){return o.a.createElement("div",{ref:this.props.reference,className:c.content},this.props.children)}}i.InlineRowContext=l,i.Row=function(e){const{children:t}=e;return Object(a.useContext)(l)?o.a.createElement("span",{className:c.inlineRow},t):o.a.createElement(o.a.Fragment,null,t)},i.Cell=function(e){ +const t=Object(a.useContext)(l),n=r(c.cell,e.offset&&c.offset,e.grouped&&c.grouped,t&&c.inlineCell,"top"===e.verticalAlign&&c.top,"topCenter"===e.verticalAlign&&c.topCenter,"adaptive"===e.verticalAlign&&c.adaptive,e.checkableTitle&&c.checkableTitle,2===e.colSpan&&c.fill,"first"===e.placement&&2!==e.colSpan&&c.first,"last"===e.placement&&2!==e.colSpan&&c.last),i=Object(s.b)(e);return o.a.createElement("div",{...i,className:n},o.a.createElement("div",{className:r(c.inner,e.className)},e.children))},i.Separator=function(e){return o.a.createElement(i.Row,null,o.a.createElement("div",{className:r(c.cell,c.separator,c.fill)}))},i.GroupSeparator=function(e){const t=e.size||0;return o.a.createElement(i.Row,null,o.a.createElement("div",{className:r(c.cell,c.groupSeparator,c.fill,1===t&&c.big)}))}},Q40t:function(e,t,n){e.exports={titleWrap:"titleWrap-3OnZWCnE"}},Si6X:function(e,t,n){"use strict";var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),s=n.n(r),c=n("YFKU"),l=n("Eyy1"),i=n("+EG+"),u=n("pafz"),d=n("Kxc7"),p=n("fV01"),h=n("kNVT"),m=n("p04v"),b=n("Iivm"),f=n("u52U"),g=n("xNfs");function v(e){const{value:t,onClick:n,disabled:a=!1,className:s}=e;return o.a.createElement("div",{className:r(g.wrap,a&&g.disabled,s),onClick:n,"data-name":"edit-button"},o.a.createElement("span",{className:r(g.text,"apply-overflow-tooltip")},t),o.a.createElement(b.a,{icon:f,className:g.icon}))}var C=n("EYfA"),y=n("xpzh"),S=n("952j"),E=n("rC+j"),N=n("8woN");var w=n("pCpq");function k(e){const{symbol:t,onSymbolChanged:n,disabled:r,className:l}=e,[p,b]=Object(a.useState)(t),f=Object(a.useContext)(i.b),g=Object(a.useContext)(u.a);return o.a.createElement(v,{value:p,onClick:function(){const e=function(e){const t=Object(S.b)(e);return Object(E.e)(t)}(p)?p:function(e){try{return Object(N.shortName)(e)}catch(t){return e}}(p),t=Object(h.getSymbolSearchCompleteOverrideFunction)();Object(m.a)({onSearchComplete:e=>{t(e[0].symbol).then(e=>{n(e),b(e)})},dialogTitle:Object(c.t)("Change symbol"),defaultValue:e,manager:f,onClose:()=>{g&&g.focus()},showSpreadActions:d.enabled("show_spread_operators")&&d.enabled("studies_symbol_search_spread_operators")})},disabled:r,className:s()(l,d.enabled("uppercase_instrument_names")&&w.uppercase)})}function x(e){if("definition"in e){const{propType:t,properties:n,id:a,title:r=""}=e.definition,s=n[t],c=s.value()||"",i=e=>{s.setValue(e)};return o.a.createElement(C.a,{id:a,title:r},o.a.createElement(y.a,null,o.a.createElement(k,{symbol:Object(l.ensureDefined)(c),onSymbolChanged:i})))}{const{study:t,value:n,input:{id:a,name:r},onChange:c,disabled:i,hasTooltip:u}=e,d=e=>{const n=Object(p.b)(e,t);c(n,a,r)};return o.a.createElement(k,{symbol:Object(l.ensureDefined)(n),onSymbolChanged:d,disabled:i,className:s()(u&&w.hasTooltip)})}}n.d(t,"a",(function(){return x}))},WboT:function(e,t,n){"use strict";var a=n("q1tI"),o=n.n(a),r=n("8+VR"),s=n("TSYQ"),c=n("ldG2"),l=n("xADF"),i=n("dKnb"),u=n("jh7f"),d=n("VET0"),p=n("ZgM/");const h={large:c.b.FontSizeLarge,medium:c.b.FontSizeMedium},m={attachment:d.a.top.attachment, +targetAttachment:d.a.top.targetAttachment,attachmentOffsetY:-4};function b(e){const{className:t,inputClassName:n,stretch:o=!0,errorMessage:r,fontSizeStyle:c="large",endSlot:d,button:b,error:f,warning:g,innerLabel:v,inputReference:C,children:y,...S}=e,E=f&&void 0!==r?[r]:void 0,N=g&&void 0!==r?[r]:void 0,w=s(p.inputContainer,h[c],t),k=v?a.createElement(l.d,{className:p.innerLabel,interactive:!1},v):void 0,x=d||b||y?a.createElement(l.b,null,d,b,y):void 0;return a.createElement(i.a,{...S,className:w,inputClassName:n,errors:E,warnings:N,hasErrors:f,hasWarnings:g,messagesPosition:u.a.Attached,customErrorsAttachment:m,messagesRoot:"document",inheritMessagesWidthFromTarget:!0,disableMessagesRtlStyles:!0,iconHidden:!0,stretch:o,reference:C,startSlot:k,endSlot:x})}var f=n("YFKU"),g=n("Iivm"),v=n("R4+T"),C=n("uZsJ");function y(e){const t=s(C.control,C.controlIncrease),n=s(C.control,C.controlDecrease);return a.createElement(a.Fragment,null,void 0!==e.title&&a.createElement("div",{className:C.title},e.title),a.createElement("div",{className:C.controlWrapper},(e.defaultButtonsVisible||e.title)&&a.createElement(a.Fragment,null,a.createElement("button",{type:"button",tabIndex:-1,"aria-label":Object(f.t)("Increase"),className:t,onClick:e.increaseValue},a.createElement(g.a,{icon:v,className:C.controlIcon})),a.createElement("button",{type:"button",tabIndex:-1,"aria-label":Object(f.t)("Increase"),className:n,onClick:e.decreaseValue},a.createElement(g.a,{icon:v,className:C.controlIcon})))))}var S=n("8d0Q"),E=n("SpAO"),N=n("3F0O"),w=n("/3z9");n.d(t,"a",(function(){return O}));const k=[38],x=[40];function O(e){const[t,n]=Object(S.c)(),[s,c]=Object(E.a)(),l=Object(N.a)(c.onFocus,e.onFocus),i=Object(N.a)(c.onBlur,e.onBlur),u=Object(a.useCallback)(t=>{!e.disabled&&s&&(t.preventDefault(),t.deltaY<0?e.onValueByStepChange(1):e.onValueByStepChange(-1))},[s,e.disabled,e.onValueByStepChange]);return o.a.createElement(b,{...n,name:e.name,pattern:e.pattern,borderStyle:e.borderStyle,fontSizeStyle:e.fontSizeStyle,value:e.value,className:e.className,inputClassName:e.inputClassName,button:function(){const{button:n,forceShowControls:a,disabled:c,title:l}=e,i=!c&&!r.mobiletouch&&(a||s||t);return c?void 0:o.a.createElement(o.a.Fragment,null,null!=n?n:o.a.createElement(y,{increaseValue:d,decreaseValue:p,defaultButtonsVisible:i,title:l}))}(),disabled:e.disabled,placeholder:e.placeholder,innerLabel:e.innerLabel,endSlot:e.endSlot,containerReference:e.containerReference,inputReference:e.inputReference,inputMode:e.inputMode,type:e.type,error:e.error,errorMessage:e.errorMessage,onClick:e.onClick,onFocus:l,onBlur:i,onChange:e.onValueChange,onKeyDown:function(t){if(e.disabled||0!==Object(w.modifiersFromEvent)(t.nativeEvent))return;let n=k,a=x;e.controlDecKeyCodes&&(a=a.concat(e.controlDecKeyCodes));e.controlIncKeyCodes&&(n=n.concat(e.controlIncKeyCodes));(a.includes(t.keyCode)||n.includes(t.keyCode))&&(t.preventDefault(),e.onValueByStepChange(a.includes(t.keyCode)?-1:1));e.onKeyDown&&e.onKeyDown(t)},onWheelNoPassive:u,stretch:e.stretch,intent:e.intent, +highlight:e.highlight,highlightRemoveRoundBorder:e.highlightRemoveRoundBorder,autoSelectOnFocus:!0});function d(){e.disabled||e.onValueByStepChange(1)}function p(){e.disabled||e.onValueByStepChange(-1)}}},"ZgM/":function(e,t,n){e.exports={innerLabel:"innerLabel-21h1g6jU"}},eG6P:function(e,t,n){e.exports={wrap:"wrap-2tojvhF7"}},fV01:function(e,t,n){"use strict";n.d(t,"b",(function(){return u})),n.d(t,"a",(function(){return d}));var a=n("q1tI"),o=n.n(a),r=n("Eyy1"),s=n("+8gn"),c=n("HfwS"),l=n("5YG5"),i=n("Si6X");function u(e,t){const n=Object(l.a)(t).resolvedSymbolInfoBySymbol(e);return n&&(n.ticker||n.full_name)?n.ticker||n.full_name:e}const d=Object(c.a)((function(e){const t=Object(a.useContext)(s.b),{study:n}=Object(r.ensureNotNull)(t),{input:{defval:c},value:l}=e;return o.a.createElement(i.a,{...e,value:u(l||c||"",n),study:n})}))},fV0y:function(e,t,n){"use strict";var a=n("q1tI"),o=n("TSYQ"),r=n("0W35"),s=n("vCF3"),c=n("qibD");n("E9Pn");class l extends a.PureComponent{render(){const{inputClassName:e,labelClassName:t,...n}=this.props,r=o(this.props.className,c.checkbox,{[c.reverse]:Boolean(this.props.labelPositionReverse),[c.baseline]:Boolean(this.props.labelAlignBaseline)}),l=o(c.label,t,{[c.disabled]:this.props.disabled});let i=null;return this.props.label&&(i=a.createElement("span",{className:l,title:this.props.title},this.props.label)),a.createElement("label",{className:r},a.createElement(s.a,{...n,className:e}),i)}}l.defaultProps={value:"on"};Object(r.b)(l);n.d(t,"a",(function(){return l}))},fktV:function(e,t,n){"use strict";var a=n("q1tI"),o=n.n(a),r=n("qFKp"),s=n("fV0y"),c=n("++uw");function l(e){const{property:t,...n}=e,[a,r]=Object(c.a)({property:t});return o.a.createElement(s.a,{...n,name:"toggle-enabled",checked:a,onChange:function(){r(!a)}})}var i=n("xpzh"),u=n("vxCt");function d(e){const{property:t,disabled:n,title:a,className:s,name:c}=e,d=o.a.createElement("span",{className:u.title},a);return o.a.createElement(i.a,{className:s},t&&o.a.createElement(l,{name:c,className:u.checkbox,property:t,disabled:n,label:d,labelAlignBaseline:!r.isIE}),!t&&d)}n.d(t,"a",(function(){return d}))},pCpq:function(e,t,n){e.exports={hasTooltip:"hasTooltip-2kfQACVg",uppercase:"uppercase-2kfQACVg"}},qibD:function(e){e.exports=JSON.parse('{"checkbox":"checkbox-3xZUD-2M","reverse":"reverse-3xeTx96y","label":"label-cyItEVpF","baseline":"baseline-6TXKro4X"}')},u52U:function(e,t){e.exports=''},uZsJ:function(e,t,n){e.exports={controlWrapper:"controlWrapper-7ApHzdB4",hidden:"hidden-7ApHzdB4",control:"control-7ApHzdB4",controlIncrease:"controlIncrease-7ApHzdB4",controlDecrease:"controlDecrease-7ApHzdB4",controlIcon:"controlIcon-7ApHzdB4",title:"title-7ApHzdB4"}},vxCt:function(e,t,n){e.exports={checkbox:"checkbox-FNjK79Y1",title:"title-FNjK79Y1"}}, +xNfs:function(e,t,n){e.exports={wrap:"wrap-3GItoI3T",icon:"icon-3GItoI3T",text:"text-3GItoI3T",disabled:"disabled-3GItoI3T"}},xpzh:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),s=n.n(r),c=n("eG6P");function l(e){return o.a.createElement("div",{className:s()(c.wrap,e.className)},e.children)}},yqnI:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n("txPx");const o=Object(a.getLogger)("Platform.GUI.PropertyDefinitionTrace")}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/38.41f3d509b61c8af47de3.js b/static/charting_library/bundles/38.41f3d509b61c8af47de3.js new file mode 100644 index 0000000..b03db61 --- /dev/null +++ b/static/charting_library/bundles/38.41f3d509b61c8af47de3.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{"5YsI":function(t,e,o){t.exports={button:"button-1SoiPS-f",hover:"hover-1SoiPS-f",arrow:"arrow-1SoiPS-f",arrowWrap:"arrowWrap-1SoiPS-f",isOpened:"isOpened-1SoiPS-f"}},"82wv":function(t,e,o){"use strict";o.d(e,"a",(function(){return h}));var r=o("q1tI"),n=o("TSYQ"),i=o("9dlw"),s=o("ML8+"),a=o("ijHL"),c=o("mkWe"),l=o("Sn4D"),d=o("Iksw"),u=o("/KDZ"),p=o("5YsI");class h extends r.PureComponent{constructor(t){super(t),this._wrapperRef=null,this._controller=r.createRef(),this._handleWrapperRef=t=>{this._wrapperRef=t,this.props.reference&&this.props.reference(t)},this._handleClick=t=>{t.target instanceof Node&&t.currentTarget.contains(t.target)&&(this._handleToggleDropdown(),this.props.onClick&&this.props.onClick(t,!this.state.isOpened))},this._handleToggleDropdown=t=>{const{onClose:e,onOpen:o}=this.props,{isOpened:r}=this.state,n="boolean"==typeof t?t:!r;this.setState({isOpened:n}),n&&o&&o(),!n&&e&&e()},this._handleClose=()=>{this.close()},this.state={isOpened:!1}}render(){const{id:t,arrow:e,content:o,isDisabled:i,isDrawer:c,isShowTooltip:l,title:d,className:p,hotKey:h,theme:m,drawerBreakpoint:f}=this.props,{isOpened:v}=this.state,w=n(p,m.button,{"apply-common-tooltip":l||!i,[m.isDisabled]:i,[m.isOpened]:v});return r.createElement("div",{id:t,className:w,onClick:i?void 0:this._handleClick,title:d,"data-tooltip-hotkey":h,ref:this._handleWrapperRef,"data-role":"button",...Object(a.b)(this.props)},o,e&&r.createElement("div",{className:m.arrow},r.createElement("div",{className:m.arrowWrap},r.createElement(s.a,{dropped:v}))),this.state.isOpened&&(f?r.createElement(u.a,{rule:f},t=>this._renderContent(t)):this._renderContent(c)))}close(){this._handleToggleDropdown(!1)}update(){null!==this._controller.current&&this._controller.current.update()}_renderContent(t){const{menuDataName:e,minWidth:o,menuClassName:n,maxHeight:s,drawerPosition:a="Bottom",children:u}=this.props,{isOpened:p}=this.state,h={horizontalMargin:this.props.horizontalMargin||0,verticalMargin:this.props.verticalMargin||2,verticalAttachEdge:this.props.verticalAttachEdge,horizontalAttachEdge:this.props.horizontalAttachEdge,verticalDropDirection:this.props.verticalDropDirection,horizontalDropDirection:this.props.horizontalDropDirection,matchButtonAndListboxWidths:this.props.matchButtonAndListboxWidths},m=Boolean(p&&t&&a),f=function(t){return"function"==typeof t}(u)?u({isDrawer:m}):u;return m?r.createElement(c.b,null,r.createElement(l.a,{onClose:this._handleClose,position:a,"data-name":e},f)):r.createElement(i.a,{controller:this._controller,closeOnClickOutside:this.props.closeOnClickOutside,doNotCloseOn:this,isOpened:p,minWidth:o,onClose:this._handleClose,position:Object(d.e)(this._wrapperRef,h),className:n,maxHeight:s,"data-name":e},f)}}h.defaultProps={arrow:!0,closeOnClickOutside:!0,theme:p}},Iksw:function(t,e,o){"use strict";o.d(e,"c",(function(){return r})),o.d(e,"a",(function(){return n})),o.d(e,"d",(function(){return i})),o.d(e,"b",(function(){return s})),o.d(e,"e",(function(){return l})) +;var r,n,i,s,a=o("Eyy1");!function(t){t[t.Top=0]="Top",t[t.Bottom=1]="Bottom"}(r||(r={})),function(t){t[t.Left=0]="Left",t[t.Right=1]="Right"}(n||(n={})),function(t){t[t.FromTopToBottom=0]="FromTopToBottom",t[t.FromBottomToTop=1]="FromBottomToTop"}(i||(i={})),function(t){t[t.FromLeftToRight=0]="FromLeftToRight",t[t.FromRightToLeft=1]="FromRightToLeft"}(s||(s={}));const c={verticalAttachEdge:r.Bottom,horizontalAttachEdge:n.Left,verticalDropDirection:i.FromTopToBottom,horizontalDropDirection:s.FromLeftToRight,verticalMargin:0,horizontalMargin:0,matchButtonAndListboxWidths:!1};function l(t,e){return(o,l)=>{const d=Object(a.ensureNotNull)(t).getBoundingClientRect(),{verticalAttachEdge:u=c.verticalAttachEdge,verticalDropDirection:p=c.verticalDropDirection,horizontalAttachEdge:h=c.horizontalAttachEdge,horizontalDropDirection:m=c.horizontalDropDirection,horizontalMargin:f=c.horizontalMargin,verticalMargin:v=c.verticalMargin,matchButtonAndListboxWidths:w=c.matchButtonAndListboxWidths}=e,b=u===r.Top?-1*v:v,D=h===n.Right?d.right:d.left,g=u===r.Top?d.top:d.bottom,O={x:D-(m===s.FromRightToLeft?o:0)+f,y:g-(p===i.FromBottomToTop?l:0)+b};return w&&(O.overrideWidth=d.width),O}}},"ML8+":function(t,e,o){"use strict";o.d(e,"a",(function(){return c}));var r=o("q1tI"),n=o("TSYQ"),i=o("Iivm"),s=o("cvzQ"),a=o("R4+T");function c(t){const{dropped:e,className:o}=t;return r.createElement(i.a,{className:n(o,s.icon,{[s.dropped]:e}),icon:a})}},"R4+T":function(t,e){t.exports=''},R5JZ:function(t,e,o){"use strict";function r(t,e,o,r,n){function i(n){if(t>n.timeStamp)return;const i=n.target;void 0!==o&&null!==e&&null!==i&&i.ownerDocument===r&&(e.contains(i)||o(n))}return n.click&&r.addEventListener("click",i,!1),n.mouseDown&&r.addEventListener("mousedown",i,!1),n.touchEnd&&r.addEventListener("touchend",i,!1),n.touchStart&&r.addEventListener("touchstart",i,!1),()=>{r.removeEventListener("click",i,!1),r.removeEventListener("mousedown",i,!1),r.removeEventListener("touchend",i,!1),r.removeEventListener("touchstart",i,!1)}}o.d(e,"a",(function(){return r}))},Sn4D:function(t,e,o){"use strict";o.d(e,"a",(function(){return m}));var r=o("q1tI"),n=o.n(r),i=o("Eyy1"),s=o("TSYQ"),a=o("x0D+"),c=o("0YpW"),l=o("AiMB"),d=o("mkWe"),u=o("qFKp"),p=o("X0gx"),h=o("sHQ4");function m(t){const{position:e="Bottom",onClose:o,children:m,className:f,theme:v=h}=t,w=Object(i.ensureNotNull)(Object(r.useContext)(d.a)),[b,D]=Object(r.useState)(0),g=Object(r.useRef)(null),O=Object(r.useContext)(p.a);return Object(r.useEffect)(()=>{const t=Object(i.ensureNotNull)(g.current);return t.focus({preventScroll:!0}),O.subscribe(w,o),Object(c.a)(!0),u.CheckMobile.iOS()&&Object(a.disableBodyScroll)(t),D(w.addDrawer()),()=>{O.unsubscribe(w,o);const e=w.removeDrawer();u.CheckMobile.iOS()&&Object(a.enableBodyScroll)(t),0===e&&Object(c.a)(!1)}},[]),n.a.createElement(l.a,null,n.a.createElement("div",{ +className:s(h.wrap,h["position"+e])},b===w.currentDrawer&&n.a.createElement("div",{className:h.backdrop,onClick:o}),n.a.createElement("div",{className:s(h.drawer,v.drawer,h["position"+e],f),ref:g,tabIndex:-1,"data-name":t["data-name"]},m)))}},bQ7Y:function(t,e,o){t.exports={button:"button-2Vpz_LXc",hover:"hover-2Vpz_LXc",isInteractive:"isInteractive-2Vpz_LXc",isGrouped:"isGrouped-2Vpz_LXc",isActive:"isActive-2Vpz_LXc",isOpened:"isOpened-2Vpz_LXc",isDisabled:"isDisabled-2Vpz_LXc",text:"text-2Vpz_LXc",icon:"icon-2Vpz_LXc"}},cvzQ:function(t,e,o){t.exports={icon:"icon-19OjtB6A",dropped:"dropped-19OjtB6A"}},ijHL:function(t,e,o){"use strict";function r(t){return i(t,s)}function n(t){return i(t,a)}function i(t,e){const o=Object.entries(t).filter(e),r={};for(const[t,e]of o)r[t]=e;return r}function s(t){const[e,o]=t;return 0===e.indexOf("data-")&&"string"==typeof o}function a(t){return 0===t[0].indexOf("aria-")}o.d(e,"b",(function(){return r})),o.d(e,"a",(function(){return n})),o.d(e,"c",(function(){return i})),o.d(e,"e",(function(){return s})),o.d(e,"d",(function(){return a}))},mkWe:function(t,e,o){"use strict";o.d(e,"b",(function(){return i})),o.d(e,"a",(function(){return s}));var r=o("q1tI"),n=o.n(r);class i extends n.a.PureComponent{constructor(t){super(t),this._addDrawer=()=>{const t=this.state.currentDrawer+1;return this.setState({currentDrawer:t}),t},this._removeDrawer=()=>{const t=this.state.currentDrawer-1;return this.setState({currentDrawer:t}),t},this.state={currentDrawer:0}}render(){return n.a.createElement(s.Provider,{value:{addDrawer:this._addDrawer,removeDrawer:this._removeDrawer,currentDrawer:this.state.currentDrawer}},this.props.children)}}const s=n.a.createContext(null)},sHQ4:function(t,e,o){t.exports={wrap:"wrap-164vy-kj",positionBottom:"positionBottom-164vy-kj",backdrop:"backdrop-164vy-kj",drawer:"drawer-164vy-kj",positionLeft:"positionLeft-164vy-kj"}},tU7i:function(t,e,o){"use strict";o.d(e,"a",(function(){return a})),o.d(e,"b",(function(){return c}));var r=o("q1tI"),n=o("TSYQ"),i=o("Iivm"),s=o("bQ7Y");const a=s,c=r.forwardRef((t,e)=>{const{icon:o,isActive:a,isOpened:c,isDisabled:l,isGrouped:d,isHovered:u,onClick:p,text:h,textBeforeIcon:m,title:f,theme:v=s,className:w,forceInteractive:b,"data-name":D,...g}=t,O=n(w,v.button,f&&"apply-common-tooltip",{[v.isActive]:a,[v.isOpened]:c,[v.isInteractive]:(b||Boolean(p))&&!l,[v.isDisabled]:l,[v.isGrouped]:d,[v.hover]:u}),E=o&&("string"==typeof o?r.createElement(i.a,{className:v.icon,icon:o}):r.cloneElement(o,{className:n(v.icon,o.props.className)}));return r.createElement("div",{...g,ref:e,"data-role":"button",className:O,onClick:l?void 0:p,title:f,"data-name":D},m&&h&&r.createElement("div",{className:n("js-button-text",v.text)},h),E,!m&&h&&r.createElement("div",{className:n("js-button-text",v.text)},h))})}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/39.74a7bc3b464cd284827f.css b/static/charting_library/bundles/39.74a7bc3b464cd284827f.css new file mode 100644 index 0000000..1e449fd --- /dev/null +++ b/static/charting_library/bundles/39.74a7bc3b464cd284827f.css @@ -0,0 +1 @@ +.content-22S1W3v8{box-sizing:border-box;color:#131722;display:inline-grid;grid-template-columns:auto 1fr;max-width:550px;padding:16px 20px;width:100%}html.theme-dark .content-22S1W3v8{color:#b2b5be}.cell-22S1W3v8 .inner-22S1W3v8{align-items:center;display:flex;padding:8px 0}.cell-22S1W3v8.first-22S1W3v8{align-items:center;display:flex;min-width:0}.cell-22S1W3v8.first-22S1W3v8 .inner-22S1W3v8{word-wrap:break-word;cursor:default;display:block;min-width:0;padding-right:20px}.cell-22S1W3v8.first-22S1W3v8 .inner-22S1W3v8:first-letter{text-transform:capitalize}.cell-22S1W3v8.first-22S1W3v8.inlineCell-22S1W3v8 .inner-22S1W3v8{padding-right:0}.cell-22S1W3v8.fill-22S1W3v8{grid-column:1/3}.cell-22S1W3v8.top-22S1W3v8{align-items:flex-start}.cell-22S1W3v8.topCenter-22S1W3v8{align-items:flex-start;padding-top:8px}.cell-22S1W3v8:only-child{max-width:340px}.cell-22S1W3v8.offset-22S1W3v8{padding-left:26px}.inlineRow-22S1W3v8{display:flex}.inlineCell-22S1W3v8{margin-right:8px}.grouped-22S1W3v8 .inner-22S1W3v8,.inlineCell-22S1W3v8 .inner-22S1W3v8{padding:4px 0}.separator-22S1W3v8{background-color:#e0e3eb;height:1px;margin:8px -20px}html.theme-dark .separator-22S1W3v8{background-color:#434651}.groupSeparator-22S1W3v8{height:8px}.groupSeparator-22S1W3v8.big-22S1W3v8{height:14px}@media screen and (max-width:379px){.content-22S1W3v8{grid-template-columns:1fr min-content}.cell-22S1W3v8.first-22S1W3v8 .inner-22S1W3v8{padding:8px 20px 8px 0}.cell-22S1W3v8.adaptive-22S1W3v8{align-items:flex-start}.cell-22S1W3v8.adaptive-22S1W3v8:not(.checkableTitle-22S1W3v8):not(.inlineCell-22S1W3v8){padding-top:8px}}.wrap-3GItoI3T{align-items:center;background-color:#f0f3fa;border-radius:4px;box-sizing:border-box;display:flex;height:34px;justify-content:space-between;max-width:180px;min-width:100px;padding:7px 8px 6px}html.theme-dark .wrap-3GItoI3T{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-3GItoI3T:hover{background-color:#e0e3eb}html.theme-dark .wrap-3GItoI3T:hover{background-color:#434651}.wrap-3GItoI3T:hover .icon-3GItoI3T{color:#131722}html.theme-dark .wrap-3GItoI3T:hover .icon-3GItoI3T{color:#b2b5be}}.text-3GItoI3T{color:#131722;cursor:default;line-height:21px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .text-3GItoI3T{color:#b2b5be}.icon-3GItoI3T{align-self:flex-start;color:#787b86;height:18px;margin-left:8px}.disabled-3GItoI3T{pointer-events:none}.disabled-3GItoI3T .icon-3GItoI3T,.disabled-3GItoI3T .text-3GItoI3T{color:#b2b5be}html.theme-dark .disabled-3GItoI3T .icon-3GItoI3T,html.theme-dark .disabled-3GItoI3T .text-3GItoI3T{color:#50535e}.wrap-2tojvhF7{align-items:center;display:flex;max-width:100%;overflow-wrap:break-word}.wrap-2tojvhF7:before{content:"";flex:none;height:34px;width:0}.checkbox-FNjK79Y1{min-width:0}.title-FNjK79Y1{cursor:default;min-width:0}.hasTooltip-2kfQACVg{margin-right:9px}.uppercase-2kfQACVg{text-transform:uppercase}.innerLabel-21h1g6jU{color:#d1d4dc;display:flex;flex:0 0 auto;font-size:16px;padding-left:5px}html.theme-dark .innerLabel-21h1g6jU{color:#50535e}.controlWrapper-7ApHzdB4{box-sizing:border-box;height:100%;overflow:hidden;width:22px}.controlWrapper-7ApHzdB4.hidden-7ApHzdB4{opacity:0}.control-7ApHzdB4{align-items:center;background-color:initial;border:none;border-radius:2px;box-sizing:border-box;color:#787b86;cursor:default;display:flex;flex:0 0 auto;height:50%;padding:0 6px;transition:color .35s ease,background-color .35s ease}.control-7ApHzdB4 svg{fill:currentColor}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-7ApHzdB4:hover{background-color:#f0f3fa;color:#131722}html.theme-dark .control-7ApHzdB4:hover{background-color:#363a45;color:#b2b5be}}.controlIncrease-7ApHzdB4{transform:rotate(180deg)}.controlIcon-7ApHzdB4{display:flex;flex:0 0 auto;justify-content:center;width:10px}.controlIcon-7ApHzdB4 svg{width:100%}.title-7ApHzdB4{color:#b2b5be;display:flex;flex-direction:column;font-size:12px;justify-content:center;margin-right:9px}html.theme-dark .title-7ApHzdB4{color:#50535e}.wrap-kAIcH6Vi{display:flex}.thicknessItem-kAIcH6Vi{align-items:center;background-color:initial;border:1px solid #d1d4dc;box-sizing:border-box;display:inline-flex;flex:1;height:32px;justify-content:center;padding:0 12px;position:relative}html.theme-dark .thicknessItem-kAIcH6Vi{background-color:initial;border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.thicknessItem-kAIcH6Vi:hover{background-color:#f0f3fa}html.theme-dark .thicknessItem-kAIcH6Vi:hover{background-color:#2a2e39}}.thicknessItem-kAIcH6Vi.checked-kAIcH6Vi{background-color:#2962ff;border-color:#2962ff;z-index:1}html.theme-dark .thicknessItem-kAIcH6Vi.checked-kAIcH6Vi{background-color:#2962ff;border-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.thicknessItem-kAIcH6Vi.checked-kAIcH6Vi:hover{background-color:#2962ff;border-color:#2962ff}html.theme-dark .thicknessItem-kAIcH6Vi.checked-kAIcH6Vi:hover{background-color:#2962ff;border-color:#2962ff}}.thicknessItem-kAIcH6Vi+.thicknessItem-kAIcH6Vi{margin-left:-1px}.thicknessItem-kAIcH6Vi:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px;margin-left:0}.thicknessItem-kAIcH6Vi:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.radio-kAIcH6Vi{height:100%;left:0;margin:0;opacity:0;padding:0;position:absolute;top:0;width:100%}.bar-kAIcH6Vi{border:0 solid #131722;height:0;width:100%}html.theme-dark .bar-kAIcH6Vi{border:0 solid #b2b5be}.bar-kAIcH6Vi.checked-kAIcH6Vi,html.theme-dark .bar-kAIcH6Vi.checked-kAIcH6Vi{border-top-color:#fff}.thicknessContainer-2K1QSVfY{padding:0 12px}.thicknessTitle-2K1QSVfY{color:#787b86;font-size:12px;line-height:14px;margin:6px 0 4px}html.theme-dark .thicknessTitle-2K1QSVfY{color:#787b86}.colorPickerWrap-3gSLMlhu{align-items:center;border-color:#d1d4dc;border-radius:4px;border-style:solid;box-sizing:border-box;display:inline-flex;margin:0;position:relative}html.theme-dark .colorPickerWrap-3gSLMlhu{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.colorPickerWrap-3gSLMlhu:hover{border-color:#a3a6af}html.theme-dark .colorPickerWrap-3gSLMlhu:hover{border-color:#6a6d78}}.colorPickerWrap-3gSLMlhu.focused-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.focused-3gSLMlhu{border-color:#2962ff}.colorPickerWrap-3gSLMlhu.readonly-3gSLMlhu{background-color:#f0f3fa;border-color:#d1d4dc}html.theme-dark .colorPickerWrap-3gSLMlhu.readonly-3gSLMlhu{background-color:#2a2e39;border-color:#50535e}.colorPickerWrap-3gSLMlhu.disabled-3gSLMlhu{background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}html.theme-dark .colorPickerWrap-3gSLMlhu.disabled-3gSLMlhu{background-color:#2a2e39;border-color:#50535e;color:#50535e}.colorPickerWrap-3gSLMlhu.size-small-3gSLMlhu{height:24px}.colorPickerWrap-3gSLMlhu.size-medium-3gSLMlhu{height:34px}.colorPickerWrap-3gSLMlhu.size-large-3gSLMlhu{height:48px}.colorPickerWrap-3gSLMlhu.font-size-medium-3gSLMlhu,.colorPickerWrap-3gSLMlhu.font-size-small-3gSLMlhu{font-size:14px;line-height:20px}.colorPickerWrap-3gSLMlhu.font-size-large-3gSLMlhu{font-size:16px;line-height:24px}.colorPickerWrap-3gSLMlhu.border-none-3gSLMlhu{border-width:0}.colorPickerWrap-3gSLMlhu.border-none-3gSLMlhu .shadow-3gSLMlhu{margin:0}.colorPickerWrap-3gSLMlhu.border-thin-3gSLMlhu{border-width:1px}.colorPickerWrap-3gSLMlhu.border-thin-3gSLMlhu .shadow-3gSLMlhu{margin:-1px}.colorPickerWrap-3gSLMlhu.border-thick-3gSLMlhu{border-width:2px}.colorPickerWrap-3gSLMlhu.border-thick-3gSLMlhu .shadow-3gSLMlhu{margin:-2px}.colorPickerWrap-3gSLMlhu.intent-default-3gSLMlhu .shadow-3gSLMlhu{border-color:#d1d4dc}html.theme-dark .colorPickerWrap-3gSLMlhu.intent-default-3gSLMlhu .shadow-3gSLMlhu{border-color:#50535e}.colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu,.colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu .shadow-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu .shadow-3gSLMlhu{border-color:#00897b}.colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu,.colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu .shadow-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu .shadow-3gSLMlhu{border-color:#ff9800}.colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu{border-color:#f44336}html.theme-dark .colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu{border-color:#d32f2f}.colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu .shadow-3gSLMlhu{border-color:#f44336}html.theme-dark .colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu .shadow-3gSLMlhu{border-color:#d32f2f}.colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu,.colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu .shadow-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu .shadow-3gSLMlhu{border-color:#2962ff}.colorPickerWrap-3gSLMlhu.corner-top-left-3gSLMlhu{border-top-left-radius:0}.colorPickerWrap-3gSLMlhu.corner-top-right-3gSLMlhu{border-top-right-radius:0}.colorPickerWrap-3gSLMlhu.corner-bottom-right-3gSLMlhu{border-bottom-right-radius:0}.colorPickerWrap-3gSLMlhu.corner-bottom-left-3gSLMlhu{border-bottom-left-radius:0}.shadow-3gSLMlhu{border:2px solid;border-radius:4px;bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.shadow-3gSLMlhu.corner-top-left-3gSLMlhu{border-top-left-radius:0}.shadow-3gSLMlhu.corner-top-right-3gSLMlhu{border-top-right-radius:0}.shadow-3gSLMlhu.corner-bottom-right-3gSLMlhu{border-bottom-right-radius:0}.shadow-3gSLMlhu.corner-bottom-left-3gSLMlhu{border-bottom-left-radius:0}.colorPicker-3gSLMlhu{align-items:center;display:flex;justify-content:center;padding:4px}.colorPicker-3gSLMlhu.disabled-3gSLMlhu{opacity:.5}.swatch-3gSLMlhu{border-radius:3px;box-sizing:border-box;display:block;height:100%;width:100%}.placeholderContainer-3gSLMlhu{border-radius:3px;height:24px;overflow:hidden;position:relative;width:24px}.placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu{background-color:#ef5350;height:24px;width:24px}html.theme-dark .placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu{background-color:#ef5350}.placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu:after{border-left:24px solid #0000;border-top:24px solid #26a69a;content:" ";position:absolute;width:0}html.theme-dark .placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu:after{border-top:24px solid #26a69a}.white-3gSLMlhu{border:1px solid #d1d4dc}html.theme-dark .white-3gSLMlhu{border:1px solid #0000}.opacitySwatch-3gSLMlhu{background-color:#fff;background-image:url(a6506134daec7169f68f563f084a9d41.svg);background-size:50%;border-radius:3px;flex:0 0 24px;height:24px;position:relative;width:24px}html.theme-dark .opacitySwatch-3gSLMlhu{background-color:#000}.colorLine-3gSLMlhu{border-radius:1px;margin-left:8px;margin-right:4px;width:30px}.colorLine-3gSLMlhu.white-3gSLMlhu{margin-left:7px;margin-right:3px}.thicknessContainer-3gSLMlhu{padding:0 12px}.thicknessTitle-3gSLMlhu{color:#787b86;font-size:12px;line-height:14px;margin:6px 0 4px}html.theme-dark .thicknessTitle-3gSLMlhu{color:#787b86}.titleWrap-3OnZWCnE{color:#787b86;height:16px;text-transform:uppercase} \ No newline at end of file diff --git a/static/charting_library/bundles/39.74a7bc3b464cd284827f.rtl.css b/static/charting_library/bundles/39.74a7bc3b464cd284827f.rtl.css new file mode 100644 index 0000000..17b86fc --- /dev/null +++ b/static/charting_library/bundles/39.74a7bc3b464cd284827f.rtl.css @@ -0,0 +1 @@ +.content-22S1W3v8{box-sizing:border-box;color:#131722;display:inline-grid;grid-template-columns:auto 1fr;max-width:550px;padding:16px 20px;width:100%}html.theme-dark .content-22S1W3v8{color:#b2b5be}.cell-22S1W3v8 .inner-22S1W3v8{align-items:center;display:flex;padding:8px 0}.cell-22S1W3v8.first-22S1W3v8{align-items:center;display:flex;min-width:0}.cell-22S1W3v8.first-22S1W3v8 .inner-22S1W3v8{word-wrap:break-word;cursor:default;display:block;min-width:0;padding-left:20px}.cell-22S1W3v8.first-22S1W3v8 .inner-22S1W3v8:first-letter{text-transform:capitalize}.cell-22S1W3v8.first-22S1W3v8.inlineCell-22S1W3v8 .inner-22S1W3v8{padding-left:0}.cell-22S1W3v8.fill-22S1W3v8{grid-column:1/3}.cell-22S1W3v8.top-22S1W3v8{align-items:flex-start}.cell-22S1W3v8.topCenter-22S1W3v8{align-items:flex-start;padding-top:8px}.cell-22S1W3v8:only-child{max-width:340px}.cell-22S1W3v8.offset-22S1W3v8{padding-right:26px}.inlineRow-22S1W3v8{display:flex}.inlineCell-22S1W3v8{margin-left:8px}.grouped-22S1W3v8 .inner-22S1W3v8,.inlineCell-22S1W3v8 .inner-22S1W3v8{padding:4px 0}.separator-22S1W3v8{background-color:#e0e3eb;height:1px;margin:8px -20px}html.theme-dark .separator-22S1W3v8{background-color:#434651}.groupSeparator-22S1W3v8{height:8px}.groupSeparator-22S1W3v8.big-22S1W3v8{height:14px}@media screen and (max-width:379px){.content-22S1W3v8{grid-template-columns:1fr min-content}.cell-22S1W3v8.first-22S1W3v8 .inner-22S1W3v8{padding:8px 0 8px 20px}.cell-22S1W3v8.adaptive-22S1W3v8{align-items:flex-start}.cell-22S1W3v8.adaptive-22S1W3v8:not(.checkableTitle-22S1W3v8):not(.inlineCell-22S1W3v8){padding-top:8px}}.wrap-3GItoI3T{align-items:center;background-color:#f0f3fa;border-radius:4px;box-sizing:border-box;display:flex;height:34px;justify-content:space-between;max-width:180px;min-width:100px;padding:7px 8px 6px}html.theme-dark .wrap-3GItoI3T{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-3GItoI3T:hover{background-color:#e0e3eb}html.theme-dark .wrap-3GItoI3T:hover{background-color:#434651}.wrap-3GItoI3T:hover .icon-3GItoI3T{color:#131722}html.theme-dark .wrap-3GItoI3T:hover .icon-3GItoI3T{color:#b2b5be}}.text-3GItoI3T{color:#131722;cursor:default;line-height:21px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .text-3GItoI3T{color:#b2b5be}.icon-3GItoI3T{align-self:flex-start;color:#787b86;height:18px;margin-right:8px}.disabled-3GItoI3T{pointer-events:none}.disabled-3GItoI3T .icon-3GItoI3T,.disabled-3GItoI3T .text-3GItoI3T{color:#b2b5be}html.theme-dark .disabled-3GItoI3T .icon-3GItoI3T,html.theme-dark .disabled-3GItoI3T .text-3GItoI3T{color:#50535e}.wrap-2tojvhF7{align-items:center;display:flex;max-width:100%;overflow-wrap:break-word}.wrap-2tojvhF7:before{content:"";flex:none;height:34px;width:0}.checkbox-FNjK79Y1{min-width:0}.title-FNjK79Y1{cursor:default;min-width:0}.hasTooltip-2kfQACVg{margin-left:9px}.uppercase-2kfQACVg{text-transform:uppercase}.innerLabel-21h1g6jU{color:#d1d4dc;display:flex;flex:0 0 auto;font-size:16px;padding-right:5px}html.theme-dark .innerLabel-21h1g6jU{color:#50535e}.controlWrapper-7ApHzdB4{box-sizing:border-box;height:100%;overflow:hidden;width:22px}margin-left:2px;margin-right:0;.controlWrapper-7ApHzdB4.hidden-7ApHzdB4{opacity:0}.control-7ApHzdB4{align-items:center;background-color:initial;border:none;border-radius:2px;box-sizing:border-box;color:#787b86;cursor:default;display:flex;flex:0 0 auto;height:50%;padding:0 6px;transition:color .35s ease,background-color .35s ease}.control-7ApHzdB4 svg{fill:currentColor}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-7ApHzdB4:hover{background-color:#f0f3fa;color:#131722}html.theme-dark .control-7ApHzdB4:hover{background-color:#363a45;color:#b2b5be}}.controlIncrease-7ApHzdB4{transform:rotate(-180deg)}.controlIcon-7ApHzdB4{display:flex;flex:0 0 auto;justify-content:center;width:10px}.controlIcon-7ApHzdB4 svg{width:100%}.title-7ApHzdB4{color:#b2b5be;display:flex;flex-direction:column;font-size:12px;justify-content:center;margin-left:9px}html.theme-dark .title-7ApHzdB4{color:#50535e}.wrap-kAIcH6Vi{display:flex}.thicknessItem-kAIcH6Vi{align-items:center;background-color:initial;border:1px solid #d1d4dc;box-sizing:border-box;display:inline-flex;flex:1;height:32px;justify-content:center;padding:0 12px;position:relative}html.theme-dark .thicknessItem-kAIcH6Vi{background-color:initial;border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.thicknessItem-kAIcH6Vi:hover{background-color:#f0f3fa}html.theme-dark .thicknessItem-kAIcH6Vi:hover{background-color:#2a2e39}}.thicknessItem-kAIcH6Vi.checked-kAIcH6Vi{background-color:#2962ff;border-color:#2962ff;z-index:1}html.theme-dark .thicknessItem-kAIcH6Vi.checked-kAIcH6Vi{background-color:#2962ff;border-color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.thicknessItem-kAIcH6Vi.checked-kAIcH6Vi:hover{background-color:#2962ff;border-color:#2962ff}html.theme-dark .thicknessItem-kAIcH6Vi.checked-kAIcH6Vi:hover{background-color:#2962ff;border-color:#2962ff}}.thicknessItem-kAIcH6Vi+.thicknessItem-kAIcH6Vi{margin-right:-1px}.thicknessItem-kAIcH6Vi:first-child{border-bottom-right-radius:3px;border-top-right-radius:3px;margin-right:0}.thicknessItem-kAIcH6Vi:last-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.radio-kAIcH6Vi{height:100%;margin:0;opacity:0;padding:0;position:absolute;right:0;top:0;width:100%}.bar-kAIcH6Vi{border:0 solid #131722;height:0;width:100%}html.theme-dark .bar-kAIcH6Vi{border:0 solid #b2b5be}.bar-kAIcH6Vi.checked-kAIcH6Vi,html.theme-dark .bar-kAIcH6Vi.checked-kAIcH6Vi{border-top-color:#fff}.thicknessContainer-2K1QSVfY{padding:0 12px}.thicknessTitle-2K1QSVfY{color:#787b86;font-size:12px;line-height:14px;margin:6px 0 4px}html.theme-dark .thicknessTitle-2K1QSVfY{color:#787b86}.colorPickerWrap-3gSLMlhu{align-items:center;border-color:#d1d4dc;border-radius:4px;border-style:solid;box-sizing:border-box;display:inline-flex;margin:0;position:relative}html.theme-dark .colorPickerWrap-3gSLMlhu{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.colorPickerWrap-3gSLMlhu:hover{border-color:#a3a6af}html.theme-dark .colorPickerWrap-3gSLMlhu:hover{border-color:#6a6d78}}.colorPickerWrap-3gSLMlhu.focused-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.focused-3gSLMlhu{border-color:#2962ff}.colorPickerWrap-3gSLMlhu.readonly-3gSLMlhu{background-color:#f0f3fa;border-color:#d1d4dc}html.theme-dark .colorPickerWrap-3gSLMlhu.readonly-3gSLMlhu{background-color:#2a2e39;border-color:#50535e}.colorPickerWrap-3gSLMlhu.disabled-3gSLMlhu{background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}html.theme-dark .colorPickerWrap-3gSLMlhu.disabled-3gSLMlhu{background-color:#2a2e39;border-color:#50535e;color:#50535e}.colorPickerWrap-3gSLMlhu.size-small-3gSLMlhu{height:24px}.colorPickerWrap-3gSLMlhu.size-medium-3gSLMlhu{height:34px}.colorPickerWrap-3gSLMlhu.size-large-3gSLMlhu{height:48px}.colorPickerWrap-3gSLMlhu.font-size-medium-3gSLMlhu,.colorPickerWrap-3gSLMlhu.font-size-small-3gSLMlhu{font-size:14px;line-height:20px}.colorPickerWrap-3gSLMlhu.font-size-large-3gSLMlhu{font-size:16px;line-height:24px}.colorPickerWrap-3gSLMlhu.border-none-3gSLMlhu{border-width:0}.colorPickerWrap-3gSLMlhu.border-none-3gSLMlhu .shadow-3gSLMlhu{margin:0}.colorPickerWrap-3gSLMlhu.border-thin-3gSLMlhu{border-width:1px}.colorPickerWrap-3gSLMlhu.border-thin-3gSLMlhu .shadow-3gSLMlhu{margin:-1px}.colorPickerWrap-3gSLMlhu.border-thick-3gSLMlhu{border-width:2px}.colorPickerWrap-3gSLMlhu.border-thick-3gSLMlhu .shadow-3gSLMlhu{margin:-2px}.colorPickerWrap-3gSLMlhu.intent-default-3gSLMlhu .shadow-3gSLMlhu{border-color:#d1d4dc}html.theme-dark .colorPickerWrap-3gSLMlhu.intent-default-3gSLMlhu .shadow-3gSLMlhu{border-color:#50535e}.colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu,.colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu .shadow-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-success-3gSLMlhu .shadow-3gSLMlhu{border-color:#00897b}.colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu,.colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu .shadow-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-warning-3gSLMlhu .shadow-3gSLMlhu{border-color:#ff9800}.colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu{border-color:#f44336}html.theme-dark .colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu{border-color:#d32f2f}.colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu .shadow-3gSLMlhu{border-color:#f44336}html.theme-dark .colorPickerWrap-3gSLMlhu.intent-danger-3gSLMlhu .shadow-3gSLMlhu{border-color:#d32f2f}.colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu,.colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu .shadow-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu,html.theme-dark .colorPickerWrap-3gSLMlhu.intent-primary-3gSLMlhu .shadow-3gSLMlhu{border-color:#2962ff}.colorPickerWrap-3gSLMlhu.corner-top-left-3gSLMlhu{border-top-right-radius:0}.colorPickerWrap-3gSLMlhu.corner-top-right-3gSLMlhu{border-top-left-radius:0}.colorPickerWrap-3gSLMlhu.corner-bottom-right-3gSLMlhu{border-bottom-left-radius:0}.colorPickerWrap-3gSLMlhu.corner-bottom-left-3gSLMlhu{border-bottom-right-radius:0}.shadow-3gSLMlhu{border:2px solid;border-radius:4px;bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.shadow-3gSLMlhu.corner-top-left-3gSLMlhu{border-top-right-radius:0}.shadow-3gSLMlhu.corner-top-right-3gSLMlhu{border-top-left-radius:0}.shadow-3gSLMlhu.corner-bottom-right-3gSLMlhu{border-bottom-left-radius:0}.shadow-3gSLMlhu.corner-bottom-left-3gSLMlhu{border-bottom-right-radius:0}.colorPicker-3gSLMlhu{align-items:center;display:flex;justify-content:center;padding:4px}.colorPicker-3gSLMlhu.disabled-3gSLMlhu{opacity:.5}.swatch-3gSLMlhu{border-radius:3px;box-sizing:border-box;display:block;height:100%;width:100%}.placeholderContainer-3gSLMlhu{border-radius:3px;height:24px;overflow:hidden;position:relative;width:24px}.placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu{background-color:#ef5350;height:24px;width:24px}html.theme-dark .placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu{background-color:#ef5350}.placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu:after{border-right:24px solid #0000;border-top:24px solid #26a69a;content:" ";position:absolute;width:0}html.theme-dark .placeholderContainer-3gSLMlhu .placeholder-3gSLMlhu:after{border-top:24px solid #26a69a}.white-3gSLMlhu{border:1px solid #d1d4dc}html.theme-dark .white-3gSLMlhu{border:1px solid #0000}.opacitySwatch-3gSLMlhu{background-color:#fff;background-image:url(a6506134daec7169f68f563f084a9d41.svg);background-size:50%;border-radius:3px;flex:0 0 24px;height:24px;position:relative;width:24px}html.theme-dark .opacitySwatch-3gSLMlhu{background-color:#000}.colorLine-3gSLMlhu{border-radius:1px;margin-left:4px;margin-right:8px;width:30px}.colorLine-3gSLMlhu.white-3gSLMlhu{margin-left:3px;margin-right:7px}.thicknessContainer-3gSLMlhu{padding:0 12px}.thicknessTitle-3gSLMlhu{color:#787b86;font-size:12px;line-height:14px;margin:6px 0 4px}html.theme-dark .thicknessTitle-3gSLMlhu{color:#787b86}.titleWrap-3OnZWCnE{color:#787b86;height:16px;text-transform:uppercase} \ No newline at end of file diff --git a/static/charting_library/bundles/39.bc1e9ce938fd5152831f.js b/static/charting_library/bundles/39.bc1e9ce938fd5152831f.js new file mode 100644 index 0000000..bcd80d7 --- /dev/null +++ b/static/charting_library/bundles/39.bc1e9ce938fd5152831f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/4.92647ec0a7beb8b2898d.css b/static/charting_library/bundles/4.92647ec0a7beb8b2898d.css new file mode 100644 index 0000000..e69de29 diff --git a/static/charting_library/bundles/4.92647ec0a7beb8b2898d.rtl.css b/static/charting_library/bundles/4.92647ec0a7beb8b2898d.rtl.css new file mode 100644 index 0000000..e69de29 diff --git a/static/charting_library/bundles/4.c7430b8d89cddcf51345.js b/static/charting_library/bundles/4.c7430b8d89cddcf51345.js new file mode 100644 index 0000000..d49e7cc --- /dev/null +++ b/static/charting_library/bundles/4.c7430b8d89cddcf51345.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/40.b59f41ba4cacbfb8acc3.js b/static/charting_library/bundles/40.b59f41ba4cacbfb8acc3.js new file mode 100644 index 0000000..423aeb7 --- /dev/null +++ b/static/charting_library/bundles/40.b59f41ba4cacbfb8acc3.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{"4Cm8":function(t,e,s){"use strict";s.d(e,"a",(function(){return R}));var i=s("q1tI"),r=s("TSYQ"),o=s("cvc5"),n=s("Eyy1"),l=s("Iivm"),a=s("//lZ"),h=s("9uLv"),c=s("Ialn"),u=s("Vike"),d=s("ji/R");const p={isVisibleScrollbar:!0,shouldMeasure:!0,hideButtonsFrom:1};function f(t){return i.createElement("div",{className:r(d.fadeLeft,t.className,{[d.isVisible]:t.isVisible})})}function w(t){return i.createElement("div",{className:r(d.fadeRight,t.className,{[d.isVisible]:t.isVisible})})}function b(t){return i.createElement(v,{...t,className:d.scrollLeft})}function m(t){return i.createElement(v,{...t,className:d.scrollRight})}function v(t){return i.createElement("div",{className:r(t.className,{[d.isVisible]:t.isVisible}),onClick:t.onClick},i.createElement("div",{className:d.iconWrap},i.createElement(l.a,{icon:u,className:d.icon})))}const R=function(t=b,e=m,s=f,l=w){var u;return(u=class extends i.PureComponent{constructor(t){super(t),this._scroll=i.createRef(),this._wrapMeasureRef=i.createRef(),this._contentMeasureRef=i.createRef(),this._handleScrollLeft=()=>{if(this.props.onScrollButtonClick)return void this.props.onScrollButtonClick("left");const t=this.props.scrollStepSize||this.state.widthWrap-50;this.animateTo(Math.max(0,this.currentPosition()-t))},this._handleScrollRight=()=>{if(this.props.onScrollButtonClick)return void this.props.onScrollButtonClick("right");const t=this.props.scrollStepSize||this.state.widthWrap-50;this.animateTo(Math.min((this.state.widthContent||0)-(this.state.widthWrap||0),this.currentPosition()+t))},this._handleResizeWrap=t=>{this.props.onMeasureWrap&&this.props.onMeasureWrap(t),this.setState({widthWrap:t.width}),this._checkButtonsVisibility()},this._handleResizeContent=t=>{this.props.onMeasureContent&&this.props.onMeasureContent(t);const{shouldDecreaseWidthContent:e,buttonsWidthIfDecreasedWidthContent:s}=this.props;e&&s?this.setState({widthContent:t.width+2*s}):this.setState({widthContent:t.width})},this._handleScroll=()=>{const{onScroll:t}=this.props;t&&t(this.currentPosition(),this.isAtLeft(),this.isAtRight()),this._checkButtonsVisibility()},this._checkButtonsVisibility=()=>{const{isVisibleLeftButton:t,isVisibleRightButton:e}=this.state,s=this.isAtLeft(),i=this.isAtRight();s||t?s&&t&&this.setState({isVisibleLeftButton:!1}):this.setState({isVisibleLeftButton:!0}),i||e?i&&e&&this.setState({isVisibleRightButton:!1}):this.setState({isVisibleRightButton:!0})},this.state={widthContent:0,widthWrap:0,isVisibleRightButton:!1,isVisibleLeftButton:!1}}componentDidMount(){this._checkButtonsVisibility()}componentDidUpdate(t,e){e.widthWrap===this.state.widthWrap&&e.widthContent===this.state.widthContent||this._handleScroll(),this.props.shouldMeasure&&this._wrapMeasureRef.current&&this._contentMeasureRef.current&&(this._wrapMeasureRef.current.measure(),this._contentMeasureRef.current.measure())}currentPosition(){return this._scroll.current?Object(c.isRtl)()?Object(c.getLTRScrollLeft)(this._scroll.current):this._scroll.current.scrollLeft:0}isAtLeft(){ +return!this._isOverflowed()||this.currentPosition()<=Object(n.ensureDefined)(this.props.hideButtonsFrom)}isAtRight(){return!this._isOverflowed()||this.currentPosition()+this.state.widthWrap>=this.state.widthContent-Object(n.ensureDefined)(this.props.hideButtonsFrom)}animateTo(t,e=h.b){const s=this._scroll.current;s&&(Object(c.isRtl)()&&(t=Object(c.getLTRScrollLeftOffset)(s,t)),e<=0?s.scrollLeft=Math.round(t):Object(a.doAnimate)({onStep(t,e){s.scrollLeft=Math.round(e)},from:s.scrollLeft,to:Math.round(t),easing:h.c.easeInOutCubic,duration:e}))}render(){const{children:n,isVisibleScrollbar:a,isVisibleFade:h,isVisibleButtons:c,shouldMeasure:u,shouldDecreaseWidthContent:p,buttonsWidthIfDecreasedWidthContent:f,onMouseOver:w,onMouseOut:b,scrollWrapClassName:m,fadeClassName:v}=this.props,{isVisibleRightButton:R,isVisibleLeftButton:S}=this.state,V=p&&f;return i.createElement(o,{whitelist:["width"],onMeasure:this._handleResizeWrap,shouldMeasure:u,ref:this._wrapMeasureRef},i.createElement("div",{className:d.wrapOverflow,onMouseOver:w,onMouseOut:b},i.createElement("div",{className:r(d.wrap,V?d.wrapWithArrowsOuting:"")},i.createElement("div",{className:r(d.scrollWrap,m,{[d.noScrollBar]:!a}),onScroll:this._handleScroll,ref:this._scroll},i.createElement(o,{onMeasure:this._handleResizeContent,whitelist:["width"],shouldMeasure:u,ref:this._contentMeasureRef},n)),h&&i.createElement(s,{isVisible:S,className:v}),h&&i.createElement(l,{isVisible:R,className:v}),c&&i.createElement(t,{onClick:this._handleScrollLeft,isVisible:S}),c&&i.createElement(e,{onClick:this._handleScrollRight,isVisible:R}))))}_isOverflowed(){const{widthContent:t,widthWrap:e}=this.state;return t>e}}).defaultProps=p,u}(b,m,f,w)},Vike:function(t,e){t.exports=''},"ji/R":function(t,e,s){t.exports={wrap:"wrap-3obNZqvj",wrapWithArrowsOuting:"wrapWithArrowsOuting-3obNZqvj",wrapOverflow:"wrapOverflow-3obNZqvj",scrollWrap:"scrollWrap-3obNZqvj",noScrollBar:"noScrollBar-3obNZqvj",icon:"icon-3obNZqvj",scrollLeft:"scrollLeft-3obNZqvj",scrollRight:"scrollRight-3obNZqvj",isVisible:"isVisible-3obNZqvj",iconWrap:"iconWrap-3obNZqvj",fadeLeft:"fadeLeft-3obNZqvj",fadeRight:"fadeRight-3obNZqvj"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/40566afd832a155e5e370a8bd423de4b.svg b/static/charting_library/bundles/40566afd832a155e5e370a8bd423de4b.svg new file mode 100644 index 0000000..ed22891 --- /dev/null +++ b/static/charting_library/bundles/40566afd832a155e5e370a8bd423de4b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/charting_library/bundles/40f9a03d174178efb12303caa9bc7cd8.woff2 b/static/charting_library/bundles/40f9a03d174178efb12303caa9bc7cd8.woff2 new file mode 100644 index 0000000..4d3772b Binary files /dev/null and b/static/charting_library/bundles/40f9a03d174178efb12303caa9bc7cd8.woff2 differ diff --git a/static/charting_library/bundles/41.8fa0fb0bd4ad0241ef2f.css b/static/charting_library/bundles/41.8fa0fb0bd4ad0241ef2f.css new file mode 100644 index 0000000..b1f7320 --- /dev/null +++ b/static/charting_library/bundles/41.8fa0fb0bd4ad0241ef2f.css @@ -0,0 +1 @@ +.button-1SoiPS-f{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;flex:1 0 auto;height:100%;position:relative;transition:background-color .35s ease,color 60ms ease;z-index:0}html.theme-dark .button-1SoiPS-f{color:var(--tv-color-toolbar-button-text,#787b86)}.button-1SoiPS-f.hover-1SoiPS-f,.button-1SoiPS-f:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-1SoiPS-f.hover-1SoiPS-f,html.theme-dark .button-1SoiPS-f:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-1SoiPS-f:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-1SoiPS-f.hover-1SoiPS-f:before,.button-1SoiPS-f:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-1SoiPS-f.hover-1SoiPS-f:before,html.theme-dark .button-1SoiPS-f:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-1SoiPS-f svg{display:block}.button-1SoiPS-f .arrow-1SoiPS-f{align-items:center;contain:content;display:flex;height:100%}.button-1SoiPS-f .arrowWrap-1SoiPS-f{margin:0 6px;transition:transform .35s ease}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f:hover .arrowWrap-1SoiPS-f{transform:translateY(2px)}}.button-1SoiPS-f.isOpened-1SoiPS-f.hover-1SoiPS-f:before,.button-1SoiPS-f.isOpened-1SoiPS-f:active:before,.button-1SoiPS-f.isOpened-1SoiPS-f:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f.isOpened-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f.hover-1SoiPS-f:before,html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f:active:before,html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}.button-1SoiPS-f.isOpened-1SoiPS-f:hover .arrowWrap-1SoiPS-f{transform:none}} \ No newline at end of file diff --git a/static/charting_library/bundles/41.8fa0fb0bd4ad0241ef2f.rtl.css b/static/charting_library/bundles/41.8fa0fb0bd4ad0241ef2f.rtl.css new file mode 100644 index 0000000..42d0abc --- /dev/null +++ b/static/charting_library/bundles/41.8fa0fb0bd4ad0241ef2f.rtl.css @@ -0,0 +1 @@ +.button-1SoiPS-f{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;flex:1 0 auto;height:100%;position:relative;transition:background-color .35s ease,color 60ms ease;z-index:0}html.theme-dark .button-1SoiPS-f{color:var(--tv-color-toolbar-button-text,#787b86)}.button-1SoiPS-f.hover-1SoiPS-f,.button-1SoiPS-f:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-1SoiPS-f.hover-1SoiPS-f,html.theme-dark .button-1SoiPS-f:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-1SoiPS-f:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-1SoiPS-f.hover-1SoiPS-f:before,.button-1SoiPS-f:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-1SoiPS-f.hover-1SoiPS-f:before,html.theme-dark .button-1SoiPS-f:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-1SoiPS-f svg{display:block}.button-1SoiPS-f .arrow-1SoiPS-f{align-items:center;contain:content;display:flex;height:100%}.button-1SoiPS-f .arrowWrap-1SoiPS-f{margin:0 6px;transition:transform .35s ease}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f:hover .arrowWrap-1SoiPS-f{transform:translateY(2px)}}.button-1SoiPS-f.isOpened-1SoiPS-f.hover-1SoiPS-f:before,.button-1SoiPS-f.isOpened-1SoiPS-f:active:before,.button-1SoiPS-f.isOpened-1SoiPS-f:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1SoiPS-f.isOpened-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f.hover-1SoiPS-f:before,html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f:active:before,html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-1SoiPS-f.isOpened-1SoiPS-f:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}.button-1SoiPS-f.isOpened-1SoiPS-f:hover .arrowWrap-1SoiPS-f{transform:none}} \ No newline at end of file diff --git a/static/charting_library/bundles/41.a19b0ae5d68f855d2753.js b/static/charting_library/bundles/41.a19b0ae5d68f855d2753.js new file mode 100644 index 0000000..a2e1fe3 --- /dev/null +++ b/static/charting_library/bundles/41.a19b0ae5d68f855d2753.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/42.494986b0981f6d116fef.js b/static/charting_library/bundles/42.494986b0981f6d116fef.js new file mode 100644 index 0000000..3c70961 --- /dev/null +++ b/static/charting_library/bundles/42.494986b0981f6d116fef.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/42.9078fb8f1629e3eee9bd.css b/static/charting_library/bundles/42.9078fb8f1629e3eee9bd.css new file mode 100644 index 0000000..a8cdc9e --- /dev/null +++ b/static/charting_library/bundles/42.9078fb8f1629e3eee9bd.css @@ -0,0 +1 @@ +.wrap-3obNZqvj{direction:ltr;height:100%;overflow:hidden;position:relative;width:100%}.wrap-3obNZqvj svg{display:block}.wrapWithArrowsOuting-3obNZqvj{margin-left:auto;margin-right:auto;overflow:visible;width:calc(100% - 40px)}.wrapOverflow-3obNZqvj{height:100%;overflow:hidden;width:100%}.scrollWrap-3obNZqvj{-webkit-overflow-scrolling:touch;contain:content;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.scrollWrap-3obNZqvj::-webkit-scrollbar{height:5px;width:5px}.scrollWrap-3obNZqvj::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollWrap-3obNZqvj::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollWrap-3obNZqvj::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollWrap-3obNZqvj::-webkit-scrollbar-corner{display:none}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj{-ms-overflow-style:none;margin-bottom:-100px;padding-bottom:100px}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj.sb-scrollbar-wrap{display:none}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar{display:none;height:0;width:0}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar-thumb,.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar-track{display:none}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar-corner{display:none}.icon-3obNZqvj{display:block;transition:transform 60ms ease}.scrollLeft-3obNZqvj,.scrollRight-3obNZqvj{align-items:center;background-color:#1e222d99;color:#fff;display:flex;flex-direction:column;height:100%;justify-content:center;overflow:hidden;position:absolute;top:0;transition:background-color .35s ease,transform .11666667s cubic-bezier(.55,.055,.675,.19);width:24px}html.theme-dark .scrollLeft-3obNZqvj,html.theme-dark .scrollRight-3obNZqvj{background-color:#6a6d7899;color:#fff}.scrollLeft-3obNZqvj:active,.scrollRight-3obNZqvj:active{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollLeft-3obNZqvj:hover,.scrollRight-3obNZqvj:hover{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}}.scrollLeft-3obNZqvj:active .icon-3obNZqvj,.scrollRight-3obNZqvj:active .icon-3obNZqvj{transform:translateY(1px)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollLeft-3obNZqvj:hover .icon-3obNZqvj,.scrollRight-3obNZqvj:hover .icon-3obNZqvj{transform:translateY(1px)}}.scrollLeft-3obNZqvj.isVisible-3obNZqvj,.scrollRight-3obNZqvj.isVisible-3obNZqvj{transform:translateX(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.scrollLeft-3obNZqvj{left:0;transform:translateX(-100%)}.scrollLeft-3obNZqvj .iconWrap-3obNZqvj{transform:rotate(90deg)}.scrollRight-3obNZqvj{right:0;transform:translateX(100%)}.scrollRight-3obNZqvj .iconWrap-3obNZqvj{transform:rotate(-90deg)}.fadeLeft-3obNZqvj,.fadeRight-3obNZqvj{color:#fff0;height:100%;pointer-events:none;position:absolute;top:0;width:50px}html.theme-dark .fadeLeft-3obNZqvj,html.theme-dark .fadeRight-3obNZqvj{color:#13172200}.fadeLeft-3obNZqvj.isVisible-3obNZqvj,.fadeRight-3obNZqvj.isVisible-3obNZqvj{transform:translateX(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.fadeLeft-3obNZqvj{background-image:linear-gradient(to left,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#fff));left:-1px;transform:translateX(-100%)}html.theme-dark .fadeLeft-3obNZqvj{background-image:linear-gradient(to left,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#131722))}.fadeRight-3obNZqvj{background-image:linear-gradient(to right,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#fff));right:-1px;transform:translateX(100%)}html.theme-dark .fadeRight-3obNZqvj{background-image:linear-gradient(to right,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#131722))} \ No newline at end of file diff --git a/static/charting_library/bundles/42.9078fb8f1629e3eee9bd.rtl.css b/static/charting_library/bundles/42.9078fb8f1629e3eee9bd.rtl.css new file mode 100644 index 0000000..b6cf636 --- /dev/null +++ b/static/charting_library/bundles/42.9078fb8f1629e3eee9bd.rtl.css @@ -0,0 +1 @@ +.wrap-3obNZqvj{direction:rtl;height:100%;overflow:hidden;position:relative;width:100%}.wrap-3obNZqvj svg{display:block}.wrapWithArrowsOuting-3obNZqvj{margin-left:auto;margin-right:auto;overflow:visible;width:calc(100% - 40px)}.wrapOverflow-3obNZqvj{height:100%;overflow:hidden;width:100%}.scrollWrap-3obNZqvj{-webkit-overflow-scrolling:touch;contain:content;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.scrollWrap-3obNZqvj::-webkit-scrollbar{height:5px;width:5px}.scrollWrap-3obNZqvj::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollWrap-3obNZqvj::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollWrap-3obNZqvj::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollWrap-3obNZqvj::-webkit-scrollbar-corner{display:none}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj{-ms-overflow-style:none;margin-bottom:-100px;padding-bottom:100px}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj.sb-scrollbar-wrap{display:none}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar{display:none;height:0;width:0}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar-thumb,.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar-track{display:none}.scrollWrap-3obNZqvj.noScrollBar-3obNZqvj::-webkit-scrollbar-corner{display:none}.icon-3obNZqvj{display:block;transition:transform 60ms ease}.scrollLeft-3obNZqvj,.scrollRight-3obNZqvj{align-items:center;background-color:#1e222d99;color:#fff;display:flex;flex-direction:column;height:100%;justify-content:center;overflow:hidden;position:absolute;top:0;transition:background-color .35s ease,transform .11666667s cubic-bezier(.55,.055,.675,.19);width:24px}html.theme-dark .scrollLeft-3obNZqvj,html.theme-dark .scrollRight-3obNZqvj{background-color:#6a6d7899;color:#fff}.scrollLeft-3obNZqvj:active,.scrollRight-3obNZqvj:active{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollLeft-3obNZqvj:hover,.scrollRight-3obNZqvj:hover{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}}.scrollLeft-3obNZqvj:active .icon-3obNZqvj,.scrollRight-3obNZqvj:active .icon-3obNZqvj{transform:translateY(1px)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollLeft-3obNZqvj:hover .icon-3obNZqvj,.scrollRight-3obNZqvj:hover .icon-3obNZqvj{transform:translateY(1px)}}.scrollLeft-3obNZqvj.isVisible-3obNZqvj,.scrollRight-3obNZqvj.isVisible-3obNZqvj{transform:translateX(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.scrollLeft-3obNZqvj{left:0;transform:translateX(-100%)}.scrollLeft-3obNZqvj .iconWrap-3obNZqvj{transform:rotate(90deg)}.scrollRight-3obNZqvj{right:0;transform:translateX(100%)}.scrollRight-3obNZqvj .iconWrap-3obNZqvj{transform:rotate(-90deg)}.fadeLeft-3obNZqvj,.fadeRight-3obNZqvj{color:#fff0;height:100%;pointer-events:none;position:absolute;top:0;width:50px}html.theme-dark .fadeLeft-3obNZqvj,html.theme-dark .fadeRight-3obNZqvj{color:#13172200}.fadeLeft-3obNZqvj.isVisible-3obNZqvj,.fadeRight-3obNZqvj.isVisible-3obNZqvj{transform:translateX(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.fadeLeft-3obNZqvj{background-image:linear-gradient(to right,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#fff));right:-1px;transform:translateX(100%)}html.theme-dark .fadeLeft-3obNZqvj{background-image:linear-gradient(to right,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#131722))}.fadeRight-3obNZqvj{background-image:linear-gradient(to left,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#fff));left:-1px;transform:translateX(-100%)}html.theme-dark .fadeRight-3obNZqvj{background-image:linear-gradient(to left,var(--tv-horizontal-scroll-fade-transparent-color,currentColor),var(--tv-horizontal-scroll-fade-color,#131722))} \ No newline at end of file diff --git a/static/charting_library/bundles/43.619c5ed4a592cc2965a4.js b/static/charting_library/bundles/43.619c5ed4a592cc2965a4.js new file mode 100644 index 0000000..01e9c98 --- /dev/null +++ b/static/charting_library/bundles/43.619c5ed4a592cc2965a4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/43.8bf90585004742c338c5.css b/static/charting_library/bundles/43.8bf90585004742c338c5.css new file mode 100644 index 0000000..214facb --- /dev/null +++ b/static/charting_library/bundles/43.8bf90585004742c338c5.css @@ -0,0 +1 @@ +.tabs-3I2ohC86{display:flex;position:relative;width:100%}.tab-3I2ohC86{border-bottom:1px solid;border-color:#e0e3eb;color:var(--tv-tabs-slider-text-color,#131722);flex:1 1;padding:13px 0;text-align:center;transition:color .35s ease;-webkit-user-select:none;user-select:none}html.theme-dark .tab-3I2ohC86{border-color:#434651;color:var(--tv-tabs-slider-text-color,#d1d4dc)}.tab-3I2ohC86.noBorder-3I2ohC86{border-bottom:0}.tab-3I2ohC86.disabled-3I2ohC86{color:#eceff2}.tab-3I2ohC86.active-3I2ohC86,html.theme-dark .tab-3I2ohC86.active-3I2ohC86{color:#2962ff}.defaultCursor-3I2ohC86{cursor:default}.slider-3I2ohC86{bottom:0;height:3px;left:0;position:absolute;transition-timing-function:cubic-bezier(.215,.61,.355,1)}.slider-3I2ohC86,html.theme-dark .slider-3I2ohC86{background-color:#2962ff}.content-3I2ohC86{width:100%} \ No newline at end of file diff --git a/static/charting_library/bundles/43.8bf90585004742c338c5.rtl.css b/static/charting_library/bundles/43.8bf90585004742c338c5.rtl.css new file mode 100644 index 0000000..214facb --- /dev/null +++ b/static/charting_library/bundles/43.8bf90585004742c338c5.rtl.css @@ -0,0 +1 @@ +.tabs-3I2ohC86{display:flex;position:relative;width:100%}.tab-3I2ohC86{border-bottom:1px solid;border-color:#e0e3eb;color:var(--tv-tabs-slider-text-color,#131722);flex:1 1;padding:13px 0;text-align:center;transition:color .35s ease;-webkit-user-select:none;user-select:none}html.theme-dark .tab-3I2ohC86{border-color:#434651;color:var(--tv-tabs-slider-text-color,#d1d4dc)}.tab-3I2ohC86.noBorder-3I2ohC86{border-bottom:0}.tab-3I2ohC86.disabled-3I2ohC86{color:#eceff2}.tab-3I2ohC86.active-3I2ohC86,html.theme-dark .tab-3I2ohC86.active-3I2ohC86{color:#2962ff}.defaultCursor-3I2ohC86{cursor:default}.slider-3I2ohC86{bottom:0;height:3px;left:0;position:absolute;transition-timing-function:cubic-bezier(.215,.61,.355,1)}.slider-3I2ohC86,html.theme-dark .slider-3I2ohC86{background-color:#2962ff}.content-3I2ohC86{width:100%} \ No newline at end of file diff --git a/static/charting_library/bundles/44.0a7df307e4f397763ce8.js b/static/charting_library/bundles/44.0a7df307e4f397763ce8.js new file mode 100644 index 0000000..e99fe23 --- /dev/null +++ b/static/charting_library/bundles/44.0a7df307e4f397763ce8.js @@ -0,0 +1,25 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{"+ByK":function(e,t,n){e.exports={itemWrap:"itemWrap-3FEBD9eP",item:"item-3FEBD9eP",icon:"icon-3FEBD9eP",selected:"selected-3FEBD9eP",label:"label-3FEBD9eP"}},"0lS6":function(e,t,n){e.exports={wrapper:"wrapper-2ESZuAbX",isActive:"isActive-2ESZuAbX"}},"3lVo":function(e,t,n){"use strict";var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),i=n("PECq"),l=n("kJwE");const c=[1,2,3,4];function s(e){const{id:t,value:n,items:a=c,disabled:s,onChange:d}=e;return o.a.createElement(i.a,{id:t,disabled:s,hideArrowButton:!0,className:l.lineWidthSelect,items:(u=a,u.map(e=>({value:e,selectedContent:m(e,!0),content:m(e)}))),value:n,onChange:d,"data-name":"line-width-select"});var u;function m(e,t){const a={borderTopWidth:e};return o.a.createElement("div",{className:l.item},o.a.createElement("div",{className:r(l.bar,{[l.isActive]:e===n&&!t}),style:a}," "))}}var d=n("++uw");function u(e){const{property:t}=e,[n,a]=Object(d.a)({property:t});return o.a.createElement(s,{...e,value:n,onChange:a})}n.d(t,"a",(function(){return u}))},"4Fxa":function(e,t){e.exports=''},"6w4h":function(e,t,n){e.exports={row:"row-NcPpqR9x",wrap:"wrap-NcPpqR9x",breakpointNormal:"breakpointNormal-NcPpqR9x",breakpointMedium:"breakpointMedium-NcPpqR9x",breakpointSmall:"breakpointSmall-NcPpqR9x"}},"7EmB":function(e,t,n){e.exports={range:"range-2PdPYA_J",valueInput:"valueInput-2PdPYA_J",rangeSlider:"rangeSlider-2PdPYA_J",input:"input-2PdPYA_J"}},"7Y2P":function(e,t,n){e.exports={wrapper:"wrapper-1MlnSDA4",focused:"focused-1MlnSDA4",readonly:"readonly-1MlnSDA4",disabled:"disabled-1MlnSDA4","size-small":"size-small-1MlnSDA4","size-medium":"size-medium-1MlnSDA4","size-large":"size-large-1MlnSDA4","font-size-small":"font-size-small-1MlnSDA4","font-size-medium":"font-size-medium-1MlnSDA4","font-size-large":"font-size-large-1MlnSDA4","border-none":"border-none-1MlnSDA4",shadow:"shadow-1MlnSDA4","border-thin":"border-thin-1MlnSDA4","border-thick":"border-thick-1MlnSDA4","intent-default":"intent-default-1MlnSDA4","intent-success":"intent-success-1MlnSDA4","intent-warning":"intent-warning-1MlnSDA4","intent-danger":"intent-danger-1MlnSDA4","intent-primary":"intent-primary-1MlnSDA4","corner-top-left":"corner-top-left-1MlnSDA4","corner-top-right":"corner-top-right-1MlnSDA4","corner-bottom-right":"corner-bottom-right-1MlnSDA4","corner-bottom-left":"corner-bottom-left-1MlnSDA4",childrenContainer:"childrenContainer-1MlnSDA4"}},"8XTa":function(e,t,n){e.exports={lineEndSelect:"lineEndSelect-1x0HNmOc",right:"right-1x0HNmOc"}},"9UfQ":function(e,t,n){e.exports={wrapper:"wrapper-2F4fv0AC",checkbox:"checkbox-2F4fv0AC",colorSelect:"colorSelect-2F4fv0AC"}},"9gev":function(e,t,n){e.exports={dropdown:"dropdown-3Z3YBwWw",normal:"normal-3Z3YBwWw",big:"big-3Z3YBwWw",dropdownMenu:"dropdownMenu-3Z3YBwWw"}},"9pqQ":function(e,t,n){e.exports={wrapper:"wrapper-3G6q-JGM"}}, +A3oJ:function(e,t){e.exports=''},Bbdy:function(e,t,n){e.exports={wrapper:"wrapper-30HPnwk9"}},CHgb:function(e,t,n){"use strict";n.d(t,"c",(function(){return d})),n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return m}));var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),i=n.n(r),l=n("PECq"),c=n("Iivm"),s=n("+ByK");function d(e){const{menuItemClassName:t,...n}=e;return o.a.createElement(l.a,{...n,menuItemClassName:i()(t,s.itemWrap)})}function u(e){return o.a.createElement("div",{className:i()(s.item,s.selected)},o.a.createElement(c.a,{className:s.icon,icon:e.icon}))}function m(e){return o.a.createElement("div",{className:s.item},o.a.createElement(c.a,{className:i()(s.icon,e.iconClassName),icon:e.icon}),o.a.createElement("div",{className:s.label},e.label))}},CaTF:function(e,t,n){e.exports={colorPicker:"colorPicker-zLgQJ6Yh",fontStyleButton:"fontStyleButton-zLgQJ6Yh",dropdown:"dropdown-zLgQJ6Yh",dropdownMenu:"dropdownMenu-zLgQJ6Yh"}},EJl2:function(e,t,n){e.exports={input:"input-1y54fm74",control:"control-1y54fm74",item:"item-1y54fm74",cell:"cell-1y54fm74",fragmentCell:"fragmentCell-1y54fm74",withTitle:"withTitle-1y54fm74",title:"title-1y54fm74"}},FIOl:function(e,t){e.exports=''},G7lD:function(e,t,n){e.exports={range:"range-31GwrUpb",disabled:"disabled-31GwrUpb",rangeSlider:"rangeSlider-31GwrUpb", +rangeSliderMiddleWrap:"rangeSliderMiddleWrap-31GwrUpb",rangeSliderMiddle:"rangeSliderMiddle-31GwrUpb",dragged:"dragged-31GwrUpb",pointer:"pointer-31GwrUpb",rangePointerWrap:"rangePointerWrap-31GwrUpb"}},HWhk:function(e,t){e.exports=''},Iksw:function(e,t,n){"use strict";n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return o})),n.d(t,"d",(function(){return r})),n.d(t,"b",(function(){return i})),n.d(t,"e",(function(){return s}));var a,o,r,i,l=n("Eyy1");!function(e){e[e.Top=0]="Top",e[e.Bottom=1]="Bottom"}(a||(a={})),function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(o||(o={})),function(e){e[e.FromTopToBottom=0]="FromTopToBottom",e[e.FromBottomToTop=1]="FromBottomToTop"}(r||(r={})),function(e){e[e.FromLeftToRight=0]="FromLeftToRight",e[e.FromRightToLeft=1]="FromRightToLeft"}(i||(i={}));const c={verticalAttachEdge:a.Bottom,horizontalAttachEdge:o.Left,verticalDropDirection:r.FromTopToBottom,horizontalDropDirection:i.FromLeftToRight,verticalMargin:0,horizontalMargin:0,matchButtonAndListboxWidths:!1};function s(e,t){return(n,s)=>{const d=Object(l.ensureNotNull)(e).getBoundingClientRect(),{verticalAttachEdge:u=c.verticalAttachEdge,verticalDropDirection:m=c.verticalDropDirection,horizontalAttachEdge:p=c.horizontalAttachEdge,horizontalDropDirection:h=c.horizontalDropDirection,horizontalMargin:f=c.horizontalMargin,verticalMargin:b=c.verticalMargin,matchButtonAndListboxWidths:v=c.matchButtonAndListboxWidths}=t,g=u===a.Top?-1*b:b,w=p===o.Right?d.right:d.left,E=u===a.Top?d.top:d.bottom,j={x:w-(h===i.FromRightToLeft?n:0)+f,y:E-(m===r.FromBottomToTop?s:0)+g};return v&&(j.overrideWidth=d.width),j}}},J4oI:function(e,t,n){e.exports={lineStyleSelect:"lineStyleSelect-3KjU7hI0"}},JoYF:function(e,t){e.exports=''},"K+KL":function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var a=n("q1tI"),o=n.n(a),r=n("ECWH"),i=n("RMU6"),l=n("/3z9"),c=n("AnDN"),s=n("GQPI"),d=n("zS+2"),u=n("UmON");const m={role:"listbox"},p=o.a.forwardRef((e,t)=>{const{id:n,tabIndex:a=0,listboxTabIndex:p=-1,disabled:h,highlight:f,intent:b,children:v,onClick:g,onFocus:w,onBlur:E,listboxAria:j=m,...y}=e,{isOpened:O,isFocused:x,highlight:S,intent:C,onOpen:N,close:z,toggle:M,buttonFocusBindings:k,onButtonClick:V,buttonRef:A,listboxRef:_}=Object(d.a)({disabled:h,intent:b,highlight:f,onFocus:w,onBlur:E,onClick:g +}),D=void 0!==n?Object(i.a)(n,"listbox"):void 0,T=Object(s.c)(M),F=Object(s.a)(O,z);return o.a.createElement(c.a,{...y,...k,id:n,role:"button",tabIndex:h?-1:a,disabled:h,isOpened:O,isFocused:x,ref:Object(r.a)([A,t]),highlight:S,intent:C,onClose:z,onOpen:N,onClick:V,onKeyDown:function(e){const t=Object(l.hashFromEvent)(e);if(T(t)||F(t))return void e.preventDefault()},listboxAria:j,listboxId:D,listboxTabIndex:O?0:p,listboxReference:_,onListboxKeyDown:function(e){O&&27===Object(l.hashFromEvent)(e)&&(e.stopPropagation(),z())}},v,o.a.createElement("span",{className:u.invisibleFocusHandler,tabIndex:0,"aria-hidden":!0,onFocus:z}))});p.displayName="DisclosureMenu"},KacW:function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));n("YFKU");var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),i=n.n(r),l=n("8Uy/"),c=n("CHgb"),s=n("bQEj"),d=n("UXdH"),u=n("ZSM+"),m=n("J4oI");const p=[{type:l.LINESTYLE_SOLID,icon:s,label:window.t("Line")},{type:l.LINESTYLE_DASHED,icon:d,label:window.t("Dashed Line")},{type:l.LINESTYLE_DOTTED,icon:u,label:window.t("Dotted Line")}];class h extends o.a.PureComponent{render(){const{id:e,lineStyle:t,className:n,lineStyleChange:a,disabled:r,additionalItems:l,allowedLineStyles:s}=this.props;let d=function(e){let t=[...p];return void 0!==e&&(t=t.filter(t=>e.includes(t.type))),t.map(e=>({value:e.type,selectedContent:o.a.createElement(c.a,{icon:e.icon}),content:o.a.createElement(c.b,{icon:e.icon,label:e.label})}))}(s);return l&&(d=[{id:"additional",readonly:!0,content:l},...d]),o.a.createElement(c.c,{id:e,disabled:r,className:i()(m.lineStyleSelect,n),hideArrowButton:!0,items:d,value:t,onChange:a,"data-name":"line-style-select"})}}},ORlR:function(e){e.exports=JSON.parse('{"textarea-container":"textarea-container-1vKcpneM","change-highlight":"change-highlight-3ZF5dCHp","focused":"focused-tusi7NC8","resize-vertical":"resize-vertical-1ddEqhTL","resize-horizontal":"resize-horizontal-2_PnoCKN","resize-both":"resize-both-3tZsc84l","textarea":"textarea-387rVPmq"}')},Px4x:function(e,t,n){},STR1:function(e,t){e.exports=''},Sn4D:function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var a=n("q1tI"),o=n.n(a),r=n("Eyy1"),i=n("TSYQ"),l=n("x0D+"),c=n("0YpW"),s=n("AiMB"),d=n("mkWe"),u=n("qFKp"),m=n("X0gx"),p=n("sHQ4");function h(e){const{position:t="Bottom",onClose:n,children:h,className:f,theme:b=p}=e,v=Object(r.ensureNotNull)(Object(a.useContext)(d.a)),[g,w]=Object(a.useState)(0),E=Object(a.useRef)(null),j=Object(a.useContext)(m.a) +;return Object(a.useEffect)(()=>{const e=Object(r.ensureNotNull)(E.current);return e.focus({preventScroll:!0}),j.subscribe(v,n),Object(c.a)(!0),u.CheckMobile.iOS()&&Object(l.disableBodyScroll)(e),w(v.addDrawer()),()=>{j.unsubscribe(v,n);const t=v.removeDrawer();u.CheckMobile.iOS()&&Object(l.enableBodyScroll)(e),0===t&&Object(c.a)(!1)}},[]),o.a.createElement(s.a,null,o.a.createElement("div",{className:i(p.wrap,p["position"+t])},g===v.currentDrawer&&o.a.createElement("div",{className:p.backdrop,onClick:n}),o.a.createElement("div",{className:i(p.drawer,b.drawer,p["position"+t],f),ref:E,tabIndex:-1,"data-name":e["data-name"]},h)))}},To8B:function(e,t){e.exports=''},UXdH:function(e,t){e.exports=''},UXjO:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),i=n.n(r),l=n("PECq"),c=n("ijHL"),s=n("z1Uu");function d(e){const{id:t,fontSize:n,fontSizes:a=[],className:r,disabled:d,fontSizeChange:u}=e;return o.a.createElement(l.a,{id:t,disabled:d,className:i()(r,s.defaultSelect),menuClassName:s.defaultSelect,items:(m=a,m.map(e=>({value:e.value,content:e.title}))),value:n,onChange:u,...Object(c.b)(e)});var m}},YV34:function(e,t,n){e.exports={desktopSize:"desktopSize--UxMOnMB",drawer:"drawer--UxMOnMB",menuBox:"menuBox--UxMOnMB"}},ZRxn:function(e,t,n){e.exports={unit:"unit-3YVf8t1O",input:"input-3YVf8t1O",normal:"normal-3YVf8t1O",big:"big-3YVf8t1O",dropdown:"dropdown-3YVf8t1O",dropdownMenu:"dropdownMenu-3YVf8t1O"}},"ZSM+":function(e,t){e.exports=''},ZcEB:function(e,t,n){e.exports={dropdown:"dropdown-T1V4i3sE",menu:"menu-T1V4i3sE"}},aSdR:function(e,t,n){e.exports={coordinates:"coordinates-28UK1YDt",input:"input-28UK1YDt"}},aw5J:function(e,t,n){e.exports={container:"container-1zlYw2UK",active:"active-1zlYw2UK",disabled:"disabled-1zlYw2UK",icon:"icon-1zlYw2UK"}},bQEj:function(e,t){e.exports=''},bvfV:function(e,t,n){"use strict";var a=n("q1tI"),o=n.n(a),r=n("HSjo"),i=n("Si6X"),l=n("++uw"),c=n("EYfA");function s(e){const{definition:{id:t,properties:{checked:n,disabled:a},title:r},offset:i}=e,[s]=Object(l.a)({property:a,defaultValue:!1});return o.a.createElement(c.a,{id:t,offset:i,checked:n,title:r,disabled:e.disabled||s})}var d=n("TSYQ"),u=n.n(d),m=n("RMU6"),p=n("KacW");function h(e){const{property:t}=e,[n,a]=Object(l.a)({property:t});return o.a.createElement(p.a,{...e, +lineStyle:n,lineStyleChange:a})}var f=n("3lVo"),b=n("nc0P"),v=n("Eyy1");function g(e,t,n){const[o,r]=Object(a.useState)(e),i=Object(a.useRef)(o);return Object(a.useEffect)(()=>{r(e)},[e,n]),[o,function(e){i.current=e,r(e)},function(){t(i.current)},function(){i.current=e,r(e)}]}var w=n("/3z9"),E=n("WboT"),j=n("Hr11"),y=n("zXvd"),O=n("qFKp");function x(e){const{property:t,...n}=e,[r,i]=Object(a.useState)(performance.now()),[c,s]=Object(l.a)({property:t,handler:()=>i(performance.now())}),d=g(c,s,r);return o.a.createElement(S,{...n,valueHash:r,sharedBuffer:d})}function S(e){const{sharedBuffer:t,min:n,max:r,step:i,...l}=e,[c,s,d,u]=t,m=Object(a.useRef)(null),p=Object(a.useRef)(null),h={flushed:!1};return o.a.createElement(N,{...l,ref:p,onValueChange:function(e,t){s(e),"step"!==t||h.flushed||(d(),h.flushed=!0)},onKeyDown:function(e){if(e.defaultPrevented||h.flushed)return;switch(Object(w.hashFromEvent)(e.nativeEvent)){case 27:u(),h.flushed=!0;break;case 13:e.preventDefault();const t=Object(v.ensureNotNull)(p.current).getClampedValue();null!==t&&(s(t),d(),h.flushed=!0)}},onBlur:function(e){const t=Object(v.ensureNotNull)(m.current);if(!t.contains(document.activeElement)&&!t.contains(e.relatedTarget)){const e=Object(v.ensureNotNull)(p.current).getClampedValue();null===e||h.flushed||(s(e),d(),h.flushed=!0)}},value:c,roundByStep:!1,containerReference:function(e){m.current=e},inputMode:O.CheckMobile.iOS()?void 0:"numeric",min:n,max:r,step:i,stretch:!1})}const C={mode:"float",min:-Number.MAX_VALUE,max:Number.MAX_VALUE,step:1,precision:0,inheritPrecisionFromStep:!0};class N extends o.a.PureComponent{constructor(e){super(e),this._selection=null,this._restoreSelection=!1,this._input=null,this._handleSelectionChange=()=>{this._restoreSelection||document.activeElement!==Object(v.ensureNotNull)(this._input)||this._saveSelection(Object(v.ensureNotNull)(this._input))},this._handleInputReference=e=>{this._input=e,this.props.inputReference&&this.props.inputReference(e)},this._onFocus=e=>{this._saveSelection(Object(v.ensureNotNull)(this._input)),this.setState({focused:!0}),this.props.onFocus&&this.props.onFocus(e)},this._onBlur=e=>{this._selection=null,this.setState({displayValue:k(this.props,this.props.value,V(this.props)),focused:!1}),this.props.onBlur&&this.props.onBlur(e)},this._onValueChange=e=>{const t=e.currentTarget,n=t.value,a=function(e,t,n){switch(n){case"integer":return z.test(t)?t:e;case"float":return t=t.replace(/,/g,"."),M.test(t)?t:e}}(this.state.displayValue,n,this.props.mode),o=_(a),r=this._checkValueBoundaries(o);var i,l;this.setState({displayValue:a}),a!==n&&(i=this.state.displayValue,l=(l=a).replace(/,/g,"."),(i=i.replace(/,/g,".")).includes(".")||!l.includes("."))?(this._restoreSelection=!0,this.forceUpdate()):this._saveSelection(t),r.value&&k(this.props,o)===a&&this.props.onValueChange(o,"input")},this._onValueByStepChange=e=>{const{roundByStep:t=!0,step:n=1}=this.props,a=_(this.state.displayValue);if(isNaN(a))return;const o=new b.Big(a),r=new b.Big(n),i=o.mod(r);let l=o.plus(e*n) +;!i.eq(0)&&t&&(l=l.plus((e>0?0:1)*n).minus(i));const c=Number(l);this._checkValueBoundaries(c).value&&(this.setState({displayValue:k(this.props,c,V(this.props))}),this.props.onValueChange(c,"step"))};const t=D(this.props.value);this.state={value:t,displayValue:k(this.props,t,V(this.props)),focused:!1,valueHash:this.props.valueHash}}componentDidMount(){document.addEventListener("selectionchange",this._handleSelectionChange)}componentWillUnmount(){document.removeEventListener("selectionchange",this._handleSelectionChange)}componentDidUpdate(){const e=Object(v.ensureNotNull)(this._input),t=this._selection;if(null!==t&&this._restoreSelection&&document.activeElement===e){const{start:n,end:a,direction:o}=t;e.setSelectionRange(n,a,o)}this._restoreSelection=!1}render(){return o.a.createElement(E.a,{type:"text",inputMode:this.props.inputMode,name:this.props.name,fontSizeStyle:"medium",value:this.state.displayValue,className:this.props.className,placeholder:this.props.placeholder,disabled:this.props.disabled,stretch:this.props.stretch,onValueChange:this._onValueChange,onValueByStepChange:this._onValueByStepChange,containerReference:this.props.containerReference,inputReference:this._handleInputReference,onClick:this.props.onClick,onFocus:this._onFocus,onBlur:this._onBlur,onKeyDown:this.props.onKeyDown})}getClampedValue(){const{min:e,max:t}=this.props,n=_(this.state.displayValue);return isNaN(n)?null:Object(j.clamp)(n,e,t)}static getDerivedStateFromProps(e,t){const{valueHash:n}=e,a=D(e.value);if(t.value!==a||t.valueHash!==n){return{value:a,valueHash:n,displayValue:k(e,a,t.focused&&t.valueHash===n?void 0:V(e))}}return null}_saveSelection(e){const{selectionStart:t,selectionEnd:n,selectionDirection:a}=e;null!==t&&null!==n&&null!==a&&(this._selection={start:t,end:n,direction:a})}_checkValueBoundaries(e){const{min:t,max:n}=this.props;return{value:function(e,t,n){const a=e>=t,o=e<=n;return{passMin:a,passMax:o,pass:a&&o,clamped:Object(j.clamp)(e,t,n)}}(e,t,n).pass}}}N.defaultProps=C;const z=/^-?[0-9]*$/,M=/^(-?([0-9]+\.?[0-9]*)|(-?[0-9]*))$/;function k(e,t,n){return null!==(t=D(t))&&void 0!==n&&(n=Math.max(A(t),n)),function(e,t){if(null===e)return"";return new y.NumericFormatter(t).format(e)}(t,n)}function V(e){let t=0;return e.inheritPrecisionFromStep&&e.step<=1&&(t=A(e.step)),Math.max(e.precision,t)||void 0}function A(e){const t=Math.trunc(e).toString();return Object(j.clamp)(y.NumericFormatter.formatNoE(e).length-t.length-1,0,15)}function _(e,t){return new y.NumericFormatter(t).parse(e)}function D(e){return"number"==typeof e&&Number.isFinite(e)?e:null}var T=n("eJTA"),F=n("7MId"),B=n("Tmoa");function R(e){const{color:t,thickness:n,thicknessItems:a,noAlpha:r}=e,[i,c]=Object(l.a)({property:t}),[s,d]=Object(l.a)(n?{property:n}:{defaultValue:void 0});return o.a.createElement(F.a,{...e,color:function(){if(!i)return null;return Object(T.rgbToHexString)(Object(T.parseRgb)(i))}(),onColorChange:function(e){const t=i?Object(B.alphaToTransparency)(Object(T.parseRgba)(i)[3]):0;c(Object(B.generateColor)(String(e),t,!0))},thickness:s, +thicknessItems:a,onThicknessChange:d,opacity:r?void 0:i?Object(T.parseRgba)(i)[3]:void 0,onOpacityChange:r?void 0:function(e){c(Object(B.generateColor)(i,Object(B.alphaToTransparency)(e),!0))}})}var P=n("YFKU"),L=n("a7Ha"),I=n("CHgb"),U=n("ijHL"),H=n("FIOl"),Y=n("jAqK"),W=n("8XTa");const q=[{type:L.LineEnd.Normal,icon:H,label:window.t("Normal")},{type:L.LineEnd.Arrow,icon:Y,label:window.t("Arrow")}];class J extends o.a.PureComponent{constructor(e){super(e),this._items=[],this._items=q.map(t=>({value:t.type,selectedContent:o.a.createElement(I.a,{icon:t.icon}),content:o.a.createElement(I.b,{icon:t.icon,iconClassName:u()(e.isRight&&W.right),label:t.label})}))}render(){const{id:e,lineEnd:t,className:n,lineEndChange:a,isRight:r,disabled:i}=this.props;return o.a.createElement(I.c,{id:e,disabled:i,className:u()(W.lineEndSelect,r&&W.right,n),items:this._items,value:t,onChange:a,hideArrowButton:!0,...Object(U.b)(this.props)})}}function K(e){const{property:t}=e,[n,a]=Object(l.a)({property:t});return o.a.createElement(J,{...e,lineEnd:n,lineEndChange:a})}var X=n("xpzh"),Q=n("6w4h");function G(e){const{children:t,className:n,breakPoint:o="Normal"}=e;return a.createElement(X.a,{className:d(Q.wrap,n,Q["breakpoint"+o])},a.Children.map(t,e=>a.isValidElement(e)?a.createElement("span",{key:null===e.key?void 0:e.key,className:Q.row},e):e))}const Z={1:"float",0:"integer"};var $=n("vqb8"),ee=n("eU7S");function te(e){const{definition:{id:t,properties:{checked:n,disabled:r,leftEnd:i,rightEnd:s,value:u,extendLeft:p,extendRight:b},title:v,valueMin:g,valueMax:w,valueStep:E,valueUnit:j,extendLeftTitle:y,extendRightTitle:O},offset:S}=e,[C]=Object(l.a)({property:n,defaultValue:!0}),[N]=Object(l.a)({property:r,defaultValue:!1}),z=Object($.a)({watchedValue:g,defaultValue:void 0}),M=Object($.a)({watchedValue:w,defaultValue:void 0}),k=Object($.a)({watchedValue:E,defaultValue:void 0}),V=Object($.a)({watchedValue:j,defaultValue:void 0}),A=e.disabled||!C;return o.a.createElement(a.Fragment,null,o.a.createElement(c.a,{id:t,offset:S,checked:n,title:v,disabled:e.disabled||N},o.a.createElement(G,{className:ee.line,breakPoint:"Small"},o.a.createElement(a.Fragment,null,function(){const{definition:{properties:{color:n,width:a},widthValues:r}}=e;if(n)return o.a.createElement("span",{className:ee.control},o.a.createElement(R,{color:n,thickness:a,disabled:A,thicknessItems:r}));return a&&o.a.createElement("span",{className:ee.control},o.a.createElement(f.a,{id:Object(m.a)(t,"line-width-select"),items:r,property:a,disabled:A}))}(),function(){const{definition:{properties:{style:n}}}=e;return n&&o.a.createElement("span",{className:ee.control},o.a.createElement(h,{id:Object(m.a)(t,"line-style-select"),property:n,disabled:A}))}()),(i||s||u)&&o.a.createElement(a.Fragment,null,o.a.createElement(a.Fragment,null,i&&o.a.createElement(K,{id:Object(m.a)(t,"left-end-select"),"data-name":"left-end-select",className:ee.control,property:i,disabled:A}),s&&o.a.createElement(K,{id:Object(m.a)(t,"right-end-select"),"data-name":"right-end-select",className:ee.control,property:s, +disabled:A,isRight:!0})),function(){const{definition:{valueType:t}}=e;return u&&o.a.createElement("span",{className:d(ee.valueInput,ee.control)},o.a.createElement(x,{className:ee.input,property:u,min:z,max:M,step:k,disabled:A,mode:void 0!==t?Z[t]:void 0,name:"line-value-input"}),o.a.createElement("span",{className:ee.valueUnit},V))}()))),p&&o.a.createElement(c.a,{id:t+"ExtendLeft",offset:S,checked:p,title:y,disabled:e.disabled||N}),b&&o.a.createElement(c.a,{id:t+"ExtendRight",offset:S,checked:b,title:O,disabled:e.disabled||N}))}var ne=n("4vW/"),ae=n("PECq"),oe=n("gla1");function re(e){const{property:t,options:n,...r}=e,[i,c]=Object(l.a)({property:t}),s=Object(oe.a)();return Object(a.useEffect)(()=>{const e=()=>s();return Array.isArray(n)||n.subscribe(e),()=>{Array.isArray(n)||n.unsubscribe(e)}},[]),o.a.createElement(ae.a,{...r,onChange:c,value:i,items:(Array.isArray(n)?n:n.value()).map(e=>({content:e.title,value:e.value,id:e.id}))})}var ie=n("ioCK");const le=[{title:Object(P.t)("Solid"),value:ne.ColorType.Solid},{title:Object(P.t)("Gradient"),value:ne.ColorType.Gradient}];function ce(e){const{id:t,disabled:n,noAlpha:a,properties:r}=e,{color:i,gradientColor1:c,gradientColor2:s,type:d}=r,[u]=Object(l.a)({property:d,defaultValue:ne.ColorType.Solid});return o.a.createElement(G,null,o.a.createElement(re,{id:Object(m.a)(t,"background-type-options-dropdown"),"data-name":"background-type-options-dropdown",className:ie.dropdown,menuClassName:ie.dropdownMenu,disabled:n,property:d,options:le}),u===ne.ColorType.Solid?o.a.createElement(R,{color:i,disabled:n,noAlpha:a}):o.a.createElement(o.a.Fragment,null,o.a.createElement(R,{className:ie.firstColorPicker,color:c,disabled:n,noAlpha:a}),o.a.createElement(R,{color:s,disabled:n,noAlpha:a})))}function se(e){const{definition:{id:t,properties:n,title:a,noAlpha:r},offset:i}=e,{color:s,checked:d,disabled:u}=n,[m]=Object(l.a)({property:d,defaultValue:!0}),[p]=Object(l.a)({property:u,defaultValue:!1}),h=e.disabled||!m;return o.a.createElement(c.a,{id:t,offset:i,checked:d,title:a,disabled:e.disabled||p},o.a.createElement(X.a,null,n.hasOwnProperty("type")?o.a.createElement(ce,{id:t,properties:n,disabled:h,noAlpha:r}):o.a.createElement(R,{color:s,disabled:h,noAlpha:r})))}var de=n("U1eG"),ue=n("HGP3"),me=n("lB1i");function pe(e){const{value:t,disabled:n,onChange:a}=e;return o.a.createElement("div",{className:d(me.wrap,{[me.disabled]:n})},o.a.createElement(de.a,{hideInput:!0,color:ue.colorsPalette["color-tv-blue-500"],opacity:1-t/100,onChange:function(e){n||a(100-100*e)}}))}function he(e){const{property:t,...n}=e,[o,r]=Object(l.a)({property:t});return a.createElement(pe,{...n,value:o,onChange:r})}function fe(e){const{definition:{id:t,properties:{transparency:n,checked:a,disabled:r},title:i},offset:s}=e,[d]=Object(l.a)({property:a,defaultValue:!0}),[u]=Object(l.a)({property:r,defaultValue:!1}),m=e.disabled||!d;return o.a.createElement(c.a,{id:t,offset:s,checked:a,title:i,disabled:e.disabled||u},o.a.createElement(X.a,null,o.a.createElement(he,{property:n,disabled:m})))}var be=n("oWdB") +;function ve(e){const{definition:{id:t,properties:{color1:n,color2:a,checked:r,disabled:i},title:s,noAlpha1:d,noAlpha2:u},offset:m}=e,[p]=Object(l.a)({property:r,defaultValue:!0}),[h]=Object(l.a)({property:i,defaultValue:!1}),f=e.disabled||!p||h;return o.a.createElement(c.a,{id:t,offset:m,checked:r,title:s,disabled:e.disabled||h},o.a.createElement(X.a,{className:be.twoColors},b(n,d),b(a,u)));function b(e,t){return o.a.createElement("span",{className:be.colorPicker},o.a.createElement(R,{color:e,disabled:f,noAlpha:t}))}}var ge=n("ybVX"),we=n("ZRxn");function Ee(e){const{definition:{id:t,properties:{checked:n,value:r,unitOptionsValue:i,disabled:s},min:u,max:p,step:h,title:f,unit:b,unitOptions:g,type:w},offset:E}=e,[j]=Object(l.a)({property:n,defaultValue:!0}),[y]=Object(l.a)({property:s,defaultValue:!1}),O=Object($.a)({watchedValue:u,defaultValue:void 0}),S=Object($.a)({watchedValue:p,defaultValue:void 0}),C=Object($.a)({watchedValue:h,defaultValue:void 0}),N=Object($.a)({watchedValue:b,defaultValue:void 0}),z=Object(a.useContext)(ge.b),M=e.disabled||!j;return o.a.createElement(c.a,{id:t,offset:E,checked:n,title:f,disabled:e.disabled||y},o.a.createElement(X.a,null,o.a.createElement(G,null,o.a.createElement(x,{className:d(we.input,z[t]&&we[z[t]]),property:r,min:O,max:S,step:C,disabled:M,mode:Z[w],name:"number-input"}),i&&o.a.createElement(re,{id:Object(m.a)(t,"unit-options-dropdown"),"data-name":"unit-options-dropdown",className:we.dropdown,menuClassName:we.dropdownMenu,disabled:M,property:i,options:Object(v.ensureDefined)(g)})),o.a.createElement("span",{className:we.unit},N)))}function je(e){const{definition:{id:t,properties:{checked:n,disabled:a},childrenDefinitions:r,title:i},offset:s}=e,[d]=Object(l.a)({property:n,defaultValue:!0}),[u]=Object(l.a)({property:a,defaultValue:!1}),m=e.disabled||!d;return o.a.createElement(o.a.Fragment,null,o.a.createElement(c.a,{id:t,offset:s,checked:n,title:i,disabled:e.disabled||u}),r.map(e=>o.a.createElement(dn,{key:e.id,disabled:m,definition:e,offset:!0})))}var ye=n("UXjO");function Oe(e){const{property:t}=e,[n,a]=Object(l.a)({property:t});return o.a.createElement(ye.a,{...e,fontSize:n,fontSizeChange:a,"data-name":"font-size-select"})}var xe=n("Iivm"),Se=n("aw5J");function Ce(e){const{className:t,checked:n,icon:a,disabled:r,onClick:i}=e;return o.a.createElement("div",{className:u()(t,Se.container,n&&!r&&Se.active,r&&Se.disabled),onClick:r?void 0:i,"data-role":"button",...Object(U.b)(e)},o.a.createElement(xe.a,{className:Se.icon,icon:a}))}function Ne(e){const{icon:t,className:n,property:o,disabled:r}=e,[i,c]=Object(l.a)({property:o});return a.createElement(Ce,{className:n,icon:t,checked:i,onClick:function(){c(!i)},disabled:r,...Object(U.b)(e)})}var ze,Me=n("ldG2"),ke=n("Q+1u"),Ve=n("ECWH"),Ae=n("SpAO"),_e=n("Bcy+"),De=n("RG4O"),Te=n("3F0O"),Fe=n("szLm"),Be=n("xADF"),Re=n("ORlR");n("Px4x");!function(e){e.None="none",e.Vertical="vertical",e.Horizontal="horizontal",e.Both="both"}(ze||(ze={}));const Pe=o.a.forwardRef((e,t)=>{ +const{id:n,title:a,tabIndex:r,containerTabIndex:i,role:l,inputClassName:c,autoComplete:s,autoFocus:u,cols:m,disabled:p,isFocused:h,form:f,maxLength:b,minLength:v,name:g,placeholder:w,readonly:E,required:j,rows:y,value:O,defaultValue:x,wrap:S,containerReference:C,onChange:N,onSelect:z,onFocus:M,onContainerFocus:k,onBlur:V,...A}=e,_={id:n,title:a,tabIndex:r,role:l,autoComplete:s,autoFocus:u,cols:m,disabled:p,form:f,maxLength:b,minLength:v,name:g,placeholder:w,readOnly:E,required:j,rows:y,value:O,defaultValue:x,wrap:S,onChange:N,onSelect:z,onFocus:M,onBlur:V};return o.a.createElement(Me.a,{...A,tabIndex:i,disabled:p,readonly:E,isFocused:h,ref:C,onFocus:k,middleSlot:o.a.createElement(Be.c,null,o.a.createElement("textarea",{..._,className:d(Re.textarea,c),ref:t}))})});Pe.displayName="TextareaView";const Le=(e,t,n)=>t?void 0:e?-1:n,Ie=(e,t,n)=>t?void 0:e?n:-1,Ue=o.a.forwardRef((e,t)=>{e=Object(_e.a)(e);const{className:n,disabled:r,autoSelectOnFocus:i,tabIndex:l=0,borderStyle:c,highlight:s,resize:u,containerReference:m=null,onFocus:p,onBlur:h,...f}=e,b=Object(a.useRef)(null),v=Object(a.useRef)(null),{isMouseDown:g,handleMouseDown:w,handleMouseUp:E}=Object(De.a)(),[j,y]=Object(Ae.a)(),O=Object(Te.a)(y.onFocus,(function(e){i&&!g.current&&Object(Fe.a)(e.currentTarget)}),p),x=Object(Te.a)(y.onBlur,h),S=void 0!==u&&u!==ze.None,C=null!=c?c:S?s?"thick":"thin":void 0,N=null!=s?s:!S&&void 0;return o.a.createElement(Pe,{...f,className:d(Re["textarea-container"],S&&Re["change-highlight"],u&&u!==ze.None&&Re["resize-"+u],j&&Re.focused,n),disabled:r,isFocused:j,containerTabIndex:Le(j,r,l),tabIndex:Ie(j,r,l),borderStyle:C,highlight:N,onContainerFocus:function(e){v.current===e.target&&null!==b.current&&b.current.focus()},onFocus:O,onBlur:x,onMouseDown:w,onMouseUp:E,ref:function(e){b.current=e,"function"==typeof t?t(e):t&&(t.current=e)},containerReference:Object(Ve.a)([m,v])})});function He(e){const{property:t,...n}=e,[r,i]=Object(l.a)({property:t}),c=Object(a.useCallback)(e=>i(e.target.value),[i]);return o.a.createElement(Ue,{...n,value:r,onChange:c})}Ue.displayName="Textarea";var Ye=n("rRJX"),We=n("4Fxa"),qe=n("CaTF");const Je=e=>({content:e.title,title:e.title,value:e.value,id:e.id}),Ke=e=>({content:e.title,title:e.title,value:e.value,id:e.id});function Xe(e){const{definition:{id:t,properties:{color:n,size:r,checked:i,disabled:s,bold:d,italic:u,text:p,alignmentHorizontal:h,alignmentVertical:f,orientation:b,backgroundVisible:v,backgroundColor:g,borderVisible:w,borderColor:E,borderWidth:j,wrap:y},title:O,sizeItems:x,alignmentTitle:S,alignmentHorizontalItems:C,alignmentVerticalItems:N,orientationTitle:z,orientationItems:M,backgroundTitle:k,borderTitle:V,borderWidthItems:A,wrapTitle:_},offset:D}=e,T=Object(a.useContext)(ge.a),[F]=Object(l.a)({property:i,defaultValue:!0}),[B]=Object(l.a)({property:s,defaultValue:!1}),[P,L]=Object(l.a)({property:f,defaultValue:void 0}),[I,U]=Object(l.a)({property:b,defaultValue:"horizontal"}),[H,Y]=Object(l.a)({property:h,defaultValue:void 0}),[W]=Object(l.a)({property:v,defaultValue:!1}),[q]=Object(l.a)({ +property:w,defaultValue:!1}),J=e.disabled||!F;return o.a.createElement(a.Fragment,null,function(){if(O)return o.a.createElement(c.a,{id:t,offset:D,checked:i,title:O,disabled:e.disabled||B},o.a.createElement(G,{breakPoint:"Small"},Z(),$()));return o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{placement:"first",colSpan:2,offset:D,"data-section-name":t},Z(),$()))}(),p&&o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{placement:"first",colSpan:2,offset:D,"data-section-name":t},o.a.createElement(He,{className:Me.b.FontSizeMedium,rows:(K=T[t],"big"===K?9:5),stretch:!0,property:p,disabled:J,onFocus:function(e){e.target.select()},name:"text-input"}))),(h||f)&&o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{placement:"first",verticalAlign:"adaptive",offset:D,"data-section-name":t},o.a.createElement(X.a,null,S)),o.a.createElement(ke.a.Cell,{placement:"last",verticalAlign:"adaptive","data-section-name":t},o.a.createElement(G,{breakPoint:"Small"},void 0!==P&&void 0!==N&&o.a.createElement(ae.a,{id:Object(m.a)(t,"alignment-vertical-select"),"data-name":"alignment-vertical-select",className:qe.dropdown,menuClassName:qe.dropdownMenu,disabled:J,value:P,items:N.map(Je),onChange:L}),void 0!==H&&void 0!==C&&o.a.createElement(ae.a,{id:Object(m.a)(t,"alignment-horizontal-select"),"data-name":"alignment-horizontal-select",className:qe.dropdown,menuClassName:qe.dropdownMenu,disabled:J,value:H,items:C.map(Je),onChange:Y})))),void 0!==b&&void 0!==M&&o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{placement:"first",verticalAlign:"adaptive",offset:D,"data-section-name":t},o.a.createElement(X.a,null,z)),o.a.createElement(ke.a.Cell,{placement:"last",verticalAlign:"adaptive","data-section-name":t},o.a.createElement(G,{breakPoint:"Small"},o.a.createElement(ae.a,{id:Object(m.a)(t,"orientation-select"),"data-name":"orientation-select",className:qe.dropdown,menuClassName:qe.dropdownMenu,disabled:J,value:I,items:M.map(Ke),onChange:U})))),ee(k,v,g,!!v&&!W),ee(V,w,E,!!w&&!q,j,A),y&&o.a.createElement(c.a,{id:t+"Wrap",offset:D,checked:y,title:_,disabled:e.disabled||B}));var K;function Q(e,t,n){return e?o.a.createElement(Ne,{className:qe.fontStyleButton,icon:t,property:e,disabled:J,"data-name":n}):null}function Z(){return o.a.createElement(a.Fragment,null,n&&o.a.createElement("div",{className:qe.colorPicker},o.a.createElement(R,{color:n,disabled:J})),r&&x&&o.a.createElement(Oe,{id:Object(m.a)(t,"font-size-select"),property:r,fontSizes:x,disabled:J}))}function $(){return o.a.createElement(a.Fragment,null,Q(d,Ye,"toggle-bold"),Q(u,We,"toggle-italic"))}function ee(n,a,r,i,l,s){return r||a?o.a.createElement(c.a,{id:t+"ColorSelect",offset:D,checked:a,title:n,disabled:e.disabled||B},r&&o.a.createElement(R,{color:r,thickness:l,thicknessItems:s,disabled:J||i})):null}}var Qe=n("aSdR");function Ge(e){const{definition:{properties:{x:t,y:n,disabled:a},id:r,minX:i,maxX:l,stepX:c,minY:s,maxY:d,stepY:u,title:m,typeX:p,typeY:h},offset:f}=e,b=a&&a.value()||e.disabled,v=Object($.a)({watchedValue:i,defaultValue:void 0 +}),g=Object($.a)({watchedValue:l,defaultValue:void 0}),w=Object($.a)({watchedValue:c,defaultValue:void 0}),E=Object($.a)({watchedValue:s,defaultValue:void 0}),j=Object($.a)({watchedValue:d,defaultValue:void 0}),y=Object($.a)({watchedValue:u,defaultValue:void 0});return o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{verticalAlign:"adaptive",placement:"first",offset:f,"data-section-name":r},o.a.createElement("span",{className:Qe.coordinates},m)),(t||n)&&o.a.createElement(ke.a.Cell,{placement:"last",offset:f,"data-section-name":r},o.a.createElement(G,{breakPoint:"Medium"},n&&o.a.createElement(x,{className:Qe.input,property:n,min:E,max:j,step:y,disabled:b,name:"y-input",mode:void 0!==h?Z[h]:"integer"}),t&&o.a.createElement(x,{className:Qe.input,property:t,min:v,max:g,step:w,disabled:b,name:"x-input",mode:void 0!==p?Z[p]:"integer"}))))}var Ze=n("9gev");function $e(e){const{definition:{id:t,properties:{checked:n,option:r,disabled:i},title:s,options:d},offset:p}=e,[h]=Object(l.a)({property:n,defaultValue:!0}),[f]=Object(l.a)({property:i,defaultValue:!1}),b=Object(a.useContext)(ge.b),v=e.disabled||!h;return o.a.createElement(c.a,{id:t,offset:p,checked:n,title:s,disabled:e.disabled||f},o.a.createElement(X.a,null,o.a.createElement(re,{id:Object(m.a)(t,"options-dropdown"),"data-name":"options-dropdown",className:u()(Ze.dropdown,b[t]&&Ze[b[t]]),menuClassName:u()(Ze.dropdownMenu,b[t]&&Ze[b[t]]),disabled:v||f,property:r,options:d})))}var et=n("yqnI");var tt=n("Ialn"),nt=n("G7lD");class at extends a.PureComponent{constructor(e){super(e),this._container=null,this._pointer=null,this._rafPosition=null,this._rafDragStop=null,this._refContainer=e=>{this._container=e},this._refPointer=e=>{this._pointer=e},this._handlePosition=e=>{null!==this._rafPosition||this.props.disabled||(this._rafPosition=requestAnimationFrame(()=>{const{from:t,to:n,min:a,max:o}=this.props,r=this._getNewPosition(e),i=1===this._detectPointerMode(e),l=i?Object(j.clamp)(r,a,n):t,c=i?n:Object(j.clamp)(r,t,o);l<=c&&this._handleChange(l,c),this._rafPosition=null}))},this._handleDragStop=()=>{null!==this._rafDragStop||this.props.disabled||(this._rafDragStop=requestAnimationFrame(()=>{this.setState({pointerDragMode:0}),this._rafDragStop=null,this.props.onCommit()}))},this._onSliderClick=e=>{O.CheckMobile.any()||(this._handlePosition(e.nativeEvent),this._dragSubscribe())},this._mouseUp=e=>{this._dragUnsubscribe(),this._handlePosition(e),this._handleDragStop()},this._mouseMove=e=>{this._handlePosition(e)},this._onTouchStart=e=>{this._handlePosition(e.nativeEvent.touches[0])},this._handleTouch=e=>{this._handlePosition(e.nativeEvent.touches[0])},this._handleTouchEnd=()=>{this._handleDragStop()},this.state={pointerDragMode:0}}componentWillUnmount(){null!==this._rafPosition&&(cancelAnimationFrame(this._rafPosition),this._rafPosition=null),null!==this._rafDragStop&&(cancelAnimationFrame(this._rafDragStop),this._rafDragStop=null),this._dragUnsubscribe()}render(){ +const{className:e,disabled:t,from:n,to:o,min:r,max:i}=this.props,{pointerDragMode:l}=this.state,c=0!==l,s=i-r,u=(n-r)/s,m=(o-r)/s,p=Object(tt.isRtl)()?"right":"left";return a.createElement("div",{className:d(e,nt.range,t&&nt.disabled)},a.createElement("div",{className:nt.rangeSlider,ref:this._refContainer,onMouseDown:this._onSliderClick,onTouchStart:this._onTouchStart,onTouchMove:this._handleTouch,onTouchEnd:this._handleTouchEnd},a.createElement("div",{className:nt.rangeSliderMiddleWrap},a.createElement("div",{className:d(nt.rangeSliderMiddle,c&&nt.dragged),style:{[p]:100*u+"%",width:100*(m-u)+"%"}})),a.createElement("div",{className:nt.rangePointerWrap},a.createElement("div",{className:d(nt.pointer,c&&nt.dragged),style:{[p]:100*u+"%"},ref:this._refPointer})),a.createElement("div",{className:nt.rangePointerWrap},a.createElement("div",{className:d(nt.pointer,c&&nt.dragged),style:{[p]:100*m+"%"}}))))}_dragSubscribe(){const e=Object(v.ensureNotNull)(this._container).ownerDocument;e&&(e.addEventListener("mouseup",this._mouseUp),e.addEventListener("mousemove",this._mouseMove))}_dragUnsubscribe(){const e=Object(v.ensureNotNull)(this._container).ownerDocument;e&&(e.removeEventListener("mousemove",this._mouseMove),e.removeEventListener("mouseup",this._mouseUp))}_getNewPosition(e){const{min:t,max:n}=this.props,a=n-t,o=Object(v.ensureNotNull)(this._container),r=Object(v.ensureNotNull)(this._pointer),i=o.getBoundingClientRect(),l=r.offsetWidth;let c=e.clientX-l/2-i.left;return Object(tt.isRtl)()&&(c=i.width-c-l),Object(j.clamp)(c/(i.width-l),0,1)*a+t}_detectPointerMode(e){const{from:t,to:n}=this.props,{pointerDragMode:a}=this.state;if(0!==a)return a;const o=this._getNewPosition(e),r=Math.abs(t-o),i=Math.abs(n-o),l=r===i?oo.a.createElement(G,{breakPoint:"Medium"},o.a.createElement(o.a.Fragment,null,o.a.createElement("span",{className:rt.valueInput},o.a.createElement(S,{className:rt.input,sharedBuffer:E,min:f,max:z,step:1,disabled:V,name:"from-input",mode:"integer"}),e?o.a.createElement("span",{className:rt.rangeSlider},"—"):o.a.createElement(at,{className:rt.rangeSlider,from:j,to:z,min:f,max:b,onChange:_,onCommit:D,disabled:V}))),o.a.createElement(o.a.Fragment,null,o.a.createElement("span",{ +className:rt.valueInput},o.a.createElement(S,{className:rt.input,sharedBuffer:N,min:j,max:b,step:1,disabled:V,name:"to-input",mode:"integer"})))))}()));function _(e,t){y(Math.round(e)),M(Math.round(t))}function D(){A.flushed||(O(),k(),A.flushed=!0)}}var lt=n("07LS"),ct=n("fktV"),st=n("EJl2");function dt(e){const{definitions:t,name:n,offset:a}=e;return o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{className:u()(st.cell,st.fragmentCell),offset:a,placement:"first",verticalAlign:"adaptive",colSpan:2,"data-section-name":n,checkableTitle:!0},t.map(e=>o.a.createElement("div",{className:st.item,key:e.id,"data-section-name":e.id},o.a.createElement(mt,{definition:e})))))}function ut(e){const{definition:t,offset:n}=e;return o.a.createElement(ke.a.Row,null,o.a.createElement(ke.a.Cell,{className:st.cell,offset:n,placement:"first",verticalAlign:"adaptive",colSpan:2,checkableTitle:!0},o.a.createElement(mt,{definition:t})))}function mt(e){const{definition:{id:t,properties:{disabled:n,checked:a,color:r,level:i,width:c,style:s},title:d,widthValues:p,styleValues:f}}=e,[b]=Object(l.a)({property:a,defaultValue:!0}),[v]=Object(l.a)({property:n,defaultValue:!1}),g=v||!b;return o.a.createElement(o.a.Fragment,null,o.a.createElement(ct.a,{name:"is-enabled-"+t,className:u()(d&&st.withTitle),title:d&&o.a.createElement("span",{className:st.title},d),property:a,disabled:v}),i&&o.a.createElement(x,{className:u()(st.input,st.control),property:i,disabled:g}),r&&o.a.createElement(R,{className:st.control,disabled:g,color:r,thickness:c,thicknessItems:p}),s&&o.a.createElement(h,{id:Object(m.a)(t,"leveled-line-style-select"),className:st.control,property:s,disabled:g,allowedLineStyles:f}))}var pt=n("ZcEB");function ht(e){const{definition:{id:t,properties:{option1:n,option2:a,checked:r,disabled:i},title:s,optionsItems1:d,optionsItems2:u},offset:p}=e,[h]=Object(l.a)({property:r,defaultValue:!0}),[f]=Object(l.a)({property:i,defaultValue:!1}),b=e.disabled||!h;return o.a.createElement(c.a,{id:t,offset:p,checked:r,title:s,disabled:e.disabled||f},o.a.createElement(G,{className:pt.twoOptions},o.a.createElement(re,{id:Object(m.a)(t,"two-options-dropdown-1"),"data-name":"two-options-dropdown-1",className:pt.dropdown,menuClassName:pt.menu,property:n,disabled:b,options:d}),o.a.createElement(re,{id:Object(m.a)(t,"two-options-dropdown-2"),"data-name":"two-options-dropdown-2",className:pt.dropdown,menuClassName:pt.menu,property:a,disabled:b,options:u})))}var ft=n("fV0y"),bt=n("Vdly"),vt=n("MjAr");var gt=n("0lS6");function wt(e){const{tab:t,icon:n,isActive:a,onTabClick:r}=e;return o.a.createElement("div",{className:u()(gt.wrapper,a&>.isActive),onClick:function(){r(t)}},o.a.createElement(xe.a,{icon:n}))}var Et=n("Bbdy");function jt(e){const{activeTab:t,emojis:n,onTabClick:a}=e;return o.a.createElement("div",{className:Et.wrapper},n.map(({title:e,icon:n})=>o.a.createElement(wt,{key:e,tab:e,icon:n,isActive:t===e,onTabClick:a})))}var yt=n("iR1w"),Ot=n("j0Er");function xt(e){const{title:t}=e;return o.a.createElement("div",{className:Ot.wrapper},t)} +var St=n("+FzY"),Ct=n("e/Lx");const Nt=34;function zt(e){const{className:t,emoji:n,size:a=Nt,onClick:r}=e,i=Object(St.a)(n,"png");return o.a.createElement("div",{className:u()(Ct.wrapper,t),style:{width:a,height:a},onClick:function(){r(n)}},o.a.createElement("img",{className:Ct.emoji,src:i,decoding:"async",width:"24",height:"24",alt:"",draggable:!1,onContextMenu:function(e){e.preventDefault()}}))}var Mt=n("tQXF");const kt=o.a.memo(e=>{const{emojis:t,itemSize:n,onEmojiClick:a}=e;return o.a.createElement("div",{className:Mt.wrapper},t.map(e=>o.a.createElement(zt,{key:e,className:Mt.emojiItem,emoji:e,size:n,onClick:a})))});var Vt=n("OoQL"),At=n("iy5y");const _t=o.a.createContext(null);function Dt(e){const{listRef:t,emojiGroups:n,emojiSize:r,onSelect:i,onContentRendered:l}=e;Object(a.useEffect)(()=>{var e;return null===(e=t.current)||void 0===e?void 0:e.resetAfterIndex(0,!0)},[n]);const c=Object(a.useCallback)(e=>"title"===n[e].type?30:38,[n]),s=Object(a.useCallback)(({visibleStartIndex:e})=>{const{relatedTitle:t}=n[e];l(t)},[n,l]);return o.a.createElement(_t.Provider,{value:Object(a.useMemo)(()=>({size:r,onSelect:i}),[r,i])},o.a.createElement(yt.b,{className:At.list,ref:t,width:"100%",height:Math.min(330,window.innerHeight-60),itemData:n,itemCount:n.length,children:Tt,onItemsRendered:s,itemSize:c}))}const Tt=o.a.memo(e=>{const{style:t,index:n,data:a}=e,r=a[n],{size:i,onSelect:l}=Object(Vt.a)(_t);return"title"===r.type?o.a.createElement("div",{style:t},o.a.createElement(xt,{title:r.relatedTitle})):o.a.createElement("div",{style:t},o.a.createElement(kt,{emojis:r.content,itemSize:i,onEmojiClick:l}))});var Ft=n("9pqQ");function Bt(e){var t;const{className:n,emojis:r,onSelect:i}=e,l=Object(a.useRef)(null),[c,s]=Object(a.useState)(0),d=Object(a.useMemo)(()=>function(e,t){if(0===t)return[];const n=[];return e.forEach(({title:e,emojis:a})=>{n.push({type:"title",relatedTitle:e,content:[e]});let o=[];for(const r of a)o.length{n.current=e,null!==o.current&&(o.current.disconnect(),null!==e&&o.current.observe(e))},[n,o]);return Object(a.useEffect)(()=>(o.current=new vt.default((e,t)=>r.current(e,t)),n.current&&i(n.current),()=>{var e;null===(e=o.current)||void 0===e||e.disconnect()}),[n,...t]),i}((function(e){const[t]=e,{width:n}=t.contentRect,a=Math.floor((n-12)/38);s(a)})),[p,h]=Object(a.useState)((null===(t=d[0])||void 0===t?void 0:t.relatedTitle)||"");return o.a.createElement("div",{className:u()(Ft.wrapper,n)},o.a.createElement(jt,{emojis:r,activeTab:p,onTabClick:function(e){!function(e){var t;null===(t=l.current)||void 0===t||t.scrollToItem(e,"start"),requestAnimationFrame(()=>{var t;return null===(t=l.current)||void 0===t?void 0:t.scrollToItem(e,"start")})}(function(e){return d.findIndex(({relatedTitle:t,type:n})=>"title"===n&&t===e)}(e))} +}),o.a.createElement("div",{ref:m},o.a.createElement(Dt,{listRef:l,emojiGroups:d,emojiSize:38,onSelect:i,onContentRendered:h})))}var Rt=n("JoYF"),Pt=n("STR1"),Lt=n("tJif"),It=n("gd+L"),Ut=n("gX9w"),Ht=n("A3oJ"),Yt=n("hreg"),Wt=n("r6bn"),qt=n("mt7N");const Jt=[{title:Object(P.t)("recently used",{context:"emoji_group"}),emojis:[],icon:Rt},{title:Object(P.t)("smiles & people",{context:"emoji_group"}),emojis:["😀","😃","😄","😁","😆","😅","😂","🤣","☺️","😊","😇","🙂","🙃","😉","😌","😍","🥰","😘","😗","😙","😚","😋","😛","😝","😜","🤪","🤨","🧐","🤓","😎","🤩","🥳","😏","😒","😞","😔","😟","😕","🙁","☹️","😣","😖","😫","😩","🥺","😢","😭","😤","😠","😡","🤬","🤯","😳","🥵","🥶","😱","😨","😰","😥","😓","🤗","🤔","🤭","🤫","🤥","😶","😐","😑","😬","🙄","😯","😦","😧","😮","😲","🥱","😴","🤤","😪","😵","🤐","🥴","🤢","🤮","🤧","😷","🤒","🤕","🤑","🤠","😈","👿","👹","👺","🤡","💩","👻","💀","☠️","👽","👾","🤖","🎃","😺","😸","😹","😻","😼","😽","🙀","😿","😾","👋","🤚","🖐","✋","🖖","👌","🤏","✌️","🤞","🤟","🤘","🤙","👈","👉","👆","🖕","👇","☝️","👍","👎","✊","👊","🤛","🤜","👏","🙌","👐","🤲","🤝","🙏","✍️","💅","🤳","💪","🦾","🦵","🦿","🦶","👂","🦻","👃","🧠","🦷","🦴","👀","👁","👅","👄","💋","🩸","👶","🧒","👦","👧","🧑","👱","👨","🧔","👨‍🦰","👨‍🦱","👨‍🦳","👨‍🦲","👩","👩‍🦰","🧑‍🦰","👩‍🦱","🧑‍🦱","👩‍🦳","🧑‍🦳","👩‍🦲","🧑‍🦲","👱‍♀️","👱‍♂️","🧓","👴","👵","🙍","🙍‍♂️","🙍‍♀️","🙎","🙎‍♂️","🙎‍♀️","🙅","🙅‍♂️","🙅‍♀️","🙆","🙆‍♂️","🙆‍♀️","💁","💁‍♂️","💁‍♀️","🙋","🙋‍♂️","🙋‍♀️","🧏","🧏‍♂️","🧏‍♀️","🙇","🙇‍♂️","🙇‍♀️","🤦","🤦‍♂️","🤦‍♀️","🤷","🤷‍♂️","🤷‍♀️","🧑‍⚕️","👨‍⚕️","👩‍⚕️","🧑‍🎓","👨‍🎓","👩‍🎓","🧑‍🏫","👨‍🏫","👩‍🏫","🧑‍⚖️","👨‍⚖️","👩‍⚖️","🧑‍🌾","👨‍🌾","👩‍🌾","🧑‍🍳","👨‍🍳","👩‍🍳","🧑‍🔧","👨‍🔧","👩‍🔧","🧑‍🏭","👨‍🏭","👩‍🏭","🧑‍💼","👨‍💼","👩‍💼","🧑‍🔬","👨‍🔬","👩‍🔬","🧑‍💻","👨‍💻","👩‍💻","🧑‍🎤","👨‍🎤","👩‍🎤","🧑‍🎨","👨‍🎨","👩‍🎨","🧑‍✈️","👨‍✈️","👩‍✈️","🧑‍🚀","👨‍🚀","👩‍🚀","🧑‍🚒","👨‍🚒","👩‍🚒","👮","👮‍♂️","👮‍♀️","🕵","🕵️‍♂️","🕵️‍♀️","💂","💂‍♂️","💂‍♀️","👷","👷‍♂️","👷‍♀️","🤴","👸","👳","👳‍♂️","👳‍♀️","👲","🧕","🤵","👰","🤰","🤱","👼","🎅","🤶","🦸","🦸‍♂️","🦸‍♀️","🦹","🦹‍♂️","🦹‍♀️","🧙","🧙‍♂️","🧙‍♀️","🧚","🧚‍♂️","🧚‍♀️","🧛","🧛‍♂️","🧛‍♀️","🧜","🧜‍♂️","🧜‍♀️","🧝","🧝‍♂️","🧝‍♀️","🧞","🧞‍♂️","🧞‍♀️","🧟","🧟‍♂️","🧟‍♀️","💆","💆‍♂️","💆‍♀️","💇","💇‍♂️","💇‍♀️","🚶","🚶‍♂️","🚶‍♀️","🧍","🧍‍♂️","🧍‍♀️","🧎","🧎‍♂️","🧎‍♀️","🧑‍🦯","👨‍🦯","👩‍🦯","🧑‍🦼","👨‍🦼","👩‍🦼","🧑‍🦽","👨‍🦽","👩‍🦽","🏃","🏃‍♂️","🏃‍♀️","💃","🕺","🕴","👯","👯‍♂️","👯‍♀️","🧖","🧖‍♂️","🧖‍♀️","🧑‍🤝‍🧑","👭","👫","👬","💏","👨‍❤️‍💋‍👨","👩‍❤️‍💋‍👩","💑","👨‍❤️‍👨","👩‍❤️‍👩","👪","👨‍👩‍👦","👨‍👩‍👧","👨‍👩‍👧‍👦","👨‍👩‍👦‍👦","👨‍👩‍👧‍👧","👨‍👨‍👦","👨‍👨‍👧","👨‍👨‍👧‍👦","👨‍👨‍👦‍👦","👨‍👨‍👧‍👧","👩‍👩‍👦","👩‍👩‍👧","👩‍👩‍👧‍👦","👩‍👩‍👦‍👦","👩‍👩‍👧‍👧","👨‍👦","👨‍👦‍👦","👨‍👧","👨‍👧‍👦","👨‍👧‍👧","👩‍👦","👩‍👦‍👦","👩‍👧","👩‍👧‍👦","👩‍👧‍👧","🗣","👤","👥","👣"],icon:Pt},{title:Object(P.t)("animals & nature",{context:"emoji_group"}), +emojis:["🐶","🐱","🐭","🐹","🐰","🦊","🐻","🐼","🐨","🐯","🦁","🐮","🐷","🐽","🐸","🐵","🙈","🙉","🙊","🐒","🐔","🐧","🐦","🐤","🐣","🐥","🦆","🦅","🦉","🦇","🐺","🐗","🐴","🦄","🐝","🐛","🦋","🐌","🐞","🐜","🦟","🦗","🕷","🕸","🦂","🐢","🐍","🦎","🦖","🦕","🐙","🦑","🦐","🦞","🦀","🐡","🐠","🐟","🐬","🐳","🐋","🦈","🐊","🐅","🐆","🦓","🦍","🦧","🐘","🦛","🦏","🐪","🐫","🦒","🦘","🐃","🐂","🐄","🐎","🐖","🐏","🐑","🦙","🐐","🦌","🐕","🐩","🦮","🐕‍🦺","🐈","🐓","🦃","🦚","🦜","🦢","🦩","🕊","🐇","🦝","🦨","🦡","🦦","🦥","🐁","🐀","🐿","🦔","🐾","🐉","🐲","🌵","🎄","🌲","🌳","🌴","🌱","🌿","☘️","🍀","🎍","🎋","🍃","🍂","🍁","🍄","🐚","🌾","💐","🌷","🌹","🥀","🌺","🌸","🌼","🌻","🌞","🌝","🌛","🌜","🌚","🌕","🌖","🌗","🌘","🌑","🌒","🌓","🌔","🌙","🌎","🌍","🌏","🪐","💫","⭐️","🌟","✨","⚡️","☄️","💥","🔥","🌪","🌈","☀️","🌤","⛅️","🌥","☁️","🌦","🌧","⛈","🌩","🌨","❄️","☃️","⛄️","🌬","💨","💧","💦","☔️","🌊","🌫"],icon:Lt},{title:Object(P.t)("food & drink",{context:"emoji_group"}),emojis:["🍏","🍎","🍐","🍊","🍋","🍌","🍉","🍇","🍓","🍈","🍒","🍑","🥭","🍍","🥥","🥝","🍅","🍆","🥑","🥦","🥬","🥒","🌶","🌽","🥕","🧄","🧅","🥔","🍠","🥐","🥯","🍞","🥖","🥨","🧀","🥚","🍳","🧈","🥞","🧇","🥓","🥩","🍗","🍖","🌭","🍔","🍟","🍕","🥪","🥙","🧆","🌮","🌯","🥗","🥘","🥫","🍝","🍜","🍲","🍛","🍣","🍱","🥟","🦪","🍤","🍙","🍚","🍘","🍥","🥠","🥮","🍢","🍡","🍧","🍨","🍦","🥧","🧁","🍰","🎂","🍮","🍭","🍬","🍫","🍿","🍩","🍪","🌰","🥜","🍯","🥛","🍼","☕️","🍵","🧃","🥤","🍶","🍺","🍻","🥂","🍷","🥃","🍸","🍹","🧉","🍾","🧊","🥄","🍴","🍽","🥣","🥡","🥢","🧂"],icon:It},{title:Object(P.t)("activity",{context:"emoji_group"}),emojis:["⚽️","🏀","🏈","⚾️","🥎","🎾","🏐","🏉","🥏","🎱","🪀","🏓","🏸","🏒","🏑","🥍","🏏","🥅","⛳️","🪁","🏹","🎣","🤿","🥊","🥋","🎽","🛹","🛷","⛸","🥌","🎿","⛷","🏂","🪂","🏋️","🏋️‍♂️","🏋️‍♀️","🤼","🤼‍♂️","🤼‍♀️","🤸‍♀️","🤸","🤸‍♂️","⛹️","⛹️‍♂️","⛹️‍♀️","🤺","🤾","🤾‍♂️","🤾‍♀️","🏌️","🏌️‍♂️","🏌️‍♀️","🏇","🧘","🧘‍♂️","🧘‍♀️","🏄","🏄‍♂️","🏄‍♀️","🏊","🏊‍♂️","🏊‍♀️","🤽","🤽‍♂️","🤽‍♀️","🚣","🚣‍♂️","🚣‍♀️","🧗","🧗‍♂️","🧗‍♀️","🚵","🚵‍♂️","🚵‍♀️","🚴","🚴‍♂️","🚴‍♀️","🏆","🥇","🥈","🥉","🏅","🎖","🏵","🎗","🎫","🎟","🎪","🤹","🤹‍♂️","🤹‍♀️","🎭","🎨","🎬","🎤","🎧","🎼","🎹","🥁","🎷","🎺","🎸","🪕","🎻","🎲","🎯","🎳","🎮","🎰","🧩"],icon:Ut},{title:Object(P.t)("travel & places",{context:"emoji_group"}),emojis:["🚗","🚕","🚙","🚌","🚎","🏎","🚓","🚑","🚒","🚐","🚚","🚛","🚜","🦯","🦽","🦼","🛴","🚲","🛵","🏍","🛺","🚨","🚔","🚍","🚘","🚖","🚡","🚠","🚟","🚃","🚋","🚞","🚝","🚄","🚅","🚈","🚂","🚆","🚇","🚊","🚉","✈️","🛫","🛬","🛩","💺","🛰","🚀","🛸","🚁","🛶","⛵️","🚤","🛥","🛳","⛴","🚢","⚓️","⛽️","🚧","🚦","🚥","🚏","🗺","🗿","🗽","🗼","🏰","🏯","🏟","🎡","🎢","🎠","⛲️","⛱","🏖","🏝","🏜","🌋","⛰","🏔","🗻","🏕","⛺️","🏠","🏡","🏘","🏚","🏗","🏭","🏢","🏬","🏣","🏤","🏥","🏦","🏨","🏪","🏫","🏩","💒","🏛","⛪️","🕌","🕍","🛕","🕋","⛩","🛤","🛣","🗾","🎑","🏞","🌅","🌄","🌠","🎇","🎆","🌇","🌆","🏙","🌃","🌌","🌉","🌁"],icon:Ht},{title:Object(P.t)("objects",{context:"emoji_group"}), +emojis:["⌚️","📱","📲","💻","⌨️","🖥","🖨","🖱","🖲","🕹","🗜","💽","💾","💿","📀","📼","📷","📸","📹","🎥","📽","🎞","📞","☎️","📟","📠","📺","📻","🎙","🎚","🎛","🧭","⏱","⏲","⏰","🕰","⌛️","⏳","📡","🔋","🔌","💡","🔦","🕯","🪔","🧯","🛢","💸","💵","💴","💶","💷","💰","💳","💎","⚖️","🧰","🔧","🔨","⚒","🛠","⛏","🔩","⚙️","🧱","⛓","🧲","🔫","💣","🧨","🪓","🔪","🗡","⚔️","🛡","🚬","⚰️","⚱️","🏺","🔮","📿","🧿","💈","⚗️","🔭","🔬","🕳","🩹","🩺","💊","💉","🧬","🦠","🧫","🧪","🌡","🧹","🧺","🧻","🚽","🚰","🚿","🛁","🛀","🧼","🪒","🧽","🧴","🛎","🔑","🗝","🚪","🪑","🛋","🛏","🛌","🧸","🖼","🛍","🛒","🎁","🎈","🎏","🎀","🎊","🎉","🎎","🏮","🎐","🧧","✉️","📩","📨","📧","💌","📥","📤","📦","🏷","📪","📫","📬","📭","📮","📯","📜","📃","📄","📑","🧾","📊","📈","📉","🗒","🗓","📆","📅","🗑","📇","🗃","🗳","🗄","📋","📁","📂","🗂","🗞","📰","📓","📔","📒","📕","📗","📘","📙","📚","📖","🔖","🧷","🔗","📎","🖇","📐","📏","🧮","📌","📍","✂️","🖊","🖋","✒️","🖌","🖍","📝","✏️","🔍","🔎","🔏","🔐","🔒","🔓","🧳","🌂","☂️","🧵","🧶","👓","🕶","🥽","🥼","🦺","👔","👕","👖","🧣","🧤","🧥","🧦","👗","👘","🥻","🩱","🩲","🩳","👙","👚","👛","👜","👝","🎒","👞","👟","🥾","🥿","👠","👡","🩰","👢","👑","👒","🎩","🎓","🧢","⛑","💄","💍","💼"],icon:Yt},{title:Object(P.t)("symbols",{context:"emoji_group"}),emojis:["❤️","🧡","💛","💚","💙","💜","🖤","🤍","🤎","💔","❣️","💕","💞","💓","💗","💖","💘","💝","💟","☮️","✝️","☪️","🕉","☸️","✡️","🔯","🕎","☯️","☦️","🛐","⛎","♈️","♉️","♊️","♋️","♌️","♍️","♎️","♏️","♐️","♑️","♒️","♓️","🆔","⚛️","🉑","☢️","☣️","📴","📳","🈶","🈚️","🈸","🈺","🈷️","✴️","🆚","💮","🉐","㊙️","㊗️","🈴","🈵","🈹","🈲","🅰️","🅱️","🆎","🆑","🅾️","🆘","❌","⭕️","🛑","⛔️","📛","🚫","💯","💢","♨️","🚷","🚯","🚳","🚱","🔞","📵","🚭","❗️","❕","❓","❔","‼️","⁉️","🔅","🔆","〽️","⚠️","🚸","🔱","⚜️","🔰","♻️","✅","🈯️","💹","❇️","✳️","❎","🌐","💠","Ⓜ️","🌀","💤","🏧","🚾","♿️","🅿️","🈳","🈂️","🛂","🛃","🛄","🛅","🚹","🚺","🚼","🚻","🚮","🎦","📶","🈁","🔣","ℹ️","🔤","🔡","🔠","🆖","🆗","🆙","🆒","🆕","🆓","0️⃣","1️⃣","2️⃣","3️⃣","4️⃣","5️⃣","6️⃣","7️⃣","8️⃣","9️⃣","🔟","🔢","#️⃣","*️⃣","⏏️","▶️","⏸","⏯","⏹","⏺","⏭","⏮","⏩","⏪","⏫","⏬","◀️","🔼","🔽","➡️","⬅️","⬆️","⬇️","↗️","↘️","↙️","↖️","↕️","↔️","↪️","↩️","⤴️","⤵️","🔀","🔁","🔂","🔄","🔃","🎵","🎶","➕","➖","➗","✖️","♾","💲","💱","™️","©️","®️","〰️","➰","➿","🔚","🔙","🔛","🔝","🔜","✔️","☑️","🔘","🔴","🟠","🟡","🟢","🔵","🟣","⚫️","⚪️","🟤","🔺","🔻","🔸","🔹","🔶","🔷","🔳","🔲","▪️","▫️","◾️","◽️","◼️","◻️","🟥","🟧","🟨","🟩","🟦","🟪","⬛️","⬜️","🟫","🔈","🔇","🔉","🔊","🔔","🔕","📣","📢","👁‍🗨","💬","💭","🗯","♠️","♣️","♥️","♦️","🃏","🎴","🀄️","🕐","🕑","🕒","🕓","🕔","🕕","🕖","🕗","🕘","🕙","🕚","🕛","🕜","🕝","🕞","🕟","🕠","🕡","🕢","🕣","🕤","🕥","🕦","🕧"],icon:Wt},{title:Object(P.t)("flags",{context:"emoji_group"}), +emojis:["🏳️","🏴","🏁","🚩","🏳️‍🌈","🏴‍☠️","🇦🇫","🇦🇽","🇦🇱","🇩🇿","🇦🇸","🇦🇩","🇦🇴","🇦🇮","🇦🇶","🇦🇬","🇦🇷","🇦🇲","🇦🇼","🇦🇺","🇦🇹","🇦🇿","🇧🇸","🇧🇭","🇧🇩","🇧🇧","🇧🇾","🇧🇪","🇧🇿","🇧🇯","🇧🇲","🇧🇹","🇧🇴","🇧🇦","🇧🇼","🇧🇷","🇮🇴","🇻🇬","🇧🇳","🇧🇬","🇧🇫","🇧🇮","🇰🇭","🇨🇲","🇨🇦","🇮🇨","🇨🇻","🇧🇶","🇰🇾","🇨🇫","🇹🇩","🇨🇱","🇨🇳","🇨🇽","🇨🇨","🇨🇴","🇰🇲","🇨🇬","🇨🇩","🇨🇰","🇨🇷","🇨🇮","🇭🇷","🇨🇺","🇨🇼","🇨🇾","🇨🇿","🇩🇰","🇩🇯","🇩🇲","🇩🇴","🇪🇨","🇪🇬","🇸🇻","🇬🇶","🇪🇷","🇪🇪","🇪🇹","🇪🇺","🇫🇰","🇫🇴","🇫🇯","🇫🇮","🇫🇷","🇬🇫","🇵🇫","🇹🇫","🇬🇦","🇬🇲","🇬🇪","🇩🇪","🇬🇭","🇬🇮","🇬🇷","🇬🇱","🇬🇩","🇬🇵","🇬🇺","🇬🇹","🇬🇬","🇬🇳","🇬🇼","🇬🇾","🇭🇹","🇭🇳","🇭🇰","🇭🇺","🇮🇸","🇮🇳","🇮🇩","🇮🇷","🇮🇶","🇮🇪","🇮🇲","🇮🇱","🇮🇹","🇯🇲","🇯🇵","🎌","🇯🇪","🇯🇴","🇰🇿","🇰🇪","🇰🇮","🇽🇰","🇰🇼","🇰🇬","🇱🇦","🇱🇻","🇱🇧","🇱🇸","🇱🇷","🇱🇾","🇱🇮","🇱🇹","🇱🇺","🇲🇴","🇲🇰","🇲🇬","🇲🇼","🇲🇾","🇲🇻","🇲🇱","🇲🇹","🇲🇭","🇲🇶","🇲🇷","🇲🇺","🇾🇹","🇲🇽","🇫🇲","🇲🇩","🇲🇨","🇲🇳","🇲🇪","🇲🇸","🇲🇦","🇲🇿","🇲🇲","🇳🇦","🇳🇷","🇳🇵","🇳🇱","🇳🇨","🇳🇿","🇳🇮","🇳🇪","🇳🇬","🇳🇺","🇳🇫","🇰🇵","🇲🇵","🇳🇴","🇴🇲","🇵🇰","🇵🇼","🇵🇸","🇵🇦","🇵🇬","🇵🇾","🇵🇪","🇵🇭","🇵🇳","🇵🇱","🇵🇹","🇵🇷","🇶🇦","🇷🇪","🇷🇴","🇷🇺","🇷🇼","🇼🇸","🇸🇲","🇸🇦","🇸🇳","🇷🇸","🇸🇨","🇸🇱","🇸🇬","🇸🇽","🇸🇰","🇸🇮","🇬🇸","🇸🇧","🇸🇴","🇿🇦","🇰🇷","🇸🇸","🇪🇸","🇱🇰","🇧🇱","🇸🇭","🇰🇳","🇱🇨","🇵🇲","🇻🇨","🇸🇩","🇸🇷","🇸🇿","🇸🇪","🇨🇭","🇸🇾","🇹🇼","🇹🇯","🇹🇿","🇹🇭","🇹🇱","🇹🇬","🇹🇰","🇹🇴","🇹🇹","🇹🇳","🇹🇷","🇹🇲","🇹🇨","🇹🇻","🇻🇮","🇺🇬","🇺🇦","🇦🇪","🇬🇧","🏴󠁧󠁢󠁥󠁮󠁧󠁿","🏴󠁧󠁢󠁳󠁣󠁴󠁿","🏴󠁧󠁢󠁷󠁬󠁳󠁿","🇺🇳","🇺🇸","🇺🇾","🇺🇿","🇻🇺","🇻🇦","🇻🇪","🇻🇳","🇼🇫","🇪🇭","🇾🇪","🇿🇲","🇿🇼"],icon:qt}];var Kt=n("9dlw"),Xt=n("mkWe"),Qt=n("Sn4D"),Gt=n("DTHj"),Zt=n("nPPD");var $t=n("Iksw"),en=n("uhCe"),tn=n("7Y2P");function nn(e){const{children:t,highlight:n,disabled:a,reference:r}=e,i=n?"primary":"default";return o.a.createElement("div",{ref:r,className:u()(tn.wrapper,tn["intent-"+i],tn["border-thin"],tn["size-medium"],n&&tn.highlight,n&&tn.focused,a&&tn.disabled),"data-role":"button"},o.a.createElement("div",{className:u()(tn.childrenContainer,a&&tn.disabled)},t),n&&o.a.createElement("span",{className:tn.shadow}))}var an=n("YV34");const on=()=>null,rn=Object(Zt.a)(Gt.a,{menuBox:an.menuBox});function ln(e){const{value:t,disabled:n,onSelect:r}=e,i=Object(a.useRef)(null),{current:l}=Object(a.useRef)(bt.getJSON("RecentlyUsedEmojis",[t])),[c,s]=Object(a.useState)(l),[d,u]=Object(a.useState)(!1),m=Object(a.useCallback)(()=>u(!1),[]);var p;p=m,Object(a.useEffect)(()=>(document.addEventListener("scroll",p),()=>{document.removeEventListener("scroll",p)}),[p]);const h=Object(a.useCallback)(e=>{const t=Array.from(new Set([e,...c])).slice(0,18);bt.setJSON("RecentlyUsedEmojis",t),s(t),r(e),m()},[c,r]),f=(b=c,Object(a.useMemo)(()=>(Jt[0].emojis=b,[...Jt]),[b]));var b +;return o.a.createElement(o.a.Fragment,null,o.a.createElement(nn,{reference:i,highlight:d,disabled:n},o.a.createElement(zt,{emoji:t,onClick:function(){n||u(!0)}})),o.a.createElement(ot.a,{rule:en.a.TabletSmall},e=>d&&o.a.createElement(Xt.b,null,e?o.a.createElement(Qt.a,{className:an.drawer,position:"Bottom",onClose:m},o.a.createElement(Bt,{emojis:f,onSelect:h})):o.a.createElement(Kt.a,{theme:rn,isOpened:!0,position:Object($t.e)(i.current,{horizontalDropDirection:$t.b.FromLeftToRight,horizontalAttachEdge:$t.a.Left}),onClickOutside:m,onClose:on},o.a.createElement(Bt,{className:an.desktopSize,emojis:f,onSelect:h})))))}var cn=n("9UfQ");function sn(e){const{definition:{title:t,properties:n}}=e,{checked:a,emoji:r,backgroundColor:i}=n,[c,s]=Object(l.a)({property:a,defaultValue:!1}),[d,u]=Object(l.a)({property:r,defaultValue:"🙂"}),[m,p]=Object(l.a)({property:i,defaultValue:ue.colorsPalette["color-tv-blue-a600"]});return o.a.createElement("div",{className:cn.wrapper},o.a.createElement(ft.a,{className:cn.checkbox,label:t,checked:c,onChange:function(){s(!c)}}),o.a.createElement(ln,{value:d,disabled:!c,onSelect:u}),o.a.createElement(F.a,{className:cn.colorSelect,disabled:!c,color:m,onColorChange:p}))}function dn(e){const{definition:t}=e;if(function(e){Object(a.useEffect)(()=>{if(void 0===e)return;const t={...e.properties};return Object.entries(t).forEach(([n,a])=>{void 0!==a&&a.subscribe(t,()=>et.a.logNormal(`Property "${n}" in definition "${e.id}" was updated to value "${a.value()}"`))}),()=>{Object.entries(t).forEach(([,e])=>{void 0!==e&&e.unsubscribeAll(t)})}},[e])}(Object(r.A)(t)?void 0:t),Object(r.A)(t)){const i=t.definitions;return o.a.createElement(a.Fragment,null,t.title&&o.a.createElement(lt.a,{title:t.title,name:t.id}),i&&(n=i.value(),n.reduce((e,t)=>{if(Object(r.A)(t)||"leveledLine"!==t.propType)e.push(t);else{const n=e[e.length-1];Array.isArray(n)?n.push(t):e.push([t])}return e},[])).map(n=>Array.isArray(n)?o.a.createElement(dt,{key:n[0].id,name:t.id,definitions:n}):o.a.createElement(dn,{key:n.id,...e,definition:n})),"general"===t.groupType&&o.a.createElement(ke.a.GroupSeparator,{size:1}))}switch(t.propType){case"line":return o.a.createElement(te,{...e,definition:t});case"checkable":return o.a.createElement(s,{...e,definition:t});case"color":return o.a.createElement(se,{...e,definition:t});case"transparency":return o.a.createElement(fe,{...e,definition:t});case"twoColors":return o.a.createElement(ve,{...e,definition:t});case"number":return o.a.createElement(Ee,{...e,definition:t});case"symbol":return o.a.createElement(i.a,{...e,definition:t});case"text":return o.a.createElement(Xe,{...e,definition:t});case"checkableSet":return o.a.createElement(je,{...e,definition:t});case"options":return o.a.createElement($e,{...e,definition:t});case"range":return o.a.createElement(it,{...e,definition:t});case"coordinates":return o.a.createElement(Ge,{...e,definition:t});case"twoOptions":return o.a.createElement(ht,{...e,definition:t});case"leveledLine":return o.a.createElement(ut,{...e,definition:t});case"emoji": +return o.a.createElement(sn,{...e,definition:t});case"image":default:return null}var n}n.d(t,"a",(function(){return dn}))},"e/Lx":function(e,t,n){e.exports={wrapper:"wrapper-1-S6uQxU",emoji:"emoji-1-S6uQxU"}},eU7S:function(e,t,n){e.exports={line:"line-2EFUN2WR",control:"control-2EFUN2WR",valueInput:"valueInput-2EFUN2WR",valueUnit:"valueUnit-2EFUN2WR",input:"input-2EFUN2WR"}},gX9w:function(e,t){e.exports=''},"gd+L":function(e,t){e.exports=''}, +hreg:function(e,t){e.exports=''},"i/MG":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));n("YFKU");var a=n("q1tI"),o=n("TSYQ"),r=n("Iivm"),i=n("To8B"),l=n("kXJy");const c={remove:window.t("Remove")};function s(e){const{className:t,isActive:n,onClick:s,title:d,hidden:u,"data-name":m="remove-button",...p}=e;return a.createElement(r.a,{...p,"data-name":m,className:o(l.button,"apply-common-tooltip",n&&l.active,u&&l.hidden,t),icon:i,onClick:s,title:d||c.remove})}},ioCK:function(e,t,n){e.exports={dropdown:"dropdown-Y-VtYUMO",dropdownMenu:"dropdownMenu-Y-VtYUMO",firstColorPicker:"firstColorPicker-Y-VtYUMO"}},iy5y:function(e,t,n){e.exports={list:"list-tOao0Vo7"}},j0Er:function(e,t,n){e.exports={wrapper:"wrapper-1ecGiBuB"}},jAqK:function(e,t){e.exports=''},kJwE:function(e,t,n){e.exports={lineWidthSelect:"lineWidthSelect-3VlOWnM8",bar:"bar-3VlOWnM8",isActive:"isActive-3VlOWnM8",item:"item-3VlOWnM8"}},kXJy:function(e,t,n){e.exports={button:"button-3B9fDLtm",disabled:"disabled-3B9fDLtm",active:"active-3B9fDLtm",hidden:"hidden-3B9fDLtm"}},lB1i:function(e,t,n){e.exports={wrap:"wrap-3yqu-5zT",disabled:"disabled-3yqu-5zT"}},mkWe:function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return i}));var a=n("q1tI"),o=n.n(a);class r extends o.a.PureComponent{constructor(e){super(e),this._addDrawer=()=>{const e=this.state.currentDrawer+1;return this.setState({currentDrawer:e}),e},this._removeDrawer=()=>{const e=this.state.currentDrawer-1;return this.setState({currentDrawer:e}),e},this.state={currentDrawer:0}}render(){return o.a.createElement(i.Provider,{value:{addDrawer:this._addDrawer,removeDrawer:this._removeDrawer,currentDrawer:this.state.currentDrawer}},this.props.children)}}const i=o.a.createContext(null)},mt7N:function(e,t){ +e.exports=''},nPPD:function(e,t,n){"use strict";function a(e,t,n={}){const a=Object.assign({},t);for(const o of Object.keys(t)){const r=n[o]||o;r in e&&(a[o]=[e[r],t[o]].join(" "))}return a}function o(e,t,n={}){return Object.assign({},e,a(e,t,n))}n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return o}))},oWdB:function(e,t,n){e.exports={twoColors:"twoColors-1b_W-OHw",colorPicker:"colorPicker-1b_W-OHw"}},r6bn:function(e,t){e.exports=''},rRJX:function(e,t){e.exports=''},sHQ4:function(e,t,n){e.exports={wrap:"wrap-164vy-kj",positionBottom:"positionBottom-164vy-kj",backdrop:"backdrop-164vy-kj",drawer:"drawer-164vy-kj",positionLeft:"positionLeft-164vy-kj"}},tJif:function(e,t){ +e.exports=''},tQXF:function(e,t,n){e.exports={wrapper:"wrapper-2uFJv5Fz",emojiItem:"emojiItem-2uFJv5Fz"}},ybVX:function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return i}));var a=n("q1tI"),o=n.n(a);const r=o.a.createContext({}),i=o.a.createContext({})},z1Uu:function(e,t,n){e.exports={defaultSelect:"defaultSelect-rvczD149"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/45.12a19785e3864bd62a76.css b/static/charting_library/bundles/45.12a19785e3864bd62a76.css new file mode 100644 index 0000000..5017828 --- /dev/null +++ b/static/charting_library/bundles/45.12a19785e3864bd62a76.css @@ -0,0 +1 @@ +.itemWrap-3FEBD9eP{padding-left:0}.icon-3FEBD9eP,.item-3FEBD9eP{align-items:center;display:flex;justify-content:center}.icon-3FEBD9eP{height:28px;width:28px}.selected-3FEBD9eP{margin:0 -6px}.label-3FEBD9eP{padding-left:6px}.lineStyleSelect-3KjU7hI0{width:34px}.lineWidthSelect-3VlOWnM8{width:76px}.bar-3VlOWnM8{border:0 solid #131722;height:0;width:50px}html.theme-dark .bar-3VlOWnM8{border:0 solid #b2b5be}.bar-3VlOWnM8.isActive-3VlOWnM8,html.theme-dark .bar-3VlOWnM8.isActive-3VlOWnM8{border-top-color:#fff}.item-3VlOWnM8{align-items:center;display:flex;justify-content:center}.lineEndSelect-1x0HNmOc{width:34px}.right-1x0HNmOc{transform:scaleX(-1)}.row-NcPpqR9x{display:flex;margin-left:8px}.row-NcPpqR9x:first-child{margin-left:0}@media screen and (max-width:379px){.wrap-NcPpqR9x.breakpointNormal-NcPpqR9x{flex-flow:wrap}.wrap-NcPpqR9x.breakpointNormal-NcPpqR9x .row-NcPpqR9x{margin-left:0;margin-top:8px;width:100%}.wrap-NcPpqR9x.breakpointNormal-NcPpqR9x .row-NcPpqR9x:first-child{margin-top:0}}@media screen and (max-width:369px){.wrap-NcPpqR9x.breakpointMedium-NcPpqR9x{flex-flow:wrap}.wrap-NcPpqR9x.breakpointMedium-NcPpqR9x .row-NcPpqR9x{margin-left:0;margin-top:8px;width:100%}.wrap-NcPpqR9x.breakpointMedium-NcPpqR9x .row-NcPpqR9x:first-child{margin-top:0}}@media screen and (max-width:359px){.wrap-NcPpqR9x.breakpointSmall-NcPpqR9x{flex-flow:wrap}.wrap-NcPpqR9x.breakpointSmall-NcPpqR9x .row-NcPpqR9x{margin-left:0;margin-top:8px;width:100%}.wrap-NcPpqR9x.breakpointSmall-NcPpqR9x .row-NcPpqR9x:first-child{margin-top:0}}.line-2EFUN2WR .control-2EFUN2WR{margin-right:8px}.line-2EFUN2WR .control-2EFUN2WR:last-child{margin-right:0}.line-2EFUN2WR .valueInput-2EFUN2WR{align-items:center;display:flex;flex-direction:row;max-width:100px}.line-2EFUN2WR .valueInput-2EFUN2WR .valueUnit-2EFUN2WR{cursor:default;margin-left:9px}.line-2EFUN2WR .valueInput-2EFUN2WR .input-2EFUN2WR{flex:none;width:100px}.dropdown-Y-VtYUMO{width:150px}.dropdownMenu-Y-VtYUMO{min-width:150px}.firstColorPicker-Y-VtYUMO{margin-right:8px}.wrap-3yqu-5zT{width:148px}.wrap-3yqu-5zT.disabled-3yqu-5zT{opacity:.5}.twoColors-1b_W-OHw .colorPicker-1b_W-OHw{margin-right:8px}.unit-3YVf8t1O{cursor:default;margin-left:9px}.input-3YVf8t1O{width:100px}.input-3YVf8t1O.normal-3YVf8t1O{width:150px}.input-3YVf8t1O.big-3YVf8t1O{width:180px}@media screen and (max-width:$bigWidthBreakpoint){.input-3YVf8t1O.big-3YVf8t1O{width:150px}}.dropdown-3YVf8t1O{width:100px}.dropdownMenu-3YVf8t1O{min-width:100px}.defaultSelect-rvczD149{cursor:default;width:100px}.container-1zlYw2UK{align-items:center;border:1px solid #d1d4dc;border-radius:4px;box-sizing:border-box;color:#131722;display:flex;height:34px;justify-content:center;width:34px}html.theme-dark .container-1zlYw2UK{border:1px solid #50535e;color:#b2b5be}.container-1zlYw2UK.active-1zlYw2UK{background-color:#9598a1;border-color:#9598a1;color:#fff}html.theme-dark .container-1zlYw2UK.active-1zlYw2UK{background-color:#787b86;border-color:#787b86;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-1zlYw2UK.active-1zlYw2UK:hover{background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .container-1zlYw2UK.active-1zlYw2UK:hover{background-color:#9598a1;border-color:#9598a1;color:#fff}}.container-1zlYw2UK.disabled-1zlYw2UK{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-1zlYw2UK.disabled-1zlYw2UK:hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}}html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK{color:#5d606b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK:hover{color:#5d606b}}html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK:hover{border-color:#363a45}}html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK{background-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK:hover{background-color:#363a45}.container-1zlYw2UK:hover{border-color:#787b86;color:#131722}html.theme-dark .container-1zlYw2UK:hover{border-color:#787b86;color:#b2b5be}}.icon-1zlYw2UK{display:flex}.textarea-container-1vKcpneM{font-size:16px;font-style:normal;font-weight:400;line-height:24px;resize:none}.textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8{border-color:var(--ui-lib-intent-color,#d1d4dc)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8:hover{border-color:var(--ui-lib-intent-color,#d1d4dc)}}html.theme-dark .textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8{border-color:var(--ui-lib-intent-color,#50535e)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8:hover{border-color:var(--ui-lib-intent-color,#50535e)}}.textarea-container-1vKcpneM.resize-vertical-1ddEqhTL{overflow:hidden;resize:vertical}.textarea-container-1vKcpneM.resize-horizontal-2_PnoCKN{overflow:hidden;resize:horizontal}.textarea-container-1vKcpneM.resize-both-3tZsc84l{overflow:hidden;resize:both}.textarea-387rVPmq{-webkit-text-fill-color:currentColor;-webkit-appearance:textfield;appearance:textfield;background-color:initial;border:0;box-sizing:border-box;display:block;font-family:inherit;font-size:inherit;height:100%;line-height:inherit;margin:0;min-width:0;order:0;outline:0;padding:2px 5px;resize:none;width:100%}.textarea-387rVPmq::placeholder{-webkit-text-fill-color:currentColor;color:#a3a6af;opacity:1}html.theme-dark .textarea-387rVPmq::placeholder{color:#434651}.textarea-387rVPmq::-webkit-calendar-picker-indicator,.textarea-387rVPmq::-webkit-clear-button,.textarea-387rVPmq::-webkit-inner-spin-button,.textarea-387rVPmq::-webkit-outer-spin-button,.textarea-387rVPmq::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.textarea-387rVPmq::-ms-clear,.textarea-387rVPmq::-ms-reveal{display:none}.textarea-387rVPmq:-webkit-autofill,.textarea-387rVPmq:-webkit-autofill:active,.textarea-387rVPmq:-webkit-autofill:focus{border-radius:3px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.textarea-387rVPmq:-webkit-autofill:hover{border-radius:3px}}html.theme-dark .textarea-387rVPmq::-webkit-calendar-picker-indicator{filter:invert(1)}.colorPicker-zLgQJ6Yh{margin-right:8px}.fontStyleButton-zLgQJ6Yh{margin-left:8px}.fontStyleButton-zLgQJ6Yh:first-child{margin-left:0}.dropdown-zLgQJ6Yh{width:100px}.dropdownMenu-zLgQJ6Yh{min-width:100px}.coordinates-28UK1YDt{align-items:center;display:flex;flex-direction:row}.input-28UK1YDt{margin-right:8px;width:100px}.input-28UK1YDt:last-child{margin-right:0}.dropdown-3Z3YBwWw{width:100px}.dropdown-3Z3YBwWw.normal-3Z3YBwWw{width:150px}.dropdown-3Z3YBwWw.big-3Z3YBwWw{width:180px}@media screen and (max-width:428px){.dropdown-3Z3YBwWw.big-3Z3YBwWw{width:150px}}.dropdownMenu-3Z3YBwWw{min-width:100px}.dropdownMenu-3Z3YBwWw.normal-3Z3YBwWw{min-width:150px}.dropdownMenu-3Z3YBwWw.big-3Z3YBwWw{min-width:180px}@media screen and (max-width:428px){.dropdownMenu-3Z3YBwWw.big-3Z3YBwWw{min-width:150px}}.range-31GwrUpb{align-items:center;display:flex;min-width:100px}.range-31GwrUpb.disabled-31GwrUpb{opacity:.5}.rangeSlider-31GwrUpb{background-color:#e0e3eb;border-radius:5px;flex:1 0 auto;height:10px;position:relative}html.theme-dark .rangeSlider-31GwrUpb{background-color:#434651}.rangeSliderMiddleWrap-31GwrUpb{height:100%;padding:0 6px}.rangeSliderMiddle-31GwrUpb{background-color:#2962ff;box-sizing:border-box;display:block;height:100%;position:relative;transition:left .1s,width .1s}html.theme-dark .rangeSliderMiddle-31GwrUpb{background-color:#2962ff}.rangeSliderMiddle-31GwrUpb.dragged-31GwrUpb{transition:left 0s,width 0s}.pointer-31GwrUpb{background-color:initial;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 2px #00000080;box-sizing:border-box;height:12px;margin:-1px 0 0;position:absolute;transition:left .1s,top .1s;width:12px}.pointer-31GwrUpb,html.theme-dark .pointer-31GwrUpb{background-color:#fff}html.theme-dark .pointer-31GwrUpb{border:2px solid #fff}.pointer-31GwrUpb.dragged-31GwrUpb{transition:left 0s}.rangePointerWrap-31GwrUpb{left:0;position:absolute;top:0;width:calc(100% - 12px)}.range-2PdPYA_J .valueInput-2PdPYA_J{align-items:center;display:flex;flex-direction:row}.range-2PdPYA_J .valueInput-2PdPYA_J .rangeSlider-2PdPYA_J{padding-left:9px}.range-2PdPYA_J .valueInput-2PdPYA_J .input-2PdPYA_J{flex:none;width:100px}.input-1y54fm74{width:100px}.control-1y54fm74{margin-right:8px}.control-1y54fm74:last-child{margin-right:0}.item-1y54fm74{display:flex;flex:none;margin-bottom:8px;margin-right:48px}.cell-1y54fm74{margin-right:-48px;max-width:460px}.fragmentCell-1y54fm74{flex-wrap:wrap;margin-bottom:-8px}.withTitle-1y54fm74{margin-right:25px}.title-1y54fm74{display:inline-block;width:35px}.dropdown-T1V4i3sE{width:100px}.menu-T1V4i3sE{min-width:100px}.wrapper-2ESZuAbX{align-items:center;border-radius:4px;color:#131722;display:flex;height:38px;justify-content:center;position:relative;width:38px}html.theme-dark .wrapper-2ESZuAbX{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-2ESZuAbX:hover{background-color:#f0f3fa}html.theme-dark .wrapper-2ESZuAbX:hover{background-color:#2a2e39}}.isActive-2ESZuAbX,html.theme-dark .isActive-2ESZuAbX{color:#2962ff}.isActive-2ESZuAbX:after{background-color:currentColor;content:"";height:4px;left:0;position:absolute;right:0;top:100%}.wrapper-30HPnwk9{border-bottom:1px solid #e0e3eb;display:flex;padding:6px 6px 4px}html.theme-dark .wrapper-30HPnwk9{border-bottom:1px solid #434651}.wrapper-1ecGiBuB{align-items:center;box-sizing:border-box;color:#787b86;display:flex;font-size:11px;height:100%;padding:6px 6px 0 16px;text-transform:uppercase}.wrapper-1-S6uQxU{align-items:center;border-radius:4px;display:flex;flex-shrink:0;justify-content:center}.emoji-1-S6uQxU{-webkit-touch-callout:none;display:block}.wrapper-2uFJv5Fz{align-items:center;display:flex;height:100%;overflow:hidden;padding:0 6px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.emojiItem-2uFJv5Fz:hover{background-color:#f0f3fa}html.theme-dark .emojiItem-2uFJv5Fz:hover{background-color:#2a2e39}}.list-tOao0Vo7{content-visibility:auto;overscroll-behavior:none;will-change:contents}@media (pointer:fine){.list-tOao0Vo7{-ms-overflow-style:none;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .list-tOao0Vo7{scrollbar-color:#363a45 #0000}.list-tOao0Vo7::-webkit-scrollbar{height:5px;width:5px}.list-tOao0Vo7::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .list-tOao0Vo7::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.list-tOao0Vo7::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.list-tOao0Vo7::-webkit-scrollbar-corner{display:none}}.wrapper-3G6q-JGM{background-color:#fff;border-radius:6px}html.theme-dark .wrapper-3G6q-JGM{background-color:#1e222d}.wrapper-1MlnSDA4{align-items:center;border-color:#d1d4dc;border-radius:4px;border-style:solid;box-sizing:border-box;display:inline-flex;margin:0;position:relative}html.theme-dark .wrapper-1MlnSDA4{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-1MlnSDA4:hover{border-color:#a3a6af}html.theme-dark .wrapper-1MlnSDA4:hover{border-color:#6a6d78}}.wrapper-1MlnSDA4.focused-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.focused-1MlnSDA4{border-color:#2962ff}.wrapper-1MlnSDA4.readonly-1MlnSDA4{background-color:#f0f3fa;border-color:#d1d4dc}html.theme-dark .wrapper-1MlnSDA4.readonly-1MlnSDA4{background-color:#2a2e39;border-color:#50535e}.wrapper-1MlnSDA4.disabled-1MlnSDA4{background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}html.theme-dark .wrapper-1MlnSDA4.disabled-1MlnSDA4{background-color:#2a2e39;border-color:#50535e;color:#50535e}.wrapper-1MlnSDA4.size-small-1MlnSDA4{height:24px}.wrapper-1MlnSDA4.size-medium-1MlnSDA4{height:34px}.wrapper-1MlnSDA4.size-large-1MlnSDA4{height:48px}.wrapper-1MlnSDA4.font-size-medium-1MlnSDA4,.wrapper-1MlnSDA4.font-size-small-1MlnSDA4{font-size:14px;line-height:20px}.wrapper-1MlnSDA4.font-size-large-1MlnSDA4{font-size:16px;line-height:24px}.wrapper-1MlnSDA4.border-none-1MlnSDA4{border-width:0}.wrapper-1MlnSDA4.border-none-1MlnSDA4 .shadow-1MlnSDA4{margin:0}.wrapper-1MlnSDA4.border-thin-1MlnSDA4{border-width:1px}.wrapper-1MlnSDA4.border-thin-1MlnSDA4 .shadow-1MlnSDA4{margin:-1px}.wrapper-1MlnSDA4.border-thick-1MlnSDA4{border-width:2px}.wrapper-1MlnSDA4.border-thick-1MlnSDA4 .shadow-1MlnSDA4{margin:-2px}.wrapper-1MlnSDA4.intent-default-1MlnSDA4 .shadow-1MlnSDA4{border-color:#d1d4dc}html.theme-dark .wrapper-1MlnSDA4.intent-default-1MlnSDA4 .shadow-1MlnSDA4{border-color:#50535e}.wrapper-1MlnSDA4.intent-success-1MlnSDA4,.wrapper-1MlnSDA4.intent-success-1MlnSDA4 .shadow-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-success-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-success-1MlnSDA4 .shadow-1MlnSDA4{border-color:#00897b}.wrapper-1MlnSDA4.intent-warning-1MlnSDA4,.wrapper-1MlnSDA4.intent-warning-1MlnSDA4 .shadow-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-warning-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-warning-1MlnSDA4 .shadow-1MlnSDA4{border-color:#ff9800}.wrapper-1MlnSDA4.intent-danger-1MlnSDA4{border-color:#f44336}html.theme-dark .wrapper-1MlnSDA4.intent-danger-1MlnSDA4{border-color:#d32f2f}.wrapper-1MlnSDA4.intent-danger-1MlnSDA4 .shadow-1MlnSDA4{border-color:#f44336}html.theme-dark .wrapper-1MlnSDA4.intent-danger-1MlnSDA4 .shadow-1MlnSDA4{border-color:#d32f2f}.wrapper-1MlnSDA4.intent-primary-1MlnSDA4,.wrapper-1MlnSDA4.intent-primary-1MlnSDA4 .shadow-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-primary-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-primary-1MlnSDA4 .shadow-1MlnSDA4{border-color:#2962ff}.wrapper-1MlnSDA4.corner-top-left-1MlnSDA4{border-top-left-radius:0}.wrapper-1MlnSDA4.corner-top-right-1MlnSDA4{border-top-right-radius:0}.wrapper-1MlnSDA4.corner-bottom-right-1MlnSDA4{border-bottom-right-radius:0}.wrapper-1MlnSDA4.corner-bottom-left-1MlnSDA4{border-bottom-left-radius:0}.shadow-1MlnSDA4{border:2px solid;border-radius:4px;bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.shadow-1MlnSDA4.corner-top-left-1MlnSDA4{border-top-left-radius:0}.shadow-1MlnSDA4.corner-top-right-1MlnSDA4{border-top-right-radius:0}.shadow-1MlnSDA4.corner-bottom-right-1MlnSDA4{border-bottom-right-radius:0}.shadow-1MlnSDA4.corner-bottom-left-1MlnSDA4{border-bottom-left-radius:0}.childrenContainer-1MlnSDA4.disabled-1MlnSDA4{opacity:.5}.desktopSize--UxMOnMB{width:355px}.drawer--UxMOnMB,.menuBox--UxMOnMB{padding:0}.wrapper-2F4fv0AC{align-items:center;display:flex}.checkbox-2F4fv0AC{margin-right:20px}.colorSelect-2F4fv0AC{margin-left:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/45.12a19785e3864bd62a76.rtl.css b/static/charting_library/bundles/45.12a19785e3864bd62a76.rtl.css new file mode 100644 index 0000000..d652cbe --- /dev/null +++ b/static/charting_library/bundles/45.12a19785e3864bd62a76.rtl.css @@ -0,0 +1 @@ +.itemWrap-3FEBD9eP{padding-right:0}.icon-3FEBD9eP,.item-3FEBD9eP{align-items:center;display:flex;justify-content:center}.icon-3FEBD9eP{height:28px;width:28px}.selected-3FEBD9eP{margin:0 -6px}.label-3FEBD9eP{padding-right:6px}.lineStyleSelect-3KjU7hI0{width:34px}.lineWidthSelect-3VlOWnM8{width:76px}.bar-3VlOWnM8{border:0 solid #131722;height:0;width:50px}html.theme-dark .bar-3VlOWnM8{border:0 solid #b2b5be}.bar-3VlOWnM8.isActive-3VlOWnM8,html.theme-dark .bar-3VlOWnM8.isActive-3VlOWnM8{border-top-color:#fff}.item-3VlOWnM8{align-items:center;display:flex;justify-content:center}.lineEndSelect-1x0HNmOc{width:34px}.right-1x0HNmOc{transform:scaleX(-1)}.row-NcPpqR9x{display:flex;margin-right:8px}.row-NcPpqR9x:first-child{margin-right:0}@media screen and (max-width:379px){.wrap-NcPpqR9x.breakpointNormal-NcPpqR9x{flex-flow:wrap}.wrap-NcPpqR9x.breakpointNormal-NcPpqR9x .row-NcPpqR9x{margin-right:0;margin-top:8px;width:100%}.wrap-NcPpqR9x.breakpointNormal-NcPpqR9x .row-NcPpqR9x:first-child{margin-top:0}}@media screen and (max-width:369px){.wrap-NcPpqR9x.breakpointMedium-NcPpqR9x{flex-flow:wrap}.wrap-NcPpqR9x.breakpointMedium-NcPpqR9x .row-NcPpqR9x{margin-right:0;margin-top:8px;width:100%}.wrap-NcPpqR9x.breakpointMedium-NcPpqR9x .row-NcPpqR9x:first-child{margin-top:0}}@media screen and (max-width:359px){.wrap-NcPpqR9x.breakpointSmall-NcPpqR9x{flex-flow:wrap}.wrap-NcPpqR9x.breakpointSmall-NcPpqR9x .row-NcPpqR9x{margin-right:0;margin-top:8px;width:100%}.wrap-NcPpqR9x.breakpointSmall-NcPpqR9x .row-NcPpqR9x:first-child{margin-top:0}}.line-2EFUN2WR .control-2EFUN2WR{margin-left:8px}.line-2EFUN2WR .control-2EFUN2WR:last-child{margin-left:0}.line-2EFUN2WR .valueInput-2EFUN2WR{align-items:center;display:flex;flex-direction:row;max-width:100px}.line-2EFUN2WR .valueInput-2EFUN2WR .valueUnit-2EFUN2WR{cursor:default;margin-right:9px}.line-2EFUN2WR .valueInput-2EFUN2WR .input-2EFUN2WR{flex:none;width:100px}.dropdown-Y-VtYUMO{width:150px}.dropdownMenu-Y-VtYUMO{min-width:150px}.firstColorPicker-Y-VtYUMO{margin-left:8px}.wrap-3yqu-5zT{width:148px}.wrap-3yqu-5zT.disabled-3yqu-5zT{opacity:.5}.twoColors-1b_W-OHw .colorPicker-1b_W-OHw{margin-left:8px}.unit-3YVf8t1O{cursor:default;margin-right:9px}.input-3YVf8t1O{width:100px}.input-3YVf8t1O.normal-3YVf8t1O{width:150px}.input-3YVf8t1O.big-3YVf8t1O{width:180px}@media screen and (max-width:$bigWidthBreakpoint){.input-3YVf8t1O.big-3YVf8t1O{width:150px}}.dropdown-3YVf8t1O{width:100px}.dropdownMenu-3YVf8t1O{min-width:100px}.defaultSelect-rvczD149{cursor:default;width:100px}.container-1zlYw2UK{align-items:center;border:1px solid #d1d4dc;border-radius:4px;box-sizing:border-box;color:#131722;display:flex;height:34px;justify-content:center;width:34px}html.theme-dark .container-1zlYw2UK{border:1px solid #50535e;color:#b2b5be}.container-1zlYw2UK.active-1zlYw2UK{background-color:#9598a1;border-color:#9598a1;color:#fff}html.theme-dark .container-1zlYw2UK.active-1zlYw2UK{background-color:#787b86;border-color:#787b86;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-1zlYw2UK.active-1zlYw2UK:hover{background-color:#787b86;border-color:#787b86;color:#fff}html.theme-dark .container-1zlYw2UK.active-1zlYw2UK:hover{background-color:#9598a1;border-color:#9598a1;color:#fff}}.container-1zlYw2UK.disabled-1zlYw2UK{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-1zlYw2UK.disabled-1zlYw2UK:hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be}}html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK{color:#5d606b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK:hover{color:#5d606b}}html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK:hover{border-color:#363a45}}html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK{background-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .container-1zlYw2UK.disabled-1zlYw2UK:hover{background-color:#363a45}.container-1zlYw2UK:hover{border-color:#787b86;color:#131722}html.theme-dark .container-1zlYw2UK:hover{border-color:#787b86;color:#b2b5be}}.icon-1zlYw2UK{display:flex}.textarea-container-1vKcpneM{font-size:16px;font-style:normal;font-weight:400;line-height:24px;resize:none}.textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8{border-color:var(--ui-lib-intent-color,#d1d4dc)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8:hover{border-color:var(--ui-lib-intent-color,#d1d4dc)}}html.theme-dark .textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8{border-color:var(--ui-lib-intent-color,#50535e)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .textarea-container-1vKcpneM.change-highlight-3ZF5dCHp.focused-tusi7NC8:hover{border-color:var(--ui-lib-intent-color,#50535e)}}.textarea-container-1vKcpneM.resize-vertical-1ddEqhTL{overflow:hidden;resize:vertical}.textarea-container-1vKcpneM.resize-horizontal-2_PnoCKN{overflow:hidden;resize:horizontal}.textarea-container-1vKcpneM.resize-both-3tZsc84l{overflow:hidden;resize:both}.textarea-387rVPmq{-webkit-text-fill-color:currentColor;-webkit-appearance:textfield;appearance:textfield;background-color:initial;border:0;box-sizing:border-box;display:block;font-family:inherit;font-size:inherit;height:100%;line-height:inherit;margin:0;min-width:0;order:0;outline:0;padding:2px 5px;resize:none;width:100%}.textarea-387rVPmq::placeholder{-webkit-text-fill-color:currentColor;color:#a3a6af;opacity:1}html.theme-dark .textarea-387rVPmq::placeholder{color:#434651}.textarea-387rVPmq::-webkit-calendar-picker-indicator,.textarea-387rVPmq::-webkit-clear-button,.textarea-387rVPmq::-webkit-inner-spin-button,.textarea-387rVPmq::-webkit-outer-spin-button,.textarea-387rVPmq::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.textarea-387rVPmq::-ms-clear,.textarea-387rVPmq::-ms-reveal{display:none}.textarea-387rVPmq:-webkit-autofill,.textarea-387rVPmq:-webkit-autofill:active,.textarea-387rVPmq:-webkit-autofill:focus{border-radius:3px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.textarea-387rVPmq:-webkit-autofill:hover{border-radius:3px}}html.theme-dark .textarea-387rVPmq::-webkit-calendar-picker-indicator{filter:invert(1)}.colorPicker-zLgQJ6Yh{margin-left:8px}.fontStyleButton-zLgQJ6Yh{margin-right:8px}.fontStyleButton-zLgQJ6Yh:first-child{margin-right:0}.dropdown-zLgQJ6Yh{width:100px}.dropdownMenu-zLgQJ6Yh{min-width:100px}.coordinates-28UK1YDt{align-items:center;display:flex;flex-direction:row}.input-28UK1YDt{margin-left:8px;width:100px}.input-28UK1YDt:last-child{margin-left:0}.dropdown-3Z3YBwWw{width:100px}.dropdown-3Z3YBwWw.normal-3Z3YBwWw{width:150px}.dropdown-3Z3YBwWw.big-3Z3YBwWw{width:180px}@media screen and (max-width:428px){.dropdown-3Z3YBwWw.big-3Z3YBwWw{width:150px}}.dropdownMenu-3Z3YBwWw{min-width:100px}.dropdownMenu-3Z3YBwWw.normal-3Z3YBwWw{min-width:150px}.dropdownMenu-3Z3YBwWw.big-3Z3YBwWw{min-width:180px}@media screen and (max-width:428px){.dropdownMenu-3Z3YBwWw.big-3Z3YBwWw{min-width:150px}}.range-31GwrUpb{align-items:center;display:flex;min-width:100px}.range-31GwrUpb.disabled-31GwrUpb{opacity:.5}.rangeSlider-31GwrUpb{background-color:#e0e3eb;border-radius:5px;flex:1 0 auto;height:10px;position:relative}html.theme-dark .rangeSlider-31GwrUpb{background-color:#434651}.rangeSliderMiddleWrap-31GwrUpb{height:100%;padding:0 6px}.rangeSliderMiddle-31GwrUpb{background-color:#2962ff;box-sizing:border-box;display:block;height:100%;position:relative;transition:right .1s,width .1s}html.theme-dark .rangeSliderMiddle-31GwrUpb{background-color:#2962ff}.rangeSliderMiddle-31GwrUpb.dragged-31GwrUpb{transition:right 0s,width 0s}.pointer-31GwrUpb{background-color:initial;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 2px #00000080;box-sizing:border-box;height:12px;margin:-1px 0 0;position:absolute;transition:right .1s,top .1s;width:12px}.pointer-31GwrUpb,html.theme-dark .pointer-31GwrUpb{background-color:#fff}html.theme-dark .pointer-31GwrUpb{border:2px solid #fff}.pointer-31GwrUpb.dragged-31GwrUpb{transition:right 0s}.rangePointerWrap-31GwrUpb{position:absolute;right:0;top:0;width:calc(100% - 12px)}.range-2PdPYA_J .valueInput-2PdPYA_J{align-items:center;display:flex;flex-direction:row}.range-2PdPYA_J .valueInput-2PdPYA_J .rangeSlider-2PdPYA_J{padding-right:9px}.range-2PdPYA_J .valueInput-2PdPYA_J .input-2PdPYA_J{flex:none;width:100px}.input-1y54fm74{width:100px}.control-1y54fm74{margin-left:8px}.control-1y54fm74:last-child{margin-left:0}.item-1y54fm74{display:flex;flex:none;margin-bottom:8px;margin-left:48px}.cell-1y54fm74{margin-left:-48px;max-width:460px}.fragmentCell-1y54fm74{flex-wrap:wrap;margin-bottom:-8px}.withTitle-1y54fm74{margin-left:25px}.title-1y54fm74{display:inline-block;width:35px}.dropdown-T1V4i3sE{width:100px}.menu-T1V4i3sE{min-width:100px}.wrapper-2ESZuAbX{align-items:center;border-radius:4px;color:#131722;display:flex;height:38px;justify-content:center;position:relative;width:38px}html.theme-dark .wrapper-2ESZuAbX{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-2ESZuAbX:hover{background-color:#f0f3fa}html.theme-dark .wrapper-2ESZuAbX:hover{background-color:#2a2e39}}.isActive-2ESZuAbX,html.theme-dark .isActive-2ESZuAbX{color:#2962ff}.isActive-2ESZuAbX:after{background-color:currentColor;content:"";height:4px;left:0;position:absolute;right:0;top:100%}.wrapper-30HPnwk9{border-bottom:1px solid #e0e3eb;display:flex;padding:6px 6px 4px}html.theme-dark .wrapper-30HPnwk9{border-bottom:1px solid #434651}.wrapper-1ecGiBuB{align-items:center;box-sizing:border-box;color:#787b86;display:flex;font-size:11px;height:100%;padding:6px 16px 0 6px;text-transform:uppercase}.wrapper-1-S6uQxU{align-items:center;border-radius:4px;display:flex;flex-shrink:0;justify-content:center}.emoji-1-S6uQxU{-webkit-touch-callout:none;display:block}.wrapper-2uFJv5Fz{align-items:center;display:flex;height:100%;overflow:hidden;padding:0 6px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.emojiItem-2uFJv5Fz:hover{background-color:#f0f3fa}html.theme-dark .emojiItem-2uFJv5Fz:hover{background-color:#2a2e39}}.list-tOao0Vo7{content-visibility:auto;overscroll-behavior:none;will-change:contents}@media (pointer:fine){.list-tOao0Vo7{-ms-overflow-style:none;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .list-tOao0Vo7{scrollbar-color:#363a45 #0000}.list-tOao0Vo7::-webkit-scrollbar{height:5px;width:5px}.list-tOao0Vo7::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .list-tOao0Vo7::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.list-tOao0Vo7::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.list-tOao0Vo7::-webkit-scrollbar-corner{display:none}}.wrapper-3G6q-JGM{background-color:#fff;border-radius:6px}html.theme-dark .wrapper-3G6q-JGM{background-color:#1e222d}.wrapper-1MlnSDA4{align-items:center;border-color:#d1d4dc;border-radius:4px;border-style:solid;box-sizing:border-box;display:inline-flex;margin:0;position:relative}html.theme-dark .wrapper-1MlnSDA4{border-color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-1MlnSDA4:hover{border-color:#a3a6af}html.theme-dark .wrapper-1MlnSDA4:hover{border-color:#6a6d78}}.wrapper-1MlnSDA4.focused-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.focused-1MlnSDA4{border-color:#2962ff}.wrapper-1MlnSDA4.readonly-1MlnSDA4{background-color:#f0f3fa;border-color:#d1d4dc}html.theme-dark .wrapper-1MlnSDA4.readonly-1MlnSDA4{background-color:#2a2e39;border-color:#50535e}.wrapper-1MlnSDA4.disabled-1MlnSDA4{background-color:#f0f3fa;border-color:#d1d4dc;color:#b2b5be}html.theme-dark .wrapper-1MlnSDA4.disabled-1MlnSDA4{background-color:#2a2e39;border-color:#50535e;color:#50535e}.wrapper-1MlnSDA4.size-small-1MlnSDA4{height:24px}.wrapper-1MlnSDA4.size-medium-1MlnSDA4{height:34px}.wrapper-1MlnSDA4.size-large-1MlnSDA4{height:48px}.wrapper-1MlnSDA4.font-size-medium-1MlnSDA4,.wrapper-1MlnSDA4.font-size-small-1MlnSDA4{font-size:14px;line-height:20px}.wrapper-1MlnSDA4.font-size-large-1MlnSDA4{font-size:16px;line-height:24px}.wrapper-1MlnSDA4.border-none-1MlnSDA4{border-width:0}.wrapper-1MlnSDA4.border-none-1MlnSDA4 .shadow-1MlnSDA4{margin:0}.wrapper-1MlnSDA4.border-thin-1MlnSDA4{border-width:1px}.wrapper-1MlnSDA4.border-thin-1MlnSDA4 .shadow-1MlnSDA4{margin:-1px}.wrapper-1MlnSDA4.border-thick-1MlnSDA4{border-width:2px}.wrapper-1MlnSDA4.border-thick-1MlnSDA4 .shadow-1MlnSDA4{margin:-2px}.wrapper-1MlnSDA4.intent-default-1MlnSDA4 .shadow-1MlnSDA4{border-color:#d1d4dc}html.theme-dark .wrapper-1MlnSDA4.intent-default-1MlnSDA4 .shadow-1MlnSDA4{border-color:#50535e}.wrapper-1MlnSDA4.intent-success-1MlnSDA4,.wrapper-1MlnSDA4.intent-success-1MlnSDA4 .shadow-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-success-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-success-1MlnSDA4 .shadow-1MlnSDA4{border-color:#00897b}.wrapper-1MlnSDA4.intent-warning-1MlnSDA4,.wrapper-1MlnSDA4.intent-warning-1MlnSDA4 .shadow-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-warning-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-warning-1MlnSDA4 .shadow-1MlnSDA4{border-color:#ff9800}.wrapper-1MlnSDA4.intent-danger-1MlnSDA4{border-color:#f44336}html.theme-dark .wrapper-1MlnSDA4.intent-danger-1MlnSDA4{border-color:#d32f2f}.wrapper-1MlnSDA4.intent-danger-1MlnSDA4 .shadow-1MlnSDA4{border-color:#f44336}html.theme-dark .wrapper-1MlnSDA4.intent-danger-1MlnSDA4 .shadow-1MlnSDA4{border-color:#d32f2f}.wrapper-1MlnSDA4.intent-primary-1MlnSDA4,.wrapper-1MlnSDA4.intent-primary-1MlnSDA4 .shadow-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-primary-1MlnSDA4,html.theme-dark .wrapper-1MlnSDA4.intent-primary-1MlnSDA4 .shadow-1MlnSDA4{border-color:#2962ff}.wrapper-1MlnSDA4.corner-top-left-1MlnSDA4{border-top-right-radius:0}.wrapper-1MlnSDA4.corner-top-right-1MlnSDA4{border-top-left-radius:0}.wrapper-1MlnSDA4.corner-bottom-right-1MlnSDA4{border-bottom-left-radius:0}.wrapper-1MlnSDA4.corner-bottom-left-1MlnSDA4{border-bottom-right-radius:0}.shadow-1MlnSDA4{border:2px solid;border-radius:4px;bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.shadow-1MlnSDA4.corner-top-left-1MlnSDA4{border-top-right-radius:0}.shadow-1MlnSDA4.corner-top-right-1MlnSDA4{border-top-left-radius:0}.shadow-1MlnSDA4.corner-bottom-right-1MlnSDA4{border-bottom-left-radius:0}.shadow-1MlnSDA4.corner-bottom-left-1MlnSDA4{border-bottom-right-radius:0}.childrenContainer-1MlnSDA4.disabled-1MlnSDA4{opacity:.5}.desktopSize--UxMOnMB{width:355px}.drawer--UxMOnMB,.menuBox--UxMOnMB{padding:0}.wrapper-2F4fv0AC{align-items:center;display:flex}.checkbox-2F4fv0AC{margin-left:20px}.colorSelect-2F4fv0AC{margin-right:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/45.db9dbd3e9bfeca5333da.js b/static/charting_library/bundles/45.db9dbd3e9bfeca5333da.js new file mode 100644 index 0000000..da06bc1 --- /dev/null +++ b/static/charting_library/bundles/45.db9dbd3e9bfeca5333da.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/46.f1d4cfe6d6f830b4a011.js b/static/charting_library/bundles/46.f1d4cfe6d6f830b4a011.js new file mode 100644 index 0000000..bb252b1 --- /dev/null +++ b/static/charting_library/bundles/46.f1d4cfe6d6f830b4a011.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{OL6p:function(e,t,n){e.exports={icon:"icon-26rGYU-z"}},qZIh:function(e,t,n){"use strict";var c=n("qFKp"),o=n("q1tI"),r=n.n(o),u=n("TSYQ"),l=n.n(u),a=n("Eyy1"),i=n("3F0O"),s=n("xADF"),f=n("wHCJ"),b=n("Iivm"),p=n("OL6p"),d=n("yd0C");function h(e){return o.createElement(b.a,{className:p.icon,icon:d})}var m=n("SpAO"),v=n("wnq4");var g=n("8Rai"),O=n("Hr11");const j={0:{pattern:/\d/},9:{pattern:/\d/,optional:!0},"#":{pattern:/\d/,recursive:!0},A:{pattern:/[a-zA-Z0-9]/},S:{pattern:/[a-zA-Z]/}};function E(e,t,n){const c=[],o=n;let r=0,u=0;const l=e.length,a=o.length;let i=-1,s=0;const f=[],b=l-1,p=[];let d;for(;r{const[n,c]=E(e,!1,t);i(n),m(c)},[t,e]),Object(o.useLayoutEffect)(()=>{const e=Object(a.ensureNotNull)(n.current);b&&(e.setSelectionRange(s,s),p(!1)),f(N(e))},[b]),[t,h,{onChange:function(){const t=Object(a.ensureNotNull)(n.current),c=t.value,[o,r]=E(e,!1,c);i(o),h.current=o;const u=m(r),b=function(e,t,n,c,o,r){if(e!==t){const u=t.length,l=e.length;let a=0,i=0,s=0,f=0,b=0;for(b=c;b=0&&o[b];b--)a++;for(b=c-1;b>=0;b--)o[b]&&s++;for(b=n-1;b>=0;b--)r[b]&&f++;if(c>l)c=10*u;else if(n>=c&&n!==l){if(r[c]){const e=c;c-=f-s,o[c-=a]&&(c=e)}}else c>n&&(c+=s-f,c+=i)}return c}(l,o,s,N(t),r,u);f(b),p(!0)},onSelect:function(){const e=Object(a.ensureNotNull)(n.current);f(N(e))},maxLength:c}];function m(e){const t=d.current;return d.current=e,t}}function N(e){return e.selectionStart||0}function C(e){const{value:t,mask:n,onChange:c,...u}=e,l=Object(o.useRef)(null),[a,i,s]=w(n,t,l);return Object(o.useLayoutEffect)(()=>{void 0!==e.reference&&(e.reference.current=l.current)},[e.reference]),r.a.createElement(f.a,{...u,maxLength:s.maxLength,value:a,autoComplete:"off",reference:function(e){l.current=e},onChange:function(){s.onChange(),c(i.current)},onSelect:s.onSelect})}var S=n("/3z9"),y=n("9dlw"),x=n("N5tr"),R=n("Y7w9");const k=(()=>{const e=[];for(let t=0;t<24;++t)for(let n=0;n<60;n+=15){const[c,o]=[I(t.toString()),I(n.toString())],r=`${c}:${o}`,u=B(r)?r:F(r);e.push(u)}return e})();function L(e){let t=!1 +;const n=Object(o.useRef)(null),u=Object(o.useRef)(null),i=Object(o.useRef)(null),f=Object(o.useRef)(null),[b,p]=Object(m.a)(),[d,v]=Object(o.useState)(e.value),j=A(d),E=B(j)?j:F(j),[w,N]=Object(o.useState)(E),L=b||T().some(e=>null!==e&&e.contains(document.activeElement));Object(o.useLayoutEffect)(()=>v(e.value),[e.value]),Object(o.useLayoutEffect)(()=>N(E),[d,L]),Object(o.useEffect)(()=>V(w===E?"auto":"smooth"),[w]);const I=Object(R.lowerbound)(k,E,(e,t)=>ec&&o>t){const n=Object(O.clamp)(o,0,c),u=Object(O.clamp)(o,0,t);o=Math.max(n,u),r=n>u?e.top-n:e.bottom}else o>t&&(r=e.top-o);return{x:e.left,y:r,overrideWidth:e.width,overrideHeight:o}},closeOnClickOutside:!1,isOpened:L,tabIndex:-1,reference:i},D.map(e=>r.a.createElement(x.b,{key:e,label:e,isActive:e===E,isHovered:e===w,reference:e===w?$:void 0,onClick:M,onClickArg:e}))));function z(n){const c=A(n),o=B(c)?c:F(c);v(o),t||(t=!0,e.onChange(o))}function $(e){f.current=e}function M(e){if(z(Object(a.ensureDefined)(e)),c.isIE){const e=window.document.activeElement;e instanceof Node&&HTMLElement.prototype.blur.call(e)}else Object(a.ensureNotNull)(i.current).blur()}function q(e){return b&&(null!==J(document.activeElement)||null!==J(e.relatedTarget))}function J(e){return e instanceof Node&&T().find(t=>null!==t&&t.contains(e))||null}function T(){return[i.current,u.current]}function V(e="auto"){if(null!==f.current){const t=Object(a.ensureNotNull)(i.current).getBoundingClientRect(),n=f.current.getBoundingClientRect();(t.top>n.top||t.bottom{p.current&&c&&(p.current.defaultValue=c)},[]),Object(o.useLayoutEffect)(()=>{p.current&&c&&(p.current.value=c)},[c]),r.a.createElement("div",{className:l()(v.wrap,u)},r.a.createElement(f.a,{...b,type:"text",endSlot:r.a.createElement(s.b,{icon:!0},r.a.createElement(h,null)),value:c,highlight:d,intent:d?"primary":void 0,onFocus:function(e){Object(a.ensureNotNull)(p.current).focus(),n&&n(e)},onChange:function(){}}),r.a.createElement("input",{...g,disabled:e.disabled,className:v.input,type:"time",onBlur:O,onChange:function(e){const{value:n}=e.currentTarget;t&&n&&t(n)},ref:p}))}:L},wnq4:function(e,t,n){e.exports={wrap:"wrap-3JkbcgoB",input:"input-3JkbcgoB"}},yd0C:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/47.a3da3f774c90bd22798e.js b/static/charting_library/bundles/47.a3da3f774c90bd22798e.js new file mode 100644 index 0000000..8006fa3 --- /dev/null +++ b/static/charting_library/bundles/47.a3da3f774c90bd22798e.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{"/MKj":function(e,t,n){"use strict";var r=n("q1tI"),o=n.n(r),u=(n("17x9"),o.a.createContext(null));var a=function(e){e()},i={notify:function(){}};function s(){var e=a,t=null,n=null;return{clear:function(){t=null,n=null},notify:function(){e((function(){for(var e=t;e;)e.callback(),e=e.next}))},get:function(){for(var e=[],n=t;n;)e.push(n),n=n.next;return e},subscribe:function(e){var r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}var c=function(){function e(e,t){this.store=e,this.parentSub=t,this.unsubscribe=null,this.listeners=i,this.handleChangeWrapper=this.handleChangeWrapper.bind(this)}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.handleChangeWrapper=function(){this.onStateChange&&this.onStateChange()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.handleChangeWrapper):this.store.subscribe(this.handleChangeWrapper),this.listeners=s())},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=i)},e}();var p=function(e){var t=e.store,n=e.context,a=e.children,i=Object(r.useMemo)((function(){var e=new c(t);return e.onStateChange=e.notifyNestedSubs,{store:t,subscription:e}}),[t]),s=Object(r.useMemo)((function(){return t.getState()}),[t]);Object(r.useEffect)((function(){var e=i.subscription;return e.trySubscribe(),s!==t.getState()&&e.notifyNestedSubs(),function(){e.tryUnsubscribe(),e.onStateChange=null}}),[i,s]);var p=n||u;return o.a.createElement(p.Provider,{value:i},a)},f=n("wx14"),d=n("zLVn"),l=n("2mql"),v=n.n(l),b=n("0vxD"),h="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?r.useLayoutEffect:r.useEffect,m=[],y=[null,null];function O(e,t){var n=e[1];return[t.payload,n+1]}function P(e,t,n){h((function(){return e.apply(void 0,t)}),n)}function g(e,t,n,r,o,u,a){e.current=r,t.current=o,n.current=!1,u.current&&(u.current=null,a())}function w(e,t,n,r,o,u,a,i,s,c){if(e){var p=!1,f=null,d=function(){if(!p){var e,n,d=t.getState();try{e=r(d,o.current)}catch(e){n=e,f=e}n||(f=null),e===u.current?a.current||s():(u.current=e,i.current=e,a.current=!0,c({type:"STORE_UPDATED",payload:{error:n}}))}};n.onStateChange=d,n.trySubscribe(),d();return function(){if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,f)throw f}}}var S=function(){return[null,0]};function j(e,t){void 0===t&&(t={});var n=t,a=n.getDisplayName,i=void 0===a?function(e){return"ConnectAdvanced("+e+")"}:a,s=n.methodName,p=void 0===s?"connectAdvanced":s,l=n.renderCountProp,h=void 0===l?void 0:l,j=n.shouldHandleStateChanges,C=void 0===j||j,E=n.storeKey,N=void 0===E?"store":E,M=(n.withRef, +n.forwardRef),x=void 0!==M&&M,T=n.context,q=void 0===T?u:T,D=Object(d.a)(n,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]),R=q;return function(t){var n=t.displayName||t.name||"Component",u=i(n),a=Object(f.a)({},D,{getDisplayName:i,methodName:p,renderCountProp:h,shouldHandleStateChanges:C,storeKey:N,displayName:u,wrappedComponentName:n,WrappedComponent:t}),s=D.pure;var l=s?r.useMemo:function(e){return e()};function j(n){var u=Object(r.useMemo)((function(){var e=n.forwardedRef,t=Object(d.a)(n,["forwardedRef"]);return[n.context,e,t]}),[n]),i=u[0],s=u[1],p=u[2],v=Object(r.useMemo)((function(){return i&&i.Consumer&&Object(b.isContextConsumer)(o.a.createElement(i.Consumer,null))?i:R}),[i,R]),h=Object(r.useContext)(v),j=Boolean(n.store)&&Boolean(n.store.getState)&&Boolean(n.store.dispatch);Boolean(h)&&Boolean(h.store);var E=j?n.store:h.store,N=Object(r.useMemo)((function(){return function(t){return e(t.dispatch,a)}(E)}),[E]),M=Object(r.useMemo)((function(){if(!C)return y;var e=new c(E,j?null:h.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[E,j,h]),x=M[0],T=M[1],q=Object(r.useMemo)((function(){return j?h:Object(f.a)({},h,{subscription:x})}),[j,h,x]),D=Object(r.useReducer)(O,m,S),B=D[0][0],W=D[1];if(B&&B.error)throw B.error;var F=Object(r.useRef)(),k=Object(r.useRef)(p),H=Object(r.useRef)(),$=Object(r.useRef)(!1),U=l((function(){return H.current&&p===k.current?H.current:N(E.getState(),p)}),[E,B,p]);P(g,[k,F,$,p,U,H,T]),P(w,[C,E,x,N,k,F,$,H,T,W],[E,x,N]);var A=Object(r.useMemo)((function(){return o.a.createElement(t,Object(f.a)({},U,{ref:s}))}),[s,t,U]);return Object(r.useMemo)((function(){return C?o.a.createElement(v.Provider,{value:q},A):A}),[v,A,q])}var E=s?o.a.memo(j):j;if(E.WrappedComponent=t,E.displayName=u,x){var M=o.a.forwardRef((function(e,t){return o.a.createElement(E,Object(f.a)({},e,{forwardedRef:t}))}));return M.displayName=u,M.WrappedComponent=t,v()(M,t)}return v()(E,t)}}function C(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function E(e,t){if(C(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function $(e,t){return e===t}function U(e){var t=void 0===e?{}:e,n=t.connectHOC,r=void 0===n?j:n,o=t.mapStateToPropsFactories,u=void 0===o?D:o,a=t.mapDispatchToPropsFactories,i=void 0===a?q:a,s=t.mergePropsFactories,c=void 0===s?B:s,p=t.selectorFactory,l=void 0===p?k:p;return function(e,t,n,o){void 0===o&&(o={});var a=o,s=a.pure,p=void 0===s||s,v=a.areStatesEqual,b=void 0===v?$:v,h=a.areOwnPropsEqual,m=void 0===h?E:h,y=a.areStatePropsEqual,O=void 0===y?E:y,P=a.areMergedPropsEqual,g=void 0===P?E:P,w=Object(d.a)(a,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),S=H(e,u,"mapStateToProps"),j=H(t,i,"mapDispatchToProps"),C=H(n,c,"mergeProps");return r(l,Object(f.a)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:S,initMapDispatchToProps:j,initMergeProps:C,pure:p,areStatesEqual:b,areOwnPropsEqual:m,areStatePropsEqual:O,areMergedPropsEqual:g},w))}}var A=U();var K,I=n("i8i4");n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return A})),K=I.unstable_batchedUpdates,a=K},"2mql":function(e,t,n){"use strict";var r=n("r36Y"),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},u={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function s(e){return r.isMemo(e)?a:i[e.$$typeof]||o}i[r.ForwardRef]={$$typeof:!0, +render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=a;var c=Object.defineProperty,p=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,l=Object.getPrototypeOf,v=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(v){var o=l(n);o&&o!==v&&e(t,o,r)}var a=p(n);f&&(a=a.concat(f(n)));for(var i=s(t),b=s(n),h=0;h{this.forceUpdate()},this.state={query:window.matchMedia(this.props.rule)}}componentDidMount(){this._subscribe(this.state.query)}componentDidUpdate(e,t){this.state.query!==t.query&&(this._unsubscribe(t.query),this._subscribe(this.state.query))}componentWillUnmount(){this._unsubscribe(this.state.query)}render(){return this.props.children(this.state.query.matches)}static getDerivedStateFromProps(e,t){return e.rule!==t.query.media?{query:window.matchMedia(e.rule)}:null}_subscribe(e){e.addListener(this._handleChange)}_unsubscribe(e){e.removeListener(this._handleChange)}}},"6uNr":function(e,t,n){e.exports={menuWrap:"menuWrap-g78rwseC",isMeasuring:"isMeasuring-g78rwseC",scrollWrap:"scrollWrap-g78rwseC",momentumBased:"momentumBased-g78rwseC",menuBox:"menuBox-g78rwseC",isHidden:"isHidden-g78rwseC"}},DTHj:function(e,t,n){"use strict";n.d(t,"a",(function(){return b})),n.d(t,"b",(function(){return g}));var r=n("q1tI"),s=n.n(r),i=n("TSYQ"),o=n.n(i),a=n("Eyy1"),l=n("Hr11"),u=n("XAms"),c=n("+EG+"),h=n("tWVy"),d=n("jAh7"),p=n("lxNp"),m=n("dxYz"),f=n("PN6A"),_=n("6uNr");const b=_;class g extends s.a.PureComponent{constructor(e){super(e),this._containerRef=null,this._scrollWrapRef=null,this._raf=null,this._manager=new d.a,this._hotkeys=null,this._scroll=0,this._handleContainerRef=e=>{this._containerRef=e,this.props.reference&&("function"==typeof this.props.reference&&this.props.reference(e),"object"==typeof this.props.reference&&(this.props.reference.current=e))},this._handleScrollWrapRef=e=>{this._scrollWrapRef=e,"function"==typeof this.props.scrollWrapReference&&this.props.scrollWrapReference(e),"object"==typeof this.props.scrollWrapReference&&(this.props.scrollWrapReference.current=e)},this._handleMeasure=e=>{if(this.state.isMeasureValid)return;const{position:t}=this.props,n=Object(a.ensureNotNull)(this._containerRef);let r=n.getBoundingClientRect();const s=document.documentElement.clientHeight,i=document.documentElement.clientWidth;let o=s-0;const u=r.height>o;if(u){Object(a.ensureNotNull)(this._scrollWrapRef).style.overflowY="scroll",r=n.getBoundingClientRect()}const{width:c,height:h}=r,d="function"==typeof t?t(c,h):t,p=i-(d.overrideWidth||c)-0,m=Object(l.clamp)(d.x,0,Math.max(0,p)),f=s-(d.overrideHeight||h)-0;let _=Object(l.clamp)(d.y,0,Math.max(0,f));d.forbidCorrectYCoord&&_{this._restoreScrollPosition(),e&&e()})},this._restoreScrollPosition=()=>{const e=document.activeElement,t=Object(a.ensureNotNull)(this._containerRef);if(null!==e&&t.contains(e))try{e.scrollIntoView()}catch(e){}else Object(a.ensureNotNull)(this._scrollWrapRef).scrollTop=this._scroll},this._resize=()=>{null===this._raf&&(this._raf=requestAnimationFrame(()=>{ +this.setState({appearingMenuHeight:void 0,appearingMenuWidth:void 0,appearingPosition:void 0,isMeasureValid:void 0}),this._raf=null}))},this._handleGlobalClose=()=>{this.props.onClose()},this._handleSlot=e=>{this._manager.setContainer(e)},this._handleScroll=()=>{this._scroll=Object(a.ensureNotNull)(this._scrollWrapRef).scrollTop},this.state={}}componentDidMount(){this._handleMeasure(this.props.onOpen);const{customCloseDelegate:e=h.a}=this.props;e.subscribe(this,this._handleGlobalClose),window.addEventListener("resize",this._resize);const t=null!==this.context;this._hotkeys||t||(this._hotkeys=p.createGroup({desc:"Popup menu"}),this._hotkeys.add({desc:"Close",hotkey:27,handler:()=>this._handleGlobalClose()}))}componentDidUpdate(){this._handleMeasure()}componentWillUnmount(){const{customCloseDelegate:e=h.a}=this.props;e.unsubscribe(this,this._handleGlobalClose),window.removeEventListener("resize",this._resize),this._hotkeys&&(this._hotkeys.destroy(),this._hotkeys=null),null!==this._raf&&(cancelAnimationFrame(this._raf),this._raf=null)}render(){const{id:e,role:t,"aria-labelledby":n,"aria-activedescendant":r,children:i,minWidth:a,theme:l=_,className:h,maxHeight:d,onMouseOver:p,onMouseOut:b,onKeyDown:g,onFocus:v,onBlur:C}=this.props,{appearingMenuHeight:M,appearingMenuWidth:w,appearingPosition:W,isMeasureValid:x}=this.state;return s.a.createElement(f.a.Provider,{value:this},s.a.createElement(m.b,null,s.a.createElement(c.b.Provider,{value:this._manager},s.a.createElement("div",{id:e,role:t,"aria-labelledby":n,"aria-activedescendant":r,className:o()(h,l.menuWrap,!x&&l.isMeasuring),style:{height:M,left:W&&W.x,minWidth:a,position:"fixed",top:W&&W.y,width:w},"data-name":this.props["data-name"],ref:this._handleContainerRef,onScrollCapture:this.props.onScroll,onContextMenu:u.b,tabIndex:this.props.tabIndex,onMouseOver:p,onMouseOut:b,onKeyDown:g,onFocus:v,onBlur:C},s.a.createElement("div",{className:o()(l.scrollWrap,!this.props.noMomentumBasedScroll&&l.momentumBased),style:{overflowY:void 0!==M?"scroll":"auto",maxHeight:d},onScrollCapture:this._handleScroll,ref:this._handleScrollWrapRef},s.a.createElement(y,{className:l.menuBox},i)))),s.a.createElement(c.a,{reference:this._handleSlot})))}update(){this._resize()}}function y(e){const t=Object(a.ensureNotNull)(Object(r.useContext)(m.a)),n=s.a.useRef(null);return s.a.createElement("div",{ref:n,className:e.className,onMouseOver:function(e){if(!(null!==t.current&&e.target instanceof Node&&(r=e.target,null===(s=n.current)||void 0===s?void 0:s.contains(r))))return;var r,s;t.isSubmenuNode(e.target)||t.setCurrent(null)},"data-name":"menu-inner"},e.children)}g.contextType=m.a},PN6A:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var r=n("q1tI");const s=n.n(r).a.createContext(null)},X0gx:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n("q1tI"),s=n.n(r),i=n("tWVy");const o=s.a.createContext(i.a)},dxYz:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return o}));var r=n("q1tI"),s=n.n(r);const i=s.a.createContext(null) +;function o(e){const[t,n]=Object(r.useState)(null),o=Object(r.useRef)(null),a=Object(r.useRef)(new Map);return Object(r.useEffect)(()=>()=>{null!==o.current&&clearTimeout(o.current)},[]),s.a.createElement(i.Provider,{value:{current:t,setCurrent:function(e){null!==o.current&&(clearTimeout(o.current),o.current=null);null===t?n(e):o.current=setTimeout(()=>{o.current=null,n(e)},100)},registerSubmenu:function(e,t){return a.current.set(e,t),()=>{a.current.delete(e)}},isSubmenuNode:function(e){return Array.from(a.current.values()).some(t=>t(e))}}},e.children)}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/50.8d5cba5b90176d3d2e3d.css b/static/charting_library/bundles/50.8d5cba5b90176d3d2e3d.css new file mode 100644 index 0000000..5278bec --- /dev/null +++ b/static/charting_library/bundles/50.8d5cba5b90176d3d2e3d.css @@ -0,0 +1 @@ +.icon-26rGYU-z{display:flex}.wrap-3JkbcgoB{position:relative}.input-3JkbcgoB{bottom:0;left:0;margin:0;max-width:100%;min-width:100%;opacity:0;position:absolute;top:0} \ No newline at end of file diff --git a/static/charting_library/bundles/50.8d5cba5b90176d3d2e3d.rtl.css b/static/charting_library/bundles/50.8d5cba5b90176d3d2e3d.rtl.css new file mode 100644 index 0000000..4eefbdf --- /dev/null +++ b/static/charting_library/bundles/50.8d5cba5b90176d3d2e3d.rtl.css @@ -0,0 +1 @@ +.icon-26rGYU-z{display:flex}.wrap-3JkbcgoB{position:relative}.input-3JkbcgoB{bottom:0;margin:0;max-width:100%;min-width:100%;opacity:0;position:absolute;right:0;top:0} \ No newline at end of file diff --git a/static/charting_library/bundles/50.b282667dddcb7fe1569a.js b/static/charting_library/bundles/50.b282667dddcb7fe1569a.js new file mode 100644 index 0000000..ffbc122 --- /dev/null +++ b/static/charting_library/bundles/50.b282667dddcb7fe1569a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/51.11871c50951db825ace3.js b/static/charting_library/bundles/51.11871c50951db825ace3.js new file mode 100644 index 0000000..084bc47 --- /dev/null +++ b/static/charting_library/bundles/51.11871c50951db825ace3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/51.300c3df03ca063ec03a0.css b/static/charting_library/bundles/51.300c3df03ca063ec03a0.css new file mode 100644 index 0000000..cde5682 --- /dev/null +++ b/static/charting_library/bundles/51.300c3df03ca063ec03a0.css @@ -0,0 +1 @@ +.button-2YcRd2gv{padding:0 5px} \ No newline at end of file diff --git a/static/charting_library/bundles/51.300c3df03ca063ec03a0.rtl.css b/static/charting_library/bundles/51.300c3df03ca063ec03a0.rtl.css new file mode 100644 index 0000000..cde5682 --- /dev/null +++ b/static/charting_library/bundles/51.300c3df03ca063ec03a0.rtl.css @@ -0,0 +1 @@ +.button-2YcRd2gv{padding:0 5px} \ No newline at end of file diff --git a/static/charting_library/bundles/52.0379a85baae3ab43b15c.js b/static/charting_library/bundles/52.0379a85baae3ab43b15c.js new file mode 100644 index 0000000..5ad3ee9 --- /dev/null +++ b/static/charting_library/bundles/52.0379a85baae3ab43b15c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/52.29cec22b3525b47af67e.css b/static/charting_library/bundles/52.29cec22b3525b47af67e.css new file mode 100644 index 0000000..645ce86 --- /dev/null +++ b/static/charting_library/bundles/52.29cec22b3525b47af67e.css @@ -0,0 +1 @@ +.spinnerWrap-1dkAsm33{height:68px;position:relative} \ No newline at end of file diff --git a/static/charting_library/bundles/52.29cec22b3525b47af67e.rtl.css b/static/charting_library/bundles/52.29cec22b3525b47af67e.rtl.css new file mode 100644 index 0000000..645ce86 --- /dev/null +++ b/static/charting_library/bundles/52.29cec22b3525b47af67e.rtl.css @@ -0,0 +1 @@ +.spinnerWrap-1dkAsm33{height:68px;position:relative} \ No newline at end of file diff --git a/static/charting_library/bundles/53.1d3ec98cfb8e19affb1c.js b/static/charting_library/bundles/53.1d3ec98cfb8e19affb1c.js new file mode 100644 index 0000000..2366a9a --- /dev/null +++ b/static/charting_library/bundles/53.1d3ec98cfb8e19affb1c.js @@ -0,0 +1,12 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{"2dtg":function(o,e){o.exports=''},"2lje":function(o,e){o.exports=''},"3s8f":function(o,e){o.exports=''},"3zTq":function(o,e){ +o.exports=''},"43BO":function(o,e){o.exports=''},"4rU7":function(o,e,l){"use strict";l.d(e,"a",(function(){return s}));var i=l("q1tI"),n=l("TSYQ"),a=l("Iivm"),t=l("ijHL"),c=l("gb5g");function s(o){const{id:e,activeClass:l,children:s,className:r,icon:T,isActive:d,isGrayed:L,isHidden:h,isTransparent:m,theme:z=c,onClick:v,title:g,buttonHotKey:w,tooltipPosition:N="vertical"}=o;return i.createElement("div",{id:e,className:n(z.button,r,d&&l,{"apply-common-tooltip":Boolean(g),"common-tooltip-vertical":Boolean(g)&&"vertical"===N,[z.isActive]:d,[z.isGrayed]:L,[z.isHidden]:h,[z.isTransparent]:m}),onClick:v,title:g,"data-role":"button","data-tooltip-hotkey":w,...Object(t.b)(o)},i.createElement("div",{className:z.bg},T&&("string"==typeof T?i.createElement(a.a,{className:z.icon,icon:T}):i.createElement("span",{className:z.icon},T)),s))}},"6oLA":function(o,e){ +o.exports=''},ASyk:function(o,e,l){o.exports={"tablet-normal-breakpoint":"screen and (max-width: 768px)","small-height-breakpoint":"screen and (max-height: 360px)","tablet-small-breakpoint":"screen and (max-width: 428px)"}},Csdk:function(o,e){o.exports=''},Ex32:function(o,e){o.exports=''},FS6t:function(o,e){ +o.exports=''},FVBd:function(o,e){o.exports=''},G1jy:function(o,e){o.exports=''},Ijvb:function(o,e,l){ +"use strict";l.d(e,"a",(function(){return i}));const i={SyncDrawing:l("G1jy"),arrow:l("tceb"),cursor:l("WHEt"),dot:l("Csdk"),drawginmode:l("2dtg"),drawginmodeActive:l("FVBd"),eraser:l("2lje"),group:l("lZXH"),hideAllDrawings:l("6oLA"),hideAllDrawingsActive:l("dmHa"),hideAllIndicators:l("Ex32"),hideAllIndicatorsActive:l("3zTq"),hideAllDrawingTools:l("FS6t"),hideAllDrawingToolsActive:l("VToE"),lockAllDrawings:l("Uh5y"),lockAllDrawingsActive:l("43BO"),magnet:l("3s8f"),strongMagnet:l("xjKU"),measure:l("oCKS"),removeAllDrawingTools:l("aVjL"),showObjectTree:l("qQ3E"),zoom:l("kmdM"),"zoom-out":l("mbEK")}},"MP+M":function(o,e,l){"use strict";l.d(e,"a",(function(){return L}));var i=l("YFKU"),n=l("+GxX"),a=l("/DW5"),t=(l("HbRj"),l("zxD0")),c=l("Ijvb"),s=l("0qMc");const r={keys:["Shift"],text:Object(i.t)("{hotKey_0} — drawing a straight line at angles of 45")},T={keys:["Shift"],text:Object(i.t)("{hotKey_0} — circle")},d={keys:["Shift"],text:Object(i.t)("{hotKey_0} — square")},L={LineTool5PointsPattern:{icon:t.lineToolsIcons.LineTool5PointsPattern,localizedName:s.lineToolsLocalizedNames.LineTool5PointsPattern},LineToolABCD:{icon:t.lineToolsIcons.LineToolABCD,localizedName:s.lineToolsLocalizedNames.LineToolABCD},LineToolArc:{icon:t.lineToolsIcons.LineToolArc,localizedName:s.lineToolsLocalizedNames.LineToolArc},LineToolArrow:{icon:t.lineToolsIcons.LineToolArrow,localizedName:s.lineToolsLocalizedNames.LineToolArrow},LineToolArrowMarkDown:{icon:t.lineToolsIcons.LineToolArrowMarkDown,localizedName:s.lineToolsLocalizedNames.LineToolArrowMarkDown},LineToolArrowMarkLeft:{icon:t.lineToolsIcons.LineToolArrowMarkLeft,localizedName:s.lineToolsLocalizedNames.LineToolArrowMarkLeft},LineToolArrowMarkRight:{icon:t.lineToolsIcons.LineToolArrowMarkRight,localizedName:s.lineToolsLocalizedNames.LineToolArrowMarkRight},LineToolArrowMarkUp:{icon:t.lineToolsIcons.LineToolArrowMarkUp,localizedName:s.lineToolsLocalizedNames.LineToolArrowMarkUp},LineToolBalloon:{icon:t.lineToolsIcons.LineToolBalloon,localizedName:s.lineToolsLocalizedNames.LineToolBalloon},LineToolBarsPattern:{icon:t.lineToolsIcons.LineToolBarsPattern,localizedName:s.lineToolsLocalizedNames.LineToolBarsPattern},LineToolBezierCubic:{icon:t.lineToolsIcons.LineToolBezierCubic,localizedName:s.lineToolsLocalizedNames.LineToolBezierCubic},LineToolBezierQuadro:{icon:t.lineToolsIcons.LineToolBezierQuadro,localizedName:s.lineToolsLocalizedNames.LineToolBezierQuadro},LineToolBrush:{icon:t.lineToolsIcons.LineToolBrush,localizedName:s.lineToolsLocalizedNames.LineToolBrush},LineToolCallout:{icon:t.lineToolsIcons.LineToolCallout,localizedName:s.lineToolsLocalizedNames.LineToolCallout},LineToolCircleLines:{icon:t.lineToolsIcons.LineToolCircleLines,localizedName:s.lineToolsLocalizedNames.LineToolCircleLines},LineToolCypherPattern:{icon:t.lineToolsIcons.LineToolCypherPattern,localizedName:s.lineToolsLocalizedNames.LineToolCypherPattern},LineToolDateAndPriceRange:{icon:t.lineToolsIcons.LineToolDateAndPriceRange,localizedName:s.lineToolsLocalizedNames.LineToolDateAndPriceRange},LineToolDateRange:{ +icon:t.lineToolsIcons.LineToolDateRange,localizedName:s.lineToolsLocalizedNames.LineToolDateRange},LineToolDisjointAngle:{icon:t.lineToolsIcons.LineToolDisjointAngle,localizedName:s.lineToolsLocalizedNames.LineToolDisjointAngle,hotKey:Object(a.b)(r)},LineToolElliottCorrection:{icon:t.lineToolsIcons.LineToolElliottCorrection,localizedName:s.lineToolsLocalizedNames.LineToolElliottCorrection},LineToolElliottDoubleCombo:{icon:t.lineToolsIcons.LineToolElliottDoubleCombo,localizedName:s.lineToolsLocalizedNames.LineToolElliottDoubleCombo},LineToolElliottImpulse:{icon:t.lineToolsIcons.LineToolElliottImpulse,localizedName:s.lineToolsLocalizedNames.LineToolElliottImpulse},LineToolElliottTriangle:{icon:t.lineToolsIcons.LineToolElliottTriangle,localizedName:s.lineToolsLocalizedNames.LineToolElliottTriangle},LineToolElliottTripleCombo:{icon:t.lineToolsIcons.LineToolElliottTripleCombo,localizedName:s.lineToolsLocalizedNames.LineToolElliottTripleCombo},LineToolEllipse:{icon:t.lineToolsIcons.LineToolEllipse,localizedName:s.lineToolsLocalizedNames.LineToolEllipse,hotKey:Object(a.b)(T)},LineToolExtended:{icon:t.lineToolsIcons.LineToolExtended,localizedName:s.lineToolsLocalizedNames.LineToolExtended},LineToolFibChannel:{icon:t.lineToolsIcons.LineToolFibChannel,localizedName:s.lineToolsLocalizedNames.LineToolFibChannel},LineToolFibCircles:{icon:t.lineToolsIcons.LineToolFibCircles,localizedName:s.lineToolsLocalizedNames.LineToolFibCircles,hotKey:Object(a.b)(T)},LineToolFibRetracement:{icon:t.lineToolsIcons.LineToolFibRetracement,localizedName:s.lineToolsLocalizedNames.LineToolFibRetracement},LineToolFibSpeedResistanceArcs:{icon:t.lineToolsIcons.LineToolFibSpeedResistanceArcs,localizedName:s.lineToolsLocalizedNames.LineToolFibSpeedResistanceArcs},LineToolFibSpeedResistanceFan:{icon:t.lineToolsIcons.LineToolFibSpeedResistanceFan,localizedName:s.lineToolsLocalizedNames.LineToolFibSpeedResistanceFan,hotKey:Object(a.b)(d)},LineToolFibSpiral:{icon:t.lineToolsIcons.LineToolFibSpiral,localizedName:s.lineToolsLocalizedNames.LineToolFibSpiral},LineToolFibTimeZone:{icon:t.lineToolsIcons.LineToolFibTimeZone,localizedName:s.lineToolsLocalizedNames.LineToolFibTimeZone},LineToolFibWedge:{icon:t.lineToolsIcons.LineToolFibWedge,localizedName:s.lineToolsLocalizedNames.LineToolFibWedge},LineToolFlagMark:{icon:t.lineToolsIcons.LineToolFlagMark,localizedName:s.lineToolsLocalizedNames.LineToolFlagMark},LineToolImage:{icon:t.lineToolsIcons.LineToolImage,localizedName:s.lineToolsLocalizedNames.LineToolImage},LineToolFlatBottom:{icon:t.lineToolsIcons.LineToolFlatBottom,localizedName:s.lineToolsLocalizedNames.LineToolFlatBottom,hotKey:Object(a.b)(r)},LineToolAnchoredVWAP:{icon:t.lineToolsIcons.LineToolAnchoredVWAP,localizedName:s.lineToolsLocalizedNames.LineToolAnchoredVWAP},LineToolGannComplex:{icon:t.lineToolsIcons.LineToolGannComplex,localizedName:s.lineToolsLocalizedNames.LineToolGannComplex},LineToolGannFixed:{icon:t.lineToolsIcons.LineToolGannFixed,localizedName:s.lineToolsLocalizedNames.LineToolGannFixed},LineToolGannFan:{ +icon:t.lineToolsIcons.LineToolGannFan,localizedName:s.lineToolsLocalizedNames.LineToolGannFan},LineToolGannSquare:{icon:t.lineToolsIcons.LineToolGannSquare,localizedName:s.lineToolsLocalizedNames.LineToolGannSquare,hotKey:Object(a.b)({keys:["Shift"],text:Object(i.t)("{hotKey_0} — fixed increments")})},LineToolHeadAndShoulders:{icon:t.lineToolsIcons.LineToolHeadAndShoulders,localizedName:s.lineToolsLocalizedNames.LineToolHeadAndShoulders},LineToolHorzLine:{icon:t.lineToolsIcons.LineToolHorzLine,localizedName:s.lineToolsLocalizedNames.LineToolHorzLine,hotKey:Object(a.b)({keys:["Alt","H"],text:"{0} + {1}"})},LineToolHorzRay:{icon:t.lineToolsIcons.LineToolHorzRay,localizedName:s.lineToolsLocalizedNames.LineToolHorzRay},LineToolIcon:{icon:t.lineToolsIcons.LineToolIcon,localizedName:s.lineToolsLocalizedNames.LineToolIcon},LineToolInsidePitchfork:{icon:t.lineToolsIcons.LineToolInsidePitchfork,localizedName:s.lineToolsLocalizedNames.LineToolInsidePitchfork},LineToolNote:{icon:t.lineToolsIcons.LineToolNote,localizedName:s.lineToolsLocalizedNames.LineToolNote},LineToolNoteAbsolute:{icon:t.lineToolsIcons.LineToolNoteAbsolute,localizedName:s.lineToolsLocalizedNames.LineToolNoteAbsolute},LineToolSignpost:{icon:t.lineToolsIcons.LineToolSignpost,localizedName:s.lineToolsLocalizedNames.LineToolSignpost},LineToolParallelChannel:{icon:t.lineToolsIcons.LineToolParallelChannel,localizedName:s.lineToolsLocalizedNames.LineToolParallelChannel,hotKey:Object(a.b)(r)},LineToolPitchfan:{icon:t.lineToolsIcons.LineToolPitchfan,localizedName:s.lineToolsLocalizedNames.LineToolPitchfan},LineToolPitchfork:{icon:t.lineToolsIcons.LineToolPitchfork,localizedName:s.lineToolsLocalizedNames.LineToolPitchfork},LineToolPolyline:{icon:t.lineToolsIcons.LineToolPolyline,localizedName:s.lineToolsLocalizedNames.LineToolPolyline},LineToolPath:{icon:t.lineToolsIcons.LineToolPath,localizedName:s.lineToolsLocalizedNames.LineToolPath},LineToolPrediction:{icon:t.lineToolsIcons.LineToolPrediction,localizedName:s.lineToolsLocalizedNames.LineToolPrediction},LineToolPriceLabel:{icon:t.lineToolsIcons.LineToolPriceLabel,localizedName:s.lineToolsLocalizedNames.LineToolPriceLabel},LineToolPriceNote:{icon:t.lineToolsIcons.LineToolPriceNote,localizedName:s.lineToolsLocalizedNames.LineToolPriceNote,hotKey:Object(a.b)(r)},LineToolArrowMarker:{icon:t.lineToolsIcons.LineToolArrowMarker,localizedName:s.lineToolsLocalizedNames.LineToolArrowMarker},LineToolPriceRange:{icon:t.lineToolsIcons.LineToolPriceRange,localizedName:s.lineToolsLocalizedNames.LineToolPriceRange},LineToolProjection:{icon:t.lineToolsIcons.LineToolProjection,localizedName:s.lineToolsLocalizedNames.LineToolProjection},LineToolRay:{icon:t.lineToolsIcons.LineToolRay,localizedName:s.lineToolsLocalizedNames.LineToolRay},LineToolRectangle:{icon:t.lineToolsIcons.LineToolRectangle,localizedName:s.lineToolsLocalizedNames.LineToolRectangle,hotKey:Object(a.b)({keys:["Shift"],text:Object(i.t)("{hotKey_0} — square")})},LineToolRegressionTrend:{icon:t.lineToolsIcons.LineToolRegressionTrend, +localizedName:s.lineToolsLocalizedNames.LineToolRegressionTrend},LineToolRiskRewardLong:{icon:t.lineToolsIcons.LineToolRiskRewardLong,localizedName:s.lineToolsLocalizedNames.LineToolRiskRewardLong},LineToolRiskRewardShort:{icon:t.lineToolsIcons.LineToolRiskRewardShort,localizedName:s.lineToolsLocalizedNames.LineToolRiskRewardShort},LineToolFixedRangeVolumeProfile:{icon:t.lineToolsIcons.LineToolFixedRangeVolumeProfile,localizedName:s.lineToolsLocalizedNames.LineToolFixedRangeVolumeProfile},LineToolRotatedRectangle:{icon:t.lineToolsIcons.LineToolRotatedRectangle,localizedName:s.lineToolsLocalizedNames.LineToolRotatedRectangle,hotKey:Object(a.b)(r)},LineToolSchiffPitchfork:{icon:t.lineToolsIcons.LineToolSchiffPitchfork,localizedName:s.lineToolsLocalizedNames.LineToolSchiffPitchfork},LineToolSchiffPitchfork2:{icon:t.lineToolsIcons.LineToolSchiffPitchfork2,localizedName:s.lineToolsLocalizedNames.LineToolSchiffPitchfork2},LineToolSineLine:{icon:t.lineToolsIcons.LineToolSineLine,localizedName:s.lineToolsLocalizedNames.LineToolSineLine},LineToolText:{icon:t.lineToolsIcons.LineToolText,localizedName:s.lineToolsLocalizedNames.LineToolText},LineToolTextAbsolute:{icon:t.lineToolsIcons.LineToolTextAbsolute,localizedName:s.lineToolsLocalizedNames.LineToolTextAbsolute},LineToolThreeDrivers:{icon:t.lineToolsIcons.LineToolThreeDrivers,localizedName:s.lineToolsLocalizedNames.LineToolThreeDrivers},LineToolTimeCycles:{icon:t.lineToolsIcons.LineToolTimeCycles,localizedName:s.lineToolsLocalizedNames.LineToolTimeCycles},LineToolTrendAngle:{icon:t.lineToolsIcons.LineToolTrendAngle,localizedName:s.lineToolsLocalizedNames.LineToolTrendAngle,hotKey:Object(a.b)(r)},LineToolTrendBasedFibExtension:{icon:t.lineToolsIcons.LineToolTrendBasedFibExtension,localizedName:s.lineToolsLocalizedNames.LineToolTrendBasedFibExtension},LineToolTrendBasedFibTime:{icon:t.lineToolsIcons.LineToolTrendBasedFibTime,localizedName:s.lineToolsLocalizedNames.LineToolTrendBasedFibTime},LineToolTrendLine:{icon:t.lineToolsIcons.LineToolTrendLine,localizedName:s.lineToolsLocalizedNames.LineToolTrendLine,hotKey:Object(a.b)(r)},LineToolInfoLine:{icon:t.lineToolsIcons.LineToolInfoLine,localizedName:s.lineToolsLocalizedNames.LineToolInfoLine},LineToolTriangle:{icon:t.lineToolsIcons.LineToolTriangle,localizedName:s.lineToolsLocalizedNames.LineToolTriangle},LineToolTrianglePattern:{icon:t.lineToolsIcons.LineToolTrianglePattern,localizedName:s.lineToolsLocalizedNames.LineToolTrianglePattern},LineToolVertLine:{icon:t.lineToolsIcons.LineToolVertLine,localizedName:s.lineToolsLocalizedNames.LineToolVertLine,hotKey:Object(a.b)({keys:["Alt","V"],text:"{0} + {1}"})},LineToolCrossLine:{icon:t.lineToolsIcons.LineToolCrossLine,localizedName:s.lineToolsLocalizedNames.LineToolCrossLine},LineToolHighlighter:{icon:t.lineToolsIcons.LineToolHighlighter,localizedName:s.lineToolsLocalizedNames.LineToolHighlighter},SyncDrawing:{icon:c.a.SyncDrawing,iconActive:c.a.SyncDrawingActive, +localizedName:Object(i.t)("New drawings are replicated to all charts in the layout and shown when the same ticker is selected")},arrow:{icon:c.a.arrow,localizedName:Object(i.t)("Arrow")},cursor:{icon:c.a.cursor,localizedName:Object(i.t)("Cross")},dot:{icon:c.a.dot,localizedName:Object(i.t)("Dot")},drawginmode:{icon:c.a.drawginmode,iconActive:c.a.drawginmodeActive,localizedName:Object(i.t)("Stay in Drawing Mode")},eraser:{icon:c.a.eraser,localizedName:Object(i.t)("Eraser")},group:{icon:c.a.group,localizedName:Object(i.t)("Show Hidden Tools")},hideAllDrawings:{icon:c.a.hideAllDrawings,iconActive:c.a.hideAllDrawingsActive,localizedName:Object(i.t)("Hide All Drawing Tools"),hotKey:Object(a.b)({keys:["Ctrl","Alt","H"],text:"{0} + {1} + {2}"})},lockAllDrawings:{icon:c.a.lockAllDrawings,iconActive:c.a.lockAllDrawingsActive,localizedName:Object(i.t)("Lock All Drawing Tools")},magnet:{icon:c.a.magnet,localizedName:Object(i.t)("Magnet Mode snaps drawings placed near price bars to the closest OHLC value"),hotKey:Object(a.b)({keys:["Ctrl"],text:"{0}"})},measure:{icon:c.a.measure,localizedName:Object(i.t)("Measure"),hotKey:Object(a.b)({keys:["Shift"],text:Object(i.t)("{hotKey_0} + Click on the chart")})},removeAllDrawingTools:{icon:c.a.removeAllDrawingTools,localizedName:Object(i.t)("Remove Drawings")},showObjectsTree:{icon:c.a.showObjectTree,localizedName:Object(i.t)("Show Object Tree")},zoom:{icon:c.a.zoom,localizedName:Object(i.t)("Zoom In")},"zoom-out":{icon:c.a["zoom-out"],localizedName:Object(i.t)("Zoom Out")}};Object(n.isFeatureEnabled)("remove-line-tool-ghost-feed")||(L.LineToolGhostFeed={icon:t.lineToolsIcons.LineToolGhostFeed,localizedName:s.lineToolsLocalizedNames.LineToolGhostFeed})},Uh5y:function(o,e){o.exports=''},VToE:function(o,e){ +o.exports=''},WHEt:function(o,e){o.exports=''},XfUw:function(o,e){o.exports=''},b2d7:function(o,e,l){"use strict";l.d(e,"a",(function(){return n}));var i,n,a=l("aIyQ"),t=l.n(a),c=l("Vdly");!function(o){function e(){o.favorites=[];Object(c.getJSON)("chart.favoriteDrawings",[]).forEach(e=>{l(e.tool||e)&&o.favorites.push(e.tool||e)}),o.favoritesSynced.fire()}function l(o){return"string"==typeof o&&""!==o}o.favorites=[],o.favoritesSynced=new t.a,o.favoriteIndex=function(e){return o.favorites.indexOf(e)},o.isValidLineToolName=l,o.saveFavorites=function(e){Object(c.setJSON)("chart.favoriteDrawings",o.favorites,e)},e(),c.onSync.subscribe(null,e)}(i||(i={})),function(o){function e(o){return i.isValidLineToolName(o)}function l(){return i.favorites.length}function n(o){return-1!==i.favoriteIndex(o)}o.favoriteAdded=new t.a,o.favoriteRemoved=new t.a,o.favoriteMoved=new t.a,o.favoritesSynced=i.favoritesSynced,o.favorites=function(){return i.favorites.slice()},o.isValidLineToolName=e,o.favoritesCount=l,o.favorite=function(o){return o<0||o>=l()?"":i.favorites[o]},o.addFavorite=function(l,a){ +return!(n(l)||!e(l))&&(i.favorites.push(l),i.saveFavorites(a),o.favoriteAdded.fire(l),!0)},o.removeFavorite=function(e,l){const n=i.favoriteIndex(e);return-1!==n&&(i.favorites.splice(n,1),i.saveFavorites(l),o.favoriteRemoved.fire(e),!0)},o.isFavorite=n,o.moveFavorite=function(n,a,t){if(a<0||a>=l()||!e(n))return!1;const c=i.favoriteIndex(n);return-1!==c&&a!==c&&(i.favorites.splice(c,1),i.favorites.splice(a,0,n),i.saveFavorites(t),o.favoriteMoved.fire(n,c,a),!0)}}(n||(n={}))},fEjm:function(o,e,l){o.exports={favorite:"favorite-I_fAY9V2",disabled:"disabled-I_fAY9V2",active:"active-I_fAY9V2",checked:"checked-I_fAY9V2"}},gb5g:function(o,e,l){o.exports={button:"button-5-QHyx-s",hover:"hover-5-QHyx-s",bg:"bg-5-QHyx-s",icon:"icon-5-QHyx-s",isActive:"isActive-5-QHyx-s",isTransparent:"isTransparent-5-QHyx-s",isGrayed:"isGrayed-5-QHyx-s",isHidden:"isHidden-5-QHyx-s"}},hn2c:function(o,e){o.exports=''},kmdM:function(o,e){o.exports=''},lZXH:function(o,e){o.exports=''},mbEK:function(o,e){o.exports=''},nPPD:function(o,e,l){"use strict";function i(o,e,l={}){const i=Object.assign({},e);for(const n of Object.keys(e)){const a=l[n]||n;a in o&&(i[n]=[o[a],e[n]].join(" "))}return i}function n(o,e,l={}){return Object.assign({},o,i(o,e,l))}l.d(e,"b",(function(){return i})),l.d(e,"a",(function(){return n}))},oCKS:function(o,e){o.exports=''},pr86:function(o,e,l){"use strict";l.d(e,"a",(function(){return T}));l("YFKU");var i=l("q1tI"),n=l("TSYQ"),a=l("Iivm"),t=l("sg5d"),c=l("XfUw"),s=l("fEjm");const r={ +add:window.t("Add to favorites"),remove:window.t("Remove from favorites")};function T(o){const{className:e,isFilled:l,isActive:T,onClick:d,...L}=o;return i.createElement(a.a,{...L,className:n(s.favorite,"apply-common-tooltip",l&&s.checked,T&&s.active,e),icon:l?t:c,onClick:d,title:l?r.remove:r.add})}},qQ3E:function(o,e){o.exports=''},sg5d:function(o,e){o.exports=''},tceb:function(o,e){o.exports=''},uhCe:function(o,e,l){"use strict";l.d(e,"a",(function(){return n}));var i=l("ASyk");const n={SmallHeight:i["small-height-breakpoint"],TabletSmall:i["tablet-small-breakpoint"],TabletNormal:i["tablet-normal-breakpoint"]}},xjKU:function(o,e){o.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/54.bb5888ae55ea0a253a5b.js b/static/charting_library/bundles/54.bb5888ae55ea0a253a5b.js new file mode 100644 index 0000000..e710a16 --- /dev/null +++ b/static/charting_library/bundles/54.bb5888ae55ea0a253a5b.js @@ -0,0 +1,7 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{"20PO":function(e,t){e.exports=''},"38fQ":function(e,t,n){e.exports={separator:"separator-LcIsiH9i"}},"39J6":function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var s=n("q1tI"),a=n("TSYQ"),o=n.n(a),r=n("6KyJ"),i=n("Oy6E");function l(e){const{className:t}=e;return s.createElement("div",{className:o()(i.spinnerWrap,t)},s.createElement(r.a,null))}},"6KyJ":function(e,t,n){"use strict";var s,a=n("q1tI"),o=n("TSYQ"),r=n("K9GE"),i=n("YZ9j");n("O7m7");!function(e){e[e.Initial=0]="Initial",e[e.Appear=1]="Appear",e[e.Active=2]="Active"}(s||(s={}));class l extends a.PureComponent{constructor(e){super(e),this._stateChangeTimeout=null,this.state={state:s.Initial}}render(){const{className:e,color:t="black"}=this.props,n=o(i.item,{[i[t]]:Boolean(t)});return a.createElement("span",{className:o(i.loader,e,this._getStateClass())},a.createElement("span",{className:n}),a.createElement("span",{className:n}),a.createElement("span",{className:n}))}componentDidMount(){this.setState({state:s.Appear}),this._stateChangeTimeout=setTimeout(()=>{this.setState({state:s.Active})},2*r.b)}componentWillUnmount(){this._stateChangeTimeout&&(clearTimeout(this._stateChangeTimeout),this._stateChangeTimeout=null)}_getStateClass(){switch(this.state.state){case s.Initial:return i["loader-initial"];case s.Appear:return i["loader-appear"];default:return""}}}n.d(t,"a",(function(){return l}))},A7ND:function(e,t,n){e.exports={loaderWrapper:"loaderWrapper-2mhYnUll"}},Gpmm:function(e,t,n){e.exports={row:"row-3B5H2q5m",line:"line-3B5H2q5m",hint:"hint-3B5H2q5m"}},IAAr:function(e,t,n){"use strict";var s=n("q1tI"),a=n.n(s),o=n("zRdu"),r=n("Gpmm");function i(e){return s.createElement("tr",{className:r.row},s.createElement("td",null,s.createElement("div",{className:r.line})),s.createElement("td",null,s.createElement("div",{className:r.line}),e.hint?s.createElement("div",{className:r.hint},e.hint):null))}var l=n("TSYQ"),c=n("vCF3"),u=n("qFKp"),h=n("8+VR");var p=n("i/MG"),m=n("pr86"),d=n("w+Rv"),f=n("L/Ed"),v=n("euMy"),b=n("hn2c"),E=n("ycgn");class S extends a.a.PureComponent{constructor(){super(...arguments),this._handleMouseOver=e=>{(function(e){const t=e.sourceCapabilities;let n=t&&t.firesTouchEvents;return void 0===n&&(n=h.touch),n})(e.nativeEvent)||this.props.onMouseOver&&this.props.onMouseOver()},this._handleClickToolbox=e=>{e.stopPropagation(),this.props.onClickToolbox&&this.props.onClickToolbox()}}render(){const{hasSubItems:e,shortcutHint:t,hint:n,invisibleHotkey:s,favourite:o,theme:r=E}=this.props,i=this.props.checkable&&this.props.checkboxInput?"label":"div";return a.a.createElement(a.a.Fragment,null,a.a.createElement("tr",{ +className:l(r.item,!this.props.noInteractive&&r.interactive,this.props.hovered&&r.hovered,this.props.disabled&&r.disabled,this.props.active&&r.active,this.props.selected&&r.selected),onClick:this.props.onClick,onMouseOver:this._handleMouseOver,ref:this.props.reference,"data-action-name":this.props.actionName},void 0!==o&&a.a.createElement("td",null,a.a.createElement(m.a,{className:r.favourite,isFilled:o,onClick:this.props.onFavouriteClick})),a.a.createElement("td",{className:l(r.iconCell),"data-icon-cell":!0},this._icon(r)),a.a.createElement("td",{className:r.contentCell},a.a.createElement(i,{className:r.content},a.a.createElement("span",{className:l(r.label,this.props.checked&&r.checked),"data-label":!0},this.props.label),this._toolbox(r),e&&a.a.createElement("span",{className:r.arrowIcon,dangerouslySetInnerHTML:{__html:b},"data-submenu-arrow":!0}),!e&&t&&!u.CheckMobile.any()&&a.a.createElement(d.a,{className:l(s&&r.invisibleHotkey),text:t}),!e&&!t&&n&&a.a.createElement(d.a,{text:n})))),a.a.createElement("tr",{className:r.subMenu},a.a.createElement("td",null,this.props.children)))}_icon(e){if(this.props.checkable){if(this.props.checkboxInput)return a.a.createElement(c.a,{className:l(e.icon,e.checkboxInput),checked:this.props.checked});if(this.props.checked){const t=!this.props.icon&&!this.props.iconChecked,n=this.props.iconChecked||this.props.icon||v;return a.a.createElement("span",{className:l(e.icon,t&&e.checkmark),dangerouslySetInnerHTML:{__html:n},"data-icon-checkmark":t})}return this.props.icon?a.a.createElement("span",{className:e.icon,dangerouslySetInnerHTML:{__html:this.props.icon}}):a.a.createElement("span",{className:e.icon})}return this.props.icon?a.a.createElement("span",{className:e.icon,dangerouslySetInnerHTML:{__html:this.props.icon}}):null}_toolbox(e){return this.props.toolbox?a.a.createElement("span",{className:l(e.toolbox,this.props.showToolboxOnHover&&e.showToolboxOnHover),onClick:this._handleClickToolbox,"data-toolbox":!0},this._renderToolboxContent()):null}_renderToolboxContent(){if(this.props.toolbox)switch(this.props.toolbox.type){case f.ToolboxType.Delete:return a.a.createElement(p.a,{onClick:this.props.toolbox.action})}return null}}var _=n("xRqE"),k=n("tWVy"),x=n("JWMC"),C=n("Ialn");var w=n("dxYz"),g=n("Eyy1");class y extends a.a.PureComponent{constructor(e){super(e),this._itemRef=null,this._menuElementRef=a.a.createRef(),this._menuRef=null,this._handleClick=e=>{e.isDefaultPrevented()||this.state.disabled||(this._hasSubItems()?this._showSubMenu():(this.state.doNotCloseOnClick||Object(k.b)(),this.props.action.execute(),this._trackEvent(),this.props.onExecute&&this.props.onExecute(this.props.action)))},this._handleClickToolbox=()=>{Object(k.b)()},this._handleItemMouseOver=()=>{this._showSubMenu(),this._setCurrentContextValue()},this._handleMenuMouseOver=()=>{this._setCurrentContextValue()},this._showSubMenu=()=>{this.props.onShowSubMenu(this.props.action)},this._calcSubMenuPos=e=>function(e,t,n={x:0,y:10}){if(t){ +const{left:n,right:s,top:a}=t.getBoundingClientRect(),o=document.documentElement.clientWidth,r={x:n-e,y:a},i={x:s,y:a};return Object(C.isRtl)()?n<=e?i:r:o-s>=e?i:r}return n}(e,this._itemRef),this._updateState=e=>{this.setState(e.getState())},this._setItemRef=e=>{this._itemRef=e},this._handleMenuRef=e=>{this._menuRef=e},this.state={...this.props.action.getState()}}componentDidMount(){var e;this.props.action.onUpdate().subscribe(this,this._updateState),this.state.subItems.length&&(this._unsubscribe=null===(e=this.context)||void 0===e?void 0:e.registerSubmenu(this.props.action.id,e=>Object(g.ensureNotNull)(this._itemRef).contains(e)||null!==this._menuElementRef.current&&this._menuElementRef.current.contains(e))),this.props.reference&&(this._itemRef=this.props.reference.current)}componentDidUpdate(e,t){t.subItems!==this.state.subItems&&null!==this._menuRef&&this._menuRef.update()}componentWillUnmount(){this.props.action.onUpdate().unsubscribe(this,this._updateState),this._unsubscribe&&this._unsubscribe()}render(){var e,t;const n=(null===(e=this.context)||void 0===e?void 0:e.current)?this.context.current===this.props.action.id:this.props.isSubMenuOpened;return a.a.createElement(S,{theme:this.props.theme,reference:null!==(t=this.props.reference)&&void 0!==t?t:this._setItemRef,onClick:this._handleClick,onClickToolbox:this._handleClickToolbox,onMouseOver:this._handleItemMouseOver,hovered:n,hasSubItems:this._hasSubItems(),actionName:this.state.name,checkboxInput:this.props.checkboxInput,selected:this.props.selected,...this.state},a.a.createElement(_.a,{isOpened:n,items:this.state.subItems,position:this._calcSubMenuPos,menuStatName:this.props.menuStatName,parentStatName:this._getStatName(),menuElementReference:this._menuElementRef,onMouseOver:this.state.subItems.length?this._handleMenuMouseOver:void 0,ref:this._handleMenuRef}))}_setCurrentContextValue(){var e;this.state.subItems.length&&(null===(e=this.context)||void 0===e||e.setCurrent(this.props.action.id))}_hasSubItems(){return this.state.subItems.length>0}_trackEvent(){const e=this._getStatName();Object(x.trackEvent)("ContextMenuClick",this.props.menuStatName||"",e)}_getStatName(){return[this.props.parentStatName,this.state.statName].filter(e=>Boolean(e)).join(".")}}y.contextType=w.a;var O=n("6KyJ"),N=n("X64X");function M(e){return s.createElement(S,{label:s.createElement("div",{className:N.loaderWrap},s.createElement(O.a,{className:N.loader,color:"gray"})),noInteractive:!0,onMouseOver:e.onMouseOver})}function I(e){return s.createElement(S,{label:e.label,noInteractive:!0,disabled:!0,onMouseOver:e.onMouseOver})}var K=n("4O8T"),R=n.n(K);class T extends s.PureComponent{constructor(e){super(e),this._loadEmitter=new R.a,this._onDone=()=>{this.setState({loaded:!0,failed:!1},this._updateMenu)},this._onFail=e=>{this.setState({failed:!0,error:e},this._updateMenu)},this._updateMenu=()=>{this.props.menu&&this.props.menu.update()},this._handleMouseOver=()=>{this.props.onShowSubMenu(this.props.action)},this.state={loaded:this.props.action.isLoaded(),failed:!1,error:""}} +componentDidMount(){this._loadEmitter.on("done",this._onDone),this._loadEmitter.on("fail",this._onFail),this._load()}componentWillUnmount(){this._loadEmitter.removeEvent("done"),this._loadEmitter.removeEvent("fail")}render(){return this.state.failed?s.createElement(I,{label:this.state.error,onMouseOver:this._handleMouseOver}):this.state.loaded?s.createElement(y,{...this.props}):s.createElement(M,{onMouseOver:this._handleMouseOver})}_load(){this.props.action.loadOptions().then(()=>{this._loadEmitter.emit("done")}).catch(e=>{this._loadEmitter.emit("fail",e)})}}var B=n("39J6"),q=n("A7ND");function L(e){return a.a.createElement("tr",null,a.a.createElement("td",null,a.a.createElement(B.a,{className:q.loaderWrapper})))}var D=n("PN6A");n.d(t,"a",(function(){return F}));class F extends s.PureComponent{constructor(e){super(e),this._handleShowSubMenu=e=>{const t=e.getState();this.setState({showSubMenuOf:t.subItems.length?e:void 0})},this.state={}}render(){return s.createElement("table",null,s.createElement("tbody",null,this.props.items.map(e=>this._item(e))))}static getDerivedStateFromProps(e,t){return!e.parentIsOpened&&t.showSubMenuOf?{showSubMenuOf:void 0}:null}_item(e){switch(e.type){case o.a.Separator:return s.createElement(i,{key:e.id,hint:e.getHint()});case o.a.Action:return s.createElement(y,{key:e.id,action:e,onShowSubMenu:this._handleShowSubMenu,isSubMenuOpened:this.state.showSubMenuOf===e,menuStatName:this.props.menuStatName,parentStatName:this.props.parentStatName});case o.a.ActionAsync:return s.createElement(D.a.Consumer,{key:e.id},t=>s.createElement(T,{action:e,onShowSubMenu:this._handleShowSubMenu,isSubMenuOpened:this.state.showSubMenuOf===e,menuStatName:this.props.menuStatName,parentStatName:this.props.parentStatName,menu:t}));case o.a.Loader:return s.createElement(L,{key:e.id});default:return null}}}},"J+f8":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var s=n("q1tI");const a=s.createContext(!1)},O7m7:function(e,t,n){},Oy6E:function(e,t,n){e.exports={spinnerWrap:"spinnerWrap-1dkAsm33"}},"PR+g":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var s=n("q1tI");const a=()=>{const e=Object(s.useRef)(!1);return Object(s.useEffect)(()=>(e.current=!0,()=>{e.current=!1}),[]),e}},RgaO:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var s=n("8Rai");function a(e){const{children:t,...n}=e;return t(Object(s.a)(n))}},To8B:function(e,t){e.exports=''},X64X:function(e,t,n){e.exports={loaderWrap:"loaderWrap-2SapxxDI",loader:"loader-2SapxxDI"}},XXQ5:function(e,t,n){e.exports={item:"item-1-SF84yU",emptyIcons:"emptyIcons-1-SF84yU",loading:"loading-1-SF84yU",disabled:"disabled-1-SF84yU",interactive:"interactive-1-SF84yU",hovered:"hovered-1-SF84yU",icon:"icon-1-SF84yU",label:"label-1-SF84yU",fullWidth:"fullWidth-1-SF84yU",title:"title-1-SF84yU", +nested:"nested-1-SF84yU",shortcut:"shortcut-1-SF84yU",remove:"remove-1-SF84yU"}},Xy1d:function(e,t){e.exports=''},Xzy5:function(e,t){e.exports=''},YZ9j:function(e){e.exports=JSON.parse('{"loader":"loader-8x1ZxRwP","item":"item-2-89r_cd","tv-button-loader":"tv-button-loader-23vqS1uY","black":"black-20Ytsf0V","white":"white-1ucCcc2I","gray":"gray-XDhHSS-T","loader-initial":"loader-initial-1deQDeio","loader-appear":"loader-appear-2krFtMrd"}')},euMy:function(e,t){e.exports=''},fwrW:function(e,t){e.exports=''},"i/MG":function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));n("YFKU");var s=n("q1tI"),a=n("TSYQ"),o=n("Iivm"),r=n("To8B"),i=n("kXJy");const l={remove:window.t("Remove")};function c(e){const{className:t,isActive:n,onClick:c,title:u,hidden:h,"data-name":p="remove-button",...m}=e;return s.createElement(o.a,{...m,"data-name":p,className:a(i.button,"apply-common-tooltip",n&&i.active,h&&i.hidden,t),icon:r,onClick:c,title:u||l.remove})}},kXJy:function(e,t,n){e.exports={button:"button-3B9fDLtm",disabled:"disabled-3B9fDLtm",active:"active-3B9fDLtm",hidden:"hidden-3B9fDLtm"}},l4ku:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var s=n("q1tI"),a=n.n(s),o=n("TSYQ"),r=n("Iivm"),i=n("6KyJ"),l=n("J+f8"),c=n("w+Rv"),u=n("Xy1d"),h=n("Xzy5"),p=n("20PO"),m=n("XXQ5");function d(e){const{isTitle:t,isLoading:n,isHovered:d,active:f,checkable:v,disabled:b,checked:E,icon:S,iconChecked:_,hint:k,subItems:x,label:C,onClick:w,children:g,toolbox:y,fullWidthLabel:O}=e,N=Object(s.useContext)(l.a),M=!!x.length;return n?a.a.createElement("li",{className:o(m.item,m.loading)},a.a.createElement(i.a,{color:"gray"})):a.a.createElement("li",{className:o(m.item,m.interactive,t&&m.title,b&&m.disabled,d&&m.hovered,f&&m.active,N&&m.emptyIcons),onClick:w},a.a.createElement(r.a,{className:o(m.icon),icon:function(){if(v&&E)return _||S||u;return S}()}),a.a.createElement("span",{className:o(m.label,O&&m.fullWidth)},C),!!y&&a.a.createElement(r.a,{onClick:function(){y&&y.action()},className:m.remove,icon:p}),!M&&k&&a.a.createElement(c.a,{className:m.shortcut,text:k}),M&&a.a.createElement(r.a,{className:m.nested,icon:h}),g)}},t3rk:function(e,t,n){e.exports={menu:"menu-1Jmy26Oy"}},uqKQ:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var s=n("q1tI"),a=n("AiMB");function o(e){ +return class extends s.PureComponent{render(){const{isOpened:t,root:n}=this.props;if(!t)return null;const o=s.createElement(e,{...this.props,zIndex:150});return"parent"===n?o:s.createElement(a.a,null,o)}}}},"w+Rv":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var s=n("q1tI"),a=n("TSYQ"),o=n.n(a),r=n("ycgn");function i(e){const{text:t="",className:n}=e;return s.createElement("span",{className:o()(r.shortcut,n)},t)}},xRqE:function(e,t,n){"use strict";var s=n("q1tI"),a=n.n(s),o=n("uqKQ"),r=n("DTHj"),i=n("RgaO"),l=n("ycI/"),c=n("TSYQ"),u=n("IAAr"),h=n("mkWe"),p=n("/KDZ"),m=n("zRdu"),d=n("38fQ");function f(e){return a.a.createElement("li",{className:d.separator})}var v=n("l4ku"),b=n("Sn4D"),E=n("tWVy");function S(e){const{action:t,isLoading:n}=e,[o,r]=Object(s.useState)(t.getState()),[i,l]=Object(s.useState)(!1),c=()=>r(t.getState()),u=!!o.subItems.length,h=u&&i;return Object(s.useEffect)(()=>{n||r(t.getState())},[n]),Object(s.useEffect)(()=>(t.onUpdate().subscribe(null,c),()=>{t.onUpdate().unsubscribe(null,c)}),[]),a.a.createElement(v.a,{...o,onClick:function(e){if(o.disabled||e.defaultPrevented)return;if(u)return void l(!0);o.doNotCloseOnClick||Object(E.b)();t.execute()},isLoading:n,isHovered:h},h&&a.a.createElement(b.a,{onClose:p,position:"Bottom"},a.a.createElement(y,{items:o.subItems,parentAction:t,closeNested:p})));function p(e){e&&e.preventDefault(),l(!1)}}var _=n("PR+g");function k(e){const{action:t}=e,[n,o]=Object(s.useState)(t.isLoaded()),[r,i]=Object(s.useState)(!1),l=Object(_.a)();return Object(s.useEffect)(()=>{t.loadOptions().then(()=>{l.current&&(o(!0),i(!1))}).catch(()=>{l.current&&i(!0)})},[]),a.a.createElement(S,{isLoading:!n||r,action:t})}var x=n("39J6");function C(e){return a.a.createElement("li",null,a.a.createElement(x.a,null))}var w=n("J+f8"),g=n("fwrW");function y(e){const{items:t,parentAction:n,closeNested:s}=e,o=!Boolean(n)&&t.every(e=>!Boolean(e.type!==m.a.Separator&&(e.getState().icon||e.getState().checkable)));return a.a.createElement(w.a.Provider,{value:o},a.a.createElement("ul",null,n&&a.a.createElement(a.a.Fragment,null,a.a.createElement(v.a,{label:n.getState().label,isTitle:!0,active:!1,disabled:!1,subItems:[],checkable:!1,checked:!1,doNotCloseOnClick:!1,icon:g,onClick:s}),a.a.createElement(f,null)),t.map(e=>{switch(e.type){case m.a.Action:return a.a.createElement(S,{key:e.id,action:e});case m.a.Separator:return a.a.createElement(f,{key:e.id});case m.a.ActionAsync:return a.a.createElement(k,{key:e.id,action:e});case m.a.Loader:return a.a.createElement(C,{key:e.id});default:return null}})))}const O=s.createContext(!1);var N=n("t3rk");n.d(t,"a",(function(){return M})),n.d(t,"b",(function(){return I}));class M extends s.PureComponent{constructor(e){super(e),this._menuRef=s.createRef(),this._handleClose=()=>{this.props.onClose&&this.props.onClose()},this._handleOutsideClickClose=e=>{const{doNotCloseOn:t,onClose:n}=this.props;!n||void 0!==t&&t.contains(e.target)||n()},this._handleFocusOnOpen=()=>{var e,t +;(null===(e=this.props.menuElementReference)||void 0===e?void 0:e.current)&&this.props.takeFocus&&(null===(t=this.props.menuElementReference)||void 0===t||t.current.focus({preventScroll:!0}))},this.state={}}render(){const{isOpened:e,onClose:t,items:n,doNotCloseOn:a,menuStatName:o,parentStatName:m,takeFocus:d,...f}=this.props;return e?s.createElement(s.Fragment,null,s.createElement(l.a,{keyCode:27,eventType:"keyup",handler:this._handleClose}),s.createElement(h.b,null,s.createElement(p.a,{rule:"screen and (max-width: 428px)"},t=>this._isDrawer(t)?s.createElement(b.a,{onClose:this._handleClose,position:"Bottom","data-name":f["data-name"]},s.createElement(O.Provider,{value:t},s.createElement(y,{items:n}))):s.createElement(i.a,{handler:this._handleOutsideClickClose,mouseDown:!0,touchStart:!0,reference:this.props.menuElementReference},t=>s.createElement(r.b,{...f,reference:t,className:c(N.menu,"context-menu"),onClose:this._handleClose,noMomentumBasedScroll:!0,ref:this._menuRef,tabIndex:d?-1:void 0,onOpen:this._handleFocusOnOpen},s.createElement(u.a,{items:n,menuStatName:o,parentStatName:m,parentIsOpened:e})))))):null}update(){this._menuRef.current&&this._menuRef.current.update()}_isDrawer(e){return void 0===this.props.mode?e:"drawer"===this.props.mode}}const I=Object(o.a)(M)},"ycI/":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var s=n("q1tI");class a extends s.PureComponent{constructor(){super(...arguments),this._handleKeyDown=e=>{e.keyCode===this.props.keyCode&&this.props.handler(e)}}componentDidMount(){document.addEventListener(this.props.eventType||"keydown",this._handleKeyDown,!1)}componentWillUnmount(){document.removeEventListener(this.props.eventType||"keydown",this._handleKeyDown,!1)}render(){return null}}},ycgn:function(e,t,n){e.exports={item:"item-f5BaKrKq",interactive:"interactive-f5BaKrKq",hovered:"hovered-f5BaKrKq",disabled:"disabled-f5BaKrKq",active:"active-f5BaKrKq",shortcut:"shortcut-f5BaKrKq",iconCell:"iconCell-f5BaKrKq",icon:"icon-f5BaKrKq",checkmark:"checkmark-f5BaKrKq",content:"content-f5BaKrKq",label:"label-f5BaKrKq",checked:"checked-f5BaKrKq",toolbox:"toolbox-f5BaKrKq",showToolboxOnHover:"showToolboxOnHover-f5BaKrKq",arrowIcon:"arrowIcon-f5BaKrKq",subMenu:"subMenu-f5BaKrKq",invisibleHotkey:"invisibleHotkey-f5BaKrKq"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/55.3c35a629db21ab961f11.js b/static/charting_library/bundles/55.3c35a629db21ab961f11.js new file mode 100644 index 0000000..15e0944 --- /dev/null +++ b/static/charting_library/bundles/55.3c35a629db21ab961f11.js @@ -0,0 +1,9 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{"5Ssy":function(e,t,n){"use strict";var s,o=n("YFKU"),r=n("q1tI"),a=n.n(r),i=n("+8gn"),l=n("Q+1u"),c=n("0W35"),u=n("TSYQ"),p=n("b8Mn");n("GZ2k");const h=Object(c.b)(((s=class extends r.PureComponent{constructor(){super(...arguments),this._onChange=()=>{this.props.onChange&&this.props.onChange(this.props.value)}}render(){const e=u(this.props.className,p.radio,{[p.reverse]:Boolean(this.props.labelPositionReverse)}),t=u(p.label,{[p.disabled]:this.props.disabled}),n=u(p.box,{[p.noOutline]:-1===this.props.tabIndex});let s=null;return this.props.label&&(s=r.createElement("span",{className:t},this.props.label)),r.createElement("label",{className:e},r.createElement("span",{className:p.wrapper,title:this.props.title},r.createElement("input",{id:this.props.id,tabIndex:this.props.tabIndex,autoFocus:this.props.autoFocus,role:this.props.role,className:p.input,type:"radio",name:this.props.name,checked:this.props.checked,disabled:this.props.disabled,value:this.props.value,onChange:this._onChange,ref:this.props.reference}),r.createElement("span",{className:n})),s)}}).defaultProps={value:"on"},s));var d=n("Eyy1"),m=n("fV01"),f=n("HfwS"),b=n("qzWo"),g=n("tDS2");function v(e){const{children:t,input:n,disabled:s,onChange:u,grouped:p,tooltip:v}=e,C=Object(r.useContext)(i.b),{values:y,setValue:E}=Object(d.ensureNotNull)(C),_=y[n.id],[O,T]=Object(r.useState)(_?"another-symbol":"main-symbol"),[S,w]=Object(r.useState)(_);return Object(r.useEffect)(()=>{_&&w(_)},[_]),a.a.createElement(c.a,{name:"symbol-source-"+n.id,values:[O],onChange:function(e){T(e),"main-symbol"===e?Object(f.b)(E)("",n.id,n.name):"another-symbol"===e&&S&&Object(f.b)(E,u)(S,n.id,n.name)}},a.a.createElement(l.a.Row,null,a.a.createElement(l.a.Cell,{colSpan:2,placement:"first",grouped:p},a.a.createElement(h,{value:"main-symbol",className:g.checkbox,disabled:s,label:a.a.createElement("span",{className:g.label},Object(o.t)("Main chart symbol",{context:"input"}))}))),a.a.createElement(l.a.Row,null,a.a.createElement(l.a.Cell,{placement:"first",grouped:p},a.a.createElement(h,{value:"another-symbol",className:g.checkbox,disabled:s,label:a.a.createElement("span",{className:g.label},Object(o.t)("Another symbol",{context:"input"}))})),a.a.createElement(l.a.Cell,{placement:"last",grouped:p},t||a.a.createElement(m.a,{input:Object(d.ensureDefined)(n),onChange:u,disabled:s||"main-symbol"===O,hasTooltip:Boolean(v)}),v&&a.a.createElement(b.a,{title:v}))))}var C=n("h5Dg");class y extends r.PureComponent{render(){const{label:e,input:t,tooltip:n}=this.props;return r.createElement(l.a.Row,null,r.createElement(l.a.Cell,{placement:"first",colSpan:2},r.createElement(C.a,{label:e,input:t,hasTooltip:Boolean(n)}),n&&r.createElement(b.a,{title:n})))}}var E=n("rJEJ");function _(e){const{input:t,tooltip:n}=e;return"symbol"===t.type&&t.optional?r.createElement(v,{input:t,tooltip:n}):"bool"===t.type?r.createElement(y,{label:Object(o.t)(t.name,{context:"input"}),input:t,tooltip:n}):r.createElement(E.a,{labelAlign:function(e){switch(e){case"session": +return"adaptive";case"time":return"topCenter";default:return}}(t.type),input:t,tooltip:n})}var O=n("07LS"),T=n("MALe");function S(e){const{content:t}=e;let n;return r.createElement(l.a.InlineRowContext.Provider,{value:!0},r.createElement("div",{className:T.inlineRow},t.children.map((e,s)=>(void 0!==e.tooltip&&(n=e.tooltip),r.createElement(_,{key:e.id,input:e,tooltip:s===t.children.length-1?n:void 0})))))}var w=n("M87J"),j=n("Jt4T");function x(e){const{content:t}=e;return Object(w.b)(t)?Object(w.c)(t)?r.createElement(S,{content:t}):r.createElement(r.Fragment,null,r.createElement("div",{className:j.titleWrap},r.createElement(O.a,{title:t.id,name:t.id})),t.children.map(e=>Object(w.b)(e)?r.createElement(S,{key:e.id,content:e}):r.createElement(_,{key:e.id,input:e,tooltip:e.tooltip})),r.createElement("div",{className:j.groupFooter})):r.createElement(_,{input:t,tooltip:t.tooltip})}n.d(t,"a",(function(){return N}));const k={offset:window.t("Offset")};class N extends a.a.PureComponent{render(){const{reference:e,inputs:t,property:n,study:s,model:o}=this.props,{offset:r,offsets:i}=n;return a.a.createElement(l.a,{reference:e},a.a.createElement(R,{study:s,model:o,property:n.inputs,inputs:t}),r&&this._createOffsetSection(r),i&&i.childNames().map(e=>{const t=i.childs()[e];return this._createOffsetSection(t)}))}_createOffsetSection(e){const t=e.childs();return a.a.createElement(R,{key:"offset_"+t.title.value(),study:this.props.study,model:this.props.model,inputs:[P(t)],property:e})}}function R(e){const{study:t,model:n,inputs:s,property:o}=e,l=Object(r.useMemo)(()=>Object(w.a)(s),[s]);return a.a.createElement(i.a,{property:o,study:t,model:n},l.map(e=>a.a.createElement(x,{key:e.id,content:e})))}function P(e){return{id:"val",name:e.title.value()||k.offset,defval:e.val.value(),type:"integer",min:e.min.value(),max:e.max.value()}}},GZ2k:function(e,t,n){},HGyE:function(e,t,n){"use strict";n.d(t,"b",(function(){return c})),n.d(t,"a",(function(){return u}));var s=n("q1tI"),o=n("TSYQ"),r=n.n(o),a=n("PECq"),i=n("HfwS"),l=n("tDS2");class c extends s.PureComponent{constructor(){super(...arguments),this._onChange=e=>{const{input:{id:t,name:n},onChange:s}=this.props;s(e,t,n)}}render(){const{input:{id:e,defval:t,options:n,optionsTitles:o},value:i,disabled:c,hasTooltip:u}=this.props,p=n.map(e=>{const t=o&&o[e]?o[e]:e;return{value:e,content:window.t(t,{context:"input"})}}),h=void 0!==i&&n.includes(i)?i:t;return s.createElement(a.a,{id:e,className:r()(l.input,u&&l.hasTooltip),menuClassName:l.dropdownMenu,value:h,items:p,onChange:this._onChange,disabled:c})}}const u=Object(i.a)(c)},HyYY:function(e,t,n){e.exports={icon:"icon-3oPFhRYI"}},Jt4T:function(e,t,n){e.exports={titleWrap:"titleWrap-24p2N42k",groupFooter:"groupFooter-24p2N42k"}},KJt4:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return r}));var s=n("q1tI");const o=s.createContext(null);function r(e,t){return s.createElement(o.Consumer,null,n=>n?s.createElement(e,{...Object.assign({model:n},t)}):null)}},M87J:function(e,t,n){"use strict";n.d(t,"b",(function(){ +return o})),n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return a}));var s=n("Eyy1");function o(e){return e.hasOwnProperty("groupType")}function r(e){return o(e)&&"inline"===e.groupType}function a(e){const t=[],n=new Map,o=new Map;return o.set(void 0,new Map),e.forEach(e=>{const{group:r,inline:a}=e;if(void 0!==r||void 0!==a)if(void 0!==r)if(void 0!==a)if(n.has(r)){const t=Object(s.ensureDefined)(n.get(r));let l;o.has(t)?l=Object(s.ensureDefined)(o.get(t)):(l=new Map,o.set(t,l)),i(e,"inline",a,l,t.children)}else{const s={id:a,groupType:"inline",children:[e]},i={id:r,groupType:"group",children:[s]},l=new Map;l.set(a,s),o.set(i,l),n.set(r,i),t.push(i)}else i(e,"group",r,n,t);else{const n=Object(s.ensureDefined)(o.get(void 0));i(e,"inline",Object(s.ensureDefined)(a),n,t)}else t.push(e)}),t}function i(e,t,n,o,r){if(o.has(n))Object(s.ensureDefined)(o.get(n)).children.push(e);else{const s={id:n,groupType:t,children:[e]};o.set(n,s),r.push(s)}}},MALe:function(e,t,n){e.exports={inlineRow:"inlineRow-3IOXimxZ"}},PjdP:function(e,t,n){"use strict";var s=n("q1tI"),o=n("ZAxB"),r=n("kk0y"),a=n("YS4w"),i=n("h5Dg"),l=n("TSYQ"),c=n.n(l),u=n("wHCJ"),p=n("HfwS"),h=n("Yi2Q"),d=n("tDS2");class m extends s.PureComponent{constructor(){super(...arguments),this._onChange=e=>{const{input:{id:t,name:n},onChange:s}=this.props;s(e.currentTarget.value,t,n)}}render(){const{input:{defval:e},value:t,disabled:n,onBlur:o,onKeyDown:r,hasTooltip:a}=this.props;return s.createElement(u.a,{className:c()(d.input,a&&d.hasTooltip),value:void 0===t?e:t,onChange:this._onChange,onBlur:o,onKeyDown:r,disabled:n})}}const f=Object(h.a)(m),b=Object(p.a)(f);var g=n("fV01"),v=n("Eyy1"),C=n("XDrA"),y=n("qZIh");function E(e=""){const[,t="",n="",s="",o=""]=Array.from(e.match(/^(\d\d)(\d\d)-(\d\d)(\d\d)/)||[]);return[`${t}:${n}`,`${s}:${o}`]}class _ extends s.PureComponent{constructor(e){super(e),this._onStartPick=e=>{this.setState({startTime:e},this._onChange)},this._onEndPick=e=>{this.setState({endTime:e},this._onChange)},this._onChange=()=>{const{input:{id:e,name:t},onChange:n}=this.props,{startTime:s,endTime:o}=this.state;n(s.replace(":","")+"-"+o.replace(":",""),e,t)};const t=e.value||e.input.defval,[n,s]=E(t);this.state={prevValue:t,startTime:n,endTime:s}}render(){const{startTime:e,endTime:t}=this.state,{hasTooltip:n}=this.props;return s.createElement(C.a,{className:c()(n&&d.hasTooltip)},s.createElement("div",{className:d.sessionStart},s.createElement(y.a,{className:c()(d.input,d.sessionInputContainer),name:"start",value:Object(v.ensureDefined)(e),onChange:this._onStartPick}),s.createElement("span",{className:d.sessionDash}," — ")),s.createElement("div",{className:d.sessionEnd},s.createElement(y.a,{className:c()(d.input,d.sessionInputContainer),name:"end",value:Object(v.ensureDefined)(t),onChange:this._onEndPick})))}static getDerivedStateFromProps(e,t){if(e.value===t.prevValue)return t;const[n,s]=E(e.value);return{prevValue:e.value,startTime:n,endTime:s}}}const O=Object(p.a)(_) +;var T=n("YFKU"),S=n("Kxc7"),w=n("0YCj"),j=n.n(w),x=n("+8gn"),k=n("HGyE"),N=n("5YG5");const R={open:window.t("open"),high:window.t("high"),low:window.t("low"),close:window.t("close"),hl2:window.t("hl2"),hlc3:window.t("hlc3"),ohlc4:window.t("ohlc4")};class P extends s.PureComponent{render(){const{input:e}=this.props,{study:t,model:n}=this.context;let o={...R};const r=Object(N.a)(t);if(t&&this._isStudy(t)&&t.isChildStudy()){const t=r.parentSource(),n=t.title(),s=j.a.getChildSourceInputTitles(e,t.metaInfo(),n);o={...o,...s}}if(S.enabled("study_on_study")&&t&&this._isStudy(t)&&(t.isChildStudy()||j.a.canBeChild(t.metaInfo()))){const e=[t,...r.getAllChildren()];n.model().allStudies().filter(t=>t.canHaveChildren()&&!e.includes(t)).forEach(e=>{const t=e.title(!0,void 0,!0),n=e.sourceId()||"#"+e.id(),s=e.metaInfo(),r=s.styles,a=s.plots||[];if(1===a.length)o[n+"$0"]=t;else if(a.length>1){const e=a.reduce((e,s,o)=>{if(!j.a.canPlotBeSourceOfChildStudy(s.type))return e;let a;try{a=Object(v.ensureDefined)(Object(v.ensureDefined)(r)[s.id]).title}catch(e){a=s.id}return{...e,[`${n}$${o}`]:`${t}: ${a}`}},{});o={...o,...e}}})}const a={...e,type:"text",options:Object.keys(o),optionsTitles:o};return s.createElement(k.a,{...this.props,input:a})}_isStudy(e){return!e.hasOwnProperty("isInputsStudy")}}P.contextType=x.b;var V=n("LxhU"),I=n("pPtI"),D=n("PECq");const B=void 0,M=["1","3","5","15","30","45","60","120","180","240","1D","1W","1M"];class q extends s.PureComponent{constructor(){super(...arguments),this._onChange=e=>{const{input:{id:t,name:n},onChange:s}=this.props;s(e,t,n)}}render(){const{input:e,value:t,disabled:n,hasTooltip:o}=this.props,r=V.Interval.parse(void 0===t?e.defval:t),a=r.multiplier();let i=r.value();const l=B?B.get().filter(e=>!V.Interval.parse(e).isRange()):[],u=Object(I.mergeResolutions)(M,l);return u.unshift(""),a&&u.includes(i)||(i=u[0]),s.createElement(D.a,{id:e.id,className:c()(d.input,d.resolution,o&&d.hasTooltip),menuClassName:c()(d.dropdownMenu,d.resolution),items:(p=u,p.map(e=>({value:e,content:""===e?Object(T.t)("Same as chart"):Object(I.getTranslatedResolutionModel)(e).hint}))),value:i,onChange:this._onChange,disabled:n});var p}}const W=Object(p.a)(q);var Y=n("lkVX"),F=n("Z1Tk");class H extends s.PureComponent{render(){return s.createElement(x.b.Consumer,null,e=>e?this._getColorInputWithContext(e):null)}_getColorInputWithContext(e){var t;const{input:{id:n},disabled:o,hasTooltip:r}=this.props,{model:a,study:i}=e;if("properties"in i||"tempProperties"in i){const e="properties"in i?i.properties().inputs[n]:null===(t=i.tempProperties)||void 0===t?void 0:t.inputs.child(n);return s.createElement(F.a,{model:a,property:e},s.createElement(Y.a,{className:c()(r&&d.hasTooltip),color:e,disabled:o}))}return null}}n.d(t,"a",(function(){return K}));class K extends s.PureComponent{render(){const{input:e,disabled:t,onChange:n,tzName:l,hasTooltip:c}=this.props;if(Object(o.b)(e))return s.createElement(k.a,{input:e,disabled:t,onChange:n,hasTooltip:c});switch(e.type){case"integer":return s.createElement(r.a,{input:e,disabled:t, +onChange:n,hasTooltip:c});case"float":case"price":return s.createElement(a.a,{input:e,disabled:t,onChange:n,hasTooltip:c});case"bool":return s.createElement(i.a,{input:e,disabled:t,onChange:n,hasTooltip:c});case"text":return s.createElement(b,{input:e,disabled:t,onChange:n,hasTooltip:c});case"symbol":return s.createElement(g.a,{input:e,disabled:t,onChange:n,hasTooltip:c});case"session":return s.createElement(O,{input:e,disabled:t,onChange:n,hasTooltip:c});case"source":return s.createElement(P,{input:e,disabled:t,onChange:n,hasTooltip:c});case"resolution":return s.createElement(W,{input:e,disabled:t,onChange:n,hasTooltip:c});case"time":return null;case"color":return s.createElement(H,{input:e,disabled:t,onChange:n,hasTooltip:c});default:return null}}}},S0KV:function(e,t,n){"use strict";function s(e){return Array.isArray(e)?e[0].value():e.value()}function o(e,t){if(Array.isArray(e))for(const n of e)t(n);else t(e)}n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return o}))},UYhW:function(e,t,n){"use strict";var s=n("q1tI"),o=n.n(s),r=n("Eyy1"),a=n("YFKU"),i=n("nc0P"),l=n("WboT"),c=n("EBrf"),u=n("Ialn");var p=n("zXvd"),h=n("Hr11");const d=Object(a.t)("Number format is invalid."),m=new class{constructor(e=" "){this._divider=e}format(e){const t=Object(c.splitThousands)(e,this._divider);return Object(u.isRtl)()?Object(u.startWithLTR)(t):t}parse(e){const t=Object(u.stripLTRMarks)(e).split(this._divider).join(""),n=Number(t);return isNaN(n)||/e/i.test(t)?{res:!1}:{res:!0,value:n,suggest:this.format(n)}}},f=/^-?[0-9]*$/,b=9e15;class g extends o.a.PureComponent{constructor(e){super(e),this._onFocus=e=>{this.setState({focused:!0}),this.props.onFocus&&this.props.onFocus(e)},this._onBlur=e=>{this.setState({displayValue:v(this.props,this.props.value),focused:!1}),this.props.errorHandler&&this.props.errorHandler(!1),this.props.onBlur&&this.props.onBlur(e)},this._onValueChange=e=>{const t=e.target.value;if(void 0!==this.props.onEmptyString&&""===t&&this.props.onEmptyString(),"integer"===this.props.mode&&!f.test(t))return;const n=C(t,this.props.formatter),s=n.res?this._checkValueBoundaries(n.value):{value:!1},o=n.res&&!s.value,r=n.res&&n.suggest&&!this.state.focused?n.suggest:t,a=o&&s.msg?s.msg:d;this.setState({displayValue:r,errorMsg:a}),n.res&&s.value&&this.props.onValueChange(n.value,"input"),this.props.errorHandler&&this.props.errorHandler(!n.res||o)},this._onValueByStepChange=e=>{const{roundByStep:t=!0,step:n=1,uiStep:s,min:o=n,formatter:r}=this.props,a=C(this.state.displayValue,r),l=null!=s?s:n;let c=n;if(a.res){const s=new i.Big(a.value),r=s.minus(o).mod(n);let u=s.plus(e*l);!r.eq(0)&&t&&(u=u.plus((e>0?0:1)*l).minus(r)),c=Number(u)}this._checkValueBoundaries(c).value&&(this.setState({displayValue:v(this.props,c)}),this.props.onValueChange(c,"step")),this.props.errorHandler&&this.props.errorHandler(!1)};const{value:t}=e;this.state={value:t,displayValue:v(e,t),focused:!1,errorMsg:d}}render(){return o.a.createElement(l.a,{inputMode:this.props.inputMode,borderStyle:this.props.borderStyle, +fontSizeStyle:this.props.fontSizeStyle,value:this.state.displayValue,forceShowControls:this.props.forceShowControls,className:this.props.className,inputClassName:this.props.inputClassName,button:this.props.button,placeholder:this.props.placeholder,innerLabel:this.props.innerLabel,endSlot:this.props.endSlot,disabled:this.props.disabled,error:this.props.error,errorMessage:this.props.errorMessage||this.state.errorMsg,onValueChange:this._onValueChange,onValueByStepChange:this._onValueByStepChange,containerReference:this.props.containerReference,inputReference:this.props.inputReference,onClick:this.props.onClick,onFocus:this._onFocus,onBlur:this._onBlur,onKeyDown:this.props.onKeyDown,controlDecKeyCodes:this.props.controlDecKeyCodes,controlIncKeyCodes:this.props.controlIncKeyCodes,title:this.props.title,intent:this.props.intent,highlight:this.props.highlight,highlightRemoveRoundBorder:this.props.highlightRemoveRoundBorder,stretch:this.props.stretch})}getClampedValue(){const{min:e=-1/0,max:t=b}=this.props,n=C(this.state.displayValue,this.props.formatter);return n.res?Object(h.clamp)(n.value,e,t):null}static getDerivedStateFromProps(e,t){const{alwaysUpdateValueFromProps:n,value:s}=e;return t.focused&&!n||t.value===s?null:{value:s,displayValue:v(e,s)}}_checkValueBoundaries(e){const{min:t=-1/0,max:n=b}=this.props,s=function(e,t,n){const s=e>=t,o=e<=n;return{passMin:s,passMax:o,pass:s&&o,clamped:Object(h.clamp)(e,t,n)}}(e,t,n),o=s.passMax?s.passMin?void 0:Object(a.t)("Specified value is less than the instrument minimum of {min}.").format({min:String(t)}):Object(a.t)("Specified value is more than the instrument maximum of {max}.").format({max:String(n)});return{value:s.pass,msg:o}}}function v(e,t){const{useFormatter:n=!0,formatter:s,mode:o}=e;return n&&"integer"!==o?function(e,t=m){return null!==e?t.format(e):""}(t,s):function(e){if(null===e)return"";return p.NumericFormatter.formatNoE(e)}(t)}function C(e,t=m){return t.parse?t.parse(e):{res:!1,error:"Formatter does not support parse"}}var y=n("qFKp");n.d(t,"a",(function(){return E}));class E extends s.PureComponent{constructor(){super(...arguments),this._container=null,this._handleContainerRef=e=>this._container=e,this._onChange=(e,t)=>{const{input:{id:n,name:s},onChange:o,onBlur:r}=this.props;o(e,n,s),"step"===t&&r&&r()},this._onBlur=e=>{const{onBlur:t}=this.props;if(t){const n=Object(r.ensureNotNull)(this._container);n.contains(document.activeElement)||n.contains(e.relatedTarget)||t()}}}render(){const{input:{defval:e,min:t,max:n,step:o},value:r,disabled:a,onKeyDown:i,className:l,mode:c,stretch:u}=this.props;return s.createElement(g,{className:l,value:Number(void 0===r?e:r),min:t,max:n,step:o,mode:c,onBlur:this._onBlur,onValueChange:this._onChange,onKeyDown:i,disabled:a,containerReference:this._handleContainerRef,inputMode:y.CheckMobile.iOS()?void 0:"numeric",fontSizeStyle:"medium",roundByStep:!1,stretch:u})}}},XDrA:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var s=n("q1tI"),o=n.n(s),r=n("TSYQ"),a=n("Q+1u"),i=n("tDS2");function l(e){ +const{className:t}=e,n=Object(s.useContext)(a.a.InlineRowContext);return o.a.createElement("div",{className:r(i.inputGroup,n&&i.inlineGroup,t)},e.children)}},YS4w:function(e,t,n){"use strict";n.d(t,"b",(function(){return p})),n.d(t,"a",(function(){return h}));var s=n("q1tI"),o=n("TSYQ"),r=n.n(o),a=n("UYhW"),i=n("HfwS"),l=n("Yi2Q"),c=n("tDS2");class u extends s.PureComponent{render(){const{hasTooltip:e}=this.props;return s.createElement(a.a,{...this.props,className:r()(c.input,e&&c.hasTooltip),stretch:!1})}}const p=Object(l.a)(u,{change:1/0,commit:0,blur:0}),h=Object(i.a)(p)},Yi2Q:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var s=n("q1tI");const o={blur:0,commit:0,change:1/0};function r(e,t=o){return class extends s.PureComponent{constructor(e){super(e),this._onChange=(e,n,s)=>{const o=t.change;o?(clearTimeout(this._timeout),this.setState({value:e},()=>{o!==1/0&&(this._timeout=setTimeout(()=>this._flush(),o))})):this._flush(e)},this._onBlur=()=>{this._debounce(t.blur);const{onBlur:e}=this.props;e&&e()},this._onKeyDown=e=>{13===e.keyCode&&this._debounce(t.commit)},this.state={prevValue:e.value,value:e.value}}componentWillUnmount(){this._flush()}render(){const{value:t}=this.state;return s.createElement(e,{...this.props,value:t,onChange:this._onChange,onBlur:this._onBlur,onKeyDown:this._onKeyDown})}static getDerivedStateFromProps(e,t){return e.value===t.prevValue?t:{prevValue:e.value,value:e.value}}_debounce(e){e?(clearTimeout(this._timeout),e!==1/0&&(this._timeout=setTimeout(()=>this._flush(),e))):this.setState(e=>{this._flush(e.value)})}_flush(e){const{input:{id:t,name:n},onChange:s}=this.props,{prevValue:o,value:r}=this.state;clearTimeout(this._timeout);const a=void 0!==e?e:r;void 0!==a&&a!==o&&s(a,t,n)}}}},Z1Tk:function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return a})),n.d(t,"c",(function(){return i}));var s=n("q1tI"),o=n("KJt4");const r=s.createContext(null);class a extends s.PureComponent{constructor(){super(...arguments),this._setValue=(e,t,n)=>{const{model:s}=this.props;s.setProperty(e,t,n)}}componentDidMount(){const{property:e}=this.props;e.subscribe(this,()=>this.forceUpdate())}componentWillUnmount(){const{property:e}=this.props;e.unsubscribeAll(this)}render(){const e={setValue:this._setValue};return s.createElement(r.Provider,{value:e},this.props.children)}}function i(e,t){return Object(o.b)(({model:n})=>s.createElement(a,{model:n,property:t.property},s.createElement(e,{...t})),t)}},b8Mn:function(e){e.exports=JSON.parse('{"radio":"radio-1cZENBYk","input":"input-303BGOua","box":"box-3rMRS-wv","reverse":"reverse-39E2s_WA","label":"label-3Xg_J0oJ","wrapper":"wrapper-1Law0ttl","noOutline":"noOutline-3-BkNnru"}')},h5Dg:function(e,t,n){"use strict";n.d(t,"b",(function(){return u})),n.d(t,"a",(function(){return p}));var s=n("q1tI"),o=n("fV0y"),r=n("TSYQ"),a=n.n(r),i=n("qFKp"),l=n("HfwS"),c=n("tDS2");class u extends s.PureComponent{constructor(){super(...arguments),this._onChange=()=>{const{input:{id:e,name:t},value:n,onChange:s}=this.props;s(!n,e,t)}}render(){ +const{input:{defval:e},value:t,disabled:n,label:r,hasTooltip:l}=this.props,u=void 0===t?e:t;return s.createElement(o.a,{className:a()(c.checkbox,l&&c.hasTooltip),disabled:n,checked:u,onChange:this._onChange,label:s.createElement("span",{className:c.label},r),labelAlignBaseline:!i.isIE})}}const p=Object(l.a)(u)},kk0y:function(e,t,n){"use strict";n.d(t,"b",(function(){return p})),n.d(t,"a",(function(){return h}));var s=n("q1tI"),o=n("TSYQ"),r=n.n(o),a=n("HfwS"),i=n("Yi2Q"),l=n("UYhW"),c=n("tDS2");class u extends s.PureComponent{render(){const{hasTooltip:e}=this.props;return s.createElement(l.a,{...this.props,mode:"integer",className:r()(c.input,e&&c.hasTooltip),stretch:!1})}}const p=Object(i.a)(u,{change:1/0,commit:0,blur:0}),h=Object(a.a)(p)},lkVX:function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));n("YFKU");var s=n("q1tI"),o=n.n(s),r=n("eJTA"),a=n("Tmoa"),i=n("Z1Tk"),l=n("7MId"),c=n("S0KV"),u=n("JWMC");const p=window.t("Change Thickness"),h=window.t("Change Color"),d=window.t("Change Opacity"),m=[1,2,3,4];class f extends o.a.PureComponent{constructor(){super(...arguments),this._trackEventLabel=null,this._getTransparencyValue=()=>{const{transparency:e}=this.props;return e?e.value():0},this._getOpacityValue=()=>{const{color:e}=this.props,t=Object(c.a)(e);if(t)return Object(a.isHexColor)(t)?Object(a.transparencyToAlpha)(this._getTransparencyValue()):Object(r.parseRgba)(t)[3]},this._getColorValueInHex=()=>{const{color:e}=this.props,t=Object(c.a)(e);return t?Object(a.isHexColor)(t)?t:Object(r.rgbToHexString)(Object(r.parseRgb)(t)):null},this._onThicknessChange=e=>{const{thickness:t}=this.props;void 0!==t&&this._setProperty(t,e,p)},this._onColorChange=e=>{const{color:t,isPaletteColor:n}=this.props,s=Object(c.a)(t);let o=0;s&&(o=Object(a.isHexColor)(s)?this._getTransparencyValue():Object(a.alphaToTransparency)(Object(r.parseRgba)(s)[3])),this._setProperty(t,Object(a.generateColor)(String(e),o,!0),h),this._trackEventLabel="Plot color > "+(n?"Palette":"Single")},this._onOpacityChange=e=>{const{color:t}=this.props,n=Object(c.a)(t);this._setProperty(t,Object(a.generateColor)(n,Object(a.alphaToTransparency)(e),!0),d)},this._onPopupClose=()=>{this._trackEventLabel&&(Object(u.trackEvent)("GUI","Study settings",this._trackEventLabel),this._trackEventLabel=null)}}componentWillUnmount(){this._onPopupClose()}render(){const{selectOpacity:e=!0,disabled:t,className:n}=this.props;return o.a.createElement(l.a,{className:n,disabled:t,color:this._getColorValueInHex(),selectOpacity:e,opacity:this._getOpacityValue(),thickness:this._getThicknessValue(),thicknessItems:m,onColorChange:this._onColorChange,onOpacityChange:this._onOpacityChange,onThicknessChange:this._onThicknessChange,onPopupClose:this._onPopupClose})}_getThicknessValue(){const{thickness:e}=this.props;return e?Object(c.a)(e):void 0}_setProperty(e,t,n){const{setValue:s}=this.context;Object(c.b)(e,e=>s(e,t,n))}}f.contextType=i.b},qzWo:function(e,t,n){"use strict";n.d(t,"a",(function(){return m})) +;var s=n("q1tI"),o=n.n(s),r=n("TSYQ"),a=n.n(r),i=n("Iivm"),l=n("+6II"),c=n("8+VR"),u=n("HyYY"),p=n("xJ0h");function h(){document.removeEventListener("scroll",h),document.removeEventListener("touchstart",h),Object(l.a)()}function d(e){c.mobiletouch&&(Object(l.c)(e.currentTarget,{tooltipDelay:0}),document.addEventListener("scroll",h),document.addEventListener("touchstart",h))}function m(e){const{title:t}=e;return o.a.createElement(i.a,{icon:p,className:a()("apply-common-tooltip",u.icon),title:t,onClick:d})}},rJEJ:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));n("YFKU");var s=n("q1tI"),o=n("Eyy1"),r=n("PjdP"),a=n("Q+1u"),i=n("qzWo");class l extends s.PureComponent{render(){const{label:e,children:t,input:n,disabled:l,onChange:c,labelAlign:u,grouped:p,tooltip:h,offset:d}=this.props;return s.createElement(a.a.Row,null,s.createElement(a.a.Cell,{placement:"first",verticalAlign:u,grouped:p,offset:d},void 0!==e?e:window.t(Object(o.ensureDefined)(n).name,{context:"input"})),s.createElement(a.a.Cell,{placement:"last",grouped:p},t||s.createElement(r.a,{input:Object(o.ensureDefined)(n),onChange:c,disabled:l,hasTooltip:Boolean(h)}),h&&s.createElement(i.a,{title:h})))}}},tDS2:function(e,t,n){e.exports={input:"input-1zfqRRWX",resolution:"resolution-1zfqRRWX",symbol:"symbol-1zfqRRWX",checkbox:"checkbox-1zfqRRWX",label:"label-1zfqRRWX",dropdownMenu:"dropdownMenu-1zfqRRWX",sessionStart:"sessionStart-1zfqRRWX",sessionEnd:"sessionEnd-1zfqRRWX",sessionInputContainer:"sessionInputContainer-1zfqRRWX",sessionDash:"sessionDash-1zfqRRWX",inputGroup:"inputGroup-1zfqRRWX",inlineGroup:"inlineGroup-1zfqRRWX",hasTooltip:"hasTooltip-1zfqRRWX"}},xJ0h:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/56.b3e69145c0fee614443d.js b/static/charting_library/bundles/56.b3e69145c0fee614443d.js new file mode 100644 index 0000000..2739321 --- /dev/null +++ b/static/charting_library/bundles/56.b3e69145c0fee614443d.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{"0lNN":function(e,t,n){"use strict";var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n.n(i),l=n("Eyy1"),a=n("Hr11"),s=n("Ialn");const u=n("0lTl");function f(e){const{size:t,scrollSize:n,clientSize:i,scrollProgress:f,onScrollProgressChange:v,horizontal:d,theme:m=u,onDragStart:h,onDragEnd:b,minBarSize:g=40}=e,p=Object(o.useRef)(null),E=Object(o.useRef)(null),[w,O]=Object(o.useState)(!1),N=Object(o.useRef)(0);Object(o.useEffect)(()=>{const e=Object(l.ensureNotNull)(p.current).ownerDocument;return w?(h&&h(),e&&(e.addEventListener("mousemove",x),e.addEventListener("mouseup",T))):b&&b(),()=>{e&&(e.removeEventListener("mousemove",x),e.removeEventListener("mouseup",T))}},[w]);const C=t/n||0,j=i*C||0,k=Math.max(j,g),I=(t-k)/(t-j),S=function(e){if(Object(s.isRtl)()&&d)return e-n+i;return e}(Object(a.clamp)(f,0,n-t));return r.a.createElement("div",{ref:p,className:c()(m.wrap,d&&m["wrap--horizontal"]),style:{[d?"width":"height"]:t},onMouseDown:function(e){if(e.isDefaultPrevented())return;e.preventDefault();const o=Object(l.ensureNotNull)(E.current).getBoundingClientRect();N.current=(d?o.width:o.height)/2;const r=n-t;let i=D(e.nativeEvent,Object(l.ensureNotNull)(p.current))-N.current;i<0?(i=0,N.current=D(e.nativeEvent,Object(l.ensureNotNull)(p.current))):i>r*C*I&&(i=r*C*I,N.current=D(e.nativeEvent,Object(l.ensureNotNull)(p.current))-i);v(i/C/I),O(!0)}},r.a.createElement("div",{ref:E,className:c()(m.bar,d&&m["bar--horizontal"]),style:{[d?"minWidth":"minHeight"]:g,[d?"width":"height"]:k,transform:`translate${d?"X":"Y"}(${S*C*I||0}px)`},onMouseDown:function(e){e.preventDefault(),N.current=D(e.nativeEvent,Object(l.ensureNotNull)(E.current)),O(!0)}},r.a.createElement("div",{className:c()(m.barInner,d&&m["barInner--horizontal"])})));function x(e){const t=D(e,Object(l.ensureNotNull)(p.current))-N.current;v(t/C/I)}function T(e){O(!1)}function D(e,t){const n=t.getBoundingClientRect();return d?e.clientX-n.left:e.clientY-n.top}}var v=n("8d0Q"),d=n("ya27");n.d(t,"a",(function(){return m}));function m(e){const{reference:t,className:n,containerHeight:c=0,containerWidth:l=0,contentHeight:a=0,contentWidth:s=0,scrollPosTop:u=0,scrollPosLeft:m=0,onVerticalChange:h,onHorizontalChange:b,visible:g}=e,[p,E]=Object(v.c)(),[w,O]=Object(o.useState)(!1),N=c{const t=t=>{if(null===e.current)return;const o=e.current.contains(t.target);n(o)};return document.addEventListener("mouseover",t),()=>document.removeEventListener("mouseover",t)},[]),t}n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return c}))},"9S1y":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var o=n("q1tI");function r(){const[e,t]=Object(o.useState)(null);return[Object(o.useCallback)(n=>{n.width===(null==e?void 0:e.width)&&n.height===e.height||t(n)},[e]),e]}},"9dlw":function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var o=n("q1tI"),r=n.n(o),i=n("i8i4"),c=n.n(i),l=n("AiMB"),a=n("DTHj"),s=n("X0gx"),u=n("8Rai");function f(e){const{controller:t,children:n,isOpened:i,closeOnClickOutside:f=!0,doNotCloseOn:v,onClickOutside:d,onClose:m,...h}=e,b=Object(o.useContext)(s.a),g=Object(u.a)({handler:function(e){d&&d(e);if(!f)return;if(v&&e.target instanceof Node){const t=c.a.findDOMNode(v);if(t instanceof Node&&t.contains(e.target))return}m()},mouseDown:!0,touchStart:!0});return i?r.a.createElement(l.a,{top:"0",left:"0",right:"0",bottom:"0",pointerEvents:"none"},r.a.createElement("span",{ref:g,style:{pointerEvents:"auto"}},r.a.createElement(a.b,{...h,onClose:m,onScroll:function(t){const{onScroll:n}=e;n&&n(t)},customCloseDelegate:b,ref:t},n))):null}},N5tr:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return d}));var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n("tWVy"),l=n("JWMC"),a=n("ijHL"),s=n("v1bN");const u=s;function f(e){const{reference:t,...n}=e,o={...n,ref:t};return r.a.createElement(e.href?"a":"div",o)}function v(e){e.stopPropagation()}function d(e){const{id:t,role:n,"aria-selected":u,className:d,title:m,labelRowClassName:h,labelClassName:b,shortcut:g,forceShowShortcuts:p,icon:E,isActive:w,isDisabled:O,isHovered:N,appearAsDisabled:C,label:j,link:k,showToolboxOnHover:I,target:S,rel:x,toolbox:T,reference:D,onMouseOut:L,onMouseOver:B,suppressToolboxClick:A=!0,theme:z=s}=e,M=Object(a.b)(e),y=Object(o.useRef)(null);return r.a.createElement(f,{...M,id:t,role:n,"aria-selected":u,className:i(d,z.item,E&&z.withIcon,{[z.isActive]:w,[z.isDisabled]:O||C,[z.hovered]:N}),title:m,href:k,target:S,rel:x,reference:function(e){y.current=e,"function"==typeof D&&D(e);"object"==typeof D&&(D.current=e)},onClick:function(t){const{dontClosePopup:n,onClick:o,onClickArg:r,trackEventObject:i}=e;if(O)return;i&&Object(l.trackEvent)(i.category,i.event,i.label);o&&o(r,t);n||Object(c.b)()},onContextMenu:function(t){const{trackEventObject:n,trackRightClick:o}=e;n&&o&&Object(l.trackEvent)(n.category,n.event,n.label+"_rightClick")},onMouseUp:function(t){const{trackEventObject:n,trackMouseWheelClick:o}=e;if(1===t.button&&k&&n){ +let e=n.label;o&&(e+="_mouseWheelClick"),Object(l.trackEvent)(n.category,n.event,e)}},onMouseOver:B,onMouseOut:L},void 0!==E&&r.a.createElement("div",{className:z.icon,dangerouslySetInnerHTML:{__html:E}}),r.a.createElement("div",{className:i(z.labelRow,h)},r.a.createElement("div",{className:i(z.label,b)},j)),(void 0!==g||p)&&r.a.createElement("div",{className:z.shortcut},(P=g)&&P.split("+").join(" + ")),void 0!==T&&r.a.createElement("div",{onClick:A?v:void 0,className:i(z.toolbox,{[z.showOnHover]:I})},T));var P}},To8B:function(e,t){e.exports=''},XfUw:function(e,t){e.exports=''},fEjm:function(e,t,n){e.exports={favorite:"favorite-I_fAY9V2",disabled:"disabled-I_fAY9V2",active:"active-I_fAY9V2",checked:"checked-I_fAY9V2"}},gM3K:function(e,t,n){"use strict";n.d(t,"a",(function(){return f}));var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n.n(i),l=n("qFKp"),a=n("pr86"),s=n("i/MG"),u=n("xp8i");function f(e){const{url:t,title:n,subtitle:o,removeBtnLabel:i,onClick:f,onClickFavorite:d,onClickRemove:m,isActive:h,isSelected:b,isFavorite:g,isMobile:p=!1,showFavorite:E=!0,...w}=e;return r.a.createElement("a",{...w,className:c()(u.itemRow,h&&!b&&u.active,p&&u.mobile,b&&u.selected),onClick:v.bind(null,f),href:t,"data-role":"list-item","data-active":h},E&&d&&r.a.createElement(a.a,{className:c()(u.favoriteButton,g&&u.favorite,l.CheckMobile.any()&&u.mobile),isActive:h&&!b,isFilled:g,onClick:v.bind(null,d),"data-name":"list-item-favorite-button","data-favorite":g}),r.a.createElement("div",{className:c()(u.itemInfo,!E&&u.itemInfoWithPadding)},r.a.createElement("div",{className:c()(u.title,h&&!b&&u.active,p&&u.mobile),"data-name":"list-item-title"},n),r.a.createElement("div",{className:c()(u.details,h&&!b&&u.active,p&&u.mobile)},o)),r.a.createElement(s.a,{className:u.removeButton,isActive:h&&!b,onClick:v.bind(null,m),"data-name":"list-item-remove-button",title:i}))}function v(e,t){t.defaultPrevented||(t.preventDefault(),e(t))}},"i/MG":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));n("YFKU");var o=n("q1tI"),r=n("TSYQ"),i=n("Iivm"),c=n("To8B"),l=n("kXJy");const a={remove:window.t("Remove")};function s(e){const{className:t,isActive:n,onClick:s,title:u,hidden:f,"data-name":v="remove-button",...d}=e;return o.createElement(i.a,{...d,"data-name":v,className:r(l.button,"apply-common-tooltip",n&&l.active,f&&l.hidden,t),icon:c,onClick:s,title:u||a.remove})}},kXJy:function(e,t,n){e.exports={button:"button-3B9fDLtm",disabled:"disabled-3B9fDLtm",active:"active-3B9fDLtm",hidden:"hidden-3B9fDLtm" +}},n9z6:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var o=n("q1tI"),r=n("Eyy1"),i=n("8d0Q"),c=n("qFKp");const l={onMouseOver:()=>{},onMouseOut:()=>{}};function a(e,t=c.CheckMobile.any()){const n=Object(o.useRef)(null),a=e||Object(o.useRef)(null),[s,u]=Object(i.c)(),[f,v]=Object(o.useState)({reference:n,containerHeight:0,containerWidth:0,contentHeight:0,contentWidth:0,scrollPosTop:0,scrollPosLeft:0,onVerticalChange:function(e){v(t=>({...t,scrollPosTop:e})),Object(r.ensureNotNull)(a.current).scrollTop=e},onHorizontalChange:function(e){v(t=>({...t,scrollPosLeft:e})),Object(r.ensureNotNull)(a.current).scrollLeft=e},visible:s}),d=Object(o.useCallback)(()=>{if(!a.current)return;const{clientHeight:e,scrollHeight:t,scrollTop:o,clientWidth:r,scrollWidth:i,scrollLeft:c}=a.current,l=n.current?n.current.offsetTop:0;v(n=>({...n,containerHeight:e-l,contentHeight:t-l,scrollPosTop:o,containerWidth:r,contentWidth:i,scrollPosLeft:c}))},[]);function m(){v(e=>({...e,scrollPosTop:Object(r.ensureNotNull)(a.current).scrollTop,scrollPosLeft:Object(r.ensureNotNull)(a.current).scrollLeft}))}return Object(o.useEffect)(()=>{s&&d(),v(e=>({...e,visible:s}))},[s]),Object(o.useEffect)(()=>{const e=a.current;return e&&e.addEventListener("scroll",m),()=>{e&&e.removeEventListener("scroll",m)}},[a]),[f,t?l:u,a,d]}},pr86:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));n("YFKU");var o=n("q1tI"),r=n("TSYQ"),i=n("Iivm"),c=n("sg5d"),l=n("XfUw"),a=n("fEjm");const s={add:window.t("Add to favorites"),remove:window.t("Remove from favorites")};function u(e){const{className:t,isFilled:n,isActive:u,onClick:f,...v}=e;return o.createElement(i.a,{...v,className:r(a.favorite,"apply-common-tooltip",n&&a.checked,u&&a.active,t),icon:n?c:l,onClick:f,title:n?s.remove:s.add})}},sg5d:function(e,t){e.exports=''},v1bN:function(e,t,n){e.exports={"tablet-small-breakpoint":"screen and (max-width: 428px)",item:"item-2IihgTnv",hovered:"hovered-2IihgTnv",isDisabled:"isDisabled-2IihgTnv",isActive:"isActive-2IihgTnv",shortcut:"shortcut-2IihgTnv",toolbox:"toolbox-2IihgTnv",withIcon:"withIcon-2IihgTnv",icon:"icon-2IihgTnv",labelRow:"labelRow-2IihgTnv",label:"label-2IihgTnv",showOnHover:"showOnHover-2IihgTnv"}},xp8i:function(e,t,n){e.exports={itemRow:"itemRow-1SBAfF8E",favoriteButton:"favoriteButton-1SBAfF8E",active:"active-1SBAfF8E",selected:"selected-1SBAfF8E",mobile:"mobile-1SBAfF8E",itemInfo:"itemInfo-1SBAfF8E",title:"title-1SBAfF8E",details:"details-1SBAfF8E",itemInfoWithPadding:"itemInfoWithPadding-1SBAfF8E",favorite:"favorite-1SBAfF8E",removeButton:"removeButton-1SBAfF8E"}},ya27:function(e,t,n){e.exports={scrollWrap:"scrollWrap-2LZ1ZhWc"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/57.236996ec416da4c1f683.js b/static/charting_library/bundles/57.236996ec416da4c1f683.js new file mode 100644 index 0000000..ddaca20 --- /dev/null +++ b/static/charting_library/bundles/57.236996ec416da4c1f683.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{"1TxM":function(e,t,n){"use strict";n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return u}));var o=n("q1tI"),r=n.n(o),i=n("17x9"),c=n.n(i);const l=r.a.createContext({});function a(e,t){c.a.checkPropTypes(t,e,"context","RegistryContext")}function s(e){const{validation:t,value:n}=e;return a(n,t),r.a.createElement(l.Provider,{value:n},e.children)}function u(){return l}},"8d0Q":function(e,t,n){"use strict";var o=n("q1tI");function r(){const[e,t]=Object(o.useState)(!1);return[e,{onMouseOver:function(e){i(e)&&t(!0)},onMouseOut:function(e){i(e)&&t(!1)}}]}function i(e){return!e.currentTarget.contains(e.relatedTarget)}function c(e){const[t,n]=Object(o.useState)(!1);return Object(o.useEffect)(()=>{const t=t=>{if(null===e.current)return;const o=e.current.contains(t.target);n(o)};return document.addEventListener("mouseover",t),()=>document.removeEventListener("mouseover",t)},[]),t}n.d(t,"c",(function(){return r})),n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return c}))},"9dlw":function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var o=n("q1tI"),r=n.n(o),i=n("i8i4"),c=n.n(i),l=n("AiMB"),a=n("DTHj"),s=n("X0gx"),u=n("8Rai");function d(e){const{controller:t,children:n,isOpened:i,closeOnClickOutside:d=!0,doNotCloseOn:v,onClickOutside:f,onClose:m,...h}=e,b=Object(o.useContext)(s.a),g=Object(u.a)({handler:function(e){f&&f(e);if(!d)return;if(v&&e.target instanceof Node){const t=c.a.findDOMNode(v);if(t instanceof Node&&t.contains(e.target))return}m()},mouseDown:!0,touchStart:!0});return i?r.a.createElement(l.a,{top:"0",left:"0",right:"0",bottom:"0",pointerEvents:"none"},r.a.createElement("span",{ref:g,style:{pointerEvents:"auto"}},r.a.createElement(a.b,{...h,onClose:m,onScroll:function(t){const{onScroll:n}=e;n&&n(t)},customCloseDelegate:b,ref:t},n))):null}},HD8h:function(e,t,n){e.exports={item:"item-21ifTYt7",label:"label-21ifTYt7",labelRow:"labelRow-21ifTYt7",toolbox:"toolbox-21ifTYt7"}},KKsp:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var o=n("q1tI"),r=n("TSYQ"),i=n.n(r),c=n("NOPy");function l(e){const{size:t="normal",className:n}=e;return o.createElement("div",{className:i()(c.separator,"small"===t&&c.small,"normal"===t&&c.normal,"large"===t&&c.large,n)})}},N5tr:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return f}));var o=n("q1tI"),r=n.n(o),i=n("TSYQ"),c=n("tWVy"),l=n("JWMC"),a=n("ijHL"),s=n("v1bN");const u=s;function d(e){const{reference:t,...n}=e,o={...n,ref:t};return r.a.createElement(e.href?"a":"div",o)}function v(e){e.stopPropagation()}function f(e){const{id:t,role:n,"aria-selected":u,className:f,title:m,labelRowClassName:h,labelClassName:b,shortcut:g,forceShowShortcuts:p,icon:w,isActive:y,isDisabled:E,isHovered:T,appearAsDisabled:O,label:k,link:x,showToolboxOnHover:C,target:I,rel:N,toolbox:j,reference:S,onMouseOut:M,onMouseOver:D,suppressToolboxClick:P=!0,theme:R=s}=e,A=Object(a.b)(e),H=Object(o.useRef)(null);return r.a.createElement(d,{...A, +id:t,role:n,"aria-selected":u,className:i(f,R.item,w&&R.withIcon,{[R.isActive]:y,[R.isDisabled]:E||O,[R.hovered]:T}),title:m,href:x,target:I,rel:N,reference:function(e){H.current=e,"function"==typeof S&&S(e);"object"==typeof S&&(S.current=e)},onClick:function(t){const{dontClosePopup:n,onClick:o,onClickArg:r,trackEventObject:i}=e;if(E)return;i&&Object(l.trackEvent)(i.category,i.event,i.label);o&&o(r,t);n||Object(c.b)()},onContextMenu:function(t){const{trackEventObject:n,trackRightClick:o}=e;n&&o&&Object(l.trackEvent)(n.category,n.event,n.label+"_rightClick")},onMouseUp:function(t){const{trackEventObject:n,trackMouseWheelClick:o}=e;if(1===t.button&&x&&n){let e=n.label;o&&(e+="_mouseWheelClick"),Object(l.trackEvent)(n.category,n.event,e)}},onMouseOver:D,onMouseOut:M},void 0!==w&&r.a.createElement("div",{className:R.icon,dangerouslySetInnerHTML:{__html:w}}),r.a.createElement("div",{className:i(R.labelRow,h)},r.a.createElement("div",{className:i(R.label,b)},k)),(void 0!==g||p)&&r.a.createElement("div",{className:R.shortcut},(L=g)&&L.split("+").join(" + ")),void 0!==j&&r.a.createElement("div",{onClick:P?v:void 0,className:i(R.toolbox,{[R.showOnHover]:C})},j));var L}},NOPy:function(e,t,n){e.exports={separator:"separator-eqcGT_ow",small:"small-eqcGT_ow",normal:"normal-eqcGT_ow",large:"large-eqcGT_ow"}},dhVi:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var o=n("nPPD"),r=n("v1bN"),i=n("HD8h");const c=Object(o.a)(r,i)},v1bN:function(e,t,n){e.exports={"tablet-small-breakpoint":"screen and (max-width: 428px)",item:"item-2IihgTnv",hovered:"hovered-2IihgTnv",isDisabled:"isDisabled-2IihgTnv",isActive:"isActive-2IihgTnv",shortcut:"shortcut-2IihgTnv",toolbox:"toolbox-2IihgTnv",withIcon:"withIcon-2IihgTnv",icon:"icon-2IihgTnv",labelRow:"labelRow-2IihgTnv",label:"label-2IihgTnv",showOnHover:"showOnHover-2IihgTnv"}},"x0D+":function(e,t,n){var o,r,i;r=[t],void 0===(i="function"==typeof(o=function(e){"use strict";function t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t{this._slider=e}}))}_generateTabs(){return this.activeTab.current=null,a.Children.map(this.props.children,e=>{const t=e,r=Boolean(t.props.isActive),n={reference:e=>{r&&(this.activeTab.current=e),t.props.reference&&t.props.reference(e)}};return a.cloneElement(t,n)})}_componentDidUpdate(){const e=Object(o.ensureNotNull)(this._slider).style;if(this.activeTab.current){const t=this.activeTab.current.offsetWidth,r=this.activeTab.current.offsetLeft;e.transform=`translateX(${r}px)`,e.width=t+"px",e.opacity="1"}else e.opacity="0"}}}c((function(e){return a.createElement("div",{className:s.slider,ref:e.reference})}))},LWBq:function(e,t,r){"use strict";var a=r("q1tI"),n=r("ybVX");const o={"Elliott Impulse Wave (12345)Degree":"normal","Elliott Triangle Wave (ABCDE)Degree":"normal","Elliott Triple Combo Wave (WXYXZ)Degree":"normal","Elliott Correction Wave (ABC)Degree":"normal","Elliott Double Combo Wave (WXY)Degree":"normal",BarsPatternMode:"normal",StudyInputSource:"normal"},s={TextText:"big",AnchoredTextText:"big",NoteText:"big",AnchoredNoteText:"big",CalloutText:"big",BalloonText:"big"};var l=r("Q+1u"),i=r("bvfV");function c(e){return a.createElement(n.a.Provider,{value:s},a.createElement(n.b.Provider,{value:o},e.page&&a.createElement(l.a,{reference:e.pageRef,key:e.tableKey},e.page.definitions.value().map(e=>a.createElement(i.a,{key:e.id,definition:e})))))}r.d(t,"a",(function(){return c}))},aDg1:function(e,t,r){ +"use strict";var a=r("q1tI"),n=r("TSYQ"),o=r("K3s3"),s=r("nPPD"),l=r("dMmr");const i=Object(s.a)(o.a,l);var c=r("4Cm8"),u=r("8+VR"),d=r("5VK0");r.d(t,"a",(function(){return p}));const m=d,f=Object(o.c)((function(e){return a.createElement("div",{className:i.slider,ref:e.reference},a.createElement("div",{className:i.inner}))}));class p extends a.PureComponent{constructor(){super(...arguments),this._createClickHandler=e=>()=>{this.props.onSelect(e)}}render(){const{theme:e=m,hiddenBottomBorders:t,fadedSlider:r=!0,ScrollComponent:o=c.a}=this.props,s=this._generateDialogTabs();return a.createElement("div",{className:n(e.scrollWrap)},!t&&a.createElement("div",{className:e.headerBottomSeparator}),a.createElement(o,{isVisibleFade:u.mobiletouch,isVisibleButtons:!u.mobiletouch,isVisibleScrollbar:!1,fadeClassName:n({[e.fadeWithoutSlider]:!r})},a.createElement("div",{className:e.tabsWrap},a.createElement(f,{className:n(e.tabs,t&&e.withoutBorder)},s))))}_generateDialogTabs(){const{activeTabId:e,tabs:t,theme:r=m}=this.props;return t.allIds.map(s=>{const l=e===s;return a.createElement(o.b,{key:s,value:s,className:n(r.tab,!l&&r.withHover),isActive:l,onClick:this._createClickHandler(s)},t.byId[s].title)})}}},dMmr:function(e,t,r){e.exports={slider:"slider-3RfwXbxu",inner:"inner-3RfwXbxu"}},lpmA:function(e,t,r){e.exports={themesButtonText:"themesButtonText-3JA3MxY8",themesButtonIcon:"themesButtonIcon-3JA3MxY8",defaultsButtonText:"defaultsButtonText-3JA3MxY8",defaultsButtonItem:"defaultsButtonItem-3JA3MxY8"}},pLAj:function(e,t,r){"use strict";var a=r("q1tI"),n=r.n(a),o=(r("/MKj"),r("bSeV"),r("Iivm")),s=r("K+KL"),l=r("/KDZ"),i=r("N5tr"),c=r("i/MG"),u=r("8d0Q"),d=r("8+VR"),m=r("lpmA");function f(e){const{name:t,onRemove:r,onClick:n}=e,[o,s]=Object(u.c)(),l=a.useCallback(()=>n(t),[n,t]),f=a.useCallback(()=>{r&&r(t)},[r,t]);return a.createElement("div",{...s},a.createElement(i.b,{className:m.defaultsButtonItem,isActive:!1,label:t,onClick:l,toolbox:r&&a.createElement(c.a,{hidden:!d.mobiletouch&&!o,onClick:f})}))}var p=r("HWhk");function h(e){const{model:t,source:r}=e;return n.a.createElement(l.a,{rule:"screen and (max-width: 768px)"},e=>n.a.createElement(s.a,{className:!e&&m.themesButtonText,hideArrowButton:e,buttonChildren:e?n.a.createElement(o.a,{className:m.themesButtonIcon,icon:p}):window.t("Template")},n.a.createElement(f,{onClick:a,name:window.t("Apply Defaults")})));function a(){t.restorePropertiesForSource(r)}}function b(e){return n.a.createElement(h,{...e})}r.d(t,"a",(function(){return b}))},vHME:function(e,t,r){"use strict";r.d(t,"a",(function(){return m}));var a=r("q1tI"),n=r("TSYQ"),o=r.n(n),s=(r("YFKU"),r("Iivm")),l=r("K+KL"),i=r("N5tr"),c=r("HWhk"),u=r("wt3x");const d={reset:window.t("Reset Settings"),saveAsDefault:window.t("Save As Default"),defaults:window.t("Defaults")};class m extends a.PureComponent{constructor(){super(...arguments),this._handleResetToDefaults=()=>{this.props.model.restorePropertiesForSource(this.props.source)},this._handleSaveAsDefaults=()=>{this.props.source.properties().saveDefaults()}}render(){ +const{mode:e}=this.props;return a.createElement(l.a,{id:"study-defaults-manager",className:o()("normal"===e&&u.defaultsButtonText),hideArrowButton:"compact"===e,buttonChildren:this._getPlaceHolderItem("compact"===e)},a.createElement(i.b,{className:u.defaultsButtonItem,isActive:!1,label:d.reset,onClick:this._handleResetToDefaults}),a.createElement(i.b,{className:u.defaultsButtonItem,isActive:!1,label:d.saveAsDefault,onClick:this._handleSaveAsDefaults}))}_getPlaceHolderItem(e){return e?a.createElement(s.a,{className:u.defaultsButtonIcon,icon:c}):d.defaults}}},wt3x:function(e,t,r){e.exports={defaultsButtonText:"defaultsButtonText-3mn75BN0",defaultsButtonItem:"defaultsButtonItem-3mn75BN0",defaultsButtonIcon:"defaultsButtonIcon-3mn75BN0"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/59.397cb6699b74d64072a8.js b/static/charting_library/bundles/59.397cb6699b74d64072a8.js new file mode 100644 index 0000000..e488fa9 --- /dev/null +++ b/static/charting_library/bundles/59.397cb6699b74d64072a8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[59],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/59.418f1db161eefae63284.css b/static/charting_library/bundles/59.418f1db161eefae63284.css new file mode 100644 index 0000000..901c3f3 --- /dev/null +++ b/static/charting_library/bundles/59.418f1db161eefae63284.css @@ -0,0 +1 @@ +.input-1zfqRRWX{height:34px;margin-right:12px;width:100px}.input-1zfqRRWX.resolution-1zfqRRWX,.input-1zfqRRWX.symbol-1zfqRRWX{width:150px}.input-1zfqRRWX:last-child{margin-right:0}.checkbox-1zfqRRWX{max-width:100%}.checkbox-1zfqRRWX .label-1zfqRRWX{display:inline-block;max-width:100%;min-width:0;overflow-wrap:break-word;vertical-align:top}.checkbox-1zfqRRWX .label-1zfqRRWX:first-letter{text-transform:capitalize}.dropdownMenu-1zfqRRWX{min-width:100px}.dropdownMenu-1zfqRRWX.resolution-1zfqRRWX{width:150px}.sessionEnd-1zfqRRWX,.sessionStart-1zfqRRWX{align-items:center;display:inline-flex}.sessionInputContainer-1zfqRRWX{margin-right:0}.sessionDash-1zfqRRWX{flex:1 0 auto}.inputGroup-1zfqRRWX{align-items:center;display:flex}@media screen and (max-width:379px){.input-1zfqRRWX{margin-bottom:8px}.input-1zfqRRWX:last-child{margin-bottom:0}.inputGroup-1zfqRRWX{display:block}.inputGroup-1zfqRRWX.inlineGroup-1zfqRRWX{display:flex}.inputGroup-1zfqRRWX.inlineGroup-1zfqRRWX .sessionStart-1zfqRRWX,.sessionInputContainer-1zfqRRWX{margin-bottom:0}.sessionStart-1zfqRRWX{margin-bottom:8px}.sessionEnd-1zfqRRWX{display:block}}.hasTooltip-1zfqRRWX{margin-right:9px}.icon-3oPFhRYI{color:#787b86;height:18px;width:18px}.radio-1cZENBYk{-webkit-tap-highlight-color:transparent;align-items:center;cursor:default;display:inline-flex;font-size:14px;font-stretch:normal;font-style:normal;font-weight:400;letter-spacing:normal;line-height:normal;position:relative;-webkit-user-select:none;user-select:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.radio-1cZENBYk:hover .input-303BGOua:not(:focus):not(:disabled)+.box-3rMRS-wv:before{border-color:#a3a6af}html.theme-dark .radio-1cZENBYk:hover .input-303BGOua:not(:focus):not(:disabled)+.box-3rMRS-wv:before{border-color:#5d606b}.radio-1cZENBYk:hover .input-303BGOua:checked:not(:focus):not(:disabled)+.box-3rMRS-wv:before,html.theme-dark .radio-1cZENBYk:hover .input-303BGOua:checked:not(:focus):not(:disabled)+.box-3rMRS-wv:before{border-color:#1e53e5}}.radio-1cZENBYk.reverse-39E2s_WA{flex-direction:row-reverse}.radio-1cZENBYk.reverse-39E2s_WA .label-3Xg_J0oJ{margin-left:0;margin-right:8px}.radio-1cZENBYk .wrapper-1Law0ttl{display:inline-block;flex-shrink:0;height:18px;position:relative;width:18px}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv{display:inline-block;height:100%;position:relative;width:100%}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:before{background-color:initial;border:1px solid #b2b5be;border-radius:50%;box-sizing:border-box;content:"";height:100%;position:absolute;transition:border-color .35s ease;width:100%}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:before{border:1px solid #50535e}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:after{border:2px solid #2962ff80;border-radius:50%;box-sizing:border-box;content:"";height:26px;left:-4px;opacity:0;position:absolute;top:-4px;transform:scale(.69231);width:26px}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:after{border:2px solid #2962ff80}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv.noOutline-3-BkNnru:after{content:none}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua{cursor:inherit;height:100%;left:0;margin:0;opacity:0;padding:0;position:absolute;top:0;width:100%}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:active:not(:disabled)+.box-3rMRS-wv:before,html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:active:not(:disabled)+.box-3rMRS-wv:before{border-color:#2962ff}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked+.box-3rMRS-wv:before{background-color:#fff;border-color:#2962ff;border-width:6px}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked+.box-3rMRS-wv:before{background-color:#d1d4dc;border-color:#2962ff}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:focus+.box-3rMRS-wv:after{opacity:1;transform:scale(1)}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:focus-visible+.box-3rMRS-wv:after{opacity:1;transform:scale(1)}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:focus:not(:focus-visible)+.box-3rMRS-wv:after{opacity:0;transform:scale(.69231)}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:disabled+.box-3rMRS-wv:before{background-color:#e0e3eb;border-color:#b2b5be}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:disabled+.box-3rMRS-wv:before{background-color:#2a2e39;border-color:#50535e}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked:disabled+.box-3rMRS-wv:before{background-color:#b2b5be;border-color:#e0e3eb}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked:disabled+.box-3rMRS-wv:before{background-color:#50535e;border-color:#2a2e39}.radio-1cZENBYk .label-3Xg_J0oJ{color:#000;margin-left:8px;min-width:0}html.theme-dark .radio-1cZENBYk .label-3Xg_J0oJ{color:#b2b5be}.inlineRow-3IOXimxZ{align-items:center;display:flex;flex-wrap:wrap;grid-column:1/3;margin-right:-8px;padding:4px 0}.titleWrap-24p2N42k{align-items:center;display:flex;height:34px;padding:24px 0 8px}.titleWrap-24p2N42k:first-child{padding-top:8px}.groupFooter-24p2N42k{height:16px}.groupFooter-24p2N42k:last-child{height:0}.groupFooter-24p2N42k,.titleWrap-24p2N42k{grid-column:1/3}.groupFooter-24p2N42k+.titleWrap-24p2N42k{padding-top:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/59.418f1db161eefae63284.rtl.css b/static/charting_library/bundles/59.418f1db161eefae63284.rtl.css new file mode 100644 index 0000000..0aa21dc --- /dev/null +++ b/static/charting_library/bundles/59.418f1db161eefae63284.rtl.css @@ -0,0 +1 @@ +.input-1zfqRRWX{height:34px;margin-left:12px;width:100px}.input-1zfqRRWX.resolution-1zfqRRWX,.input-1zfqRRWX.symbol-1zfqRRWX{width:150px}.input-1zfqRRWX:last-child{margin-left:0}.checkbox-1zfqRRWX{max-width:100%}.checkbox-1zfqRRWX .label-1zfqRRWX{display:inline-block;max-width:100%;min-width:0;overflow-wrap:break-word;vertical-align:top}.checkbox-1zfqRRWX .label-1zfqRRWX:first-letter{text-transform:capitalize}.dropdownMenu-1zfqRRWX{min-width:100px}.dropdownMenu-1zfqRRWX.resolution-1zfqRRWX{width:150px}.sessionEnd-1zfqRRWX,.sessionStart-1zfqRRWX{align-items:center;display:inline-flex}.sessionInputContainer-1zfqRRWX{margin-left:0}.sessionDash-1zfqRRWX{flex:1 0 auto}.inputGroup-1zfqRRWX{align-items:center;display:flex}@media screen and (max-width:379px){.input-1zfqRRWX{margin-bottom:8px}.input-1zfqRRWX:last-child{margin-bottom:0}.inputGroup-1zfqRRWX{display:block}.inputGroup-1zfqRRWX.inlineGroup-1zfqRRWX{display:flex}.inputGroup-1zfqRRWX.inlineGroup-1zfqRRWX .sessionStart-1zfqRRWX,.sessionInputContainer-1zfqRRWX{margin-bottom:0}.sessionStart-1zfqRRWX{margin-bottom:8px}.sessionEnd-1zfqRRWX{display:block}}.hasTooltip-1zfqRRWX{margin-left:9px}.icon-3oPFhRYI{color:#787b86;height:18px;width:18px}.radio-1cZENBYk{-webkit-tap-highlight-color:transparent;align-items:center;cursor:default;display:inline-flex;font-size:14px;font-stretch:normal;font-style:normal;font-weight:400;letter-spacing:normal;line-height:normal;position:relative;-webkit-user-select:none;user-select:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.radio-1cZENBYk:hover .input-303BGOua:not(:focus):not(:disabled)+.box-3rMRS-wv:before{border-color:#a3a6af}html.theme-dark .radio-1cZENBYk:hover .input-303BGOua:not(:focus):not(:disabled)+.box-3rMRS-wv:before{border-color:#5d606b}.radio-1cZENBYk:hover .input-303BGOua:checked:not(:focus):not(:disabled)+.box-3rMRS-wv:before,html.theme-dark .radio-1cZENBYk:hover .input-303BGOua:checked:not(:focus):not(:disabled)+.box-3rMRS-wv:before{border-color:#1e53e5}}.radio-1cZENBYk.reverse-39E2s_WA{flex-direction:row-reverse}.radio-1cZENBYk.reverse-39E2s_WA .label-3Xg_J0oJ{margin-left:8px;margin-right:0}.radio-1cZENBYk .wrapper-1Law0ttl{display:inline-block;flex-shrink:0;height:18px;position:relative;width:18px}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv{display:inline-block;height:100%;position:relative;width:100%}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:before{background-color:initial;border:1px solid #b2b5be;border-radius:50%;box-sizing:border-box;content:"";height:100%;position:absolute;transition:border-color .35s ease;width:100%}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:before{border:1px solid #50535e}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:after{border:2px solid #2962ff80;border-radius:50%;box-sizing:border-box;content:"";height:26px;opacity:0;position:absolute;right:-4px;top:-4px;transform:scale(.69231);width:26px}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv:after{border:2px solid #2962ff80}.radio-1cZENBYk .wrapper-1Law0ttl .box-3rMRS-wv.noOutline-3-BkNnru:after{content:none}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua{cursor:inherit;height:100%;margin:0;opacity:0;padding:0;position:absolute;right:0;top:0;width:100%}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:active:not(:disabled)+.box-3rMRS-wv:before,html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:active:not(:disabled)+.box-3rMRS-wv:before{border-color:#2962ff}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked+.box-3rMRS-wv:before{background-color:#fff;border-color:#2962ff;border-width:6px}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked+.box-3rMRS-wv:before{background-color:#d1d4dc;border-color:#2962ff}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:focus+.box-3rMRS-wv:after{opacity:1;transform:scale(1)}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:focus-visible+.box-3rMRS-wv:after{opacity:1;transform:scale(1)}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:focus:not(:focus-visible)+.box-3rMRS-wv:after{opacity:0;transform:scale(.69231)}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:disabled+.box-3rMRS-wv:before{background-color:#e0e3eb;border-color:#b2b5be}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:disabled+.box-3rMRS-wv:before{background-color:#2a2e39;border-color:#50535e}.radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked:disabled+.box-3rMRS-wv:before{background-color:#b2b5be;border-color:#e0e3eb}html.theme-dark .radio-1cZENBYk .wrapper-1Law0ttl .input-303BGOua:checked:disabled+.box-3rMRS-wv:before{background-color:#50535e;border-color:#2a2e39}.radio-1cZENBYk .label-3Xg_J0oJ{color:#000;margin-right:8px;min-width:0}html.theme-dark .radio-1cZENBYk .label-3Xg_J0oJ{color:#b2b5be}.inlineRow-3IOXimxZ{align-items:center;display:flex;flex-wrap:wrap;grid-column:1/3;margin-left:-8px;padding:4px 0}.titleWrap-24p2N42k{align-items:center;display:flex;height:34px;padding:24px 0 8px}.titleWrap-24p2N42k:first-child{padding-top:8px}.groupFooter-24p2N42k{height:16px}.groupFooter-24p2N42k:last-child{height:0}.groupFooter-24p2N42k,.titleWrap-24p2N42k{grid-column:1/3}.groupFooter-24p2N42k+.titleWrap-24p2N42k{padding-top:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/6.2221bb6a5d920bbb4bb2.css b/static/charting_library/bundles/6.2221bb6a5d920bbb4bb2.css new file mode 100644 index 0000000..cdae50f --- /dev/null +++ b/static/charting_library/bundles/6.2221bb6a5d920bbb4bb2.css @@ -0,0 +1 @@ +.menuWrap-g78rwseC{background-color:#fff;border-radius:3px;box-shadow:0 2px 4px #0003;box-sizing:border-box;text-align:left;-webkit-user-select:none;user-select:none;z-index:100}html.theme-dark .menuWrap-g78rwseC{background-color:#1e222d;box-shadow:0 2px 4px #0006}.menuWrap-g78rwseC.isMeasuring-g78rwseC{opacity:0;pointer-events:none;position:fixed;visibility:hidden}.menuWrap-g78rwseC:focus{outline:none}.scrollWrap-g78rwseC{-ms-overflow-style:scrollbar;height:100%;overflow-x:hidden;overflow-y:auto}.scrollWrap-g78rwseC.momentumBased-g78rwseC{-webkit-overflow-scrolling:touch}.scrollWrap-g78rwseC::-webkit-scrollbar{height:5px;width:5px}.scrollWrap-g78rwseC::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollWrap-g78rwseC::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollWrap-g78rwseC::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollWrap-g78rwseC::-webkit-scrollbar-corner{display:none}.menuBox-g78rwseC{padding:6px 0}.isHidden-g78rwseC{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/6.2221bb6a5d920bbb4bb2.rtl.css b/static/charting_library/bundles/6.2221bb6a5d920bbb4bb2.rtl.css new file mode 100644 index 0000000..8b650b0 --- /dev/null +++ b/static/charting_library/bundles/6.2221bb6a5d920bbb4bb2.rtl.css @@ -0,0 +1 @@ +.menuWrap-g78rwseC{background-color:#fff;border-radius:3px;box-shadow:0 2px 4px #0003;box-sizing:border-box;text-align:right;-webkit-user-select:none;user-select:none;z-index:100}html.theme-dark .menuWrap-g78rwseC{background-color:#1e222d;box-shadow:0 2px 4px #0006}.menuWrap-g78rwseC.isMeasuring-g78rwseC{opacity:0;pointer-events:none;position:fixed;visibility:hidden}.menuWrap-g78rwseC:focus{outline:none}.scrollWrap-g78rwseC{-ms-overflow-style:scrollbar;height:100%;overflow-x:hidden;overflow-y:auto}.scrollWrap-g78rwseC.momentumBased-g78rwseC{-webkit-overflow-scrolling:touch}.scrollWrap-g78rwseC::-webkit-scrollbar{height:5px;width:5px}.scrollWrap-g78rwseC::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollWrap-g78rwseC::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollWrap-g78rwseC::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollWrap-g78rwseC::-webkit-scrollbar-corner{display:none}.menuBox-g78rwseC{padding:6px 0}.isHidden-g78rwseC{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/6.2d67b0ae77825dbd455d.js b/static/charting_library/bundles/6.2d67b0ae77825dbd455d.js new file mode 100644 index 0000000..7cf9975 --- /dev/null +++ b/static/charting_library/bundles/6.2d67b0ae77825dbd455d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/60.6b5eced2ef8fa856be88.js b/static/charting_library/bundles/60.6b5eced2ef8fa856be88.js new file mode 100644 index 0000000..21a9df6 --- /dev/null +++ b/static/charting_library/bundles/60.6b5eced2ef8fa856be88.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[60],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/60.d4583c71cca790a25900.css b/static/charting_library/bundles/60.d4583c71cca790a25900.css new file mode 100644 index 0000000..6056599 --- /dev/null +++ b/static/charting_library/bundles/60.d4583c71cca790a25900.css @@ -0,0 +1 @@ +.row-3B5H2q5m{vertical-align:top}.line-3B5H2q5m{background-color:#e0e3eb;height:1px;margin:6px 0}html.theme-dark .line-3B5H2q5m{background-color:#434651}.hint-3B5H2q5m{color:#8797a5;font-size:12px;margin-left:6px;margin-top:12px;text-align:left}html.theme-dark .hint-3B5H2q5m{color:#4f5966}.separator-LcIsiH9i{background-color:#e0e3eb;height:1px;margin:6px 0}html.theme-dark .separator-LcIsiH9i{background-color:#434651}.loaderWrap-2SapxxDI{height:32px;margin-left:-2px}.loader-2SapxxDI{opacity:.4;position:static}.menu-1Jmy26Oy{border-collapse:collapse;cursor:default;overflow:visible;-webkit-user-select:none;user-select:none;z-index:500}.loaderWrapper-2mhYnUll{width:100px} \ No newline at end of file diff --git a/static/charting_library/bundles/60.d4583c71cca790a25900.rtl.css b/static/charting_library/bundles/60.d4583c71cca790a25900.rtl.css new file mode 100644 index 0000000..e9eea45 --- /dev/null +++ b/static/charting_library/bundles/60.d4583c71cca790a25900.rtl.css @@ -0,0 +1 @@ +.row-3B5H2q5m{vertical-align:top}.line-3B5H2q5m{background-color:#e0e3eb;height:1px;margin:6px 0}html.theme-dark .line-3B5H2q5m{background-color:#434651}.hint-3B5H2q5m{color:#8797a5;font-size:12px;margin-right:6px;margin-top:12px;text-align:right}html.theme-dark .hint-3B5H2q5m{color:#4f5966}.separator-LcIsiH9i{background-color:#e0e3eb;height:1px;margin:6px 0}html.theme-dark .separator-LcIsiH9i{background-color:#434651}.loaderWrap-2SapxxDI{height:32px;margin-right:-2px}.loader-2SapxxDI{opacity:.4;position:static}.menu-1Jmy26Oy{border-collapse:collapse;cursor:default;overflow:visible;-webkit-user-select:none;user-select:none;z-index:500}.loaderWrapper-2mhYnUll{width:100px} \ No newline at end of file diff --git a/static/charting_library/bundles/61.38a3040c925fadff7b64.js b/static/charting_library/bundles/61.38a3040c925fadff7b64.js new file mode 100644 index 0000000..aad1138 --- /dev/null +++ b/static/charting_library/bundles/61.38a3040c925fadff7b64.js @@ -0,0 +1,765 @@ +(window.webpackJsonp = window.webpackJsonp || []).push([ + [61], { + "1yQO": function(e, i, t) { + "use strict"; + t.d(i, "a", (function() { + return r + })); + var o = t("hY0g"), + n = t.n(o); + + function r(e, i, t, o = null) { + const r = { + id: i, + title: t, + definitions: new n.a(e) + }; + return null !== o && (r.icon = o), r + } + }, + Equz: function(e, i, t) { + "use strict"; + t.d(i, "a", (function() { + return T + })); + var o = t("Eyy1"), + n = t("HSjo"), + r = t("n5al"), + s = t("hY0g"), + l = t.n(s), + c = t("Kxc7"), + a = t("Z5lT"), + d = t("25b6"); + const h = window.t("Color Bars Based on Previous Close"), + u = window.t("HLC Bars"), + b = window.t("Up Color"), + p = window.t("Down Color"), + w = window.t("Thin Bars"), + y = window.t("Body"), + C = window.t("Borders"), + S = window.t("Wick"), + f = window.t("Price Source"), + O = window.t("Type"), + j = window.t("Line"), + g = window.t("Top Line"), + v = window.t("Bottom Line"), + _ = window.t("Fill"), + m = window.t("Fill Top Area"), + P = window.t("Fill Bottom Area"), + L = (window.t("Up bars"), window.t("Down bars"), window.t("Projection up bars"), window.t( + "Projection down bars"), window.t( + "Show real prices on price scale (instead of Heikin-Ashi price)"), window.t( + "Base Level")), + B = window.t("Body"), + M = window.t("Borders"), + k = window.t("Labels"); + + function D(e, i, t, o) { + const r = Object(d.c)(t); + return [Object(n.s)({ + checked: Object(n.b)(e, i.drawBody, `Change ${t} Body Visibility`), + color1: Object(n.v)(e, i.upColor, null, `Change ${t} Up Color`), + color2: Object(n.v)(e, i.downColor, null, `Change ${t} Down Color`) + }, { + id: `${o}Symbol${r}CandlesColor`, + title: y + }), Object(n.s)({ + checked: Object(n.b)(e, i.drawBorder, `Change ${t} Border Visibility`), + color1: Object(n.v)(e, i.borderUpColor, null, + `Change ${t} Up Border Color`), + color2: Object(n.v)(e, i.borderDownColor, null, + `Change ${t} Down Border Color`) + }, { + id: `${o}Symbol${r}BordersColor`, + title: C + }), Object(n.s)({ + checked: Object(n.b)(e, i.drawWick, `Change ${t} Wick Visibility`), + color1: Object(n.v)(e, i.wickUpColor, null, `Change ${t} Wick Up Color`), + color2: Object(n.v)(e, i.wickDownColor, null, `Change ${t} Wick Down Color`) + }, { + id: `${o}Symbol${r}WickColors`, + title: S + })] + } + + function T(e, i, t, s, d) { + switch (t) { + case 0: + return function(e, i, t) { + return [Object(n.c)({ + checked: Object(n.b)(e, i.barColorsOnPrevClose, + "Change Color Bars Based on Previous Close") + }, { + id: t + "SymbolBarStyleBarColorsOnPrevClose", + title: h + }), Object(n.c)({ + checked: Object(n.b)(e, i.dontDrawOpen, "Change HLC Bars") + }, { + id: t + "SymbolDontDrawOpen", + title: u + }), Object(n.e)({ + color: Object(n.v)(e, i.upColor, null, + "Change Bar Up Color") + }, { + id: t + "SymbolUpColor", + title: b + }), Object(n.e)({ + color: Object(n.v)(e, i.downColor, null, + "Change Bar Down Color") + }, { + id: t + "SymbolDownColor", + title: p + }), Object(n.c)({ + checked: Object(n.b)(e, i.thinBars, "Change Thin Bars") + }, { + id: t + "SymbolBarThinBars", + title: w + })] + }(e, i.barStyle.childs(), d); + case 1: + return function(e, i, t) { + return [Object(n.c)({ + checked: Object(n.b)(e, i.barColorsOnPrevClose, + "Change Color Bars Based on Previous Close") + }, { + id: t + "SymbolCandleStyleBarColorsOnPrevClose", + title: h + }), ...D(e, i, "Candle", t)] + }(e, i.candleStyle.childs(), d); + case 2: + return function(e, i, t, o, r) { + return [Object(n.k)({ + option: Object(n.b)(e, i.priceSource, "Change Price Source") + }, { + id: r + "SymbolLinePriceSource", + title: f, + options: new l.a(t) + }), Object(n.k)({ + option: Object(n.b)(e, i.styleType, "Change Line Type") + }, { + id: r + "SymbolStyleType", + title: O, + options: new l.a(o) + }), Object(n.i)({ + color: Object(n.v)(e, i.color, null, "Change Line Color"), + width: Object(n.b)(e, i.linewidth, "Change Line Width") + }, { + id: r + "SymbolLineStyle", + title: j + })] + }(e, i.lineStyle.childs(), s.seriesPriceSources, s.lineStyleTypes, d); + case 3: + return function(e, i, t, o) { + return [Object(n.k)({ + option: Object(n.b)(e, i.priceSource, + "Change Area Price Source") + }, { + id: o + "SymbolAreaPriceSource", + title: f, + options: new l.a(t) + }), Object(n.i)({ + color: Object(n.v)(e, i.linecolor, null, + "Change Area Line Color"), + width: Object(n.b)(e, i.linewidth, "Change Area Line Width") + }, { + id: o + "SymbolAreaLineStyle", + title: j + }), Object(n.s)({ + color1: Object(n.v)(e, i.color1, i.transparency, + "Change Area Fill Color"), + color2: Object(n.v)(e, i.color2, i.transparency, + "Change Area Fill Color") + }, { + id: o + "SymbolAreaFills", + title: _ + })] + }(e, i.areaStyle.childs(), s.seriesPriceSources, d); + case 9: + return D(e, i.hollowCandleStyle.childs(), "Hollow Candles", d); + case 10: + return function(e, i, t, o) { + return [Object(n.k)({ + option: Object(n.b)(e, i.priceSource, + "Change Baseline Price Source") + }, { + id: o + "SymbolBaseLinePriceSource", + title: f, + options: new l.a(t) + }), Object(n.i)({ + color: Object(n.v)(e, i.topLineColor, null, + "Change Baseline Top Line Color"), + width: Object(n.b)(e, i.topLineWidth, + "Change Baseline Top Line Width") + }, { + id: o + "SymbolBaseLineTopLine", + title: g + }), Object(n.i)({ + color: Object(n.v)(e, i.bottomLineColor, null, + "Change Baseline Bottom Line Color"), + width: Object(n.b)(e, i.bottomLineWidth, + "Change Baseline Bottom Line Width") + }, { + id: o + "SymbolBaseLineBottomLine", + title: v + }), Object(n.s)({ + color1: Object(n.v)(e, i.topFillColor1, null, + "Change Baseline Fill Top Area Color"), + color2: Object(n.v)(e, i.topFillColor2, null, + "Change Baseline Fill Top Area Color") + }, { + id: o + "SymbolBaseLineTopFills", + title: m + }), Object(n.s)({ + color1: Object(n.v)(e, i.bottomFillColor1, null, + "Change Baseline Fill Bottom Area Color"), + color2: Object(n.v)(e, i.bottomFillColor2, null, + "Change Baseline Fill Bottom Area Color") + }, { + id: o + "SymbolBaseLineBottomFills", + title: P + }), Object(n.j)({ + value: Object(n.b)(e, i.baseLevelPercentage, + "Change Base Level", [a.b]) + }, { + id: o + "SymbolBaseLevelPercentage", + title: L, + type: 0, + min: new l.a(0), + max: new l.a(100), + step: new l.a(1), + unit: new l.a("%") + })] + }(e, i.baselineStyle.childs(), s.seriesPriceSources, d) + } + if (!i.hasOwnProperty("haStyle")) return []; + if (s.isJapaneseChartsAvailable && 8 === t) { + return function(e, i, t) { + const o = []; + return o.push(Object(n.c)({ + checked: Object(n.b)(e, i.barColorsOnPrevClose, + "Change Color Bars Based on Previous Close") + }, { + id: t + "SymbolHAStyleBarColorsOnPrevClose", + title: h + }), ...D(e, i, "Heikin Ashi", t)), o + }(e, i.haStyle.childs(), d) + } + s.isJapaneseChartsAvailable && c.enabled("japanese_chart_styles"); + if (c.enabled("chart_style_hilo") && 12 === t) { + const t = i.hiloStyle.childs(), + l = Object(r.chartStyleStudyId)(12); + return function(e, i, t, o) { + const r = Object(n.e)({ + checked: Object(n.b)(e, i.drawBody, + "Change High-Low Body Visibility"), + color: Object(n.v)(e, i.color, null, "Change High-Low Body Color") + }, { + id: o + "SymbolBodiesColor", + title: B + }), + s = Object(n.e)({ + checked: Object(n.b)(e, i.showBorders, + "Change Show High-Low Borders"), + color: Object(n.v)(e, i.borderColor, null, + "Change High-Low Border Color") + }, { + id: o + "SymbolBorderColor", + title: M + }), + l = t.map(e => ({ + title: String(e), + value: e + })); + return [r, s, Object(n.q)({ + checked: Object(n.b)(e, i.showLabels, + "Change Show High-Low Labels"), + color: Object(n.v)(e, i.labelColor, null, + "Change High-Low Labels Color"), + size: Object(n.b)(e, i.fontSize, + "Change High-Low Labels Font Size") + }, { + id: o + "SymbolLabels", + title: k, + isEditable: !1, + isMultiLine: !1, + sizeItems: l + })] + }(e, t, Object(o.ensure)(s.defaultSeriesFontSizes)[l], d) + } + return [] + } + }, + Z5lT: function(e, i, t) { + "use strict"; + t.d(i, "b", (function() { + return n + })), t.d(i, "a", (function() { + return r + })), t.d(i, "c", (function() { + return s + })); + var o = t("T6Of"); + + function n(e) { + return Math.floor(e) + } + + function r(e) { + return parseInt(String(e)) + } + + function s(e) { + const i = new o.LimitedPrecisionNumericFormatter(e); + return e => { + if (null === e) return e; + const t = i.parse(i.format(e)); + return t.res ? t.value : null + } + } + }, + zqjM: function(e, i, t) { + "use strict"; + var o = t("Eyy1"), + n = t("HSjo"), + r = t("hY0g"), + s = t.n(r), + l = t("n5al"), + c = t("dfhE"), + a = t("Equz"), + d = t("Z5lT"); + + function h(e) { + return e.map(e => ({ + value: e, + title: window.t(e) + })) + } + + function u(e, i, t, r, c, a, u) { + const b = []; + return t.forEach(t => { + if (! function(e, i) { + return !e.isHidden && (void 0 === e.visible || function(e, i) { + if (!e) return !0; + const t = e.split("=="); + return !(t.length < 2) && i[t[0]].value() === t[1] + }(e.visible, i)) + }(t, r)) return; + const p = t.id; + if (!r.hasOwnProperty(p)) return; + const w = r[p], + y = function(e, i) { + return "style" === e.id ? window.t("Box size assignment method") : + "boxSize" === e.id ? window.t("Box Size") : window.t(i.childs().name + .value()) + }(t, c[p]); + if ("options" in t) { + const i = Object(o.ensure)(t.options); + b.push(Object(n.k)({ + option: Object(n.b)(e, w, "Change " + y) + }, { + id: `${u}${t.name}`, + title: y, + options: new s.a(h(i)) + })) + } else if ("integer" !== t.type) { + if ("float" === t.type) { + let o; + return o = function(e, i) { + return !((i === Object(l.chartStyleStudyId)(4) || i === Object(l + .chartStyleStudyId)(6)) && "boxSize" === e || i === + Object(l.chartStyleStudyId)(5) && "reversalAmount" === e + ) + }(p, i) || null === a.value() ? new s.a(t.min) : a, void b.push( + Object(n.j)({ + value: Object(n.b)(e, w, "Change " + y) + }, { + id: `${u}${t.name}`, + title: y, + type: 1, + min: o, + max: new s.a(t.max), + defval: t.defval + })) + } + "text" !== t.type ? "bool" !== t.type || b.push(Object(n.c)({ + checked: Object(n.b)(e, w, "Change " + y) + }, { + id: `${u}${t.name}`, + title: y + })) : b.push(Object(n.q)({ + text: Object(n.b)(e, w, "Change " + y) + }, { + id: `${u}${t.name}`, + title: y, + isEditable: !0, + isMultiLine: !1 + })) + } else b.push(Object(n.j)({ + value: Object(n.b)(e, w, "Change " + y, [d.b]) + }, { + id: `${u}${t.name}`, + title: y, + type: 0, + min: new s.a(t.min), + max: new s.a(t.max), + defval: t.defval + })) + }), b + } + var b = t("txPx"), + p = t("Cf1E"); + t.d(i, "b", (function() { + return A + })), t.d(i, "c", (function() { + return $ + })), t.d(i, "d", (function() { + return W + })), t.d(i, "a", (function() { + return V + })); + const w = Object(b.getLogger)("Chart.Definitions.Series"), + y = (window.t("Adjust Data for Dividends"), window.t("Session"), window.t( + "Pre/Post market hours background")), + C = window.t("Last Price Line"), + S = (window.t("Previous Day Close Price Line"), window.t("Bid and Ask lines"), window.t( + "Pre/Post Market Price Line"), + window.t("High and low price lines")), + f = window.t("Average close price line"), + O = window.t("Precision"), + j = window.t("Time Zone"), + g = window.t("Open"), + v = window.t("High"), + _ = window.t("Low"), + m = window.t("Close"), + P = window.t("(H + L)/2"), + L = window.t("(H + L + C)/3"), + B = window.t("(O + H + L + C)/4"), + M = window.t("Simple"), + k = window.t("With Markers"), + D = window.t("Step"), + T = window.t("Default"), + E = { + [Object(l.chartStyleStudyId)(12)]: [7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 40] + }, + I = [{ + priceScale: 1, + minMove: 1, + frac: !1 + }, { + priceScale: 10, + minMove: 1, + frac: !1 + }, { + priceScale: 100, + minMove: 1, + frac: !1 + }, { + priceScale: 1e3, + minMove: 1, + frac: !1 + }, { + priceScale: 1e4, + minMove: 1, + frac: !1 + }, { + priceScale: 1e5, + minMove: 1, + frac: !1 + }, { + priceScale: 1e6, + minMove: 1, + frac: !1 + }, { + priceScale: 1e7, + minMove: 1, + frac: !1 + }, { + priceScale: 1e8, + minMove: 1, + frac: !1 + }, { + priceScale: 2, + minMove: 1, + frac: !0 + }, { + priceScale: 4, + minMove: 1, + frac: !0 + }, { + priceScale: 8, + minMove: 1, + frac: !0 + }, { + priceScale: 16, + minMove: 1, + frac: !0 + }, { + priceScale: 32, + minMove: 1, + frac: !0 + }, { + priceScale: 64, + minMove: 1, + frac: !0 + }, { + priceScale: 128, + minMove: 1, + frac: !0 + }, { + priceScale: 320, + minMove: 1, + frac: !0 + }], + A = [{ + title: g, + value: "open", + id: "price-source-open" + }, { + title: v, + value: "high", + id: "price-source-high" + }, { + title: _, + value: "low", + id: "price-source-low" + }, { + title: m, + value: "close", + id: "price-source-close" + }, { + title: P, + value: "hl2", + id: "price-source-hl2" + }, { + title: L, + value: "hlc3", + id: "price-source-hlc3" + }, { + title: B, + value: "ohlc4", + id: "price-source-ohlc4" + }], + $ = [{ + title: M, + value: c.STYLE_LINE_TYPE_SIMPLE + }, { + title: k, + value: c.STYLE_LINE_TYPE_MARKERS + }, { + title: D, + value: c.STYLE_LINE_TYPE_STEP + }]; + + function W() { + const e = [{ + title: T, + value: "default" + }]; + for (let i = 0; i < I.length; i++) e.push({ + title: `${I[i].minMove}/${I[i].priceScale}`, + value: `${I[i].priceScale},${I[i].minMove},${I[i].frac}` + }); + return e + } + class V { + constructor(e, i, t, o, n, r) { + this._definitions = null, this._inputsSubscriptions = null, this._isDestroyed = !1, + this._propertyPages = null, this._seriesMinTickWV = null, this + ._sessionIdOptionsWV = new s.a([]), this._disabledSessionSelect = new s.a(!0), + this._series = e, this._undoModel = i, this._model = this._undoModel.model(), + this._propertyPageId = t, this._propertyPageName = o, this._propertyPageIcon = + n, this._timezonePropertyObj = r, this._series.onStyleChanged().subscribe(this, + this._updateDefinitions), this._series.dataEvents().symbolResolved() + .subscribe(this, this._updateSeriesMinTickWV), this._series.dataEvents() + .symbolResolved().subscribe(this, this._updateSessionIdOptionsWV), this + ._updateSeriesMinTickWV(), this._updateSessionIdOptionsWV() + } + destroy() { + null !== this._propertyPages && this._propertyPages.forEach(e => { + Object(n.u)(e.definitions.value()) + }), this._series.onStyleChanged().unsubscribe(this, this._updateDefinitions), + this._series.dataEvents().symbolResolved().unsubscribeAll(this), this + ._unsubscribeInputsUpdate(), this._isDestroyed = !0 + } + propertyPages() { + return null === this._propertyPages ? this._getDefinitions().then(e => { + if (this._isDestroyed) throw new Error( + "SeriesPropertyDefinitionsViewModel already destroyed"); + return null === this._propertyPages && (this._propertyPages = [{ + id: this._propertyPageId, + title: this._propertyPageName, + icon: this._propertyPageIcon, + definitions: new s.a(e) + }]), this._propertyPages + }) : Promise.resolve(this._propertyPages) + } + _seriesMinTick() { + const e = this._series.symbolInfo(); + return null !== e ? e.minmov / e.pricescale : null + } + _updateSeriesMinTickWV() { + null === this._seriesMinTickWV ? this._seriesMinTickWV = new s.a(this + ._seriesMinTick()) : this._seriesMinTickWV.setValue(this._seriesMinTick()) + } + _updateSessionIdOptionsWV() {} + _updateDefinitions() { + null !== this._definitions && Object(n.u)(this._definitions), this._definitions = + null, this._unsubscribeInputsUpdate(), this._createSeriesDefinitions().then( + e => { + if (this._isDestroyed) throw new Error( + "SeriesPropertyDefinitionsViewModel already destroyed"); + Object(o.ensureNotNull)(this._propertyPages)[0].definitions.setValue(e) + }) + } + _getDefinitions() { + return null === this._definitions ? this._createSeriesDefinitions() : Promise + .resolve(this._definitions) + } + _unsubscribeInputsUpdate() { + null !== this._inputsSubscriptions && (this._inputsSubscriptions.forEach(e => { + e.unsubscribeAll(this) + }), this._inputsSubscriptions = null) + } + _subscribeInputsUpdate(e, i) { + const t = []; + e.forEach(e => { + if (void 0 !== e.visible) { + const o = e.visible.split("=="); + if (2 === o.length) { + const e = i[o[0]]; - 1 === t.indexOf(e) && (e.subscribe(this, + this._updateDefinitions), t.push(e)) + } + } + }), t.length > 0 ? this._inputsSubscriptions = t : this._inputsSubscriptions = + null + } + _createSeriesDefinitions() { + const e = this._series.properties().childs(), + i = this._series.getInputsProperties(), + t = this._series.getInputsInfoProperties(), + r = e.style.value(), + c = this._series.getStyleShortName(); + return new Promise(e => { + const n = Object(l.chartStyleStudyId)(r); + null !== n ? this._model.studyMetaInfoRepository().findById({ + type: "java", + studyId: n + }).then(n => { + if (this._isDestroyed) throw new Error( + "SeriesPropertyDefinitionsViewModel already destroyed" + ); + if (null !== this._definitions) return void e(null); + const r = Object(o.ensureNotNull)(this._seriesMinTickWV), + s = u(this._undoModel, n.id, n.inputs, i, t, r, c); + this._subscribeInputsUpdate(n.inputs, i), e(s) + }).catch(i => { + w.logWarn( + "Find meta info for create series definitions with error - " + + Object(p.a)(i)), e(null) + }) : e(null) + }).then(i => { + if (this._isDestroyed) throw new Error( + "SeriesPropertyDefinitionsViewModel already destroyed"); + if (null !== this._definitions) return this._definitions; + const t = Object(a.a)(this._undoModel, e, r, { + seriesPriceSources: A, + lineStyleTypes: $, + isJapaneseChartsAvailable: !0, + defaultSeriesFontSizes: E + }, "mainSeries"); + null !== i && t.push(...i); + const o = Object(n.k)({ + option: Object(n.b)(this._undoModel, e.minTick, + "Change Decimal Places") + }, { + id: c + "SymbolMinTick", + title: O, + options: new s.a(W()) + }), + l = Object(n.k)({ + option: Object(n.b)(this._undoModel, this + ._timezonePropertyObj.property, "Change Timezone") + }, { + id: c + "SymbolTimezone", + title: j, + options: new s.a(this._timezonePropertyObj.values) + }); + return this._definitions = [Object(n.l)(t, "generalSymbolStylesGroup"), + ...this._seriesPriceLinesDefinitions(c), ...this + ._seriesDataDefinitions(c), o, l + ], this._definitions + }) + } + _seriesDataDefinitions(e) { + this._series.dividendsAdjustmentProperty(); + return [] + } + _createOutOfSessionDefinition(e) { + const i = this._model.sessions().properties().childs().graphics.childs().backgrounds + .childs().outOfSession.childs(); + return Object(n.e)({ + color: Object(n.v)(this._undoModel, i.color, i.transparency, + "Change Extended hours color") + }, { + id: e + "SymbolExtendedHoursColors", + title: y + }) + } + _createPrePostMarketDefinition(e) { + const i = this._model.sessions(), + t = i.properties().childs().graphics.childs().backgrounds.childs().preMarket + .childs(), + o = i.properties().childs().graphics.childs().backgrounds.childs().postMarket + .childs(); + return Object(n.s)({ + color1: Object(n.v)(this._undoModel, t.color, t.transparency, + "Change Pre Market Color"), + color2: Object(n.v)(this._undoModel, o.color, o.transparency, + "Change Post Market Color") + }, { + id: e + "SymbolExtendedHoursColors", + title: y + }) + } + _seriesPriceLinesDefinitions(e) { + const i = [], + t = this._series.properties().childs(); + if (this._series.hasClosePrice()) { + const o = Object(n.i)({ + checked: Object(n.b)(this._undoModel, t.showPriceLine, + "Change Price Price Line"), + color: Object(n.v)(this._undoModel, t.priceLineColor, null, + "Change Price Line Color"), + width: Object(n.b)(this._undoModel, t.priceLineWidth, + "Change Price Line Width") + }, { + id: e + "SymbolLastValuePriceLine", + title: C + }); + i.push(o) + } + this._series.hasClosePrice(); + const o = t.highLowAvgPrice, + r = Object(n.c)({ + checked: Object(n.b)(this._undoModel, o.childs() + .highLowPriceLinesVisible, + "Change high/low price lines visibility") + }, { + id: e + "SymbolHighLowPriceLines", + title: S + }), + s = Object(n.c)({ + checked: Object(n.b)(this._undoModel, o.childs() + .averageClosePriceLineVisible, + "Change average close price line visibility") + }, { + id: e + "SymbolAverageClosePriceLine", + title: f + }); + return i.push(r, s), i + } + } + } + } +]); diff --git a/static/charting_library/bundles/62.63b309f5f8da9ca013b8.js b/static/charting_library/bundles/62.63b309f5f8da9ca013b8.js new file mode 100644 index 0000000..8f86ee0 --- /dev/null +++ b/static/charting_library/bundles/62.63b309f5f8da9ca013b8.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{CA9d:function(e,t,i){"use strict";i.d(t,"b",(function(){return u})),i.d(t,"a",(function(){return h})),i.d(t,"c",(function(){return l}));var n=i("HSjo"),s=i("hY0g"),o=i.n(s),r=i("25b6");const c=window.t("Price"),a=window.t("Bar#");function u(e,t,i){return{property:Object(n.b)(e,t.price,`Change ${c} Y coordinate`),info:{typeY:1,stepY:i}}}function h(e,t){return{property:Object(n.b)(e,t.bar,`Change ${a} X coordinate`),info:{typeX:0,minX:new o.a(-5e4),maxX:new o.a(15e3),stepX:new o.a(1)}}}function l(e,t,i,s,o,c){const a=h(e,t),l=u(e,t,s);return Object(n.f)({x:a.property,y:l.property},{id:Object(r.c)(`${c}Coordinates${o}`),title:o,...a.info,...l.info})}},Cn8r:function(e,t,i){"use strict";i.d(t,"a",(function(){return _}));var n=i("YFKU"),s=(i("HbRj"),i("Eyy1")),o=i("HSjo"),r=i("1yQO"),c=i("hY0g"),a=i.n(c),u=i("lgIt"),h=i("CA9d");const l=Object(n.t)("Visibility"),b=Object(n.t)("Coordinates"),p=Object(n.t)("Style"),d=Object(n.t)("Text"),y=Object(n.t)("Inputs");class _{constructor(e,t){this._yCoordinateStepWV=null,this._propertyPages=[],this._source=t,this._undoModel=e,this._ownerSource=Object(s.ensureNotNull)(this._source.ownerSource()),this._createPropertyRages()}destroy(){null!==this._yCoordinateStepWV&&(this._source.ownerSourceChanged().unsubscribeAll(this),this._ownerSource.priceStepChanged().unsubscribeAll(this)),this._propertyPages.forEach(e=>{Object(o.u)(e.definitions.value())})}propertyPages(){return Promise.resolve(this._propertyPages)}_createPropertyRages(){this._propertyPages=[];const e=this._createInputsPropertyPage();null!==e&&this._propertyPages.push(e);const t=this._createStylePropertyPage();null!==t&&this._propertyPages.push(t);const i=this._createTextPropertyPage();if(null!==i&&this._propertyPages.push(i),this._source.hasEditableCoordinates()){const e=this._createCoordinatesPropertyPage();null!==e&&this._propertyPages.push(e)}const n=this._createVisibilitiesPropertyPage();this._propertyPages.push(n)}_createVisibilitiesPropertyPage(){const e=this._source.properties().childs().intervalsVisibilities.childs();return Object(r.a)(Object(u.a)(this._undoModel,e,this._source.title(!0)),"visibility",l)}_createCoordinatesPropertyPage(){const e=this._coordinatesPropertyDefinitions();return null!==e?Object(r.a)(e,"coordinates",b):null}_getYCoordinateStepWV(){return null===this._yCoordinateStepWV&&(this._yCoordinateStepWV=new a.a(function(e){if(null!==e){const t=e.priceStep();if(null!==t)return t}return 1}(this._source.ownerSource())),this._ownerSource.priceStepChanged().subscribe(this,()=>this._updateYCoordinateStep()),this._source.ownerSourceChanged().subscribe(this,()=>{this._ownerSource.priceStepChanged().unsubscribeAll(this),this._ownerSource=Object(s.ensureNotNull)(this._source.ownerSource()),this._ownerSource.priceStepChanged().subscribe(this,()=>this._updateYCoordinateStep())})),this._yCoordinateStepWV}_coordinatesPropertyDefinitions(){const e=this._source.points(),t=this._source.pointsProperty().childs().points,i=[],s=this._getYCoordinateStepWV() +;return e.forEach((e,o)=>{const r=t[o].childs();r&&i.push(Object(h.c)(this._undoModel,r,e,s,Object(n.t)("#{count} (price, bar)",{context:"linetool point"}).format({count:(o+1).toString()}),this._source.name()))}),i}_createStylePropertyPage(){const e=this._stylePropertyDefinitions();return null!==e?Object(r.a)(e,"style",p):null}_stylePropertyDefinitions(){return null}_createTextPropertyPage(){const e=this._textPropertyDefinitions();return null!==e?Object(r.a)(e,"text",d):null}_textPropertyDefinitions(){return null}_createInputsPropertyPage(){const e=this._inputsPropertyDefinitions();return null!==e?Object(r.a)(e,"inputs",y):null}_inputsPropertyDefinitions(){return null}_updateYCoordinateStep(){const e=this._ownerSource.priceStep();this._getYCoordinateStepWV().setValue(e||1)}}},lgIt:function(e,t,i){"use strict";i.d(t,"a",(function(){return C}));var n=i("Kxc7"),s=i("HSjo"),o=i("hY0g"),r=i.n(o),c=i("pPtI");const a=window.t("Ticks"),u=window.t("Seconds"),h=window.t("Minutes"),l=window.t("Hours"),b=window.t("Days"),p=window.t("Weeks"),d=window.t("Months"),y=(window.t("Ranges"),[1,59]),_=[1,59],g=[1,24],w=[1,366],O=[1,52],j=[1,12];function C(e,t,i){const o=[];if(n.enabled("tick_resolution")){const n=Object(s.c)({checked:Object(s.b)(e,t.ticks,`Change ${i} Visibility On Ticks`)},{id:"IntervalsVisibilitiesTicks",title:a});o.push(n)}if(Object(c.isSecondsEnabled)()){const n=Object(s.n)({checked:Object(s.b)(e,t.seconds,`Change ${i} Visibility On Seconds`),from:Object(s.b)(e,t.secondsFrom,`Change ${i} Seconds From`),to:Object(s.b)(e,t.secondsTo,`Change ${i} Seconds To`)},{id:"IntervalsVisibilitiesSecond",title:u,min:new r.a(y[0]),max:new r.a(y[1])});o.push(n)}const C=Object(s.n)({checked:Object(s.b)(e,t.minutes,`Change ${i} Visibility On Minutes`),from:Object(s.b)(e,t.minutesFrom,`Change ${i} Minutes From`),to:Object(s.b)(e,t.minutesTo,`Change ${i} Minutes To`)},{id:"IntervalsVisibilitiesMinutes",title:h,min:new r.a(_[0]),max:new r.a(_[1])}),P=Object(s.n)({checked:Object(s.b)(e,t.hours,`Change ${i} Visibility On Hours`),from:Object(s.b)(e,t.hoursFrom,`Change ${i} Hours From`),to:Object(s.b)(e,t.hoursTo,`Change ${i} Hours To`)},{id:"IntervalsVisibilitiesHours",title:l,min:new r.a(g[0]),max:new r.a(g[1])}),S=Object(s.n)({checked:Object(s.b)(e,t.days,`Change ${i} Visibility On Days`),from:Object(s.b)(e,t.daysFrom,`Change ${i} Days From`),to:Object(s.b)(e,t.daysTo,`Change ${i} Days To`)},{id:"IntervalsVisibilitiesDays",title:b,min:new r.a(w[0]),max:new r.a(w[1])});o.push(C,P,S);const f=Object(s.n)({checked:Object(s.b)(e,t.weeks,`Change ${i} Visibility On Weeks`),from:Object(s.b)(e,t.weeksFrom,`Change ${i} Weeks From`),to:Object(s.b)(e,t.weeksTo,`Change ${i} Weeks To`)},{id:"IntervalsVisibilitiesWeeks",title:p,min:new r.a(O[0]),max:new r.a(O[1])}),m=Object(s.n)({checked:Object(s.b)(e,t.months,`Change ${i} Visibility On Months`),from:Object(s.b)(e,t.monthsFrom,`Change ${i} Months From`),to:Object(s.b)(e,t.monthsTo,`Change ${i} Months To`)},{id:"IntervalsVisibilitiesMonths",title:d,min:new r.a(j[0]),max:new r.a(j[1])}) +;return o.push(f,m),o}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/63.8255c7f5191bcafcee7c.js b/static/charting_library/bundles/63.8255c7f5191bcafcee7c.js new file mode 100644 index 0000000..3b86b7c --- /dev/null +++ b/static/charting_library/bundles/63.8255c7f5191bcafcee7c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[63],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/63.898a61bf08239711dc74.css b/static/charting_library/bundles/63.898a61bf08239711dc74.css new file mode 100644 index 0000000..61be32a --- /dev/null +++ b/static/charting_library/bundles/63.898a61bf08239711dc74.css @@ -0,0 +1 @@ +.wrap-3C3rxkDX{bottom:0;cursor:default;pointer-events:all;position:absolute;right:0;top:0;width:8px;will-change:height}.wrap--horizontal-3C3rxkDX{height:8px;left:0;right:0;top:auto;will-change:width}.bar-3C3rxkDX{align-items:center;display:flex;justify-content:center;left:0;position:absolute;top:0;width:100%;will-change:height,transform}.bar-3C3rxkDX .barInner-3C3rxkDX{background-color:#d1d4dc;border-radius:2px;height:calc(100% - 4px);width:4px}html.theme-dark .bar-3C3rxkDX .barInner-3C3rxkDX{background-color:#50535e}.bar-3C3rxkDX .barInner--horizontal-3C3rxkDX{height:4px;width:calc(100% - 4px)}.bar--horizontal-3C3rxkDX{height:100%;left:0;top:0;width:auto;will-change:width,transform}.scrollWrap-2LZ1ZhWc{pointer-events:none;position:absolute;will-change:visibility}.itemRow-1SBAfF8E{align-items:center;cursor:default;display:flex;height:52px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.itemRow-1SBAfF8E:hover{background-color:#f0f3fa}html.theme-dark .itemRow-1SBAfF8E:hover{background-color:#2a2e39}.itemRow-1SBAfF8E:hover .favoriteButton-1SBAfF8E{opacity:1}}.itemRow-1SBAfF8E.active-1SBAfF8E,html.theme-dark .itemRow-1SBAfF8E.active-1SBAfF8E{background-color:#2962ff}.itemRow-1SBAfF8E.selected-1SBAfF8E{background-color:#bbd9fb}html.theme-dark .itemRow-1SBAfF8E.selected-1SBAfF8E{background-color:#142e61}.itemRow-1SBAfF8E.mobile-1SBAfF8E{height:55px}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E{display:flex;flex-direction:column;overflow:hidden;padding-right:20px}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E{color:#131722;font-size:14px;line-height:21px;margin-bottom:4px;overflow:hidden;white-space:nowrap}html.theme-dark .itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E{color:#b2b5be}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E.active-1SBAfF8E{color:#fff}html.theme-dark .itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E.active-1SBAfF8E{color:#d1d4dc}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E.mobile-1SBAfF8E{font-size:16px;line-height:24px;margin:4px 0 2px}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E{color:#787b86;font-size:12px;line-height:17px;overflow:hidden;white-space:nowrap}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E.active-1SBAfF8E{color:#fff}html.theme-dark .itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E.active-1SBAfF8E{color:#d1d4dc}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E.mobile-1SBAfF8E{margin-bottom:8px}.itemRow-1SBAfF8E .itemInfoWithPadding-1SBAfF8E{padding-left:20px}.itemRow-1SBAfF8E .favoriteButton-1SBAfF8E{margin:0 4px 0 6px}.itemRow-1SBAfF8E .favoriteButton-1SBAfF8E.favorite-1SBAfF8E,.itemRow-1SBAfF8E .favoriteButton-1SBAfF8E.mobile-1SBAfF8E{opacity:1}.itemRow-1SBAfF8E .removeButton-1SBAfF8E{margin-left:auto;margin-right:18px} \ No newline at end of file diff --git a/static/charting_library/bundles/63.898a61bf08239711dc74.rtl.css b/static/charting_library/bundles/63.898a61bf08239711dc74.rtl.css new file mode 100644 index 0000000..00b02ae --- /dev/null +++ b/static/charting_library/bundles/63.898a61bf08239711dc74.rtl.css @@ -0,0 +1 @@ +.wrap-3C3rxkDX{bottom:0;cursor:default;left:0;pointer-events:all;position:absolute;top:0;width:8px;will-change:height}.wrap--horizontal-3C3rxkDX{height:8px;left:0;right:0;top:auto;will-change:width}.bar-3C3rxkDX{align-items:center;display:flex;justify-content:center;position:absolute;right:0;top:0;width:100%;will-change:height,transform}.bar-3C3rxkDX .barInner-3C3rxkDX{background-color:#d1d4dc;border-radius:2px;height:calc(100% - 4px);width:4px}html.theme-dark .bar-3C3rxkDX .barInner-3C3rxkDX{background-color:#50535e}.bar-3C3rxkDX .barInner--horizontal-3C3rxkDX{height:4px;width:calc(100% - 4px)}.bar--horizontal-3C3rxkDX{height:100%;right:0;top:0;width:auto;will-change:width,transform}.scrollWrap-2LZ1ZhWc{pointer-events:none;position:absolute;will-change:visibility}.itemRow-1SBAfF8E{align-items:center;cursor:default;display:flex;height:52px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.itemRow-1SBAfF8E:hover{background-color:#f0f3fa}html.theme-dark .itemRow-1SBAfF8E:hover{background-color:#2a2e39}.itemRow-1SBAfF8E:hover .favoriteButton-1SBAfF8E{opacity:1}}.itemRow-1SBAfF8E.active-1SBAfF8E,html.theme-dark .itemRow-1SBAfF8E.active-1SBAfF8E{background-color:#2962ff}.itemRow-1SBAfF8E.selected-1SBAfF8E{background-color:#bbd9fb}html.theme-dark .itemRow-1SBAfF8E.selected-1SBAfF8E{background-color:#142e61}.itemRow-1SBAfF8E.mobile-1SBAfF8E{height:55px}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E{display:flex;flex-direction:column;overflow:hidden;padding-left:20px}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E{color:#131722;font-size:14px;line-height:21px;margin-bottom:4px;overflow:hidden;white-space:nowrap}html.theme-dark .itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E{color:#b2b5be}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E.active-1SBAfF8E{color:#fff}html.theme-dark .itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E.active-1SBAfF8E{color:#d1d4dc}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .title-1SBAfF8E.mobile-1SBAfF8E{font-size:16px;line-height:24px;margin:4px 0 2px}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E{color:#787b86;font-size:12px;line-height:17px;overflow:hidden;white-space:nowrap}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E.active-1SBAfF8E{color:#fff}html.theme-dark .itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E.active-1SBAfF8E{color:#d1d4dc}.itemRow-1SBAfF8E .itemInfo-1SBAfF8E .details-1SBAfF8E.mobile-1SBAfF8E{margin-bottom:8px}.itemRow-1SBAfF8E .itemInfoWithPadding-1SBAfF8E{padding-right:20px}.itemRow-1SBAfF8E .favoriteButton-1SBAfF8E{margin:0 6px 0 4px}.itemRow-1SBAfF8E .favoriteButton-1SBAfF8E.favorite-1SBAfF8E,.itemRow-1SBAfF8E .favoriteButton-1SBAfF8E.mobile-1SBAfF8E{opacity:1}.itemRow-1SBAfF8E .removeButton-1SBAfF8E{margin-left:18px;margin-right:auto} \ No newline at end of file diff --git a/static/charting_library/bundles/64.6f232bdb0fb4cdcc2d7d.css b/static/charting_library/bundles/64.6f232bdb0fb4cdcc2d7d.css new file mode 100644 index 0000000..6957c81 --- /dev/null +++ b/static/charting_library/bundles/64.6f232bdb0fb4cdcc2d7d.css @@ -0,0 +1 @@ +.switcherWrapper-1wFH-_jm{--tv-switcher-wrapper-width:38px;--tv-switcher-wrapper-height:20px;--tv-switcher-wrapper-radius:10px;--tv-switcher-thumb-size:14px;--tv-switcher-thumb-padding:3px;-webkit-tap-highlight-color:transparent;display:inline-block;flex:0 0 auto;height:var(--tv-switcher-wrapper-height);position:relative;vertical-align:middle;width:var(--tv-switcher-wrapper-width);z-index:0}.switcherWrapper-1wFH-_jm.size-large-MOSirnj_{--tv-switcher-wrapper-height:34px;--tv-switcher-wrapper-width:64px;--tv-switcher-thumb-size:28px;--tv-switcher-wrapper-radius:28px}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .switcherThumbWrapper-2u191lDO:before{content:none}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#00bfa5;border-color:#00bfa5}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#00897b;border-color:#00897b}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .switcherTrack-2XruDVTa{background-color:#3179f5;border-color:#3179f5}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .switcherTrack-2XruDVTa{background-color:#1e53e5;border-color:#1e53e5}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#4db6ac;border-color:#4db6ac}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#00796b;border-color:#00796b}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}}.input-J7QIcTTo{height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:1}.input-J7QIcTTo:checked,.input-J7QIcTTo:disabled,.input-J7QIcTTo:focus{border:0;outline:0}.input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}html.theme-dark .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}.input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherThumb-2yuEucci{transform:translate(calc(var(--tv-switcher-wrapper-width) - var(--tv-switcher-thumb-size) - var(--tv-switcher-thumb-padding)),var(--tv-switcher-thumb-padding))}.input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#fff;border-color:#d6d8e0}html.theme-dark .input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#131722;border-color:#4c525e}.input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherThumb-2yuEucci{background-color:#d6d8e0}html.theme-dark .input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherThumb-2yuEucci{background-color:#4c525e}.input-J7QIcTTo.focus-uZMRkCO0:focus+.switcherThumbWrapper-2u191lDO:before{opacity:.2}.switcherThumbWrapper-2u191lDO{height:100%;position:relative;width:100%;z-index:0}.switcherThumbWrapper-2u191lDO:before{background-color:#37a6ef;border-radius:calc(var(--tv-switcher-wrapper-radius) + 8px);content:"";height:calc(100% + 8px);left:-4px;opacity:0;position:absolute;top:-4px;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-out;width:calc(100% + 8px)}html.theme-dark .switcherThumbWrapper-2u191lDO:before{background-color:#2e7bb2}.switcherTrack-2XruDVTa{background:#d6d8e0;border:1px solid #d6d8e0;border-radius:var(--tv-switcher-wrapper-radius);height:calc(100% - 2px);left:0;position:absolute;top:0;width:calc(100% - 2px)}html.theme-dark .switcherTrack-2XruDVTa{background:#363c4e;border-color:#363c4e}.switcherThumb-2yuEucci{background:#fff;border-radius:var(--tv-switcher-thumb-size);height:var(--tv-switcher-thumb-size);transform:translate(var(--tv-switcher-thumb-padding),var(--tv-switcher-thumb-padding));transition-duration:.25s;transition-property:transform;transition-timing-function:ease-out;width:var(--tv-switcher-thumb-size)}html.theme-dark .switcherThumb-2yuEucci{background:#fff}.wrapper-1Eudat6L{align-content:flex-start;align-items:flex-start;background-color:#fff;color:#131722;display:flex;flex-direction:row;justify-content:space-between;padding:6px 10px 2px 12px;white-space:nowrap}html.theme-dark .wrapper-1Eudat6L{background-color:#1e222d;color:#b2b5be}.wrapper-1Eudat6L.hovered-1Eudat6L,.wrapper-1Eudat6L:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-1Eudat6L:hover{color:#131722}}html.theme-dark .wrapper-1Eudat6L.hovered-1Eudat6L,html.theme-dark .wrapper-1Eudat6L:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrapper-1Eudat6L:hover{color:#c1c4cd}}.wrapper-1Eudat6L.hovered-1Eudat6L,.wrapper-1Eudat6L:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-1Eudat6L:hover{background-color:#f0f3fa}}html.theme-dark .wrapper-1Eudat6L.hovered-1Eudat6L,html.theme-dark .wrapper-1Eudat6L:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrapper-1Eudat6L:hover{background-color:#2a2e39}}.wrapper-1Eudat6L:before{content:"";display:block;height:20px}.labelRow-1Eudat6L{flex:1 1 auto;min-width:0;padding:2px 0 6px}.label-1Eudat6L{font-size:14px;margin-right:12px;overflow:hidden}.labelHint-1Eudat6L{color:#787b86;contain:content;font-size:12px;font-weight:400;margin-top:0;max-height:0;opacity:0;overflow:hidden;transition:max-height .25s ease-in,margin-top .25s ease-in,opacity .35s linear;white-space:normal}.labelOn-1Eudat6L+.labelHint-1Eudat6L{margin-top:4px;max-height:34px;opacity:1;transition:max-height .2s ease-out,margin-top .2s ease-out,opacity .35s linear} \ No newline at end of file diff --git a/static/charting_library/bundles/64.6f232bdb0fb4cdcc2d7d.rtl.css b/static/charting_library/bundles/64.6f232bdb0fb4cdcc2d7d.rtl.css new file mode 100644 index 0000000..1a0c3f6 --- /dev/null +++ b/static/charting_library/bundles/64.6f232bdb0fb4cdcc2d7d.rtl.css @@ -0,0 +1 @@ +.switcherWrapper-1wFH-_jm{--tv-switcher-wrapper-width:38px;--tv-switcher-wrapper-height:20px;--tv-switcher-wrapper-radius:10px;--tv-switcher-thumb-size:14px;--tv-switcher-thumb-padding:3px;-webkit-tap-highlight-color:transparent;display:inline-block;flex:0 0 auto;height:var(--tv-switcher-wrapper-height);position:relative;vertical-align:middle;width:var(--tv-switcher-wrapper-width);z-index:0}.switcherWrapper-1wFH-_jm.size-large-MOSirnj_{--tv-switcher-wrapper-height:34px;--tv-switcher-wrapper-width:64px;--tv-switcher-thumb-size:28px;--tv-switcher-wrapper-radius:28px}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .switcherThumbWrapper-2u191lDO:before{content:none}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#00bfa5;border-color:#00bfa5}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#00897b;border-color:#00897b}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .switcherTrack-2XruDVTa{background-color:#3179f5;border-color:#3179f5}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29 .switcherTrack-2XruDVTa{background-color:#1e53e5;border-color:#1e53e5}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#4db6ac;border-color:#4db6ac}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#00796b;border-color:#00796b}.switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}html.theme-dark .switcherWrapper-1wFH-_jm.intent-select-2kut8F29:hover .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}}.input-J7QIcTTo{height:100%;opacity:0;position:absolute;right:0;top:0;width:100%;z-index:1}.input-J7QIcTTo:checked,.input-J7QIcTTo:disabled,.input-J7QIcTTo:focus{border:0;outline:0}.input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}html.theme-dark .input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#2962ff;border-color:#2962ff}.input-J7QIcTTo:checked+.switcherThumbWrapper-2u191lDO .switcherThumb-2yuEucci{transform:translate(calc((var(--tv-switcher-wrapper-width) - var(--tv-switcher-thumb-size) - var(--tv-switcher-thumb-padding))*-1),var(--tv-switcher-thumb-padding))}.input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#fff;border-color:#d6d8e0}html.theme-dark .input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherTrack-2XruDVTa{background-color:#131722;border-color:#4c525e}.input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherThumb-2yuEucci{background-color:#d6d8e0}html.theme-dark .input-J7QIcTTo:disabled+.switcherThumbWrapper-2u191lDO .switcherThumb-2yuEucci{background-color:#4c525e}.input-J7QIcTTo.focus-uZMRkCO0:focus+.switcherThumbWrapper-2u191lDO:before{opacity:.2}.switcherThumbWrapper-2u191lDO{height:100%;position:relative;width:100%;z-index:0}.switcherThumbWrapper-2u191lDO:before{background-color:#37a6ef;border-radius:calc(var(--tv-switcher-wrapper-radius) + 8px);content:"";height:calc(100% + 8px);opacity:0;position:absolute;right:-4px;top:-4px;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-out;width:calc(100% + 8px)}html.theme-dark .switcherThumbWrapper-2u191lDO:before{background-color:#2e7bb2}.switcherTrack-2XruDVTa{background:#d6d8e0;border:1px solid #d6d8e0;border-radius:var(--tv-switcher-wrapper-radius);height:calc(100% - 2px);position:absolute;right:0;top:0;width:calc(100% - 2px)}html.theme-dark .switcherTrack-2XruDVTa{background:#363c4e;border-color:#363c4e}.switcherThumb-2yuEucci{background:#fff;border-radius:var(--tv-switcher-thumb-size);height:var(--tv-switcher-thumb-size);transform:translate(var(--tv-switcher-thumb-padding),var(--tv-switcher-thumb-padding));transform:translate(calc((var(--tv-switcher-thumb-padding))*-1),var(--tv-switcher-thumb-padding));transition-duration:.25s;transition-property:transform;transition-timing-function:ease-out;width:var(--tv-switcher-thumb-size)}html.theme-dark .switcherThumb-2yuEucci{background:#fff}.wrapper-1Eudat6L{align-content:flex-start;align-items:flex-start;background-color:#fff;color:#131722;display:flex;flex-direction:row;justify-content:space-between;padding:6px 12px 2px 10px;white-space:nowrap}html.theme-dark .wrapper-1Eudat6L{background-color:#1e222d;color:#b2b5be}.wrapper-1Eudat6L.hovered-1Eudat6L,.wrapper-1Eudat6L:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-1Eudat6L:hover{color:#131722}}html.theme-dark .wrapper-1Eudat6L.hovered-1Eudat6L,html.theme-dark .wrapper-1Eudat6L:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrapper-1Eudat6L:hover{color:#c1c4cd}}.wrapper-1Eudat6L.hovered-1Eudat6L,.wrapper-1Eudat6L:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrapper-1Eudat6L:hover{background-color:#f0f3fa}}html.theme-dark .wrapper-1Eudat6L.hovered-1Eudat6L,html.theme-dark .wrapper-1Eudat6L:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrapper-1Eudat6L:hover{background-color:#2a2e39}}.wrapper-1Eudat6L:before{content:"";display:block;height:20px}.labelRow-1Eudat6L{flex:1 1 auto;min-width:0;padding:2px 0 6px}.label-1Eudat6L{font-size:14px;margin-left:12px;overflow:hidden}.labelHint-1Eudat6L{color:#787b86;contain:content;font-size:12px;font-weight:400;margin-top:0;max-height:0;opacity:0;overflow:hidden;transition:max-height .25s ease-in,margin-top .25s ease-in,opacity .35s linear;white-space:normal}.labelOn-1Eudat6L+.labelHint-1Eudat6L{margin-top:4px;max-height:34px;opacity:1;transition:max-height .2s ease-out,margin-top .2s ease-out,opacity .35s linear} \ No newline at end of file diff --git a/static/charting_library/bundles/64.ec4b4d03b28c77658dde.js b/static/charting_library/bundles/64.ec4b4d03b28c77658dde.js new file mode 100644 index 0000000..0d74577 --- /dev/null +++ b/static/charting_library/bundles/64.ec4b4d03b28c77658dde.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[64],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/65.556980fc277562af83c8.css b/static/charting_library/bundles/65.556980fc277562af83c8.css new file mode 100644 index 0000000..06d1d44 --- /dev/null +++ b/static/charting_library/bundles/65.556980fc277562af83c8.css @@ -0,0 +1 @@ +.defaultsButtonText-3mn75BN0{color:#131722;font-size:16px;width:100px}html.theme-dark .defaultsButtonText-3mn75BN0{color:#b2b5be}.defaultsButtonItem-3mn75BN0{min-width:100px}.defaultsButtonIcon-3mn75BN0{display:flex}.themesButtonText-3JA3MxY8{color:#131722;font-size:14px;width:100px}html.theme-dark .themesButtonText-3JA3MxY8{color:#b2b5be}.themesButtonIcon-3JA3MxY8{display:flex}.defaultsButtonText-3JA3MxY8{color:#131722;font-size:16px;width:100px}html.theme-dark .defaultsButtonText-3JA3MxY8{color:#b2b5be}.defaultsButtonItem-3JA3MxY8{min-width:100px} \ No newline at end of file diff --git a/static/charting_library/bundles/65.556980fc277562af83c8.rtl.css b/static/charting_library/bundles/65.556980fc277562af83c8.rtl.css new file mode 100644 index 0000000..06d1d44 --- /dev/null +++ b/static/charting_library/bundles/65.556980fc277562af83c8.rtl.css @@ -0,0 +1 @@ +.defaultsButtonText-3mn75BN0{color:#131722;font-size:16px;width:100px}html.theme-dark .defaultsButtonText-3mn75BN0{color:#b2b5be}.defaultsButtonItem-3mn75BN0{min-width:100px}.defaultsButtonIcon-3mn75BN0{display:flex}.themesButtonText-3JA3MxY8{color:#131722;font-size:14px;width:100px}html.theme-dark .themesButtonText-3JA3MxY8{color:#b2b5be}.themesButtonIcon-3JA3MxY8{display:flex}.defaultsButtonText-3JA3MxY8{color:#131722;font-size:16px;width:100px}html.theme-dark .defaultsButtonText-3JA3MxY8{color:#b2b5be}.defaultsButtonItem-3JA3MxY8{min-width:100px} \ No newline at end of file diff --git a/static/charting_library/bundles/65.f895a78b4e04257983ff.js b/static/charting_library/bundles/65.f895a78b4e04257983ff.js new file mode 100644 index 0000000..5862246 --- /dev/null +++ b/static/charting_library/bundles/65.f895a78b4e04257983ff.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[65],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/66.2979e9b7c35e7bf03a37.js b/static/charting_library/bundles/66.2979e9b7c35e7bf03a37.js new file mode 100644 index 0000000..6f4b1b1 --- /dev/null +++ b/static/charting_library/bundles/66.2979e9b7c35e7bf03a37.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/66.84b4001b5c622a569dde.css b/static/charting_library/bundles/66.84b4001b5c622a569dde.css new file mode 100644 index 0000000..047ae07 --- /dev/null +++ b/static/charting_library/bundles/66.84b4001b5c622a569dde.css @@ -0,0 +1 @@ +.summary-3UYGeClB{align-items:center;box-sizing:border-box;color:#787b86;cursor:default;display:flex;flex:none;font-size:11px;letter-spacing:.4px;line-height:16px;min-width:0;padding:0 8px 0 12px;text-transform:uppercase;width:100%}html.theme-dark .summary-3UYGeClB{color:#787b86}.summary-3UYGeClB.hovered-3UYGeClB,.summary-3UYGeClB:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.summary-3UYGeClB:hover{background-color:#f0f3fa}}html.theme-dark .summary-3UYGeClB.hovered-3UYGeClB,html.theme-dark .summary-3UYGeClB:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .summary-3UYGeClB:hover{background-color:#2a2e39}}.caret-3UYGeClB{height:18px;justify-content:center;margin:2px 0 2px auto;width:18px} \ No newline at end of file diff --git a/static/charting_library/bundles/66.84b4001b5c622a569dde.rtl.css b/static/charting_library/bundles/66.84b4001b5c622a569dde.rtl.css new file mode 100644 index 0000000..37bef85 --- /dev/null +++ b/static/charting_library/bundles/66.84b4001b5c622a569dde.rtl.css @@ -0,0 +1 @@ +.summary-3UYGeClB{align-items:center;box-sizing:border-box;color:#787b86;cursor:default;display:flex;flex:none;font-size:11px;letter-spacing:.4px;line-height:16px;min-width:0;padding:0 12px 0 8px;text-transform:uppercase;width:100%}html.theme-dark .summary-3UYGeClB{color:#787b86}.summary-3UYGeClB.hovered-3UYGeClB,.summary-3UYGeClB:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.summary-3UYGeClB:hover{background-color:#f0f3fa}}html.theme-dark .summary-3UYGeClB.hovered-3UYGeClB,html.theme-dark .summary-3UYGeClB:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .summary-3UYGeClB:hover{background-color:#2a2e39}}.caret-3UYGeClB{height:18px;justify-content:center;margin:2px auto 2px 0;width:18px} \ No newline at end of file diff --git a/static/charting_library/bundles/67.19c83a0c303c290216d2.css b/static/charting_library/bundles/67.19c83a0c303c290216d2.css new file mode 100644 index 0000000..0d92178 --- /dev/null +++ b/static/charting_library/bundles/67.19c83a0c303c290216d2.css @@ -0,0 +1 @@ +.button-5-QHyx-s{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;height:36px;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:52px}html.theme-dark .button-5-QHyx-s{color:var(--tv-color-toolbar-button-text,#787b86)}.button-5-QHyx-s.hover-5-QHyx-s,.button-5-QHyx-s:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-5-QHyx-s.hover-5-QHyx-s,html.theme-dark .button-5-QHyx-s:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-5-QHyx-s .bg-5-QHyx-s{align-items:center;border-radius:4px;display:flex;height:34px;justify-content:center;width:34px}.button-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}}html.theme-dark .button-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-5-QHyx-s .icon-5-QHyx-s svg{vertical-align:middle}.button-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{height:30px;width:30px}.button-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.button-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#fff)}html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#d1d4dc)}.button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}}html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}}.button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,.button-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#fff)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#fff)}}html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#d1d4dc)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#d1d4dc)}}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active,#2962ff)}html.theme-sa .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active,#2962ff)}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);height:34px;width:34px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);height:34px;width:34px}}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{background-color:initial;height:34px;width:34px}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{background-color:initial}.button-5-QHyx-s.isGrayed-5-QHyx-s{cursor:default;opacity:.3}.button-5-QHyx-s.isGrayed-5-QHyx-s,.button-5-QHyx-s.isGrayed-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s.isGrayed-5-QHyx-s:active,.button-5-QHyx-s.isGrayed-5-QHyx-s:active .bg-5-QHyx-s{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isGrayed-5-QHyx-s:hover,.button-5-QHyx-s.isGrayed-5-QHyx-s:hover .bg-5-QHyx-s{background-color:initial}}html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:active,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:active .bg-5-QHyx-s{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:hover,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:hover .bg-5-QHyx-s{background-color:initial}}.button-5-QHyx-s.isHidden-5-QHyx-s{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/67.19c83a0c303c290216d2.rtl.css b/static/charting_library/bundles/67.19c83a0c303c290216d2.rtl.css new file mode 100644 index 0000000..0d92178 --- /dev/null +++ b/static/charting_library/bundles/67.19c83a0c303c290216d2.rtl.css @@ -0,0 +1 @@ +.button-5-QHyx-s{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;height:36px;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:52px}html.theme-dark .button-5-QHyx-s{color:var(--tv-color-toolbar-button-text,#787b86)}.button-5-QHyx-s.hover-5-QHyx-s,.button-5-QHyx-s:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-5-QHyx-s.hover-5-QHyx-s,html.theme-dark .button-5-QHyx-s:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-5-QHyx-s .bg-5-QHyx-s{align-items:center;border-radius:4px;display:flex;height:34px;justify-content:center;width:34px}.button-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}}html.theme-dark .button-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-5-QHyx-s .icon-5-QHyx-s svg{vertical-align:middle}.button-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{height:30px;width:30px}.button-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.button-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#fff)}html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#d1d4dc)}.button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}}html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}}.button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,.button-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#fff)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#fff)}}html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#d1d4dc)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-item-active-text,#d1d4dc)}}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active,#2962ff)}html.theme-sa .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active,#2962ff)}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);height:34px;width:34px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);height:34px;width:34px}}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .bg-5-QHyx-s{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s.hover-5-QHyx-s .icon-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:active .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s:hover .icon-5-QHyx-s{color:var(--tv-color-toolbar-button-text-active-hover,#1e53e5)}}.button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{background-color:initial;height:34px;width:34px}html.theme-dark .button-5-QHyx-s.isTransparent-5-QHyx-s.isActive-5-QHyx-s .bg-5-QHyx-s{background-color:initial}.button-5-QHyx-s.isGrayed-5-QHyx-s{cursor:default;opacity:.3}.button-5-QHyx-s.isGrayed-5-QHyx-s,.button-5-QHyx-s.isGrayed-5-QHyx-s .bg-5-QHyx-s,.button-5-QHyx-s.isGrayed-5-QHyx-s:active,.button-5-QHyx-s.isGrayed-5-QHyx-s:active .bg-5-QHyx-s{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-5-QHyx-s.isGrayed-5-QHyx-s:hover,.button-5-QHyx-s.isGrayed-5-QHyx-s:hover .bg-5-QHyx-s{background-color:initial}}html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s .bg-5-QHyx-s,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:active,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:active .bg-5-QHyx-s{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:hover,html.theme-dark .button-5-QHyx-s.isGrayed-5-QHyx-s:hover .bg-5-QHyx-s{background-color:initial}}.button-5-QHyx-s.isHidden-5-QHyx-s{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/67.25fd4b78c8c514988aeb.js b/static/charting_library/bundles/67.25fd4b78c8c514988aeb.js new file mode 100644 index 0000000..0d91d2c --- /dev/null +++ b/static/charting_library/bundles/67.25fd4b78c8c514988aeb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/68.8b4124c875484d11fd94.js b/static/charting_library/bundles/68.8b4124c875484d11fd94.js new file mode 100644 index 0000000..3b683b4 --- /dev/null +++ b/static/charting_library/bundles/68.8b4124c875484d11fd94.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[68],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/68.fa7424ae9c5fe5483aac.css b/static/charting_library/bundles/68.fa7424ae9c5fe5483aac.css new file mode 100644 index 0000000..e384a42 --- /dev/null +++ b/static/charting_library/bundles/68.fa7424ae9c5fe5483aac.css @@ -0,0 +1 @@ +.wrapper-DggvOZTm{display:flex;flex:1 1 auto;overflow:hidden}.container-DggvOZTm{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;border-right:1px solid #e0e3eb;display:flex;flex:1 1 auto;flex:none;flex-direction:column;min-height:145px;overflow-x:hidden;overflow-y:auto;padding-bottom:6px;padding-top:6px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin;width:200px}html.theme-dark .container-DggvOZTm{border-right:1px solid #434651;scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.container-DggvOZTm{min-height:auto}}.container-DggvOZTm::-webkit-scrollbar{height:5px;width:5px}.container-DggvOZTm::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .container-DggvOZTm::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.container-DggvOZTm::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.container-DggvOZTm::-webkit-scrollbar-corner{display:none}.tab-DggvOZTm{align-items:center;color:#131722;display:flex;padding:6px 0 6px 20px}html.theme-dark .tab-DggvOZTm{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tab-DggvOZTm:hover{background-color:#f0f3fa}html.theme-dark .tab-DggvOZTm:hover{background-color:#2a2e39}}.tab-DggvOZTm.active-DggvOZTm,html.theme-dark .tab-DggvOZTm.active-DggvOZTm{background-color:#2962ff}.tab-DggvOZTm.active-DggvOZTm .icon-DggvOZTm,.tab-DggvOZTm.active-DggvOZTm .title-DggvOZTm{color:#fff}html.theme-dark .tab-DggvOZTm.active-DggvOZTm .icon-DggvOZTm,html.theme-dark .tab-DggvOZTm.active-DggvOZTm .title-DggvOZTm{color:#d1d4dc}.icon-DggvOZTm{height:28px;width:28px}.title-DggvOZTm{cursor:default;display:flex;font-size:14px;margin-left:8px;min-width:0;white-space:nowrap}.titleText-DggvOZTm{flex:0 100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.nested-DggvOZTm{align-items:center;color:#787b86;display:flex;flex:1 1 auto;height:0;justify-content:flex-end;padding-right:8px}.isTablet-DggvOZTm.container-DggvOZTm{width:48px}.isTablet-DggvOZTm.tab-DggvOZTm{justify-content:center;padding-left:0}.isMobile-DggvOZTm.container-DggvOZTm{width:100%}.isMobile-DggvOZTm.tab-DggvOZTm{justify-content:flex-start;padding:0 0 0 20px}.isMobile-DggvOZTm.tab-DggvOZTm:last-child .title-DggvOZTm{border-bottom-width:0}.isMobile-DggvOZTm .title-DggvOZTm{align-items:center;border-bottom:1px solid #e0e3eb;display:flex;flex:1 1 auto;font-size:18px;padding-bottom:17px;padding-top:17px}html.theme-dark .isMobile-DggvOZTm .title-DggvOZTm{border-bottom-color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/68.fa7424ae9c5fe5483aac.rtl.css b/static/charting_library/bundles/68.fa7424ae9c5fe5483aac.rtl.css new file mode 100644 index 0000000..4e40110 --- /dev/null +++ b/static/charting_library/bundles/68.fa7424ae9c5fe5483aac.rtl.css @@ -0,0 +1 @@ +.wrapper-DggvOZTm{display:flex;flex:1 1 auto;overflow:hidden}.container-DggvOZTm{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;border-left:1px solid #e0e3eb;display:flex;flex:1 1 auto;flex:none;flex-direction:column;min-height:145px;overflow-x:hidden;overflow-y:auto;padding-bottom:6px;padding-top:6px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin;width:200px}html.theme-dark .container-DggvOZTm{border-left:1px solid #434651;scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.container-DggvOZTm{min-height:auto}}.container-DggvOZTm::-webkit-scrollbar{height:5px;width:5px}.container-DggvOZTm::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .container-DggvOZTm::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.container-DggvOZTm::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.container-DggvOZTm::-webkit-scrollbar-corner{display:none}.tab-DggvOZTm{align-items:center;color:#131722;display:flex;padding:6px 20px 6px 0}html.theme-dark .tab-DggvOZTm{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tab-DggvOZTm:hover{background-color:#f0f3fa}html.theme-dark .tab-DggvOZTm:hover{background-color:#2a2e39}}.tab-DggvOZTm.active-DggvOZTm,html.theme-dark .tab-DggvOZTm.active-DggvOZTm{background-color:#2962ff}.tab-DggvOZTm.active-DggvOZTm .icon-DggvOZTm,.tab-DggvOZTm.active-DggvOZTm .title-DggvOZTm{color:#fff}html.theme-dark .tab-DggvOZTm.active-DggvOZTm .icon-DggvOZTm,html.theme-dark .tab-DggvOZTm.active-DggvOZTm .title-DggvOZTm{color:#d1d4dc}.icon-DggvOZTm{height:28px;width:28px}.title-DggvOZTm{cursor:default;display:flex;font-size:14px;margin-right:8px;min-width:0;white-space:nowrap}.titleText-DggvOZTm{flex:0 100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.nested-DggvOZTm{align-items:center;color:#787b86;display:flex;flex:1 1 auto;height:0;justify-content:flex-end;padding-left:8px}.nested-DggvOZTm svg{transform:rotate(180deg)}.isTablet-DggvOZTm.container-DggvOZTm{width:48px}.isTablet-DggvOZTm.tab-DggvOZTm{justify-content:center;padding-right:0}.isMobile-DggvOZTm.container-DggvOZTm{width:100%}.isMobile-DggvOZTm.tab-DggvOZTm{justify-content:flex-start;padding:0 20px 0 0}.isMobile-DggvOZTm.tab-DggvOZTm:last-child .title-DggvOZTm{border-bottom-width:0}.isMobile-DggvOZTm .title-DggvOZTm{align-items:center;border-bottom:1px solid #e0e3eb;display:flex;flex:1 1 auto;font-size:18px;padding-bottom:17px;padding-top:17px}html.theme-dark .isMobile-DggvOZTm .title-DggvOZTm{border-bottom-color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/69.094b4a764d3dc17820cf.css b/static/charting_library/bundles/69.094b4a764d3dc17820cf.css new file mode 100644 index 0000000..4936cc4 --- /dev/null +++ b/static/charting_library/bundles/69.094b4a764d3dc17820cf.css @@ -0,0 +1 @@ +.footer-3r-9t_XG{align-items:center;background-color:#f8f9fd;border-radius:0 0 6px 6px;box-sizing:border-box;color:#787b86;cursor:default;display:flex;flex:0 0 auto;font-size:13px;justify-content:center;line-height:17px;max-height:65px;min-height:40px;padding:9px 20px;text-align:center}html.theme-dark .footer-3r-9t_XG{background-color:#2a2e39} \ No newline at end of file diff --git a/static/charting_library/bundles/69.094b4a764d3dc17820cf.rtl.css b/static/charting_library/bundles/69.094b4a764d3dc17820cf.rtl.css new file mode 100644 index 0000000..4936cc4 --- /dev/null +++ b/static/charting_library/bundles/69.094b4a764d3dc17820cf.rtl.css @@ -0,0 +1 @@ +.footer-3r-9t_XG{align-items:center;background-color:#f8f9fd;border-radius:0 0 6px 6px;box-sizing:border-box;color:#787b86;cursor:default;display:flex;flex:0 0 auto;font-size:13px;justify-content:center;line-height:17px;max-height:65px;min-height:40px;padding:9px 20px;text-align:center}html.theme-dark .footer-3r-9t_XG{background-color:#2a2e39} \ No newline at end of file diff --git a/static/charting_library/bundles/69.43756a5c7477730eb0c4.js b/static/charting_library/bundles/69.43756a5c7477730eb0c4.js new file mode 100644 index 0000000..5f2d19d --- /dev/null +++ b/static/charting_library/bundles/69.43756a5c7477730eb0c4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[69],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/7.2c7c4f8a49c6380227de.js b/static/charting_library/bundles/7.2c7c4f8a49c6380227de.js new file mode 100644 index 0000000..53efabd --- /dev/null +++ b/static/charting_library/bundles/7.2c7c4f8a49c6380227de.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{MjAr:function(t,e,n){"use strict";n.r(e),function(t){var n=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,r){return t[0]===e&&(n=r,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n0},t.prototype.connect_=function(){r&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),c?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){r&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh), +this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;s.some((function(t){return!!~n.indexOf(t)}))&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),h=function(t,e){for(var n=0,r=Object.keys(e);n0},t}(),g="undefined"!=typeof WeakMap?new WeakMap:new n,E=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=a.getInstance(),r=new w(e,n,this);g.set(this,r)};["observe","unobserve","disconnect"].forEach((function(t){E.prototype[t]=function(){var e;return(e=g.get(this))[t].apply(e,arguments)}}));var O=void 0!==i.ResizeObserver?i.ResizeObserver:E;e.default=O}.call(this,n("yLpj"))}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/70.c27146ec029eda556108.css b/static/charting_library/bundles/70.c27146ec029eda556108.css new file mode 100644 index 0000000..2cbb6e2 --- /dev/null +++ b/static/charting_library/bundles/70.c27146ec029eda556108.css @@ -0,0 +1 @@ +.item-21ifTYt7{align-items:flex-start;font-size:16px;padding-right:20px;white-space:normal}.label-21ifTYt7{line-height:24px;overflow:visible}.labelRow-21ifTYt7{margin-bottom:2px;margin-top:2px}.toolbox-21ifTYt7{margin-top:3px} \ No newline at end of file diff --git a/static/charting_library/bundles/70.c27146ec029eda556108.rtl.css b/static/charting_library/bundles/70.c27146ec029eda556108.rtl.css new file mode 100644 index 0000000..d64133f --- /dev/null +++ b/static/charting_library/bundles/70.c27146ec029eda556108.rtl.css @@ -0,0 +1 @@ +.item-21ifTYt7{align-items:flex-start;font-size:16px;padding-left:20px;white-space:normal}.label-21ifTYt7{line-height:24px;overflow:visible}.labelRow-21ifTYt7{margin-bottom:2px;margin-top:2px}.toolbox-21ifTYt7{margin-top:3px} \ No newline at end of file diff --git a/static/charting_library/bundles/70.cb9d1bb5a00896c1bb97.js b/static/charting_library/bundles/70.cb9d1bb5a00896c1bb97.js new file mode 100644 index 0000000..ed492cb --- /dev/null +++ b/static/charting_library/bundles/70.cb9d1bb5a00896c1bb97.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[70],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/71.15e639d294c4209f256e.css b/static/charting_library/bundles/71.15e639d294c4209f256e.css new file mode 100644 index 0000000..3c9ea17 --- /dev/null +++ b/static/charting_library/bundles/71.15e639d294c4209f256e.css @@ -0,0 +1 @@ +.wrap-3jbioG5e{align-items:center;display:flex;flex:1 0 auto;flex-direction:row;height:100%}.button-2eVMAgh-.first-2eVMAgh-{margin-left:2px}.button-2eVMAgh-.last-2eVMAgh-{margin-right:2px}.button-3HNCAKoZ{padding:0 1px}.menu-3HNCAKoZ:only-child{padding:0 5px}.button-mPM2q3lb.withText-mPM2q3lb{padding:0 10px 0 5px}.button-mPM2q3lb.withoutText-mPM2q3lb{padding:0 5px}.title-2VoDfDWK{color:#787b86;cursor:default;font-size:11px;letter-spacing:.4px;line-height:16px;margin:6px 0;padding:0 12px;text-transform:uppercase}.dropdown-3UuXmxSn{min-width:200px}.label-3UuXmxSn{max-width:314px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.smallWidthTitle-3UuXmxSn{margin-bottom:8px;margin-top:2px;padding-left:20px;padding-right:20px}.smallWidthMenuItem-3UuXmxSn{padding:6px 16px}.smallWidthWrapper-3UuXmxSn{padding-top:8px}.value-2y-wa9jT{font-size:14px;text-align:left}.value-2y-wa9jT.selected-2y-wa9jT{color:#2962ff}html.theme-sa .value-2y-wa9jT.selected-2y-wa9jT{color:#ff7200}html.theme-dark .value-2y-wa9jT.selected-2y-wa9jT{color:#2962ff}.form-9dAINdeN{align-items:center;box-sizing:border-box;color:#131722;display:flex;flex-direction:row;font-size:14px;height:38px;margin:-6px 0;min-width:200px;width:100%}html.theme-dark .form-9dAINdeN{color:#b2b5be}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN:hover .add-9dAINdeN,.form-9dAINdeN:hover .input-9dAINdeN,.form-9dAINdeN:hover .menu-9dAINdeN{color:#131722}}html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN{color:#b2b5be}}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:active,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:hover,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover,.form-9dAINdeN:hover .add-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN:hover .add-9dAINdeN:active,.form-9dAINdeN:hover .add-9dAINdeN:hover,.form-9dAINdeN:hover .input-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN:hover .input-9dAINdeN:active,.form-9dAINdeN:hover .input-9dAINdeN:hover,.form-9dAINdeN:hover .menu-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN:hover .menu-9dAINdeN:active,.form-9dAINdeN:hover .menu-9dAINdeN:hover{color:#131722}}html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:active,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:hover,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:active,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:hover,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN:active,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN:hover,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:active,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:hover{color:#c1c4cd}}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN{position:relative;z-index:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN:hover .add-9dAINdeN,.form-9dAINdeN:hover .menu-9dAINdeN{position:relative;z-index:0}}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active:before,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover:before,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover:before,.form-9dAINdeN:hover .add-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN:hover .add-9dAINdeN:active:before,.form-9dAINdeN:hover .add-9dAINdeN:hover:before,.form-9dAINdeN:hover .menu-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN:hover .menu-9dAINdeN:active:before,.form-9dAINdeN:hover .menu-9dAINdeN:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover:before,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:active:before,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:hover:before,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:active:before,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.wrap-9dAINdeN{flex:1 0 auto}.input-9dAINdeN{background-color:initial;border:none;height:100%;margin:0;padding:0 2px;text-align:center;width:60px}.add-9dAINdeN,.menu-9dAINdeN{align-items:center;display:flex;height:100%}.menu-9dAINdeN{border-bottom-color:#e0e3eb;border-left:1px solid #e0e3eb;border-right:1px solid #e0e3eb;border-top-color:#e0e3eb;box-sizing:border-box;cursor:default;flex:1 0 auto;justify-content:space-between;padding:0 6px 0 10px}html.theme-dark .menu-9dAINdeN{border-color:#434651}.add-9dAINdeN{cursor:default;padding:0 10px}.smallWidthMenuItem-2BP6_jxN{padding:6px 16px}.button-2R6OKuTS{padding:0 6px}.button-2R6OKuTS.first-2R6OKuTS{margin-left:2px}.button-2R6OKuTS.last-2R6OKuTS{margin-right:2px}.menu-2R6OKuTS:only-child{padding:0 10px}.dropdown-2R6OKuTS{min-width:140px}.menuContent-2R6OKuTS{justify-content:center}.section-2R6OKuTS{margin:-2px 0}.section-2R6OKuTS:first-child{margin-top:4px}.section-2R6OKuTS[data-open=true]{margin-bottom:4px}.smallTabletSectionTitle-2R6OKuTS{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;overflow:hidden;padding:10px 20px 8px;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.addCustomInterval-2R6OKuTS{color:#131722;font-size:16px;line-height:24px;margin-top:6px;padding:8px 20px}html.theme-dark .addCustomInterval-2R6OKuTS{color:#b2b5be}.addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,.addCustomInterval-2R6OKuTS:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.addCustomInterval-2R6OKuTS:hover{color:#131722}}html.theme-dark .addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,html.theme-dark .addCustomInterval-2R6OKuTS:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .addCustomInterval-2R6OKuTS:hover{color:#c1c4cd}}.addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,.addCustomInterval-2R6OKuTS:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.addCustomInterval-2R6OKuTS:hover{background-color:#f0f3fa}}html.theme-dark .addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,html.theme-dark .addCustomInterval-2R6OKuTS:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .addCustomInterval-2R6OKuTS:hover{background-color:#2a2e39}}.button-2twPcS_V{justify-content:center;width:37px}.check-3RnJMRVd,.dottedCloud-3RnJMRVd,.spinningCloud-3RnJMRVd{display:none}.arrow-3RnJMRVd{opacity:0;transition:transform .2s ease-in,opacity .2s ease-in}.arrowGap-3RnJMRVd{fill:#f0f3fa;opacity:0;transition:opacity .2s ease-in}html.theme-dark .arrowGap-3RnJMRVd{fill:#2a2e39}.container-3RnJMRVd{overflow:hidden}.container-3RnJMRVd.unsaved-3RnJMRVd .dottedCloud-3RnJMRVd{display:inline}.container-3RnJMRVd.unsaved-3RnJMRVd .arrow-3RnJMRVd{transform:translateY(200%)}.container-3RnJMRVd.unsaved-3RnJMRVd.hovered-3RnJMRVd .arrow-3RnJMRVd{opacity:1;transform:translateY(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3RnJMRVd.unsaved-3RnJMRVd:hover .arrow-3RnJMRVd{opacity:1;transform:translateY(0)}}.container-3RnJMRVd.unsaved-3RnJMRVd.hovered-3RnJMRVd .arrowGap-3RnJMRVd{opacity:1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3RnJMRVd.unsaved-3RnJMRVd:hover .arrowGap-3RnJMRVd{opacity:1}}.container-3RnJMRVd.saving-3RnJMRVd .spinningCloud-3RnJMRVd{display:inline}.container-3RnJMRVd.saving-3RnJMRVd .arrow-3RnJMRVd{transform:translateY(-300%)}.container-3RnJMRVd.saved-3RnJMRVd .check-3RnJMRVd,.container-3RnJMRVd.saved-3RnJMRVd .spinningCloud-3RnJMRVd{display:inline}.container-3RnJMRVd.saved-3RnJMRVd .arrow-3RnJMRVd{display:inline;transform:translateY(-300%)}.container-3RnJMRVd.saved-3RnJMRVd .arrowGap-3RnJMRVd{display:inline}.wrapper-2wbe1KZX{padding:10px 20px}.labelRow-2wbe1KZX{line-height:20px;padding:0}.label-2wbe1KZX{font-size:16px}.labelHint-2wbe1KZX{line-height:17px}.labelOn-2wbe1KZX+.labelHint-2wbe1KZX{margin-top:0}.opened-90gXp5JL.hover-90gXp5JL:before,.opened-90gXp5JL:active:before,.opened-90gXp5JL:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.opened-90gXp5JL:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .opened-90gXp5JL.hover-90gXp5JL:before,html.theme-dark .opened-90gXp5JL:active:before,html.theme-dark .opened-90gXp5JL:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .opened-90gXp5JL:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}}.autoSaveWrapper-90gXp5JL,.sharingWrapper-90gXp5JL{min-width:calc(100% - 22px);width:192px}.button-90gXp5JL.buttonSmallPadding-90gXp5JL{padding-right:6px}.hintPlaceHolder-90gXp5JL{height:128px}.smallHintPlaceHolder-90gXp5JL{height:100%;width:100%}.popupItemRowTabletSmall-90gXp5JL:first-child{margin-bottom:6px;margin-top:6px;padding-left:12px;padding-right:0}.shortcut-90gXp5JL{flex-shrink:0;margin-right:0;text-align:right}.button-2DZWpSVr.isDisabled-2DZWpSVr{opacity:1!important}.text-2DZWpSVr{max-width:100px;overflow:hidden;text-overflow:ellipsis}.hidden-y5m62lMJ{opacity:0}.item-NklSvNSQ{position:relative}.item-NklSvNSQ.withIcon-NklSvNSQ{padding-bottom:2px;padding-top:2px}@media screen and (max-width:428px){.item-NklSvNSQ.withIcon-NklSvNSQ{font-size:16px;padding-bottom:6px;padding-top:6px}}.shortcut-NklSvNSQ{margin-right:0;min-width:auto}@media screen and (max-width:479px){.shortcut-NklSvNSQ{display:none}}.loading-NklSvNSQ .icon-NklSvNSQ,.loading-NklSvNSQ .shortcut-NklSvNSQ{opacity:0}.button-1n0tF4SR{padding:5px 9px;width:100px}.text-1n0tF4SR{font-size:14px;font-weight:700;overflow:hidden}.uppercase-1n0tF4SR{text-transform:uppercase}.item-2gtivim-{align-items:center;color:#131722;cursor:default;display:flex;flex:0 0 auto;height:100%;padding:0 3px;position:relative;z-index:0}html.theme-dark .item-2gtivim-{color:#787b86}.item-2gtivim-:active{color:#000}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2gtivim-:hover{color:#000}}html.theme-dark .item-2gtivim-:active{color:#868993}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2gtivim-:hover{color:#868993}}.item-2gtivim-:active:before{background-color:#f0f3fa;border-radius:50%;bottom:0;content:"";display:block;height:28px;left:0;margin:auto;position:absolute;right:0;top:0;width:28px;z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2gtivim-:hover:before{background-color:#f0f3fa;border-radius:50%;bottom:0;content:"";display:block;height:28px;left:0;margin:auto;position:absolute;right:0;top:0;width:28px;z-index:-1}}html.theme-dark .item-2gtivim-:active:before{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2gtivim-:hover:before{background-color:#2a2e39}}.round-2gtivim-{align-items:center;border:1px solid #d6d8e0;border-radius:50%;cursor:default;display:flex;flex:0 0 auto;font-size:10px;height:20px;justify-content:center;text-align:center;width:20px}html.theme-dark .round-2gtivim-{border-color:#6b7988}.description-2U1ZnBls{word-wrap:break-word;color:#787b86;font-size:12px;line-height:18px;max-width:280px;min-width:170px;padding-bottom:4px;white-space:normal}.labelRow-2noQNU_F{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 60px)}.toolbox-2noQNU_F{margin-left:auto}.description-2noQNU_F{padding:0}.descriptionTabletSmall-2noQNU_F{max-width:100%;padding-right:56px}.item-2noQNU_F{margin-top:-3px;padding-bottom:8px;padding-top:0}.item-2noQNU_F:before{content:none}.item-2noQNU_F,.item-2noQNU_F:active,.titleItem-2noQNU_F,.titleItem-2noQNU_F:active,html.theme-dark .item-2noQNU_F,html.theme-dark .item-2noQNU_F:active,html.theme-dark .titleItem-2noQNU_F,html.theme-dark .titleItem-2noQNU_F:active{background-color:initial}.itemTabletSmall-2noQNU_F:before,.titleItemTabletSmall-2noQNU_F:before{content:none}.itemTabletSmall-2noQNU_F,.itemTabletSmall-2noQNU_F:active,.titleItemTabletSmall-2noQNU_F,.titleItemTabletSmall-2noQNU_F:active,html.theme-dark .itemTabletSmall-2noQNU_F,html.theme-dark .itemTabletSmall-2noQNU_F:active,html.theme-dark .titleItemTabletSmall-2noQNU_F,html.theme-dark .titleItemTabletSmall-2noQNU_F:active{background-color:initial}.titleItemTabletSmall-2noQNU_F{line-height:24px;padding:4px 20px 0 16px}.itemTabletSmall-2noQNU_F{line-height:17px;padding:1px 20px 8px 16px}.itemLabelTabletSmall-2noQNU_F{font-size:16px}.wrap-2noQNU_F{color:#131722}html.theme-dark .wrap-2noQNU_F{color:#b2b5be}.wrap-2noQNU_F.hovered-2noQNU_F,.wrap-2noQNU_F:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-2noQNU_F:hover{color:#131722}}html.theme-dark .wrap-2noQNU_F.hovered-2noQNU_F,html.theme-dark .wrap-2noQNU_F:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-2noQNU_F:hover{color:#c1c4cd}}.wrap-2noQNU_F.hovered-2noQNU_F,.wrap-2noQNU_F:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-2noQNU_F:hover{background-color:#f0f3fa}}html.theme-dark .wrap-2noQNU_F.hovered-2noQNU_F,html.theme-dark .wrap-2noQNU_F:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-2noQNU_F:hover{background-color:#2a2e39}}.wrap-3FnlLKfX{padding-left:4px}.titleWrap-3FnlLKfX{display:flex;flex-direction:column}.indicators-3FnlLKfX{margin-left:33px;margin-right:12px}.title-3FnlLKfX{align-items:center;color:#131722;display:flex;flex-direction:row;white-space:nowrap}html.theme-dark .title-3FnlLKfX{color:#b2b5be}.title-3FnlLKfX .icon-3FnlLKfX{display:flex}.title-3FnlLKfX .icon-3FnlLKfX svg{fill:#131722;display:block}html.theme-dark .title-3FnlLKfX .icon-3FnlLKfX svg{fill:#b2b5be}.title-3FnlLKfX .text-3FnlLKfX{font-size:14px;margin:0 20px 0 5px}.titleTabletSmall-3FnlLKfX{padding-bottom:4px;padding-top:4px}.titleTabletSmall-3FnlLKfX .text-3FnlLKfX{font-size:16px}.labelRow-3FnlLKfX{flex:1 0 100%;min-width:100%}.label-3FnlLKfX{flex:0 0 100%;min-width:100%}.menu-N-Iyk8ip{max-width:340px}.menuSmallTablet-N-Iyk8ip{max-width:100%}.menuItemHeaderTabletSmall-N-Iyk8ip{padding:10px 20px 2px}.menuItemHeader-N-Iyk8ip{cursor:default;margin:0;padding-bottom:3px;padding-top:4px}.wrap-13GsG5XA.full-13GsG5XA .first-13GsG5XA{margin-left:0}.wrap-13GsG5XA.full-13GsG5XA .last-13GsG5XA{margin-right:7px}.wrap-13GsG5XA.medium-13GsG5XA .first-13GsG5XA{margin-left:0}.wrap-13GsG5XA.medium-13GsG5XA .last-13GsG5XA{margin-right:7px}.buttonWithFavorites-13GsG5XA{padding-right:7px}.buttonUndo-nGqa616C{padding-left:3px;padding-right:0}.buttonRedo-nGqa616C{padding-left:0;padding-right:3px} \ No newline at end of file diff --git a/static/charting_library/bundles/71.15e639d294c4209f256e.rtl.css b/static/charting_library/bundles/71.15e639d294c4209f256e.rtl.css new file mode 100644 index 0000000..5ece725 --- /dev/null +++ b/static/charting_library/bundles/71.15e639d294c4209f256e.rtl.css @@ -0,0 +1 @@ +.wrap-3jbioG5e{align-items:center;display:flex;flex:1 0 auto;flex-direction:row;height:100%}.button-2eVMAgh-.first-2eVMAgh-{margin-right:2px}.button-2eVMAgh-.last-2eVMAgh-{margin-left:2px}.button-3HNCAKoZ{padding:0 1px}.menu-3HNCAKoZ:only-child{padding:0 5px}.button-mPM2q3lb.withText-mPM2q3lb{padding:0 5px 0 10px}.button-mPM2q3lb.withoutText-mPM2q3lb{padding:0 5px}.title-2VoDfDWK{color:#787b86;cursor:default;font-size:11px;letter-spacing:.4px;line-height:16px;margin:6px 0;padding:0 12px;text-transform:uppercase}.dropdown-3UuXmxSn{min-width:200px}.label-3UuXmxSn{max-width:314px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.smallWidthTitle-3UuXmxSn{margin-bottom:8px;margin-top:2px;padding-left:20px;padding-right:20px}.smallWidthMenuItem-3UuXmxSn{padding:6px 16px}.smallWidthWrapper-3UuXmxSn{padding-top:8px}.value-2y-wa9jT{font-size:14px;text-align:right}.value-2y-wa9jT.selected-2y-wa9jT{color:#2962ff}html.theme-sa .value-2y-wa9jT.selected-2y-wa9jT{color:#ff7200}html.theme-dark .value-2y-wa9jT.selected-2y-wa9jT{color:#2962ff}.form-9dAINdeN{align-items:center;box-sizing:border-box;color:#131722;display:flex;flex-direction:row;font-size:14px;height:38px;margin:-6px 0;min-width:200px;width:100%}html.theme-dark .form-9dAINdeN{color:#b2b5be}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN:hover .add-9dAINdeN,.form-9dAINdeN:hover .input-9dAINdeN,.form-9dAINdeN:hover .menu-9dAINdeN{color:#131722}}html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN{color:#b2b5be}}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:active,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover,.form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:hover,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover,.form-9dAINdeN:hover .add-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN:hover .add-9dAINdeN:active,.form-9dAINdeN:hover .add-9dAINdeN:hover,.form-9dAINdeN:hover .input-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN:hover .input-9dAINdeN:active,.form-9dAINdeN:hover .input-9dAINdeN:hover,.form-9dAINdeN:hover .menu-9dAINdeN.hovered-9dAINdeN,.form-9dAINdeN:hover .menu-9dAINdeN:active,.form-9dAINdeN:hover .menu-9dAINdeN:hover{color:#131722}}html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:active,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .input-9dAINdeN:hover,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:active,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:hover,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN:active,html.theme-dark .form-9dAINdeN:hover .input-9dAINdeN:hover,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN.hovered-9dAINdeN,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:active,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:hover{color:#c1c4cd}}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN{position:relative;z-index:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN:hover .add-9dAINdeN,.form-9dAINdeN:hover .menu-9dAINdeN{position:relative;z-index:0}}.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active:before,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover:before,.form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover:before,.form-9dAINdeN:hover .add-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN:hover .add-9dAINdeN:active:before,.form-9dAINdeN:hover .add-9dAINdeN:hover:before,.form-9dAINdeN:hover .menu-9dAINdeN.hover-9dAINdeN:before,.form-9dAINdeN:hover .menu-9dAINdeN:active:before,.form-9dAINdeN:hover .menu-9dAINdeN:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:active:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .add-9dAINdeN:hover:before,html.theme-dark .form-9dAINdeN.interacting-9dAINdeN .menu-9dAINdeN:hover:before,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:active:before,html.theme-dark .form-9dAINdeN:hover .add-9dAINdeN:hover:before,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN.hover-9dAINdeN:before,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:active:before,html.theme-dark .form-9dAINdeN:hover .menu-9dAINdeN:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.wrap-9dAINdeN{flex:1 0 auto}.input-9dAINdeN{background-color:initial;border:none;height:100%;margin:0;padding:0 2px;text-align:center;width:60px}.add-9dAINdeN,.menu-9dAINdeN{align-items:center;display:flex;height:100%}.menu-9dAINdeN{border-bottom-color:#e0e3eb;border-left:1px solid #e0e3eb;border-right:1px solid #e0e3eb;border-top-color:#e0e3eb;box-sizing:border-box;cursor:default;flex:1 0 auto;justify-content:space-between;padding:0 10px 0 6px}html.theme-dark .menu-9dAINdeN{border-color:#434651}.add-9dAINdeN{cursor:default;padding:0 10px}.smallWidthMenuItem-2BP6_jxN{padding:6px 16px}.button-2R6OKuTS{padding:0 6px}.button-2R6OKuTS.first-2R6OKuTS{margin-right:2px}.button-2R6OKuTS.last-2R6OKuTS{margin-left:2px}.menu-2R6OKuTS:only-child{padding:0 10px}.dropdown-2R6OKuTS{min-width:140px}.menuContent-2R6OKuTS{justify-content:center}.section-2R6OKuTS{margin:-2px 0}.section-2R6OKuTS:first-child{margin-top:4px}.section-2R6OKuTS[data-open=true]{margin-bottom:4px}.smallTabletSectionTitle-2R6OKuTS{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;overflow:hidden;padding:10px 20px 8px;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.addCustomInterval-2R6OKuTS{color:#131722;font-size:16px;line-height:24px;margin-top:6px;padding:8px 20px}html.theme-dark .addCustomInterval-2R6OKuTS{color:#b2b5be}.addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,.addCustomInterval-2R6OKuTS:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.addCustomInterval-2R6OKuTS:hover{color:#131722}}html.theme-dark .addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,html.theme-dark .addCustomInterval-2R6OKuTS:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .addCustomInterval-2R6OKuTS:hover{color:#c1c4cd}}.addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,.addCustomInterval-2R6OKuTS:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.addCustomInterval-2R6OKuTS:hover{background-color:#f0f3fa}}html.theme-dark .addCustomInterval-2R6OKuTS.hovered-2R6OKuTS,html.theme-dark .addCustomInterval-2R6OKuTS:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .addCustomInterval-2R6OKuTS:hover{background-color:#2a2e39}}.button-2twPcS_V{justify-content:center;width:37px}.check-3RnJMRVd,.dottedCloud-3RnJMRVd,.spinningCloud-3RnJMRVd{display:none}.arrow-3RnJMRVd{opacity:0;transition:transform .2s ease-in,opacity .2s ease-in}.arrowGap-3RnJMRVd{fill:#f0f3fa;opacity:0;transition:opacity .2s ease-in}html.theme-dark .arrowGap-3RnJMRVd{fill:#2a2e39}.container-3RnJMRVd{overflow:hidden}.container-3RnJMRVd.unsaved-3RnJMRVd .dottedCloud-3RnJMRVd{display:inline}.container-3RnJMRVd.unsaved-3RnJMRVd .arrow-3RnJMRVd{transform:translateY(200%)}.container-3RnJMRVd.unsaved-3RnJMRVd.hovered-3RnJMRVd .arrow-3RnJMRVd{opacity:1;transform:translateY(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3RnJMRVd.unsaved-3RnJMRVd:hover .arrow-3RnJMRVd{opacity:1;transform:translateY(0)}}.container-3RnJMRVd.unsaved-3RnJMRVd.hovered-3RnJMRVd .arrowGap-3RnJMRVd{opacity:1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3RnJMRVd.unsaved-3RnJMRVd:hover .arrowGap-3RnJMRVd{opacity:1}}.container-3RnJMRVd.saving-3RnJMRVd .spinningCloud-3RnJMRVd{display:inline}.container-3RnJMRVd.saving-3RnJMRVd .arrow-3RnJMRVd{transform:translateY(-300%)}.container-3RnJMRVd.saved-3RnJMRVd .check-3RnJMRVd,.container-3RnJMRVd.saved-3RnJMRVd .spinningCloud-3RnJMRVd{display:inline}.container-3RnJMRVd.saved-3RnJMRVd .arrow-3RnJMRVd{display:inline;transform:translateY(-300%)}.container-3RnJMRVd.saved-3RnJMRVd .arrowGap-3RnJMRVd{display:inline}.wrapper-2wbe1KZX{padding:10px 20px}.labelRow-2wbe1KZX{line-height:20px;padding:0}.label-2wbe1KZX{font-size:16px}.labelHint-2wbe1KZX{line-height:17px}.labelOn-2wbe1KZX+.labelHint-2wbe1KZX{margin-top:0}.opened-90gXp5JL.hover-90gXp5JL:before,.opened-90gXp5JL:active:before,.opened-90gXp5JL:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.opened-90gXp5JL:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .opened-90gXp5JL.hover-90gXp5JL:before,html.theme-dark .opened-90gXp5JL:active:before,html.theme-dark .opened-90gXp5JL:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .opened-90gXp5JL:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}}.autoSaveWrapper-90gXp5JL,.sharingWrapper-90gXp5JL{min-width:calc(100% - 22px);width:192px}.button-90gXp5JL.buttonSmallPadding-90gXp5JL{padding-left:6px}.hintPlaceHolder-90gXp5JL{height:128px}.smallHintPlaceHolder-90gXp5JL{height:100%;width:100%}.popupItemRowTabletSmall-90gXp5JL:first-child{margin-bottom:6px;margin-top:6px;padding-left:0;padding-right:12px}.shortcut-90gXp5JL{flex-shrink:0;margin-left:0;text-align:left}.button-2DZWpSVr.isDisabled-2DZWpSVr{opacity:1!important}.text-2DZWpSVr{max-width:100px;overflow:hidden;text-overflow:ellipsis}.hidden-y5m62lMJ{opacity:0}.item-NklSvNSQ{position:relative}.item-NklSvNSQ.withIcon-NklSvNSQ{padding-bottom:2px;padding-top:2px}@media screen and (max-width:428px){.item-NklSvNSQ.withIcon-NklSvNSQ{font-size:16px;padding-bottom:6px;padding-top:6px}}.shortcut-NklSvNSQ{margin-left:0;min-width:auto}@media screen and (max-width:479px){.shortcut-NklSvNSQ{display:none}}.loading-NklSvNSQ .icon-NklSvNSQ,.loading-NklSvNSQ .shortcut-NklSvNSQ{opacity:0}.button-1n0tF4SR{padding:5px 9px;width:100px}.text-1n0tF4SR{font-size:14px;font-weight:700;overflow:hidden}.uppercase-1n0tF4SR{text-transform:uppercase}.item-2gtivim-{align-items:center;color:#131722;cursor:default;display:flex;flex:0 0 auto;height:100%;padding:0 3px;position:relative;z-index:0}html.theme-dark .item-2gtivim-{color:#787b86}.item-2gtivim-:active{color:#000}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2gtivim-:hover{color:#000}}html.theme-dark .item-2gtivim-:active{color:#868993}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2gtivim-:hover{color:#868993}}.item-2gtivim-:active:before{background-color:#f0f3fa;border-radius:50%;bottom:0;content:"";display:block;height:28px;left:0;margin:auto;position:absolute;right:0;top:0;width:28px;z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2gtivim-:hover:before{background-color:#f0f3fa;border-radius:50%;bottom:0;content:"";display:block;height:28px;left:0;margin:auto;position:absolute;right:0;top:0;width:28px;z-index:-1}}html.theme-dark .item-2gtivim-:active:before{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2gtivim-:hover:before{background-color:#2a2e39}}.round-2gtivim-{align-items:center;border:1px solid #d6d8e0;border-radius:50%;cursor:default;display:flex;flex:0 0 auto;font-size:10px;height:20px;justify-content:center;text-align:center;width:20px}html.theme-dark .round-2gtivim-{border-color:#6b7988}.description-2U1ZnBls{word-wrap:break-word;color:#787b86;font-size:12px;line-height:18px;max-width:280px;min-width:170px;padding-bottom:4px;white-space:normal}.labelRow-2noQNU_F{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 60px)}.toolbox-2noQNU_F{margin-right:auto}.description-2noQNU_F{padding:0}.descriptionTabletSmall-2noQNU_F{max-width:100%;padding-left:56px}.item-2noQNU_F{margin-top:-3px;padding-bottom:8px;padding-top:0}.item-2noQNU_F:before{content:none}.item-2noQNU_F,.item-2noQNU_F:active,.titleItem-2noQNU_F,.titleItem-2noQNU_F:active,html.theme-dark .item-2noQNU_F,html.theme-dark .item-2noQNU_F:active,html.theme-dark .titleItem-2noQNU_F,html.theme-dark .titleItem-2noQNU_F:active{background-color:initial}.itemTabletSmall-2noQNU_F:before,.titleItemTabletSmall-2noQNU_F:before{content:none}.itemTabletSmall-2noQNU_F,.itemTabletSmall-2noQNU_F:active,.titleItemTabletSmall-2noQNU_F,.titleItemTabletSmall-2noQNU_F:active,html.theme-dark .itemTabletSmall-2noQNU_F,html.theme-dark .itemTabletSmall-2noQNU_F:active,html.theme-dark .titleItemTabletSmall-2noQNU_F,html.theme-dark .titleItemTabletSmall-2noQNU_F:active{background-color:initial}.titleItemTabletSmall-2noQNU_F{line-height:24px;padding:4px 16px 0 20px}.itemTabletSmall-2noQNU_F{line-height:17px;padding:1px 16px 8px 20px}.itemLabelTabletSmall-2noQNU_F{font-size:16px}.wrap-2noQNU_F{color:#131722}html.theme-dark .wrap-2noQNU_F{color:#b2b5be}.wrap-2noQNU_F.hovered-2noQNU_F,.wrap-2noQNU_F:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-2noQNU_F:hover{color:#131722}}html.theme-dark .wrap-2noQNU_F.hovered-2noQNU_F,html.theme-dark .wrap-2noQNU_F:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-2noQNU_F:hover{color:#c1c4cd}}.wrap-2noQNU_F.hovered-2noQNU_F,.wrap-2noQNU_F:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-2noQNU_F:hover{background-color:#f0f3fa}}html.theme-dark .wrap-2noQNU_F.hovered-2noQNU_F,html.theme-dark .wrap-2noQNU_F:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-2noQNU_F:hover{background-color:#2a2e39}}.wrap-3FnlLKfX{padding-right:4px}.titleWrap-3FnlLKfX{display:flex;flex-direction:column}.indicators-3FnlLKfX{margin-left:12px;margin-right:33px}.title-3FnlLKfX{align-items:center;color:#131722;display:flex;flex-direction:row;white-space:nowrap}html.theme-dark .title-3FnlLKfX{color:#b2b5be}.title-3FnlLKfX .icon-3FnlLKfX{display:flex}.title-3FnlLKfX .icon-3FnlLKfX svg{fill:#131722;display:block}html.theme-dark .title-3FnlLKfX .icon-3FnlLKfX svg{fill:#b2b5be}.title-3FnlLKfX .text-3FnlLKfX{font-size:14px;margin:0 5px 0 20px}.titleTabletSmall-3FnlLKfX{padding-bottom:4px;padding-top:4px}.titleTabletSmall-3FnlLKfX .text-3FnlLKfX{font-size:16px}.labelRow-3FnlLKfX{flex:1 0 100%;min-width:100%}.label-3FnlLKfX{flex:0 0 100%;min-width:100%}.menu-N-Iyk8ip{max-width:340px}.menuSmallTablet-N-Iyk8ip{max-width:100%}.menuItemHeaderTabletSmall-N-Iyk8ip{padding:10px 20px 2px}.menuItemHeader-N-Iyk8ip{cursor:default;margin:0;padding-bottom:3px;padding-top:4px}.wrap-13GsG5XA.full-13GsG5XA .first-13GsG5XA{margin-right:0}.wrap-13GsG5XA.full-13GsG5XA .last-13GsG5XA{margin-left:7px}.wrap-13GsG5XA.medium-13GsG5XA .first-13GsG5XA{margin-right:0}.wrap-13GsG5XA.medium-13GsG5XA .last-13GsG5XA{margin-left:7px}.buttonWithFavorites-13GsG5XA{padding-left:7px}.buttonUndo-nGqa616C{padding-left:0;padding-right:3px}.buttonRedo-nGqa616C{padding-left:3px;padding-right:0} \ No newline at end of file diff --git a/static/charting_library/bundles/71.6a9d0842f5e48f68399c.js b/static/charting_library/bundles/71.6a9d0842f5e48f68399c.js new file mode 100644 index 0000000..eaab8af --- /dev/null +++ b/static/charting_library/bundles/71.6a9d0842f5e48f68399c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[71],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/72.07441fd67b864b86147b.css b/static/charting_library/bundles/72.07441fd67b864b86147b.css new file mode 100644 index 0000000..4468ebd --- /dev/null +++ b/static/charting_library/bundles/72.07441fd67b864b86147b.css @@ -0,0 +1 @@ +.control-bar-wrapper{direction:ltr;height:28px;pointer-events:none;position:absolute;z-index:1}.control-bar{display:flex;transition:opacity .3s,visibility .3s;visibility:visible}.control-bar--hidden,.control-bar--hidden .control-bar__btn{opacity:0;visibility:hidden}.control-bar__group{align-items:center;display:flex;margin:0 7px}.control-bar__btn{align-items:center;background-color:#ffffffbf;border-radius:50%;box-shadow:0 2px 4px #0003;color:#5d606b;display:inline-flex;height:28px;justify-content:center;margin:0 4px;opacity:1;pointer-events:auto;transition:background-color .3s,color .3s,visibility .4s,opacity .4s;-webkit-user-select:none;user-select:none;visibility:visible;width:28px;z-index:1}.control-bar__btn--btn-hidden{opacity:0;visibility:hidden}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-bar__btn:hover{background-color:#fff;color:#131722}}.control-bar__btn:active{background-color:#f8f9fd;transition:none}.control-bar__btn--minimize{background-color:#2962ff;color:#fff}.control-bar__btn--minimize:active{background-color:#1e53e5;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-bar__btn--minimize:hover{background-color:#1e53e5;color:#fff}.control-bar__btn--minimize:hover .corner-left-top{animation:animation-minimize-corner-left-top-1yUqeyiZ .6s ease}.control-bar__btn--minimize:hover .corner-right-top{animation:animation-minimize-corner-right-top-1yUqeyiZ .6s ease}.control-bar__btn--minimize:hover .corner-right-bottom{animation:animation-minimize-corner-right-bottom-1yUqeyiZ .6s ease}.control-bar__btn--minimize:hover .corner-left-bottom{animation:animation-minimize-corner-left-bottom-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-left-top{animation:animation-maximize-corner-left-top-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-right-top{animation:animation-maximize-corner-right-top-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-right-bottom{animation:animation-maximize-corner-right-bottom-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-left-bottom{animation:animation-maximize-corner-left-bottom-1yUqeyiZ .6s ease}}.chart-widget__bottom--themed-dark .control-bar__btn{background-color:#1e222dbf;box-shadow:0 2px 4px #0006;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__bottom--themed-dark .control-bar__btn:hover{background-color:#1e222d;color:#d1d4dc}}.chart-widget__bottom--themed-dark .control-bar__btn:active{background-color:#2a2e39}.chart-widget__bottom--themed-dark .control-bar__btn--minimize{background-color:#1848cc;color:#bbd9fb}.chart-widget__bottom--themed-dark .control-bar__btn--minimize:active{background-color:#1e53e5;color:#bbd9fb}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__bottom--themed-dark .control-bar__btn--minimize:hover{background-color:#1e53e5;color:#bbd9fb}}.control-bar__btn--back-present{position:absolute;right:2px}.control-bar__btn svg{pointer-events:none}@keyframes animation-maximize-corner-left-top-1yUqeyiZ{50%{transform:translate(-1px,-1px)}}@keyframes animation-maximize-corner-right-top-1yUqeyiZ{50%{transform:translate(1px,-1px)}}@keyframes animation-maximize-corner-right-bottom-1yUqeyiZ{50%{transform:translate(1px,1px)}}@keyframes animation-maximize-corner-left-bottom-1yUqeyiZ{50%{transform:translate(-1px,1px)}}@keyframes animation-minimize-corner-left-top-1yUqeyiZ{50%{transform:translate(1px,1px)}}@keyframes animation-minimize-corner-right-top-1yUqeyiZ{50%{transform:translate(-1px,1px)}}@keyframes animation-minimize-corner-right-bottom-1yUqeyiZ{50%{transform:translate(-1px,-1px)}}@keyframes animation-minimize-corner-left-bottom-1yUqeyiZ{50%{transform:translate(1px,-1px)}}.loader-1pOK1lo2{align-items:center;content:"";display:flex;font-size:0;height:22px;justify-content:center;left:2px;position:absolute;top:50%;transform:translateY(-50%)}.loader-1pOK1lo2 .loaderItem-1pOK1lo2{animation:loader-animation-1pOK1lo2 .96s ease-in-out infinite both;background-color:#b2b5be;border-radius:50%;height:5px;opacity:1;transform:scale(.6);width:5px}html.theme-dark .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#787b86}.loader-1pOK1lo2 .loaderItem-1pOK1lo2:not(:last-child){margin-right:2px}.loader-1pOK1lo2 .loaderItem-1pOK1lo2:nth-child(2){animation-delay:.151s;transition-delay:.35s/3}.loader-1pOK1lo2 .loaderItem-1pOK1lo2:nth-child(3){animation-delay:.32s;transition-delay:(.35s/3)*2}@keyframes loader-animation-1pOK1lo2{0%,to{transform:scale(.6)}50%{transform:scale(.9)}}.chart-widget__top--themed-light .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#b2b5be}html.theme-dark .chart-widget__top--themed-light .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#787b86}.chart-widget__top--themed-dark .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#b2b5be}html.theme-dark .chart-widget__top--themed-dark .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#787b86}.touchMode-1pOK1lo2 .loader-1pOK1lo2{height:24px}.blockHidden-xPfK7aM7{display:none!important}.pane-button-xPfK7aM7{background-color:currentColor;border:1px solid #d1d4dc;border-radius:3px;cursor:default;pointer-events:all}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.pane-button-xPfK7aM7:hover:after{background-color:#1317220f;border-radius:3px;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:0}}.chart-widget__top--themed-dark .pane-button-xPfK7aM7{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .pane-button-xPfK7aM7:hover:after{background-color:#ffffff1a}}.legend-2KhwsEwE{color:#0000;contain:content;direction:ltr;flex:1 1 auto;line-height:normal;margin:0 4px;max-width:calc(100% - 8px);padding-top:4px;pointer-events:none;transform:translateZ(0);-webkit-user-select:none;user-select:none;z-index:6}.item-2KhwsEwE{-webkit-backface-visibility:hidden;backface-visibility:hidden;flex-wrap:wrap;font-size:13px;max-width:100%;min-height:24px;z-index:1}.item-2KhwsEwE.selected-2KhwsEwE,.item-2KhwsEwE.withAction-2KhwsEwE{z-index:2}.item-2KhwsEwE.last-2KhwsEwE{align-items:center;background-color:currentColor;border-color:#0000;border-style:solid;border-width:0 1px;cursor:default;max-width:18px;order:100000;padding:0 4px;pointer-events:auto}.item-2KhwsEwE.last-2KhwsEwE .text-2KhwsEwE{color:#131722}.item-2KhwsEwE .noWrapWrapper-2KhwsEwE{display:flex;flex-wrap:nowrap;max-width:100%}.noWrap-2KhwsEwE .item-2KhwsEwE{flex-wrap:nowrap}.noWrap-2KhwsEwE .series-2KhwsEwE.item-2KhwsEwE{flex-wrap:wrap}.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{align-self:auto;display:block}.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueItem-2KhwsEwE,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueTitle-2KhwsEwE,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueValue-2KhwsEwE{display:inline}.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueItem-2KhwsEwE:before,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueTitle-2KhwsEwE:before,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueValue-2KhwsEwE:before{display:none}.noWrap-2KhwsEwE .valuesWrapper-2KhwsEwE{align-items:center}.noWrap-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{align-self:auto;color:#131722;display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.directionColumn-2KhwsEwE .series-2KhwsEwE{flex-direction:column}.directionColumn-2KhwsEwE .series-2KhwsEwE .valuesWrapper-2KhwsEwE{align-self:flex-start;max-width:100%}.button-2KhwsEwE,.statusesWrapper-2KhwsEwE,.titleWrapper-2KhwsEwE,.valueItem-2KhwsEwE{background-color:currentColor}.buttons-2KhwsEwE,.buttonsWrapper-2KhwsEwE,.item-2KhwsEwE,.statusesWrapper-2KhwsEwE,.titleWrapper-2KhwsEwE,.valueItem-2KhwsEwE,.valuesWrapper-2KhwsEwE{display:flex}.statusesWrapper-2KhwsEwE{z-index:1}.statusesWrapper-2KhwsEwE,.titleWrapper-2KhwsEwE{cursor:default;pointer-events:auto;position:relative}.titleWrapper-2KhwsEwE{align-items:center;border:1px solid #0000;border-right-width:0;box-sizing:border-box;flex:0 0 auto;max-width:100%;overflow:hidden;padding:0 4px}.noActions-2KhwsEwE .titleWrapper-2KhwsEwE{pointer-events:none}.title-2KhwsEwE{color:#131722;min-width:23px;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.title-2KhwsEwE.title2nd-2KhwsEwE{min-width:auto}.disabled-2KhwsEwE .title-2KhwsEwE,.disabledOnInterval-2KhwsEwE .title-2KhwsEwE{color:#b2b5be}.disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE{color:#b2b5be!important}.study-2KhwsEwE .title-2KhwsEwE.title1st-2KhwsEwE{flex:0 4 auto;min-width:15px}.study-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#5d606b;flex:0 1 auto;min-width:0;padding-left:4px}.study-2KhwsEwE.disabled-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.study-2KhwsEwE.disabledOnInterval-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#b2b5be}.study-2KhwsEwE.disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.study-2KhwsEwE.disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE{color:#b2b5be!important}.study-2KhwsEwE.hideValues-2KhwsEwE .valuesWrapper-2KhwsEwE{display:none}.legend-2KhwsEwE .study-2KhwsEwE.has5Buttons-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .study-2KhwsEwE.has5Buttons-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .study-2KhwsEwE.has5Buttons-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*5)}}.loading-2KhwsEwE .valuesWrapper-2KhwsEwE,.noWrap-2KhwsEwE .valuesWrapper-2KhwsEwE,.series-2KhwsEwE .valuesWrapper-2KhwsEwE{background-color:currentColor;border-bottom:1px solid #0000;border-top:1px solid #0000}.loader-2KhwsEwE{margin-left:4px}.noWrap-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE,.series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{border-left-color:#0000}.noWrap-2KhwsEwE .valueItem-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE{background-color:initial}.noWrap-2KhwsEwE .valueItem-2KhwsEwE,.noWrap-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE,.noWrap-2KhwsEwE .valueItem-2KhwsEwE .valueValue-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE .valueValue-2KhwsEwE{display:inline-flex}.series-2KhwsEwE .titleWrapper-2KhwsEwE{align-items:center;font-size:16px;line-height:normal;max-width:100%;min-height:24px;position:relative}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.withDot-2KhwsEwE:not(:first-child){padding-left:12px;position:relative}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.withDot-2KhwsEwE:not(:first-child):before{color:#c1c4cd;content:"\b7";font-size:16px;height:100%;left:0;line-height:inherit;position:absolute;text-align:center;top:0;width:12px}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title1st-2KhwsEwE{flex:0 1 auto}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{flex:0 0 auto}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title3rd-2KhwsEwE{flex:0 1 auto}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title4th-2KhwsEwE{flex:0 3 auto}.series-2KhwsEwE .valuesWrapper-2KhwsEwE{align-items:flex-end;border-bottom-width:3px}.series-2KhwsEwE .titleWrapper-2KhwsEwE,.series-2KhwsEwE .valuesWrapper-2KhwsEwE{min-width:23px}.series-2KhwsEwE .valuesWrapper-2KhwsEwE{display:flex}.hidden3Title-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title3rd-2KhwsEwE,.microHidden2Title-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.single-visible .miniHidden2Title-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{display:none}.legend-2KhwsEwE .series-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .series-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .series-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}}.legend-2KhwsEwE .series-2KhwsEwE.flagged-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .series-2KhwsEwE.flagged-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .series-2KhwsEwE.flagged-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}}.selected-2KhwsEwE .buttons-2KhwsEwE,.selected-2KhwsEwE .titleWrapper-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE,.withAction-2KhwsEwE .titleWrapper-2KhwsEwE{background-color:#fff}.selected-2KhwsEwE .button-2KhwsEwE,.withAction-2KhwsEwE .button-2KhwsEwE{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.selected-2KhwsEwE .button-2KhwsEwE:hover:after{background-color:#e3effd}}.selected-2KhwsEwE .titleWrapper-2KhwsEwE,.withAction-2KhwsEwE .titleWrapper-2KhwsEwE,.withAction-2KhwsEwE.selected-2KhwsEwE .titleWrapper-2KhwsEwE{border-radius:4px 0 0 4px}.medium-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.medium-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.medium-2KhwsEwE.legend-2KhwsEwE:hover .item-2KhwsEwE.study-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}}.minimized-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.minimized-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.minimized-2KhwsEwE.legend-2KhwsEwE:hover .item-2KhwsEwE.study-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}}.valuesWrapper-2KhwsEwE{align-items:center;align-self:stretch;cursor:default;flex-wrap:wrap;overflow:hidden;pointer-events:auto;position:relative}.valuesAdditionalWrapper-2KhwsEwE{align-items:baseline;align-self:stretch;border-left:4px solid;display:flex;flex-wrap:wrap}.loading-2KhwsEwE .valuesWrapper-2KhwsEwE{min-width:24px}.disabled-2KhwsEwE .valuesWrapper-2KhwsEwE{display:none}.valueItem-2KhwsEwE{align-items:center;align-self:stretch;display:flex;text-align:left}.valueItem-2KhwsEwE:not(:last-child){padding-right:6px}.valueItem-2KhwsEwE:last-child{padding-right:4px}.valueItem-2KhwsEwE .valueTitle-2KhwsEwE{padding-right:1px}.valueItem-2KhwsEwE .valueTitle-2KhwsEwE,.valueItem-2KhwsEwE .valueValue-2KhwsEwE{color:#131722}.loading-2KhwsEwE .valueItem-2KhwsEwE,.loading-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{opacity:0}.series-2KhwsEwE .valueItem-2KhwsEwE:last-child{padding-right:6px}.series-2KhwsEwE .valueItem-2KhwsEwE:last-child .title-2KhwsEwE{display:none}.series-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE{color:#5d606b}.buttonsWrapper-2KhwsEwE{max-width:0;position:relative;width:0;z-index:2}.micro-2KhwsEwE .series-2KhwsEwE .buttonsWrapper-2KhwsEwE{max-width:0;width:0}.disabled-2KhwsEwE .buttonsWrapper-2KhwsEwE,.flagged-2KhwsEwE .buttonsWrapper-2KhwsEwE{max-width:var(--legend-source-item-button-width);width:var(--legend-source-item-button-width)}.disabled-2KhwsEwE.series-2KhwsEwE:not(.onlyOneButtonCanBeStick-2KhwsEwE) .buttonsWrapper-2KhwsEwE{max-width:calc(var(--legend-source-item-button-width)*2);width:calc(var(--legend-source-item-button-width)*2)}.buttons-2KhwsEwE{align-items:center;display:flex;flex-shrink:0;opacity:0;padding:0;pointer-events:auto}.disabled-2KhwsEwE .buttons-2KhwsEwE,.flagged-2KhwsEwE .buttons-2KhwsEwE,.touchMode-2KhwsEwE .buttons-2KhwsEwE{opacity:1}.noActions-2KhwsEwE .buttons-2KhwsEwE{pointer-events:none}.selected-2KhwsEwE .buttons-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE{border-radius:0 4px 4px 0}.legend-2KhwsEwE .selected-2KhwsEwE .buttons-2KhwsEwE,.legend-2KhwsEwE .stayInHoveredMode-2KhwsEwE .buttons-2KhwsEwE{cursor:default;opacity:1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .withAction-2KhwsEwE .buttons-2KhwsEwE{cursor:default;opacity:1}}.legend-2KhwsEwE .selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{background:radial-gradient(10px at 0 50%,currentColor 0,#0000 100%);content:"";height:18px;left:calc(var(--legend-source-item-button-width)*4);position:absolute;top:3px;width:16px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{background:radial-gradient(10px at 0 50%,currentColor 0,#0000 100%);content:"";height:18px;left:calc(var(--legend-source-item-button-width)*4);position:absolute;top:3px;width:16px}}.button-2KhwsEwE{align-items:center;align-self:stretch;display:none;justify-content:center;opacity:0;position:relative;width:var(--legend-source-item-button-width);z-index:0}.buttonIcon-2KhwsEwE{color:#131722;display:flex}.button-2KhwsEwE:last-child{border-radius:0 4px 4px 0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2KhwsEwE:hover:after{background-color:#f0f3fa;border-radius:2px;bottom:1px;content:"";display:block;left:0;position:absolute;right:0;top:1px;z-index:-1}}.button-2KhwsEwE.flag-2KhwsEwE>span{margin-top:-1px}.disabled-2KhwsEwE .buttonIcon-2KhwsEwE{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .study-2KhwsEwE.invisibleHover-2KhwsEwE .button-2KhwsEwE{display:flex}}.withAction-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.withAction-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#d1d4dc}.selected-2KhwsEwE .titleWrapper-2KhwsEwE:after,.withAction-2KhwsEwE .titleWrapper-2KhwsEwE:after{background-color:#d1d4dc}.selected-2KhwsEwE .buttons-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE{border:1px solid #d1d4dc;border-left:0}.selected-2KhwsEwE .buttons-2KhwsEwE,.selected-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.selected-2KhwsEwE .buttonsWrapper-2KhwsEwE,.selected-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#2962ff}.buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye,.buttons-2KhwsEwE .eye-2KhwsEwE .crossed-eye,.buttons-2KhwsEwE .eye-2KhwsEwE .loading-eye,.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye,.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .loading-eye,.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .normal-eye,.medium-2KhwsEwE .study-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:nth-child(2),.medium-2KhwsEwE .study-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:nth-child(3):nth-last-child(3),.micro-2KhwsEwE .series-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:last-child),.minimized-2KhwsEwE .study-2KhwsEwE .button-2KhwsEwE:not(:last-child):not(:first-child){display:none}.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .crossed-eye{display:block}.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .crossed-eye,.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .normal-eye{display:none}.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye,.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .loading-eye{display:block}.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye{animation:eye-animation-2KhwsEwE .96s linear infinite;transform-origin:center}.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE,.flagged-2KhwsEwE .buttons-2KhwsEwE .flag-2KhwsEwE,.selected-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE,.series-2KhwsEwE.disabled-2KhwsEwE .buttons-2KhwsEwE .flag-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE{display:flex;opacity:1}.series-2KhwsEwE.disabled-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE{visibility:hidden}.selected-2KhwsEwE.series-2KhwsEwE.disabled-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE,.series-2KhwsEwE.disabled-2KhwsEwE.flagged-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE,.withAction-2KhwsEwE.series-2KhwsEwE.disabled-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE{visibility:visible}.flag-2KhwsEwE .buttonIcon-2KhwsEwE{align-self:stretch;flex:1}.flagWrapper-2KhwsEwE,.markerContainer-2KhwsEwE{display:flex;flex:1;justify-content:center}.markerContainer-2KhwsEwE{align-items:stretch}.flagWrapper-2KhwsEwE{width:12px}.flagWrapper-2KhwsEwE svg{height:12px}.sourcesWrapper-2KhwsEwE{align-items:flex-start;display:flex;margin:0 4px;min-height:26px;position:relative}.newCollapser-2KhwsEwE .sourcesWrapper-2KhwsEwE{flex-direction:column-reverse;margin:0;min-height:auto}.sources-2KhwsEwE{display:flex;flex:1 1 auto;flex-direction:column;width:100%}.toggler-2KhwsEwE{align-items:center;display:flex;flex:0 0 auto;margin:2px 2px 0 0;position:relative}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.toggler-2KhwsEwE:hover:after{z-index:0}.toggler-2KhwsEwE:hover .counter-2KhwsEwE,.toggler-2KhwsEwE:hover .iconArrow-2KhwsEwE,.toggler-2KhwsEwE:hover .objectTree-2KhwsEwE{color:#000}}.toggler-2KhwsEwE .counter-2KhwsEwE{color:inherit;display:none;font-size:13px;line-height:16px;padding-right:6px}.toggler-2KhwsEwE .iconArrow-2KhwsEwE{display:flex;transition:transform .1s cubic-bezier(.06,.52,1,.54)}.toggler-2KhwsEwE .objectTree-2KhwsEwE{display:none}.toggler-2KhwsEwE .iconArrow-2KhwsEwE,.toggler-2KhwsEwE .objectTree-2KhwsEwE{align-items:center;height:19px;justify-content:center;width:19px}.toggler-2KhwsEwE .counter-2KhwsEwE,.toggler-2KhwsEwE .iconArrow-2KhwsEwE,.toggler-2KhwsEwE .objectTree-2KhwsEwE{color:#131722;position:relative;z-index:1}.newCollapser-2KhwsEwE .toggler-2KhwsEwE{margin:2px 0 0 5px}.newCollapser-2KhwsEwE .toggler-2KhwsEwE.onlyOneSourceShown-2KhwsEwE{display:none}.newCollapser-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE{padding-right:4px}.newCollapser-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{transform:rotate(-180deg);width:27px}.newCollapser-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:19px}.closed-2KhwsEwE.sourcesWrapper-2KhwsEwE{padding-bottom:4px}.closed-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE{display:flex}.closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{transform:rotate(-90deg)}.closed-2KhwsEwE .sources-2KhwsEwE{display:none}.newCollapser-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{transform:rotate(0)}.newCollapser-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.newCollapser-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:19px}.micro-2KhwsEwE .sourcesWrapper-2KhwsEwE{padding-bottom:4px}.micro-2KhwsEwE .toggler-2KhwsEwE.objectsTreeCanBeShown-2KhwsEwE .objectTree-2KhwsEwE,.micro-2KhwsEwE .toggler-2KhwsEwE.objectsTreeCanBeShown-2KhwsEwE.onlyOneSourceShown-2KhwsEwE{display:flex}.micro-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE,.micro-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.micro-2KhwsEwE .series-2KhwsEwE .valuesWrapper-2KhwsEwE,.micro-2KhwsEwE .sources-2KhwsEwE,.micro-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE,.micro-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{display:none}.touchMode-2KhwsEwE .titleWrapper-2KhwsEwE{height:26px;line-height:25px}.touchMode-2KhwsEwE .selected-2KhwsEwE .titleWrapper-2KhwsEwE:after,.touchMode-2KhwsEwE .withAction-2KhwsEwE .titleWrapper-2KhwsEwE:after{bottom:5px;top:5px}.touchMode-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE{min-height:26px}.touchMode-2KhwsEwE .toggler-2KhwsEwE{margin:0 2px 0 0}.touchMode-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.touchMode-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{height:24px;width:24px}.touchMode-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE{font-size:14px}.touchMode-2KhwsEwE .item-2KhwsEwE{min-height:26px}.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .toggler-2KhwsEwE{margin:2px 0 0 5px}.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:30px}.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:24px}.chart-widget__top--themed-dark .item-2KhwsEwE.last-2KhwsEwE .text-2KhwsEwE,.chart-widget__top--themed-dark .noWrap-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE,.chart-widget__top--themed-dark .title-2KhwsEwE,.chart-widget__top--themed-dark .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .valueValue-2KhwsEwE{color:#b2b5be}.chart-widget__top--themed-dark .disabled-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE .valueValue-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE .valueValue-2KhwsEwE{color:#50535e}.chart-widget__top--themed-dark .disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueValue-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueValue-2KhwsEwE{color:#50535e!important}.chart-widget__top--themed-dark .study-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#868993}.chart-widget__top--themed-dark .study-2KhwsEwE.disabled-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.chart-widget__top--themed-dark .study-2KhwsEwE.disabledOnInterval-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#50535e}.chart-widget__top--themed-dark .study-2KhwsEwE.withCustomTextColor-2KhwsEwE.disabled-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.chart-widget__top--themed-dark .study-2KhwsEwE.withCustomTextColor-2KhwsEwE.disabledOnInterval-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#50535e!important}.chart-widget__top--themed-dark .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.withDot-2KhwsEwE:not(:first-child):before{color:#434651}.chart-widget__top--themed-dark .buttonIcon-2KhwsEwE,.chart-widget__top--themed-dark .series-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .button-2KhwsEwE:hover:after{background-color:#2a2e39}}.chart-widget__top--themed-dark .withAction-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .withAction-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.chart-widget__top--themed-dark .withAction-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#363a45}.chart-widget__top--themed-dark .selected-2KhwsEwE .titleWrapper-2KhwsEwE:after,.chart-widget__top--themed-dark .withAction-2KhwsEwE .titleWrapper-2KhwsEwE:after{background-color:#363a45}.chart-widget__top--themed-dark .selected-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .selected-2KhwsEwE .titleWrapper-2KhwsEwE,.chart-widget__top--themed-dark .withAction-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .withAction-2KhwsEwE .titleWrapper-2KhwsEwE{background-color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .selected-2KhwsEwE .button-2KhwsEwE:hover:after{background-color:#1848cc33}}.chart-widget__top--themed-dark .selected-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .selected-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.chart-widget__top--themed-dark .selected-2KhwsEwE .buttonsWrapper-2KhwsEwE,.chart-widget__top--themed-dark .selected-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#1848cc}.chart-widget__top--themed-dark .toggler-2KhwsEwE{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover:after{background-color:#ffffff1a}.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover .counter-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover .iconArrow-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover .objectTree-2KhwsEwE{color:#f0f3fa}}.chart-widget__top--themed-dark .toggler-2KhwsEwE .counter-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE .objectTree-2KhwsEwE{color:#d1d4dc}@keyframes eye-animation-2KhwsEwE{to{transform:rotate(1turn)}}.wrapper-2-RXze0M{box-sizing:border-box;display:flex;flex-direction:column;min-width:292px;padding-right:15px;position:relative}.timezone-2-RXze0M{color:#131722;font-size:14px;margin-bottom:7px;width:100%}html.theme-dark .timezone-2-RXze0M{color:#b2b5be}.sessionDayWrapper-2-RXze0M{display:flex;flex-direction:column;position:relative}.nowWrapper-2-RXze0M{bottom:0;left:30px;pointer-events:none;position:absolute;right:0;top:0}.nowWrapper-2-RXze0M .now-2-RXze0M{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:#131722;bottom:-1px;outline:1px solid #fff;position:absolute;top:2px;width:1px}html.theme-dark .nowWrapper-2-RXze0M .now-2-RXze0M{background-color:#b2b5be;outline:1px solid #1e222d}.sessionDay-2-RXze0M{align-items:baseline;display:flex}.sessionDay-2-RXze0M .weekDay-2-RXze0M{color:#787b86;font-size:10px;overflow:hidden;padding-top:3px;text-transform:uppercase;width:30px}html.theme-dark .sessionDay-2-RXze0M .weekDay-2-RXze0M{color:#787b86}.sessionDay-2-RXze0M .sessionDaySegments-2-RXze0M,.sessionDay-2-RXze0M .timeMarkWrapper-2-RXze0M{flex:1;position:relative;width:100%}.sessionDay-2-RXze0M .timeMarkWrapper-2-RXze0M{height:16px;margin-top:3px}.sessionDay-2-RXze0M .sessionDaySegments-2-RXze0M{border-radius:4px;height:7px;margin:20px 0 2px}.sessionDay-2-RXze0M:first-child .sessionDaySegments-2-RXze0M{margin-top:0}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M{content:"";display:flex;justify-content:center;position:absolute}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M .timeMark-2-RXze0M:first-child{padding-right:4px}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M .timeMark-2-RXze0M:last-child{padding-left:4px}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M{justify-content:space-between}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M .timeMark-2-RXze0M{padding:0}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M .timeMark-2-RXze0M:first-child{transform:translateX(-50%)}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M .timeMark-2-RXze0M:last-child{transform:translateX(50%)}.sessionDay-2-RXze0M .timeMark-2-RXze0M{background-color:#fff;color:#9598a1;font-size:11px;line-height:16px}html.theme-dark .sessionDay-2-RXze0M .timeMark-2-RXze0M{background-color:#1e222d}.sessionDay-2-RXze0M .segment-2-RXze0M{box-sizing:border-box;content:"";height:100%;opacity:.3;padding:0 2px;position:absolute}.sessionDay-2-RXze0M .segment-2-RXze0M:first-child{padding-left:0}.sessionDay-2-RXze0M .segment-2-RXze0M:last-child{padding-right:0}.sessionDay-2-RXze0M .segment-2-RXze0M:before{content:"";display:flex;flex:1;height:100%;min-width:1px;z-index:0}.sessionDay-2-RXze0M .segment-2-RXze0M.small-2-RXze0M{margin-left:-1px;padding:0;z-index:1}.sessionDay-2-RXze0M .segment-2-RXze0M.start-2-RXze0M:before{border-radius:4px 0 0 4px}.sessionDay-2-RXze0M .segment-2-RXze0M.end-2-RXze0M:before{border-radius:0 4px 4px 0}.sessionDay-2-RXze0M .segment-2-RXze0M.start-2-RXze0M.end-2-RXze0M:before{border-radius:4px}.sessionDay-2-RXze0M.active-2-RXze0M .segment-2-RXze0M{opacity:1}.sessionDay-2-RXze0M.active-2-RXze0M .weekDay-2-RXze0M{color:#131722}html.theme-dark .sessionDay-2-RXze0M.active-2-RXze0M .weekDay-2-RXze0M{color:#b2b5be}.green-2-RXze0M{color:#26a69a}.green-2-RXze0M:before{background-color:currentColor}.orange-2-RXze0M{color:#ff9800}.orange-2-RXze0M:before{background-color:currentColor}.blue-2-RXze0M{color:#2962ff}.blue-2-RXze0M:before{background-color:currentColor}.gray-2-RXze0M{color:#e0e3eb}html.theme-dark .gray-2-RXze0M{color:#434651}.gray-2-RXze0M:before{background-color:currentColor}.tooltip-2-RXze0M{white-space:normal}.tooltip-2-RXze0M .time-2-RXze0M{color:#f0f3fa;margin-left:5px}html.theme-dark .tooltip-2-RXze0M .time-2-RXze0M{color:#f0f3fa}.tooltip-2-RXze0M .gray-2-RXze0M{color:#9598a1}html.theme-dark .tooltip-2-RXze0M .gray-2-RXze0M{color:#b2b5be}.tooltip-2-RXze0M .blue-2-RXze0M,html.theme-dark .tooltip-2-RXze0M .blue-2-RXze0M{color:#448aff}.statuses-1Ho_ylkC{align-self:center;border-radius:9px;display:inline-flex;overflow:hidden}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC:hover .statusItem-1Ho_ylkC:after{opacity:.25}}.statuses-1Ho_ylkC.small-1Ho_ylkC{border-radius:9px}.statuses-1Ho_ylkC.large-1Ho_ylkC{border-radius:11px}.statuses-1Ho_ylkC.blinking-1Ho_ylkC{will-change:opacity}.statuses-1Ho_ylkC .statusItem-1Ho_ylkC{cursor:pointer}.oneWidgetsVisible-1Ho_ylkC.statuses-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC.statuses-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC.statuses-1Ho_ylkC{margin-left:11px;margin-right:12px}.statusItem-1Ho_ylkC{display:flex;position:relative;-webkit-user-select:none;user-select:none}.statusItem-1Ho_ylkC:after{content:"";display:block;height:100%;left:0;opacity:.15;position:absolute;top:0;width:100%;z-index:-1}.statusItem-1Ho_ylkC svg{left:50%;position:relative;top:50%;transform:translate(-50%,-50%);z-index:0}.statusItem-1Ho_ylkC.small-1Ho_ylkC{height:18px;width:18px}.statusItem-1Ho_ylkC.large-1Ho_ylkC{height:22px;width:22px}.statusItem-1Ho_ylkC.blinking-1Ho_ylkC:after{animation:blinking-animation-1Ho_ylkC 2.5s cubic-bezier(.25,0,.75,1) infinite}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statusItem-1Ho_ylkC.blinking-1Ho_ylkC:after:hover{opacity:inherit}}.marketStatusOpen-1Ho_ylkC,html.theme-dark .marketStatusOpen-1Ho_ylkC{color:#009688}.marketStatusOpen-1Ho_ylkC:after,html.theme-dark .marketStatusOpen-1Ho_ylkC:after{background-color:#26a69a}.marketStatusClose-1Ho_ylkC,html.theme-dark .marketStatusClose-1Ho_ylkC{color:#9598a1}.marketStatusClose-1Ho_ylkC:after,html.theme-dark .marketStatusClose-1Ho_ylkC:after{background-color:#9598a1}.marketStatusPre-1Ho_ylkC,html.theme-dark .marketStatusPre-1Ho_ylkC{color:#fb8c00}.marketStatusPre-1Ho_ylkC:after,html.theme-dark .marketStatusPre-1Ho_ylkC:after{background-color:#ffa726}.marketStatusPost-1Ho_ylkC,html.theme-dark .marketStatusPost-1Ho_ylkC{color:#2962ff}.marketStatusPost-1Ho_ylkC:after,html.theme-dark .marketStatusPost-1Ho_ylkC:after{background-color:#3179f5}.marketStatusHoliday-1Ho_ylkC,html.theme-dark .marketStatusHoliday-1Ho_ylkC{color:#9598a1}.marketStatusHoliday-1Ho_ylkC:after,html.theme-dark .marketStatusHoliday-1Ho_ylkC:after{background-color:#9598a1}.invalidSymbol-1Ho_ylkC{color:#fff}.invalidSymbol-1Ho_ylkC,html.theme-dark .invalidSymbol-1Ho_ylkC{background-color:#ef5350}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC .invalidSymbol-1Ho_ylkC:hover{background-color:#d32f2f}html.theme-dark .statuses-1Ho_ylkC .invalidSymbol-1Ho_ylkC:hover{background-color:#f44336}}.replayMode-1Ho_ylkC{color:#fff}.replayMode-1Ho_ylkC,html.theme-dark .replayMode-1Ho_ylkC{background-color:#2962ff}html.theme-dark .replayMode-1Ho_ylkC{color:#e3effd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC .replayMode-1Ho_ylkC:hover,html.theme-dark .statuses-1Ho_ylkC .replayMode-1Ho_ylkC:hover{background-color:#1e53e5}}.notAccurate-1Ho_ylkC,html.theme-dark .notAccurate-1Ho_ylkC{color:#c2185b}.notAccurate-1Ho_ylkC:after,html.theme-dark .notAccurate-1Ho_ylkC:after{background-color:#ec407a}.delay-1Ho_ylkC,html.theme-dark .delay-1Ho_ylkC{color:#f57c00}.delay-1Ho_ylkC:after,html.theme-dark .delay-1Ho_ylkC:after{background-color:#ffa726}.eod-1Ho_ylkC,html.theme-dark .eod-1Ho_ylkC{color:#7b1fa2}.eod-1Ho_ylkC:after,html.theme-dark .eod-1Ho_ylkC:after{background-color:#ab47bc}.twoWidgetsVisible-1Ho_ylkC .delay-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .eod-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .notAccurate-1Ho_ylkC{padding-right:2px}.dataProblemHigh-1Ho_ylkC{background-color:#ef5350;color:#fff}html.theme-dark .dataProblemHigh-1Ho_ylkC{background-color:#ef5350}.dataProblemLow-1Ho_ylkC,html.theme-dark .dataProblemLow-1Ho_ylkC{color:#e53935}.dataProblemLow-1Ho_ylkC:after,html.theme-dark .dataProblemLow-1Ho_ylkC:after{background-color:#ef5350}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC .dataProblemHigh-1Ho_ylkC:hover{background-color:#d32f2f}html.theme-dark .statuses-1Ho_ylkC .dataProblemHigh-1Ho_ylkC:hover{background-color:#f44336}}.threeWidgetsVisible-1Ho_ylkC .marketStatusClose-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusHoliday-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusOpen-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusPost-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusPre-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusClose-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusHoliday-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusOpen-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusPost-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusPre-1Ho_ylkC{padding-left:2px}.threeWidgetsVisible-1Ho_ylkC .dataProblemLow-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .dataProblemLow-1Ho_ylkC{padding-right:2px}@keyframes blinking-animation-1Ho_ylkC{0%,to{opacity:.15}50%{opacity:.4}}.paneControls-2fnY2ZKI{color:#fff;margin-top:6px;padding:0 5px 0 1px;position:static;transition:opacity .4s,visibility .4s;z-index:7}.paneControls-2fnY2ZKI.hasTopMargin-2fnY2ZKI{top:30px}.paneControls-2fnY2ZKI.hidden-2fnY2ZKI{opacity:0;visibility:hidden}.paneControls-2fnY2ZKI.forceHidden-2fnY2ZKI{height:0;line-height:0;margin:0;padding:0;width:0}.button-2fnY2ZKI{align-items:center;display:flex;flex:0 0 auto;height:19px;justify-content:center;overflow:hidden;position:relative;width:19px}.button-2fnY2ZKI:not(:first-child){margin-left:4px}.button-2fnY2ZKI .buttonIcon-2fnY2ZKI{color:#131722}.button-2fnY2ZKI.minimize-2fnY2ZKI .buttonIcon-2fnY2ZKI{color:#fff}.button-2fnY2ZKI.newButton-2fnY2ZKI{border-radius:4px}.touchMode-2fnY2ZKI .button-2fnY2ZKI{height:24px;width:24px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.maximize-2fnY2ZKI:hover .bracket-up{animation:maximize-animation-up-bracket-2fnY2ZKI .6s ease}.maximize-2fnY2ZKI:hover .bracket-down{animation:maximize-animation-down-bracket-2fnY2ZKI .6s ease}}.maximize-2fnY2ZKI .bracket-down,.maximize-2fnY2ZKI .bracket-up{transform:translateY(0)}@keyframes maximize-animation-up-bracket-2fnY2ZKI{50%{transform:translateY(1px)}}@keyframes maximize-animation-down-bracket-2fnY2ZKI{50%{transform:translateY(-1px)}}.minimize-2fnY2ZKI{background-color:#2962ff!important;border-color:#2962ff!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.minimize-2fnY2ZKI:hover .bracket-up{animation:minimize-animation-up-bracket-2fnY2ZKI .6s ease}.minimize-2fnY2ZKI:hover .bracket-down{animation:minimize-animation-down-bracket-2fnY2ZKI .6s ease}}.minimize-2fnY2ZKI .bracket-down,.minimize-2fnY2ZKI .bracket-up{transform:translateY(0)}@keyframes minimize-animation-up-bracket-2fnY2ZKI{50%{transform:translateY(-1px)}}@keyframes minimize-animation-down-bracket-2fnY2ZKI{50%{transform:translateY(1px)}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.up-2fnY2ZKI:hover .buttonIcon-2fnY2ZKI{animation:up-animation-2fnY2ZKI .6s ease}}@keyframes up-animation-2fnY2ZKI{0%{transform:translateY(0)}50%{transform:translateY(-2px)}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.down-2fnY2ZKI:hover .buttonIcon-2fnY2ZKI{animation:down-animation-2fnY2ZKI .6s ease}}@keyframes down-animation-2fnY2ZKI{0%{transform:translateY(0)}50%{transform:translateY(2px)}}.buttonsWrapper-2fnY2ZKI{align-items:center;display:flex;flex:0 0 auto;flex-wrap:nowrap}.chart-widget__top--themed-dark .paneControls-2fnY2ZKI{color:#131722}.chart-widget__top--themed-dark .minimize-2fnY2ZKI{background-color:#1848cc!important;border-color:#1848cc!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .button-2fnY2ZKI:hover .buttonIcon-2fnY2ZKI{color:#f0f3fa}}.chart-widget__top--themed-dark .button-2fnY2ZKI .buttonIcon-2fnY2ZKI{color:#d1d4dc} \ No newline at end of file diff --git a/static/charting_library/bundles/72.07441fd67b864b86147b.rtl.css b/static/charting_library/bundles/72.07441fd67b864b86147b.rtl.css new file mode 100644 index 0000000..c1c43d6 --- /dev/null +++ b/static/charting_library/bundles/72.07441fd67b864b86147b.rtl.css @@ -0,0 +1 @@ +.control-bar-wrapper{direction:ltr;height:28px;pointer-events:none;position:absolute;z-index:1}.control-bar{display:flex;transition:opacity .3s,visibility .3s;visibility:visible}.control-bar--hidden,.control-bar--hidden .control-bar__btn{opacity:0;visibility:hidden}.control-bar__group{align-items:center;display:flex;margin:0 7px}.control-bar__btn{align-items:center;background-color:#ffffffbf;border-radius:50%;box-shadow:0 2px 4px #0003;color:#5d606b;display:inline-flex;height:28px;justify-content:center;margin:0 4px;opacity:1;pointer-events:auto;transition:background-color .3s,color .3s,visibility .4s,opacity .4s;-webkit-user-select:none;user-select:none;visibility:visible;width:28px;z-index:1}.control-bar__btn--btn-hidden{opacity:0;visibility:hidden}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-bar__btn:hover{background-color:#fff;color:#131722}}.control-bar__btn:active{background-color:#f8f9fd;transition:none}.control-bar__btn--minimize{background-color:#2962ff;color:#fff}.control-bar__btn--minimize:active{background-color:#1e53e5;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-bar__btn--minimize:hover{background-color:#1e53e5;color:#fff}.control-bar__btn--minimize:hover .corner-left-top{animation:animation-minimize-corner-left-top-1yUqeyiZ .6s ease}.control-bar__btn--minimize:hover .corner-right-top{animation:animation-minimize-corner-right-top-1yUqeyiZ .6s ease}.control-bar__btn--minimize:hover .corner-right-bottom{animation:animation-minimize-corner-right-bottom-1yUqeyiZ .6s ease}.control-bar__btn--minimize:hover .corner-left-bottom{animation:animation-minimize-corner-left-bottom-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-left-top{animation:animation-maximize-corner-left-top-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-right-top{animation:animation-maximize-corner-right-top-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-right-bottom{animation:animation-maximize-corner-right-bottom-1yUqeyiZ .6s ease}.control-bar__btn--maximize:hover .corner-left-bottom{animation:animation-maximize-corner-left-bottom-1yUqeyiZ .6s ease}}.chart-widget__bottom--themed-dark .control-bar__btn{background-color:#1e222dbf;box-shadow:0 2px 4px #0006;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__bottom--themed-dark .control-bar__btn:hover{background-color:#1e222d;color:#d1d4dc}}.chart-widget__bottom--themed-dark .control-bar__btn:active{background-color:#2a2e39}.chart-widget__bottom--themed-dark .control-bar__btn--minimize{background-color:#1848cc;color:#bbd9fb}.chart-widget__bottom--themed-dark .control-bar__btn--minimize:active{background-color:#1e53e5;color:#bbd9fb}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__bottom--themed-dark .control-bar__btn--minimize:hover{background-color:#1e53e5;color:#bbd9fb}}.control-bar__btn--back-present{position:absolute;right:2px}.control-bar__btn svg{pointer-events:none}@keyframes animation-maximize-corner-left-top-1yUqeyiZ{50%{transform:translate(1px,-1px)}}@keyframes animation-maximize-corner-right-top-1yUqeyiZ{50%{transform:translate(-1px,-1px)}}@keyframes animation-maximize-corner-right-bottom-1yUqeyiZ{50%{transform:translate(-1px,1px)}}@keyframes animation-maximize-corner-left-bottom-1yUqeyiZ{50%{transform:translate(1px,1px)}}@keyframes animation-minimize-corner-left-top-1yUqeyiZ{50%{transform:translate(-1px,1px)}}@keyframes animation-minimize-corner-right-top-1yUqeyiZ{50%{transform:translate(1px,1px)}}@keyframes animation-minimize-corner-right-bottom-1yUqeyiZ{50%{transform:translate(1px,-1px)}}@keyframes animation-minimize-corner-left-bottom-1yUqeyiZ{50%{transform:translate(-1px,-1px)}}.loader-1pOK1lo2{align-items:center;content:"";display:flex;font-size:0;height:22px;justify-content:center;left:2px;position:absolute;top:50%;transform:translateY(-50%)}.loader-1pOK1lo2 .loaderItem-1pOK1lo2{animation:loader-animation-1pOK1lo2 .96s ease-in-out infinite both;background-color:#b2b5be;border-radius:50%;height:5px;opacity:1;transform:scale(.6);width:5px}html.theme-dark .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#787b86}.loader-1pOK1lo2 .loaderItem-1pOK1lo2:not(:last-child){margin-right:2px}.loader-1pOK1lo2 .loaderItem-1pOK1lo2:nth-child(2){animation-delay:.151s;transition-delay:.35s/3}.loader-1pOK1lo2 .loaderItem-1pOK1lo2:nth-child(3){animation-delay:.32s;transition-delay:(.35s/3)*2}@keyframes loader-animation-1pOK1lo2{0%,to{transform:scale(.6)}50%{transform:scale(.9)}}.chart-widget__top--themed-light .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#b2b5be}html.theme-dark .chart-widget__top--themed-light .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#787b86}.chart-widget__top--themed-dark .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#b2b5be}html.theme-dark .chart-widget__top--themed-dark .loader-1pOK1lo2 .loaderItem-1pOK1lo2{background-color:#787b86}.touchMode-1pOK1lo2 .loader-1pOK1lo2{height:24px}.blockHidden-xPfK7aM7{display:none!important}.pane-button-xPfK7aM7{background-color:currentColor;border:1px solid #d1d4dc;border-radius:3px;cursor:default;pointer-events:all}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.pane-button-xPfK7aM7:hover:after{background-color:#1317220f;border-radius:3px;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:0}}.chart-widget__top--themed-dark .pane-button-xPfK7aM7{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .pane-button-xPfK7aM7:hover:after{background-color:#ffffff1a}}.legend-2KhwsEwE{color:#0000;contain:content;direction:ltr;flex:1 1 auto;line-height:normal;margin:0 4px;max-width:calc(100% - 8px);padding-top:4px;pointer-events:none;transform:translateZ(0);-webkit-user-select:none;user-select:none;z-index:6}.item-2KhwsEwE{-webkit-backface-visibility:hidden;backface-visibility:hidden;flex-wrap:wrap;font-size:13px;max-width:100%;min-height:24px;z-index:1}.item-2KhwsEwE.selected-2KhwsEwE,.item-2KhwsEwE.withAction-2KhwsEwE{z-index:2}.item-2KhwsEwE.last-2KhwsEwE{align-items:center;background-color:currentColor;border-color:#0000;border-style:solid;border-width:0 1px;cursor:default;max-width:18px;order:100000;padding:0 4px;pointer-events:auto}.item-2KhwsEwE.last-2KhwsEwE .text-2KhwsEwE{color:#131722}.item-2KhwsEwE .noWrapWrapper-2KhwsEwE{display:flex;flex-wrap:nowrap;max-width:100%}.noWrap-2KhwsEwE .item-2KhwsEwE{flex-wrap:nowrap}.noWrap-2KhwsEwE .series-2KhwsEwE.item-2KhwsEwE{flex-wrap:wrap}.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{align-self:auto;display:block}.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueItem-2KhwsEwE,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueTitle-2KhwsEwE,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueValue-2KhwsEwE{display:inline}.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueItem-2KhwsEwE:before,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueTitle-2KhwsEwE:before,.noWrap-2KhwsEwE .series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE .valueValue-2KhwsEwE:before{display:none}.noWrap-2KhwsEwE .valuesWrapper-2KhwsEwE{align-items:center}.noWrap-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{align-self:auto;color:#131722;display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.directionColumn-2KhwsEwE .series-2KhwsEwE{flex-direction:column}.directionColumn-2KhwsEwE .series-2KhwsEwE .valuesWrapper-2KhwsEwE{align-self:flex-start;max-width:100%}.button-2KhwsEwE,.statusesWrapper-2KhwsEwE,.titleWrapper-2KhwsEwE,.valueItem-2KhwsEwE{background-color:currentColor}.buttons-2KhwsEwE,.buttonsWrapper-2KhwsEwE,.item-2KhwsEwE,.statusesWrapper-2KhwsEwE,.titleWrapper-2KhwsEwE,.valueItem-2KhwsEwE,.valuesWrapper-2KhwsEwE{display:flex}.statusesWrapper-2KhwsEwE{z-index:1}.statusesWrapper-2KhwsEwE,.titleWrapper-2KhwsEwE{cursor:default;pointer-events:auto;position:relative}.titleWrapper-2KhwsEwE{align-items:center;border:1px solid #0000;border-left-width:0;box-sizing:border-box;flex:0 0 auto;max-width:100%;overflow:hidden;padding:0 4px}.noActions-2KhwsEwE .titleWrapper-2KhwsEwE{pointer-events:none}.title-2KhwsEwE{color:#131722;min-width:23px;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.title-2KhwsEwE.title2nd-2KhwsEwE{min-width:auto}.disabled-2KhwsEwE .title-2KhwsEwE,.disabledOnInterval-2KhwsEwE .title-2KhwsEwE{color:#b2b5be}.disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE{color:#b2b5be!important}.study-2KhwsEwE .title-2KhwsEwE.title1st-2KhwsEwE{flex:0 4 auto;min-width:15px}.study-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#5d606b;flex:0 1 auto;min-width:0;padding-left:4px}.study-2KhwsEwE.disabled-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.study-2KhwsEwE.disabledOnInterval-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#b2b5be}.study-2KhwsEwE.disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.study-2KhwsEwE.disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE{color:#b2b5be!important}.study-2KhwsEwE.hideValues-2KhwsEwE .valuesWrapper-2KhwsEwE{display:none}.legend-2KhwsEwE .study-2KhwsEwE.has5Buttons-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .study-2KhwsEwE.has5Buttons-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*5)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .study-2KhwsEwE.has5Buttons-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*5)}}.loading-2KhwsEwE .valuesWrapper-2KhwsEwE,.noWrap-2KhwsEwE .valuesWrapper-2KhwsEwE,.series-2KhwsEwE .valuesWrapper-2KhwsEwE{background-color:currentColor;border-bottom:1px solid #0000;border-top:1px solid #0000}.loader-2KhwsEwE{margin-left:4px}.noWrap-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE,.series-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{border-left-color:#0000}.noWrap-2KhwsEwE .valueItem-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE{background-color:initial}.noWrap-2KhwsEwE .valueItem-2KhwsEwE,.noWrap-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE,.noWrap-2KhwsEwE .valueItem-2KhwsEwE .valueValue-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE,.series-2KhwsEwE .valueItem-2KhwsEwE .valueValue-2KhwsEwE{display:inline-flex}.series-2KhwsEwE .titleWrapper-2KhwsEwE{align-items:center;font-size:16px;line-height:normal;max-width:100%;min-height:24px;position:relative}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.withDot-2KhwsEwE:not(:first-child){padding-left:12px;position:relative}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.withDot-2KhwsEwE:not(:first-child):before{color:#c1c4cd;content:"\b7";font-size:16px;height:100%;left:0;line-height:inherit;position:absolute;text-align:center;top:0;width:12px}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title1st-2KhwsEwE{flex:0 1 auto}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{flex:0 0 auto}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title3rd-2KhwsEwE{flex:0 1 auto}.series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title4th-2KhwsEwE{flex:0 3 auto}.series-2KhwsEwE .valuesWrapper-2KhwsEwE{align-items:flex-end;border-bottom-width:3px}.series-2KhwsEwE .titleWrapper-2KhwsEwE,.series-2KhwsEwE .valuesWrapper-2KhwsEwE{min-width:23px}.series-2KhwsEwE .valuesWrapper-2KhwsEwE{display:flex}.hidden3Title-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title3rd-2KhwsEwE,.microHidden2Title-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.single-visible .miniHidden2Title-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{display:none}.legend-2KhwsEwE .series-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .series-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .series-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}}.legend-2KhwsEwE .series-2KhwsEwE.flagged-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .series-2KhwsEwE.flagged-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .series-2KhwsEwE.flagged-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}}.selected-2KhwsEwE .buttons-2KhwsEwE,.selected-2KhwsEwE .titleWrapper-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE,.withAction-2KhwsEwE .titleWrapper-2KhwsEwE{background-color:#fff}.selected-2KhwsEwE .button-2KhwsEwE,.withAction-2KhwsEwE .button-2KhwsEwE{background-color:initial}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.selected-2KhwsEwE .button-2KhwsEwE:hover:after{background-color:#e3effd}}.selected-2KhwsEwE .titleWrapper-2KhwsEwE,.withAction-2KhwsEwE .titleWrapper-2KhwsEwE,.withAction-2KhwsEwE.selected-2KhwsEwE .titleWrapper-2KhwsEwE{border-radius:4px 0 0 4px}.medium-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.medium-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.medium-2KhwsEwE.legend-2KhwsEwE:hover .item-2KhwsEwE.study-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*3)}}.minimized-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.minimized-2KhwsEwE.legend-2KhwsEwE .item-2KhwsEwE.study-2KhwsEwE.stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.minimized-2KhwsEwE.legend-2KhwsEwE:hover .item-2KhwsEwE.study-2KhwsEwE.withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{left:calc(var(--legend-source-item-button-width)*2)}}.valuesWrapper-2KhwsEwE{align-items:center;align-self:stretch;cursor:default;flex-wrap:wrap;overflow:hidden;pointer-events:auto;position:relative}.valuesAdditionalWrapper-2KhwsEwE{align-items:baseline;align-self:stretch;border-left:4px solid;display:flex;flex-wrap:wrap}.loading-2KhwsEwE .valuesWrapper-2KhwsEwE{min-width:24px}.disabled-2KhwsEwE .valuesWrapper-2KhwsEwE{display:none}.valueItem-2KhwsEwE{align-items:center;align-self:stretch;display:flex;text-align:left}.valueItem-2KhwsEwE:not(:last-child){padding-right:6px}.valueItem-2KhwsEwE:last-child{padding-right:4px}.valueItem-2KhwsEwE .valueTitle-2KhwsEwE{padding-right:1px}.valueItem-2KhwsEwE .valueTitle-2KhwsEwE,.valueItem-2KhwsEwE .valueValue-2KhwsEwE{color:#131722}.loading-2KhwsEwE .valueItem-2KhwsEwE,.loading-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE{opacity:0}.series-2KhwsEwE .valueItem-2KhwsEwE:last-child{padding-right:6px}.series-2KhwsEwE .valueItem-2KhwsEwE:last-child .title-2KhwsEwE{display:none}.series-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE{color:#5d606b}.buttonsWrapper-2KhwsEwE{max-width:0;position:relative;width:0;z-index:2}.micro-2KhwsEwE .series-2KhwsEwE .buttonsWrapper-2KhwsEwE{max-width:0;width:0}.disabled-2KhwsEwE .buttonsWrapper-2KhwsEwE,.flagged-2KhwsEwE .buttonsWrapper-2KhwsEwE{max-width:var(--legend-source-item-button-width);width:var(--legend-source-item-button-width)}.disabled-2KhwsEwE.series-2KhwsEwE:not(.onlyOneButtonCanBeStick-2KhwsEwE) .buttonsWrapper-2KhwsEwE{max-width:calc(var(--legend-source-item-button-width)*2);width:calc(var(--legend-source-item-button-width)*2)}.buttons-2KhwsEwE{align-items:center;display:flex;flex-shrink:0;opacity:0;padding:0;pointer-events:auto}.disabled-2KhwsEwE .buttons-2KhwsEwE,.flagged-2KhwsEwE .buttons-2KhwsEwE,.touchMode-2KhwsEwE .buttons-2KhwsEwE{opacity:1}.noActions-2KhwsEwE .buttons-2KhwsEwE{pointer-events:none}.selected-2KhwsEwE .buttons-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE{border-radius:0 4px 4px 0}.legend-2KhwsEwE .selected-2KhwsEwE .buttons-2KhwsEwE,.legend-2KhwsEwE .stayInHoveredMode-2KhwsEwE .buttons-2KhwsEwE{cursor:default;opacity:1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .withAction-2KhwsEwE .buttons-2KhwsEwE{cursor:default;opacity:1}}.legend-2KhwsEwE .selected-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after,.legend-2KhwsEwE .stayInHoveredMode-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{background:radial-gradient(10px at 0 50%,currentColor 0,#0000 100%);content:"";height:18px;left:calc(var(--legend-source-item-button-width)*4);position:absolute;top:3px;width:16px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .withAction-2KhwsEwE.withTail-2KhwsEwE .valuesWrapper-2KhwsEwE:after{background:radial-gradient(10px at 0 50%,currentColor 0,#0000 100%);content:"";height:18px;left:calc(var(--legend-source-item-button-width)*4);position:absolute;top:3px;width:16px}}.button-2KhwsEwE{align-items:center;align-self:stretch;display:none;justify-content:center;opacity:0;position:relative;width:var(--legend-source-item-button-width);z-index:0}.buttonIcon-2KhwsEwE{color:#131722;display:flex}.button-2KhwsEwE:last-child{border-radius:0 4px 4px 0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2KhwsEwE:hover:after{background-color:#f0f3fa;border-radius:2px;bottom:1px;content:"";display:block;left:0;position:absolute;right:0;top:1px;z-index:-1}}.button-2KhwsEwE.flag-2KhwsEwE>span{margin-top:-1px}.disabled-2KhwsEwE .buttonIcon-2KhwsEwE{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.legend-2KhwsEwE:hover .study-2KhwsEwE.invisibleHover-2KhwsEwE .button-2KhwsEwE{display:flex}}.withAction-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.withAction-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#d1d4dc}.selected-2KhwsEwE .titleWrapper-2KhwsEwE:after,.withAction-2KhwsEwE .titleWrapper-2KhwsEwE:after{background-color:#d1d4dc}.selected-2KhwsEwE .buttons-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE{border:1px solid #d1d4dc;border-left:0}.selected-2KhwsEwE .buttons-2KhwsEwE,.selected-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.selected-2KhwsEwE .buttonsWrapper-2KhwsEwE,.selected-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#2962ff}.buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye,.buttons-2KhwsEwE .eye-2KhwsEwE .crossed-eye,.buttons-2KhwsEwE .eye-2KhwsEwE .loading-eye,.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye,.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .loading-eye,.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .normal-eye,.medium-2KhwsEwE .study-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:nth-child(2),.medium-2KhwsEwE .study-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:nth-child(3):nth-last-child(3),.micro-2KhwsEwE .series-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:last-child),.minimized-2KhwsEwE .study-2KhwsEwE .button-2KhwsEwE:not(:last-child):not(:first-child){display:none}.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .crossed-eye{display:block}.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .crossed-eye,.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .normal-eye{display:none}.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye,.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .loading-eye{display:block}.hiddenLoading-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE .animated-loading-eye{animation:eye-animation-2KhwsEwE .96s linear infinite;transform-origin:center}.disabled-2KhwsEwE .buttons-2KhwsEwE .eye-2KhwsEwE,.flagged-2KhwsEwE .buttons-2KhwsEwE .flag-2KhwsEwE,.selected-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE,.series-2KhwsEwE.disabled-2KhwsEwE .buttons-2KhwsEwE .flag-2KhwsEwE,.withAction-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE{display:flex;opacity:1}.series-2KhwsEwE.disabled-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE{visibility:hidden}.selected-2KhwsEwE.series-2KhwsEwE.disabled-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE,.series-2KhwsEwE.disabled-2KhwsEwE.flagged-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE,.withAction-2KhwsEwE.series-2KhwsEwE.disabled-2KhwsEwE .flag-2KhwsEwE .buttonIcon-2KhwsEwE{visibility:visible}.flag-2KhwsEwE .buttonIcon-2KhwsEwE{align-self:stretch;flex:1}.flagWrapper-2KhwsEwE,.markerContainer-2KhwsEwE{display:flex;flex:1;justify-content:center}.markerContainer-2KhwsEwE{align-items:stretch}.flagWrapper-2KhwsEwE{width:12px}.flagWrapper-2KhwsEwE svg{height:12px}.sourcesWrapper-2KhwsEwE{align-items:flex-start;display:flex;margin:0 4px;min-height:26px;position:relative}.newCollapser-2KhwsEwE .sourcesWrapper-2KhwsEwE{flex-direction:column-reverse;margin:0;min-height:auto}.sources-2KhwsEwE{display:flex;flex:1 1 auto;flex-direction:column;width:100%}.toggler-2KhwsEwE{align-items:center;display:flex;flex:0 0 auto;margin:2px 2px 0 0;position:relative}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.toggler-2KhwsEwE:hover:after{z-index:0}.toggler-2KhwsEwE:hover .counter-2KhwsEwE,.toggler-2KhwsEwE:hover .iconArrow-2KhwsEwE,.toggler-2KhwsEwE:hover .objectTree-2KhwsEwE{color:#000}}.toggler-2KhwsEwE .counter-2KhwsEwE{color:inherit;display:none;font-size:13px;line-height:16px;padding-right:6px}.toggler-2KhwsEwE .iconArrow-2KhwsEwE{display:flex;transition:transform .1s cubic-bezier(.06,.52,1,.54)}.toggler-2KhwsEwE .objectTree-2KhwsEwE{display:none}.toggler-2KhwsEwE .iconArrow-2KhwsEwE,.toggler-2KhwsEwE .objectTree-2KhwsEwE{align-items:center;height:19px;justify-content:center;width:19px}.toggler-2KhwsEwE .counter-2KhwsEwE,.toggler-2KhwsEwE .iconArrow-2KhwsEwE,.toggler-2KhwsEwE .objectTree-2KhwsEwE{color:#131722;position:relative;z-index:1}.newCollapser-2KhwsEwE .toggler-2KhwsEwE{margin:2px 5px 0 0}.newCollapser-2KhwsEwE .toggler-2KhwsEwE.onlyOneSourceShown-2KhwsEwE{display:none}.newCollapser-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE{padding-right:4px}.newCollapser-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{transform:rotate(-180deg);width:27px}.newCollapser-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:19px}.closed-2KhwsEwE.sourcesWrapper-2KhwsEwE{padding-bottom:4px}.closed-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE{display:flex}.closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{transform:rotate(-90deg)}.closed-2KhwsEwE .sources-2KhwsEwE{display:none}.newCollapser-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{transform:rotate(0)}.newCollapser-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.newCollapser-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:19px}.micro-2KhwsEwE .sourcesWrapper-2KhwsEwE{padding-bottom:4px}.micro-2KhwsEwE .toggler-2KhwsEwE.objectsTreeCanBeShown-2KhwsEwE .objectTree-2KhwsEwE,.micro-2KhwsEwE .toggler-2KhwsEwE.objectsTreeCanBeShown-2KhwsEwE.onlyOneSourceShown-2KhwsEwE{display:flex}.micro-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE,.micro-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.micro-2KhwsEwE .series-2KhwsEwE .valuesWrapper-2KhwsEwE,.micro-2KhwsEwE .sources-2KhwsEwE,.micro-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE,.micro-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE{display:none}.touchMode-2KhwsEwE .titleWrapper-2KhwsEwE{height:26px;line-height:25px}.touchMode-2KhwsEwE .selected-2KhwsEwE .titleWrapper-2KhwsEwE:after,.touchMode-2KhwsEwE .withAction-2KhwsEwE .titleWrapper-2KhwsEwE:after{bottom:5px;top:5px}.touchMode-2KhwsEwE .series-2KhwsEwE .titleWrapper-2KhwsEwE{min-height:26px}.touchMode-2KhwsEwE .toggler-2KhwsEwE{margin:0 2px 0 0}.touchMode-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.touchMode-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{height:24px;width:24px}.touchMode-2KhwsEwE .toggler-2KhwsEwE .counter-2KhwsEwE{font-size:14px}.touchMode-2KhwsEwE .item-2KhwsEwE{min-height:26px}.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .toggler-2KhwsEwE{margin:2px 5px 0 0}.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:30px}.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.newCollapser-2KhwsEwE.touchMode-2KhwsEwE .closed-2KhwsEwE .toggler-2KhwsEwE .objectTree-2KhwsEwE{width:24px}.chart-widget__top--themed-dark .item-2KhwsEwE.last-2KhwsEwE .text-2KhwsEwE,.chart-widget__top--themed-dark .noWrap-2KhwsEwE .valuesAdditionalWrapper-2KhwsEwE,.chart-widget__top--themed-dark .title-2KhwsEwE,.chart-widget__top--themed-dark .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .valueValue-2KhwsEwE{color:#b2b5be}.chart-widget__top--themed-dark .disabled-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE .valueValue-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE .valueValue-2KhwsEwE{color:#50535e}.chart-widget__top--themed-dark .disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabled-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueValue-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .title-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueTitle-2KhwsEwE,.chart-widget__top--themed-dark .disabledOnInterval-2KhwsEwE.withCustomTextColor-2KhwsEwE .valueValue-2KhwsEwE{color:#50535e!important}.chart-widget__top--themed-dark .study-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#868993}.chart-widget__top--themed-dark .study-2KhwsEwE.disabled-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.chart-widget__top--themed-dark .study-2KhwsEwE.disabledOnInterval-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#50535e}.chart-widget__top--themed-dark .study-2KhwsEwE.withCustomTextColor-2KhwsEwE.disabled-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE,.chart-widget__top--themed-dark .study-2KhwsEwE.withCustomTextColor-2KhwsEwE.disabledOnInterval-2KhwsEwE .title-2KhwsEwE.title2nd-2KhwsEwE{color:#50535e!important}.chart-widget__top--themed-dark .series-2KhwsEwE .titleWrapper-2KhwsEwE .title-2KhwsEwE.withDot-2KhwsEwE:not(:first-child):before{color:#434651}.chart-widget__top--themed-dark .buttonIcon-2KhwsEwE,.chart-widget__top--themed-dark .series-2KhwsEwE .valueItem-2KhwsEwE .valueTitle-2KhwsEwE{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .button-2KhwsEwE:hover:after{background-color:#2a2e39}}.chart-widget__top--themed-dark .withAction-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .withAction-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.chart-widget__top--themed-dark .withAction-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#363a45}.chart-widget__top--themed-dark .selected-2KhwsEwE .titleWrapper-2KhwsEwE:after,.chart-widget__top--themed-dark .withAction-2KhwsEwE .titleWrapper-2KhwsEwE:after{background-color:#363a45}.chart-widget__top--themed-dark .selected-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .selected-2KhwsEwE .titleWrapper-2KhwsEwE,.chart-widget__top--themed-dark .withAction-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .withAction-2KhwsEwE .titleWrapper-2KhwsEwE{background-color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .selected-2KhwsEwE .button-2KhwsEwE:hover:after{background-color:#1848cc33}}.chart-widget__top--themed-dark .selected-2KhwsEwE .buttons-2KhwsEwE,.chart-widget__top--themed-dark .selected-2KhwsEwE .buttons-2KhwsEwE .button-2KhwsEwE:not(:first-child),.chart-widget__top--themed-dark .selected-2KhwsEwE .buttonsWrapper-2KhwsEwE,.chart-widget__top--themed-dark .selected-2KhwsEwE .titleWrapper-2KhwsEwE{border-color:#1848cc}.chart-widget__top--themed-dark .toggler-2KhwsEwE{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover:after{background-color:#ffffff1a}.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover .counter-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover .iconArrow-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE:hover .objectTree-2KhwsEwE{color:#f0f3fa}}.chart-widget__top--themed-dark .toggler-2KhwsEwE .counter-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE .iconArrow-2KhwsEwE,.chart-widget__top--themed-dark .toggler-2KhwsEwE .objectTree-2KhwsEwE{color:#d1d4dc}@keyframes eye-animation-2KhwsEwE{to{transform:rotate(1turn)}}.wrapper-2-RXze0M{box-sizing:border-box;display:flex;flex-direction:column;min-width:292px;padding-left:15px;position:relative}.timezone-2-RXze0M{color:#131722;font-size:14px;margin-bottom:7px;width:100%}html.theme-dark .timezone-2-RXze0M{color:#b2b5be}.sessionDayWrapper-2-RXze0M{display:flex;flex-direction:column;position:relative}.nowWrapper-2-RXze0M{bottom:0;left:0;pointer-events:none;position:absolute;right:30px;top:0}.nowWrapper-2-RXze0M .now-2-RXze0M{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:#131722;bottom:-1px;outline:1px solid #fff;position:absolute;top:2px;width:1px}html.theme-dark .nowWrapper-2-RXze0M .now-2-RXze0M{background-color:#b2b5be;outline:1px solid #1e222d}.sessionDay-2-RXze0M{align-items:baseline;display:flex}.sessionDay-2-RXze0M .weekDay-2-RXze0M{color:#787b86;font-size:10px;overflow:hidden;padding-top:3px;text-transform:uppercase;width:30px}html.theme-dark .sessionDay-2-RXze0M .weekDay-2-RXze0M{color:#787b86}.sessionDay-2-RXze0M .sessionDaySegments-2-RXze0M,.sessionDay-2-RXze0M .timeMarkWrapper-2-RXze0M{flex:1;position:relative;width:100%}.sessionDay-2-RXze0M .timeMarkWrapper-2-RXze0M{height:16px;margin-top:3px}.sessionDay-2-RXze0M .sessionDaySegments-2-RXze0M{border-radius:4px;height:7px;margin:20px 0 2px}.sessionDay-2-RXze0M:first-child .sessionDaySegments-2-RXze0M{margin-top:0}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M{content:"";display:flex;justify-content:center;position:absolute}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M .timeMark-2-RXze0M:first-child{padding-left:4px}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M .timeMark-2-RXze0M:last-child{padding-right:4px}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M{justify-content:space-between}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M .timeMark-2-RXze0M{padding:0}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M .timeMark-2-RXze0M:first-child{transform:translateX(50%)}.sessionDay-2-RXze0M .timeMarkSegment-2-RXze0M.timeMarkSegmentAlignByEnds-2-RXze0M .timeMark-2-RXze0M:last-child{transform:translateX(-50%)}.sessionDay-2-RXze0M .timeMark-2-RXze0M{background-color:#fff;color:#9598a1;font-size:11px;line-height:16px}html.theme-dark .sessionDay-2-RXze0M .timeMark-2-RXze0M{background-color:#1e222d}.sessionDay-2-RXze0M .segment-2-RXze0M{box-sizing:border-box;content:"";height:100%;opacity:.3;padding:0 2px;position:absolute}.sessionDay-2-RXze0M .segment-2-RXze0M:first-child{padding-right:0}.sessionDay-2-RXze0M .segment-2-RXze0M:last-child{padding-left:0}.sessionDay-2-RXze0M .segment-2-RXze0M:before{content:"";display:flex;flex:1;height:100%;min-width:1px;z-index:0}.sessionDay-2-RXze0M .segment-2-RXze0M.small-2-RXze0M{margin-right:-1px;padding:0;z-index:1}.sessionDay-2-RXze0M .segment-2-RXze0M.start-2-RXze0M:before{border-radius:0 4px 4px 0}.sessionDay-2-RXze0M .segment-2-RXze0M.end-2-RXze0M:before{border-radius:4px 0 0 4px}.sessionDay-2-RXze0M .segment-2-RXze0M.start-2-RXze0M.end-2-RXze0M:before{border-radius:4px}.sessionDay-2-RXze0M.active-2-RXze0M .segment-2-RXze0M{opacity:1}.sessionDay-2-RXze0M.active-2-RXze0M .weekDay-2-RXze0M{color:#131722}html.theme-dark .sessionDay-2-RXze0M.active-2-RXze0M .weekDay-2-RXze0M{color:#b2b5be}.green-2-RXze0M{color:#26a69a}.green-2-RXze0M:before{background-color:currentColor}.orange-2-RXze0M{color:#ff9800}.orange-2-RXze0M:before{background-color:currentColor}.blue-2-RXze0M{color:#2962ff}.blue-2-RXze0M:before{background-color:currentColor}.gray-2-RXze0M{color:#e0e3eb}html.theme-dark .gray-2-RXze0M{color:#434651}.gray-2-RXze0M:before{background-color:currentColor}.tooltip-2-RXze0M{white-space:normal}.tooltip-2-RXze0M .time-2-RXze0M{color:#f0f3fa;margin-right:5px}html.theme-dark .tooltip-2-RXze0M .time-2-RXze0M{color:#f0f3fa}.tooltip-2-RXze0M .gray-2-RXze0M{color:#9598a1}html.theme-dark .tooltip-2-RXze0M .gray-2-RXze0M{color:#b2b5be}.tooltip-2-RXze0M .blue-2-RXze0M,html.theme-dark .tooltip-2-RXze0M .blue-2-RXze0M{color:#448aff}.statuses-1Ho_ylkC{align-self:center;border-radius:9px;display:inline-flex;overflow:hidden}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC:hover .statusItem-1Ho_ylkC:after{opacity:.25}}.statuses-1Ho_ylkC.small-1Ho_ylkC{border-radius:9px}.statuses-1Ho_ylkC.large-1Ho_ylkC{border-radius:11px}.statuses-1Ho_ylkC.blinking-1Ho_ylkC{will-change:opacity}.statuses-1Ho_ylkC .statusItem-1Ho_ylkC{cursor:pointer}.oneWidgetsVisible-1Ho_ylkC.statuses-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC.statuses-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC.statuses-1Ho_ylkC{margin-left:12px;margin-right:11px}.statusItem-1Ho_ylkC{display:flex;position:relative;-webkit-user-select:none;user-select:none}.statusItem-1Ho_ylkC:after{content:"";display:block;height:100%;opacity:.15;position:absolute;right:0;top:0;width:100%;z-index:-1}.statusItem-1Ho_ylkC svg{position:relative;right:50%;top:50%;transform:translate(50%,-50%);z-index:0}.statusItem-1Ho_ylkC.small-1Ho_ylkC{height:18px;width:18px}.statusItem-1Ho_ylkC.large-1Ho_ylkC{height:22px;width:22px}.statusItem-1Ho_ylkC.blinking-1Ho_ylkC:after{animation:blinking-animation-1Ho_ylkC 2.5s cubic-bezier(.25,0,.75,1) infinite}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statusItem-1Ho_ylkC.blinking-1Ho_ylkC:after:hover{opacity:inherit}}.marketStatusOpen-1Ho_ylkC,html.theme-dark .marketStatusOpen-1Ho_ylkC{color:#009688}.marketStatusOpen-1Ho_ylkC:after,html.theme-dark .marketStatusOpen-1Ho_ylkC:after{background-color:#26a69a}.marketStatusClose-1Ho_ylkC,html.theme-dark .marketStatusClose-1Ho_ylkC{color:#9598a1}.marketStatusClose-1Ho_ylkC:after,html.theme-dark .marketStatusClose-1Ho_ylkC:after{background-color:#9598a1}.marketStatusPre-1Ho_ylkC,html.theme-dark .marketStatusPre-1Ho_ylkC{color:#fb8c00}.marketStatusPre-1Ho_ylkC:after,html.theme-dark .marketStatusPre-1Ho_ylkC:after{background-color:#ffa726}.marketStatusPost-1Ho_ylkC,html.theme-dark .marketStatusPost-1Ho_ylkC{color:#2962ff}.marketStatusPost-1Ho_ylkC:after,html.theme-dark .marketStatusPost-1Ho_ylkC:after{background-color:#3179f5}.marketStatusHoliday-1Ho_ylkC,html.theme-dark .marketStatusHoliday-1Ho_ylkC{color:#9598a1}.marketStatusHoliday-1Ho_ylkC:after,html.theme-dark .marketStatusHoliday-1Ho_ylkC:after{background-color:#9598a1}.invalidSymbol-1Ho_ylkC{color:#fff}.invalidSymbol-1Ho_ylkC,html.theme-dark .invalidSymbol-1Ho_ylkC{background-color:#ef5350}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC .invalidSymbol-1Ho_ylkC:hover{background-color:#d32f2f}html.theme-dark .statuses-1Ho_ylkC .invalidSymbol-1Ho_ylkC:hover{background-color:#f44336}}.replayMode-1Ho_ylkC{color:#fff}.replayMode-1Ho_ylkC,html.theme-dark .replayMode-1Ho_ylkC{background-color:#2962ff}html.theme-dark .replayMode-1Ho_ylkC{color:#e3effd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC .replayMode-1Ho_ylkC:hover,html.theme-dark .statuses-1Ho_ylkC .replayMode-1Ho_ylkC:hover{background-color:#1e53e5}}.notAccurate-1Ho_ylkC,html.theme-dark .notAccurate-1Ho_ylkC{color:#c2185b}.notAccurate-1Ho_ylkC:after,html.theme-dark .notAccurate-1Ho_ylkC:after{background-color:#ec407a}.delay-1Ho_ylkC,html.theme-dark .delay-1Ho_ylkC{color:#f57c00}.delay-1Ho_ylkC:after,html.theme-dark .delay-1Ho_ylkC:after{background-color:#ffa726}.eod-1Ho_ylkC,html.theme-dark .eod-1Ho_ylkC{color:#7b1fa2}.eod-1Ho_ylkC:after,html.theme-dark .eod-1Ho_ylkC:after{background-color:#ab47bc}.twoWidgetsVisible-1Ho_ylkC .delay-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .eod-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .notAccurate-1Ho_ylkC{padding-left:2px}.dataProblemHigh-1Ho_ylkC{background-color:#ef5350;color:#fff}html.theme-dark .dataProblemHigh-1Ho_ylkC{background-color:#ef5350}.dataProblemLow-1Ho_ylkC,html.theme-dark .dataProblemLow-1Ho_ylkC{color:#e53935}.dataProblemLow-1Ho_ylkC:after,html.theme-dark .dataProblemLow-1Ho_ylkC:after{background-color:#ef5350}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.statuses-1Ho_ylkC .dataProblemHigh-1Ho_ylkC:hover{background-color:#d32f2f}html.theme-dark .statuses-1Ho_ylkC .dataProblemHigh-1Ho_ylkC:hover{background-color:#f44336}}.threeWidgetsVisible-1Ho_ylkC .marketStatusClose-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusHoliday-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusOpen-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusPost-1Ho_ylkC,.threeWidgetsVisible-1Ho_ylkC .marketStatusPre-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusClose-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusHoliday-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusOpen-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusPost-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .marketStatusPre-1Ho_ylkC{padding-right:2px}.threeWidgetsVisible-1Ho_ylkC .dataProblemLow-1Ho_ylkC,.twoWidgetsVisible-1Ho_ylkC .dataProblemLow-1Ho_ylkC{padding-left:2px}@keyframes blinking-animation-1Ho_ylkC{0%,to{opacity:.15}50%{opacity:.4}}.paneControls-2fnY2ZKI{color:#fff;margin-top:6px;padding:0 1px 0 5px;position:static;transition:opacity .4s,visibility .4s;z-index:7}.paneControls-2fnY2ZKI.hasTopMargin-2fnY2ZKI{top:30px}.paneControls-2fnY2ZKI.hidden-2fnY2ZKI{opacity:0;visibility:hidden}.paneControls-2fnY2ZKI.forceHidden-2fnY2ZKI{height:0;line-height:0;margin:0;padding:0;width:0}.button-2fnY2ZKI{align-items:center;display:flex;flex:0 0 auto;height:19px;justify-content:center;overflow:hidden;position:relative;width:19px}.button-2fnY2ZKI:not(:first-child){margin-left:4px}.button-2fnY2ZKI .buttonIcon-2fnY2ZKI{color:#131722}.button-2fnY2ZKI.minimize-2fnY2ZKI .buttonIcon-2fnY2ZKI{color:#fff}.button-2fnY2ZKI.newButton-2fnY2ZKI{border-radius:4px}.touchMode-2fnY2ZKI .button-2fnY2ZKI{height:24px;width:24px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.maximize-2fnY2ZKI:hover .bracket-up{animation:maximize-animation-up-bracket-2fnY2ZKI .6s ease}.maximize-2fnY2ZKI:hover .bracket-down{animation:maximize-animation-down-bracket-2fnY2ZKI .6s ease}}.maximize-2fnY2ZKI .bracket-down,.maximize-2fnY2ZKI .bracket-up{transform:translateY(0)}@keyframes maximize-animation-up-bracket-2fnY2ZKI{50%{transform:translateY(1px)}}@keyframes maximize-animation-down-bracket-2fnY2ZKI{50%{transform:translateY(-1px)}}.minimize-2fnY2ZKI{background-color:#2962ff!important;border-color:#2962ff!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.minimize-2fnY2ZKI:hover .bracket-up{animation:minimize-animation-up-bracket-2fnY2ZKI .6s ease}.minimize-2fnY2ZKI:hover .bracket-down{animation:minimize-animation-down-bracket-2fnY2ZKI .6s ease}}.minimize-2fnY2ZKI .bracket-down,.minimize-2fnY2ZKI .bracket-up{transform:translateY(0)}@keyframes minimize-animation-up-bracket-2fnY2ZKI{50%{transform:translateY(-1px)}}@keyframes minimize-animation-down-bracket-2fnY2ZKI{50%{transform:translateY(1px)}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.up-2fnY2ZKI:hover .buttonIcon-2fnY2ZKI{animation:up-animation-2fnY2ZKI .6s ease}}@keyframes up-animation-2fnY2ZKI{0%{transform:translateY(0)}50%{transform:translateY(-2px)}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.down-2fnY2ZKI:hover .buttonIcon-2fnY2ZKI{animation:down-animation-2fnY2ZKI .6s ease}}@keyframes down-animation-2fnY2ZKI{0%{transform:translateY(0)}50%{transform:translateY(2px)}}.buttonsWrapper-2fnY2ZKI{align-items:center;display:flex;flex:0 0 auto;flex-wrap:nowrap}.chart-widget__top--themed-dark .paneControls-2fnY2ZKI{color:#131722}.chart-widget__top--themed-dark .minimize-2fnY2ZKI{background-color:#1848cc!important;border-color:#1848cc!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__top--themed-dark .button-2fnY2ZKI:hover .buttonIcon-2fnY2ZKI{color:#f0f3fa}}.chart-widget__top--themed-dark .button-2fnY2ZKI .buttonIcon-2fnY2ZKI{color:#d1d4dc} \ No newline at end of file diff --git a/static/charting_library/bundles/72.e3925aaf38d2c8997638.js b/static/charting_library/bundles/72.e3925aaf38d2c8997638.js new file mode 100644 index 0000000..e3bd095 --- /dev/null +++ b/static/charting_library/bundles/72.e3925aaf38d2c8997638.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[72],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/73.6b8b9e5e2c8e2b753cb8.css b/static/charting_library/bundles/73.6b8b9e5e2c8e2b753cb8.css new file mode 100644 index 0000000..4e315e4 --- /dev/null +++ b/static/charting_library/bundles/73.6b8b9e5e2c8e2b753cb8.css @@ -0,0 +1 @@ +.button-15caiVtH{margin-left:4px;padding:0 6px 0 12px}.separator-15caiVtH{margin:6px 0}.item-3SbREAgE{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);display:flex;font-size:14px;height:100%;padding:0 7px;position:relative;z-index:0}html.theme-dark .item-3SbREAgE{color:var(--tv-color-toolbar-button-text,#787b86)}.item-3SbREAgE.hover-3SbREAgE,.item-3SbREAgE:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .item-3SbREAgE.hover-3SbREAgE,html.theme-dark .item-3SbREAgE:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.item-3SbREAgE.hover-3SbREAgE:before,.item-3SbREAgE:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-3SbREAgE:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .item-3SbREAgE.hover-3SbREAgE:before,html.theme-dark .item-3SbREAgE:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-3SbREAgE:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.item-3SbREAgE.isActive-3SbREAgE{color:var(--tv-color-toolbar-button-text-active,#2962ff)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-3SbREAgE.isActive-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-active,#2962ff)}}html.theme-sa .item-3SbREAgE.isActive-3SbREAgE{color:var(--tv-color-toolbar-button-text-active,#ff7200)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-sa .item-3SbREAgE.isActive-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-active,#ff7200)}}html.theme-dark .item-3SbREAgE.isActive-3SbREAgE{color:var(--tv-color-toolbar-button-text-active,#2962ff)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-3SbREAgE.isActive-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-active,#2962ff)}}.item-3SbREAgE.isFirst-3SbREAgE{margin-left:9px}.item-3SbREAgE.isLast-3SbREAgE{margin-right:9px}.slider-3GYrNsPp{bottom:15%;height:2px;transition-duration:175ms;transition-property:transform,opacity}.slider-3GYrNsPp,html.theme-dark .slider-3GYrNsPp{background-color:initial}.slider-3GYrNsPp .inner-3GYrNsPp{background-color:var(--tv-color-toolbar-button-text-active,#2962ff);height:100%;margin:0 8px}html.theme-sa .slider-3GYrNsPp .inner-3GYrNsPp{background-color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .slider-3GYrNsPp .inner-3GYrNsPp{background-color:var(--tv-color-toolbar-button-text-active,#2962ff)}.sliderRow-1emAA4_D{height:100%}.button-yLOygoSG{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);display:flex;height:100%;margin-left:9px;padding:0 7px;position:relative;z-index:0}html.theme-dark .button-yLOygoSG{color:var(--tv-color-toolbar-button-text,#787b86)}.button-yLOygoSG.hover-yLOygoSG,.button-yLOygoSG:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-yLOygoSG:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-yLOygoSG.hover-yLOygoSG,html.theme-dark .button-yLOygoSG:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-yLOygoSG:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-yLOygoSG.hover-yLOygoSG:before,.button-yLOygoSG:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-yLOygoSG:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-yLOygoSG.hover-yLOygoSG:before,html.theme-dark .button-yLOygoSG:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-yLOygoSG:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.icon-yLOygoSG{height:18px;width:18px}.button-2pZNJ24z{align-items:center;background-color:initial;border:none;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;height:100%;margin:0;outline:none;padding:0;position:relative;z-index:0}html.theme-dark .button-2pZNJ24z{color:var(--tv-color-toolbar-button-text,#787b86)}.button-2pZNJ24z.hover-2pZNJ24z,.button-2pZNJ24z:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-2pZNJ24z.hover-2pZNJ24z,html.theme-dark .button-2pZNJ24z:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-2pZNJ24z.hover-2pZNJ24z:before,.button-2pZNJ24z:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2pZNJ24z.hover-2pZNJ24z:before,html.theme-dark .button-2pZNJ24z:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2pZNJ24z[disabled]{position:relative;z-index:0}.button-2pZNJ24z[disabled].hover-2pZNJ24z:before,.button-2pZNJ24z[disabled]:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);background-color:initial;border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z[disabled]:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);background-color:initial;border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2pZNJ24z[disabled].hover-2pZNJ24z:before,html.theme-dark .button-2pZNJ24z[disabled]:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z[disabled]:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2pZNJ24z.open.hover-2pZNJ24z:before,.button-2pZNJ24z.open:active:before,.button-2pZNJ24z.open:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z.open:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-left,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-right,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .button-2pZNJ24z.open.hover-2pZNJ24z:before,html.theme-dark .button-2pZNJ24z.open:active:before,html.theme-dark .button-2pZNJ24z.open:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z.open:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}}.button-2pZNJ24z .inner-2pZNJ24z{position:relative}.button-2-onvH7F{white-space:nowrap}.separator-13-1nlsQ{background-color:var(--tv-color-platform-background,#e0e3eb);display:inline-block;height:calc(100% - 16px);margin:8px 0;width:1px}html.theme-dark .separator-13-1nlsQ{background-color:var(--tv-color-platform-background,#2a2e39)}.toolbar-2yU8ifXU{cursor:default;font-size:14px;height:100%;position:relative;white-space:nowrap}.dateRangeWrapper-2yU8ifXU{display:block;height:100%;left:0;position:absolute}.seriesControlWrapper-2yU8ifXU{display:block;height:100%;position:absolute;right:0}.dateRangeCollapsed-2yU8ifXU,.dateRangeExpanded-2yU8ifXU{display:inline-flex;flex:0 1 0%;height:100%}.item-2yU8ifXU{flex:0 0 auto;height:100%;padding:0 7px}.item-2yU8ifXU.first-2yU8ifXU{margin-left:9px}.item-2yU8ifXU.last-2yU8ifXU{margin-right:4px}.inline-2yU8ifXU{display:inline-block;height:100%;vertical-align:top}.session-2yU8ifXU,.timezone-2yU8ifXU{flex:0 0 auto;margin-right:9px;padding:0 7px}.icon-2yU8ifXU{flex:0 0 auto;height:100%;padding:0 7px}.icon-2yU8ifXU.first-2yU8ifXU{margin-left:9px}.icon-2yU8ifXU.last-2yU8ifXU{margin-right:9px}.hidden-2yU8ifXU{visibility:hidden}.collapsed-2yU8ifXU{height:100%;left:0;position:absolute;top:0;visibility:hidden} \ No newline at end of file diff --git a/static/charting_library/bundles/73.6b8b9e5e2c8e2b753cb8.rtl.css b/static/charting_library/bundles/73.6b8b9e5e2c8e2b753cb8.rtl.css new file mode 100644 index 0000000..b5a80c1 --- /dev/null +++ b/static/charting_library/bundles/73.6b8b9e5e2c8e2b753cb8.rtl.css @@ -0,0 +1 @@ +.button-15caiVtH{margin-right:4px;padding:0 12px 0 6px}.separator-15caiVtH{margin:6px 0}.item-3SbREAgE{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);display:flex;font-size:14px;height:100%;padding:0 7px;position:relative;z-index:0}html.theme-dark .item-3SbREAgE{color:var(--tv-color-toolbar-button-text,#787b86)}.item-3SbREAgE.hover-3SbREAgE,.item-3SbREAgE:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .item-3SbREAgE.hover-3SbREAgE,html.theme-dark .item-3SbREAgE:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.item-3SbREAgE.hover-3SbREAgE:before,.item-3SbREAgE:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-3SbREAgE:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .item-3SbREAgE.hover-3SbREAgE:before,html.theme-dark .item-3SbREAgE:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-3SbREAgE:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.item-3SbREAgE.isActive-3SbREAgE{color:var(--tv-color-toolbar-button-text-active,#2962ff)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-3SbREAgE.isActive-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-active,#2962ff)}}html.theme-sa .item-3SbREAgE.isActive-3SbREAgE{color:var(--tv-color-toolbar-button-text-active,#ff7200)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-sa .item-3SbREAgE.isActive-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-active,#ff7200)}}html.theme-dark .item-3SbREAgE.isActive-3SbREAgE{color:var(--tv-color-toolbar-button-text-active,#2962ff)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-3SbREAgE.isActive-3SbREAgE:hover{color:var(--tv-color-toolbar-button-text-active,#2962ff)}}.item-3SbREAgE.isFirst-3SbREAgE{margin-right:9px}.item-3SbREAgE.isLast-3SbREAgE{margin-left:9px}.slider-3GYrNsPp{bottom:15%;height:2px;transition-duration:175ms;transition-property:transform,opacity}.slider-3GYrNsPp,html.theme-dark .slider-3GYrNsPp{background-color:initial}.slider-3GYrNsPp .inner-3GYrNsPp{background-color:var(--tv-color-toolbar-button-text-active,#2962ff);height:100%;margin:0 8px}html.theme-sa .slider-3GYrNsPp .inner-3GYrNsPp{background-color:var(--tv-color-toolbar-button-text-active,#ff7200)}html.theme-dark .slider-3GYrNsPp .inner-3GYrNsPp{background-color:var(--tv-color-toolbar-button-text-active,#2962ff)}.sliderRow-1emAA4_D{height:100%}.button-yLOygoSG{align-items:center;color:var(--tv-color-toolbar-button-text,#131722);display:flex;height:100%;margin-right:9px;padding:0 7px;position:relative;z-index:0}html.theme-dark .button-yLOygoSG{color:var(--tv-color-toolbar-button-text,#787b86)}.button-yLOygoSG.hover-yLOygoSG,.button-yLOygoSG:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-yLOygoSG:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-yLOygoSG.hover-yLOygoSG,html.theme-dark .button-yLOygoSG:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-yLOygoSG:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-yLOygoSG.hover-yLOygoSG:before,.button-yLOygoSG:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-yLOygoSG:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-yLOygoSG.hover-yLOygoSG:before,html.theme-dark .button-yLOygoSG:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-yLOygoSG:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.icon-yLOygoSG{height:18px;width:18px}.button-2pZNJ24z{align-items:center;background-color:initial;border:none;color:var(--tv-color-toolbar-button-text,#131722);cursor:default;display:flex;height:100%;margin:0;outline:none;padding:0;position:relative;z-index:0}html.theme-dark .button-2pZNJ24z{color:var(--tv-color-toolbar-button-text,#787b86)}.button-2pZNJ24z.hover-2pZNJ24z,.button-2pZNJ24z:active{color:var(--tv-color-toolbar-button-text-hover,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z:hover{color:var(--tv-color-toolbar-button-text-hover,#131722)}}html.theme-dark .button-2pZNJ24z.hover-2pZNJ24z,html.theme-dark .button-2pZNJ24z:active{color:var(--tv-color-toolbar-button-text-hover,#868993)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z:hover{color:var(--tv-color-toolbar-button-text-hover,#868993)}}.button-2pZNJ24z.hover-2pZNJ24z:before,.button-2pZNJ24z:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);left:0;position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);right:0;top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2pZNJ24z.hover-2pZNJ24z:before,html.theme-dark .button-2pZNJ24z:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2pZNJ24z[disabled]{position:relative;z-index:0}.button-2pZNJ24z[disabled].hover-2pZNJ24z:before,.button-2pZNJ24z[disabled]:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);background-color:initial;border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z[disabled]:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);background-color:initial;border-radius:var(--tv-toolbar-explicit-hover-border-radius,2px);bottom:var(--tv-toolbar-explicit-hover-margin,2px);content:"";display:block;left:var(--tv-toolbar-explicit-hover-margin,2px);position:absolute;right:var(--tv-toolbar-explicit-hover-margin,2px);top:var(--tv-toolbar-explicit-hover-margin,2px);z-index:-1}}html.theme-dark .button-2pZNJ24z[disabled].hover-2pZNJ24z:before,html.theme-dark .button-2pZNJ24z[disabled]:active:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z[disabled]:hover:before{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.button-2pZNJ24z.open.hover-2pZNJ24z:before,.button-2pZNJ24z.open:active:before,.button-2pZNJ24z.open:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2pZNJ24z.open:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#f0f3fa);border-radius:var(--tv-toolbar-opened-element-hover-border-radius,0);bottom:var(--tv-toolbar-opened-element-hover-margin-bottom,0);content:"";display:block;left:var(--tv-toolbar-opened-element-hover-margin-right,0);position:absolute;right:var(--tv-toolbar-opened-element-hover-margin-left,0);top:var(--tv-toolbar-opened-element-hover-margin-top,0);z-index:-1}}html.theme-dark .button-2pZNJ24z.open.hover-2pZNJ24z:before,html.theme-dark .button-2pZNJ24z.open:active:before,html.theme-dark .button-2pZNJ24z.open:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2pZNJ24z.open:hover:before{background-color:var(--tv-color-toolbar-button-background-expanded,#2a2e39)}}.button-2pZNJ24z .inner-2pZNJ24z{position:relative}.button-2-onvH7F{white-space:nowrap}.separator-13-1nlsQ{background-color:var(--tv-color-platform-background,#e0e3eb);display:inline-block;height:calc(100% - 16px);margin:8px 0;width:1px}html.theme-dark .separator-13-1nlsQ{background-color:var(--tv-color-platform-background,#2a2e39)}.toolbar-2yU8ifXU{cursor:default;font-size:14px;height:100%;position:relative;white-space:nowrap}.dateRangeWrapper-2yU8ifXU{display:block;height:100%;position:absolute;right:0}.seriesControlWrapper-2yU8ifXU{display:block;height:100%;left:0;position:absolute}.dateRangeCollapsed-2yU8ifXU,.dateRangeExpanded-2yU8ifXU{display:inline-flex;flex:0 1 0%;height:100%}.item-2yU8ifXU{flex:0 0 auto;height:100%;padding:0 7px}.item-2yU8ifXU.first-2yU8ifXU{margin-right:9px}.item-2yU8ifXU.last-2yU8ifXU{margin-left:4px}.inline-2yU8ifXU{display:inline-block;height:100%;vertical-align:top}.session-2yU8ifXU,.timezone-2yU8ifXU{flex:0 0 auto;margin-left:9px;padding:0 7px}.icon-2yU8ifXU{flex:0 0 auto;height:100%;padding:0 7px}.icon-2yU8ifXU.first-2yU8ifXU{margin-right:9px}.icon-2yU8ifXU.last-2yU8ifXU{margin-left:9px}.hidden-2yU8ifXU{visibility:hidden}.collapsed-2yU8ifXU{height:100%;position:absolute;right:0;top:0;visibility:hidden} \ No newline at end of file diff --git a/static/charting_library/bundles/73.8ca1a096c5bdc2e5fb8a.js b/static/charting_library/bundles/73.8ca1a096c5bdc2e5fb8a.js new file mode 100644 index 0000000..e093ed9 --- /dev/null +++ b/static/charting_library/bundles/73.8ca1a096c5bdc2e5fb8a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[73],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/7393f661fc7d4389ea6d4dabd2a5aeea.png b/static/charting_library/bundles/7393f661fc7d4389ea6d4dabd2a5aeea.png new file mode 100644 index 0000000..f493b31 Binary files /dev/null and b/static/charting_library/bundles/7393f661fc7d4389ea6d4dabd2a5aeea.png differ diff --git a/static/charting_library/bundles/74.34dcc0d3cd1bbfa5e951.js b/static/charting_library/bundles/74.34dcc0d3cd1bbfa5e951.js new file mode 100644 index 0000000..2d2d1d1 --- /dev/null +++ b/static/charting_library/bundles/74.34dcc0d3cd1bbfa5e951.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[74],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/74.8c591c252b2e7ad8f744.css b/static/charting_library/bundles/74.8c591c252b2e7ad8f744.css new file mode 100644 index 0000000..1ae27cc --- /dev/null +++ b/static/charting_library/bundles/74.8c591c252b2e7ad8f744.css @@ -0,0 +1 @@ +.title-3eZ-_4gp{color:#787b86;cursor:default;font-size:11px;letter-spacing:.4px;line-height:16px;padding:10px 20px 8px;text-transform:uppercase}.empty-3eZ-_4gp{align-items:center;color:#131722;cursor:default;display:flex;flex-direction:column;font-size:16px;justify-content:center;line-height:24px;margin-bottom:24px}html.theme-dark .empty-3eZ-_4gp{color:#b2b5be}.empty-3eZ-_4gp .image-3eZ-_4gp{height:120px;margin-bottom:8px;width:120px}.contentList-3eZ-_4gp{min-width:100%}@media screen and (min-width:480px){.contentList-3eZ-_4gp{width:380px}}.title-2PJRtZNU{align-items:center;color:#131722;cursor:default;display:flex;flex-shrink:0;font-size:14px;font-weight:700;justify-content:space-between;line-height:24px;overflow:hidden;padding:5px 7px 5px 16px;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .title-2PJRtZNU{color:#b2b5be}.title-2PJRtZNU.withoutIcon-2PJRtZNU{padding:12px 16px}.buttons-2PJRtZNU{align-items:center;border-bottom:1px solid #e0e3eb;display:flex;flex-direction:row;flex-shrink:0;padding:0 8px}html.theme-dark .buttons-2PJRtZNU{border-bottom:1px solid #363a45}.button-2PJRtZNU{flex:none;height:38px;justify-content:center;padding:0;transition:none;width:38px}.button-2PJRtZNU.disabled-2PJRtZNU{opacity:.3}.button-2PJRtZNU.disabled-2PJRtZNU,.button-2PJRtZNU.disabled-2PJRtZNU:active,.button-2PJRtZNU.disabled-2PJRtZNU:before{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2PJRtZNU.disabled-2PJRtZNU:hover{background-color:#fff}}html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU,html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU:active,html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU:before{background-color:#171b29}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU:hover{background-color:#171b29}}.wrap-1a1_EyKG{background-color:#fff;position:relative}html.theme-dark .wrap-1a1_EyKG{background-color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-1a1_EyKG:hover{background-color:#f0f3fa}html.theme-dark .wrap-1a1_EyKG:hover{background-color:#2a2e39}}.wrap-1a1_EyKG.selected-1a1_EyKG{background-color:#bbd9fb}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-1a1_EyKG.selected-1a1_EyKG:hover{background-color:#bbd9fb}}html.theme-dark .wrap-1a1_EyKG.selected-1a1_EyKG{background-color:#142e61}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-1a1_EyKG.selected-1a1_EyKG:hover{background-color:#142e61}}.wrap-1a1_EyKG.childOfSelected-1a1_EyKG{background-color:#e3effd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-1a1_EyKG.childOfSelected-1a1_EyKG:hover{background-color:#e3effd}}html.theme-dark .wrap-1a1_EyKG.childOfSelected-1a1_EyKG{background-color:#132042}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-1a1_EyKG.childOfSelected-1a1_EyKG:hover{background-color:#132042}.wrap-1a1_EyKG.disabled-1a1_EyKG:hover{background-color:#fff}html.theme-dark .wrap-1a1_EyKG.disabled-1a1_EyKG:hover{background-color:#171b29}}.wrap-1a1_EyKG .expandHandle-1a1_EyKG{align-items:center;display:flex;height:100%;left:4px;position:absolute}.wrap-1a1_EyKG .expandHandle-1a1_EyKG.expanded-1a1_EyKG{transform:rotate(90deg)}.dropTargetInside-3UxYcxls{pointer-events:none}.dropTargetInside-3UxYcxls,html.theme-dark .dropTargetInside-3UxYcxls{box-shadow:inset 0 0 0 2px #2962ff}.dropTarget-3UxYcxls{height:2px;pointer-events:none;position:absolute;width:100%;z-index:2}.dropTarget-3UxYcxls,html.theme-dark .dropTarget-3UxYcxls{background-color:#2962ff}.dropTarget-3UxYcxls.before-3UxYcxls{top:-1px}.dropTarget-3UxYcxls.after-3UxYcxls{bottom:-1px}.dropTarget-3UxYcxls:before{background:#fff;border:2px solid #2962ff;border-radius:5px;bottom:-4px;content:"";height:6px;left:0;position:absolute;width:6px}html.theme-dark .dropTarget-3UxYcxls:before{background:#2a2e39;border:2px solid #2962ff}.separator-3U2Wf-wc{background-color:#e0e3eb;flex:none;height:1px;margin:6px 0}html.theme-dark .separator-3U2Wf-wc{background-color:#434651}.tree-3U2Wf-wc{cursor:default;height:100%;overflow:hidden;position:relative;z-index:0}.tree-3U2Wf-wc .overlayScrollWrap-3U2Wf-wc{bottom:0;left:0;right:0;top:0;z-index:1}.listContainer-3U2Wf-wc{-ms-overflow-style:none;scrollbar-width:none}.listContainer-3U2Wf-wc.sb-scrollbar-wrap{display:none}.listContainer-3U2Wf-wc::-webkit-scrollbar{display:none;height:0;width:0}.listContainer-3U2Wf-wc::-webkit-scrollbar-thumb,.listContainer-3U2Wf-wc::-webkit-scrollbar-track{display:none}.listContainer-3U2Wf-wc::-webkit-scrollbar-corner{display:none}.wrap-3jZ5H2Ul{display:flex;flex-direction:column;height:100%;touch-action:manipulation}.wrap-3jZ5H2Ul .space-3jZ5H2Ul{display:flex;flex:1 1 auto;flex-direction:column;height:0}.wrap-3jZ5H2Ul .tree-3jZ5H2Ul{overflow-y:auto}.button-2zRC9WmY{align-items:center;background-color:var(--tv-list-item-button-background-color);border-radius:4px;color:#787b86;display:inline-flex;font-size:0;height:22px;justify-content:center;min-width:22px;width:22px}.button-2zRC9WmY:active{background-color:var(--tv-list-item-button-background-hover-color,#e0e3eb);color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2zRC9WmY:hover{background-color:var(--tv-list-item-button-background-hover-color,#e0e3eb);color:#131722}}html.theme-dark .button-2zRC9WmY:active{background-color:var(--tv-list-item-button-background-hover-color,#363a45)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2zRC9WmY:hover{background-color:var(--tv-list-item-button-background-hover-color,#363a45)}}html.theme-dark .button-2zRC9WmY:active{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2zRC9WmY:hover{color:#b2b5be}}.button-2zRC9WmY.disabled-2zRC9WmY,.button-2zRC9WmY.disabled-2zRC9WmY:active{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2zRC9WmY.disabled-2zRC9WmY:hover{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}}html.theme-dark .button-2zRC9WmY.disabled-2zRC9WmY,html.theme-dark .button-2zRC9WmY.disabled-2zRC9WmY:active{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2zRC9WmY.disabled-2zRC9WmY:hover{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}}.wrap-3Onbn19L{align-items:center;display:flex;flex:none;padding:5px 8px 5px 22px}.wrap-3Onbn19L.dialog-3Onbn19L{background-color:#fff}html.theme-dark .wrap-3Onbn19L.dialog-3Onbn19L{background-color:#1e222d}.wrap-3Onbn19L.offset-3Onbn19L{padding-left:48px}.wrap-3Onbn19L .title-3Onbn19L{color:#131722;margin-left:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .wrap-3Onbn19L .title-3Onbn19L{color:#b2b5be}.wrap-3Onbn19L .title-3Onbn19L.main-3Onbn19L{font-weight:700}.wrap-3Onbn19L .title-3Onbn19L.disabled-3Onbn19L{color:#b2b5be}html.theme-dark .wrap-3Onbn19L .title-3Onbn19L.disabled-3Onbn19L{color:#50535e}.wrap-3Onbn19L .icon-3Onbn19L{color:#131722;height:28px;line-height:28px;width:28px}html.theme-dark .wrap-3Onbn19L .icon-3Onbn19L{color:#b2b5be}.wrap-3Onbn19L .textIcon-3Onbn19L{font-family:FontAwesome;font-size:16px;text-align:center}.wrap-3Onbn19L .rightButtons-3Onbn19L{display:flex;flex:none;height:22px;margin-left:auto;position:relative;width:30px}.wrap-3Onbn19L .rightButtons-3Onbn19L.twoButtons-3Onbn19L{width:60px}.wrap-3Onbn19L .rightButtons-3Onbn19L.twoButtons-3Onbn19L .button-3Onbn19L.viewButton-3Onbn19L{right:30px}.wrap-3Onbn19L .rightButtons-3Onbn19L.threeButtons-3Onbn19L{width:90px}.wrap-3Onbn19L .rightButtons-3Onbn19L.threeButtons-3Onbn19L .button-3Onbn19L.viewButton-3Onbn19L{right:30px}.wrap-3Onbn19L .rightButtons-3Onbn19L.threeButtons-3Onbn19L .button-3Onbn19L.lockButton-3Onbn19L{right:60px}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#e0e3eb;position:absolute}html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#363a45}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.removeButton-3Onbn19L,.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.viewButton-3Onbn19L{right:0}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.lockButton-3Onbn19L{right:60px}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L,.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:active,html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L{color:#fb8c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:hover{color:#fb8c00}}html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:active{color:#fb8c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:hover{color:#fb8c00}}.wrap-3Onbn19L.hover-3Onbn19L{background-color:#f0f3fa}html.theme-dark .wrap-3Onbn19L.hover-3Onbn19L{background-color:#2a2e39}.wrap-3Onbn19L.disabled-3Onbn19L{--tv-list-item-button-background-hover-color:#f0f3fa}html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L{--tv-list-item-button-background-hover-color:#2a2e39}.wrap-3Onbn19L.disabled-3Onbn19L .button-3Onbn19L,.wrap-3Onbn19L.disabled-3Onbn19L .expandHandle-3Onbn19L,.wrap-3Onbn19L.disabled-3Onbn19L .icon-3Onbn19L,.wrap-3Onbn19L.disabled-3Onbn19L .title-3Onbn19L{color:#b2b5be}html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .button-3Onbn19L,html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .expandHandle-3Onbn19L,html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .icon-3Onbn19L,html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .title-3Onbn19L{color:#50535e}.wrap-3Onbn19L.selected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#90bff9}html.theme-dark .wrap-3Onbn19L.selected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#143a87}.wrap-3Onbn19L.childOfSelected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#bbd9fb}html.theme-dark .wrap-3Onbn19L.childOfSelected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#142e61}.wrap-3Onbn19L .renameInput-3Onbn19L{background-color:#fff;height:28px;margin-left:3px;width:100%}html.theme-dark .wrap-3Onbn19L .renameInput-3Onbn19L{background-color:#2a2e39}.wrap-3Onbn19L .renameInput-3Onbn19L[draggable=true]{-webkit-user-select:text;user-select:text}.dialog-3q1-PXu-{height:400px}.button-3q1-PXu-{align-items:center;border-radius:2px;color:#131722;display:flex;height:34px;justify-content:center;width:34px}html.theme-dark .button-3q1-PXu-{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-3q1-PXu-:hover{background-color:#f0f3fa}html.theme-dark .button-3q1-PXu-:hover{background-color:#2a2e39}} \ No newline at end of file diff --git a/static/charting_library/bundles/74.8c591c252b2e7ad8f744.rtl.css b/static/charting_library/bundles/74.8c591c252b2e7ad8f744.rtl.css new file mode 100644 index 0000000..34bb5de --- /dev/null +++ b/static/charting_library/bundles/74.8c591c252b2e7ad8f744.rtl.css @@ -0,0 +1 @@ +.title-3eZ-_4gp{color:#787b86;cursor:default;font-size:11px;letter-spacing:.4px;line-height:16px;padding:10px 20px 8px;text-transform:uppercase}.empty-3eZ-_4gp{align-items:center;color:#131722;cursor:default;display:flex;flex-direction:column;font-size:16px;justify-content:center;line-height:24px;margin-bottom:24px}html.theme-dark .empty-3eZ-_4gp{color:#b2b5be}.empty-3eZ-_4gp .image-3eZ-_4gp{height:120px;margin-bottom:8px;width:120px}.contentList-3eZ-_4gp{min-width:100%}@media screen and (min-width:480px){.contentList-3eZ-_4gp{width:380px}}.title-2PJRtZNU{align-items:center;color:#131722;cursor:default;display:flex;flex-shrink:0;font-size:14px;font-weight:700;justify-content:space-between;line-height:24px;overflow:hidden;padding:5px 16px 5px 7px;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .title-2PJRtZNU{color:#b2b5be}.title-2PJRtZNU.withoutIcon-2PJRtZNU{padding:12px 16px}.buttons-2PJRtZNU{align-items:center;border-bottom:1px solid #e0e3eb;display:flex;flex-direction:row;flex-shrink:0;padding:0 8px}html.theme-dark .buttons-2PJRtZNU{border-bottom:1px solid #363a45}.button-2PJRtZNU{flex:none;height:38px;justify-content:center;padding:0;transition:none;width:38px}.button-2PJRtZNU.disabled-2PJRtZNU{opacity:.3}.button-2PJRtZNU.disabled-2PJRtZNU,.button-2PJRtZNU.disabled-2PJRtZNU:active,.button-2PJRtZNU.disabled-2PJRtZNU:before{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2PJRtZNU.disabled-2PJRtZNU:hover{background-color:#fff}}html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU,html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU:active,html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU:before{background-color:#171b29}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2PJRtZNU.disabled-2PJRtZNU:hover{background-color:#171b29}}.wrap-1a1_EyKG{background-color:#fff;position:relative}html.theme-dark .wrap-1a1_EyKG{background-color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-1a1_EyKG:hover{background-color:#f0f3fa}html.theme-dark .wrap-1a1_EyKG:hover{background-color:#2a2e39}}.wrap-1a1_EyKG.selected-1a1_EyKG{background-color:#bbd9fb}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-1a1_EyKG.selected-1a1_EyKG:hover{background-color:#bbd9fb}}html.theme-dark .wrap-1a1_EyKG.selected-1a1_EyKG{background-color:#142e61}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-1a1_EyKG.selected-1a1_EyKG:hover{background-color:#142e61}}.wrap-1a1_EyKG.childOfSelected-1a1_EyKG{background-color:#e3effd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-1a1_EyKG.childOfSelected-1a1_EyKG:hover{background-color:#e3effd}}html.theme-dark .wrap-1a1_EyKG.childOfSelected-1a1_EyKG{background-color:#132042}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-1a1_EyKG.childOfSelected-1a1_EyKG:hover{background-color:#132042}.wrap-1a1_EyKG.disabled-1a1_EyKG:hover{background-color:#fff}html.theme-dark .wrap-1a1_EyKG.disabled-1a1_EyKG:hover{background-color:#171b29}}.wrap-1a1_EyKG .expandHandle-1a1_EyKG{align-items:center;display:flex;height:100%;position:absolute;right:4px}.wrap-1a1_EyKG .expandHandle-1a1_EyKG.expanded-1a1_EyKG{transform:rotate(-90deg)}.dropTargetInside-3UxYcxls{pointer-events:none}.dropTargetInside-3UxYcxls,html.theme-dark .dropTargetInside-3UxYcxls{box-shadow:inset 0 0 0 2px #2962ff}.dropTarget-3UxYcxls{height:2px;pointer-events:none;position:absolute;width:100%;z-index:2}.dropTarget-3UxYcxls,html.theme-dark .dropTarget-3UxYcxls{background-color:#2962ff}.dropTarget-3UxYcxls.before-3UxYcxls{top:-1px}.dropTarget-3UxYcxls.after-3UxYcxls{bottom:-1px}.dropTarget-3UxYcxls:before{background:#fff;border:2px solid #2962ff;border-radius:5px;bottom:-4px;content:"";height:6px;position:absolute;right:0;width:6px}html.theme-dark .dropTarget-3UxYcxls:before{background:#2a2e39;border:2px solid #2962ff}.separator-3U2Wf-wc{background-color:#e0e3eb;flex:none;height:1px;margin:6px 0}html.theme-dark .separator-3U2Wf-wc{background-color:#434651}.tree-3U2Wf-wc{cursor:default;height:100%;overflow:hidden;position:relative;z-index:0}.tree-3U2Wf-wc .overlayScrollWrap-3U2Wf-wc{bottom:0;left:0;right:0;top:0;z-index:1}.listContainer-3U2Wf-wc{-ms-overflow-style:none;scrollbar-width:none}.listContainer-3U2Wf-wc.sb-scrollbar-wrap{display:none}.listContainer-3U2Wf-wc::-webkit-scrollbar{display:none;height:0;width:0}.listContainer-3U2Wf-wc::-webkit-scrollbar-thumb,.listContainer-3U2Wf-wc::-webkit-scrollbar-track{display:none}.listContainer-3U2Wf-wc::-webkit-scrollbar-corner{display:none}.wrap-3jZ5H2Ul{display:flex;flex-direction:column;height:100%;touch-action:manipulation}.wrap-3jZ5H2Ul .space-3jZ5H2Ul{display:flex;flex:1 1 auto;flex-direction:column;height:0}.wrap-3jZ5H2Ul .tree-3jZ5H2Ul{overflow-y:auto}.button-2zRC9WmY{align-items:center;background-color:var(--tv-list-item-button-background-color);border-radius:4px;color:#787b86;display:inline-flex;font-size:0;height:22px;justify-content:center;min-width:22px;width:22px}.button-2zRC9WmY:active{background-color:var(--tv-list-item-button-background-hover-color,#e0e3eb);color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2zRC9WmY:hover{background-color:var(--tv-list-item-button-background-hover-color,#e0e3eb);color:#131722}}html.theme-dark .button-2zRC9WmY:active{background-color:var(--tv-list-item-button-background-hover-color,#363a45)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2zRC9WmY:hover{background-color:var(--tv-list-item-button-background-hover-color,#363a45)}}html.theme-dark .button-2zRC9WmY:active{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2zRC9WmY:hover{color:#b2b5be}}.button-2zRC9WmY.disabled-2zRC9WmY,.button-2zRC9WmY.disabled-2zRC9WmY:active{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2zRC9WmY.disabled-2zRC9WmY:hover{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}}html.theme-dark .button-2zRC9WmY.disabled-2zRC9WmY,html.theme-dark .button-2zRC9WmY.disabled-2zRC9WmY:active{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .button-2zRC9WmY.disabled-2zRC9WmY:hover{background-color:var(--tv-list-item-button-disabled-background-color,#0000)}}.wrap-3Onbn19L{align-items:center;display:flex;flex:none;padding:5px 22px 5px 8px}.wrap-3Onbn19L.dialog-3Onbn19L{background-color:#fff}html.theme-dark .wrap-3Onbn19L.dialog-3Onbn19L{background-color:#1e222d}.wrap-3Onbn19L.offset-3Onbn19L{padding-right:48px}.wrap-3Onbn19L .title-3Onbn19L{color:#131722;margin-right:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .wrap-3Onbn19L .title-3Onbn19L{color:#b2b5be}.wrap-3Onbn19L .title-3Onbn19L.main-3Onbn19L{font-weight:700}.wrap-3Onbn19L .title-3Onbn19L.disabled-3Onbn19L{color:#b2b5be}html.theme-dark .wrap-3Onbn19L .title-3Onbn19L.disabled-3Onbn19L{color:#50535e}.wrap-3Onbn19L .icon-3Onbn19L{color:#131722;height:28px;line-height:28px;width:28px}html.theme-dark .wrap-3Onbn19L .icon-3Onbn19L{color:#b2b5be}.wrap-3Onbn19L .textIcon-3Onbn19L{font-family:FontAwesome;font-size:16px;text-align:center}.wrap-3Onbn19L .rightButtons-3Onbn19L{display:flex;flex:none;height:22px;margin-right:auto;position:relative;width:30px}.wrap-3Onbn19L .rightButtons-3Onbn19L.twoButtons-3Onbn19L{width:60px}.wrap-3Onbn19L .rightButtons-3Onbn19L.twoButtons-3Onbn19L .button-3Onbn19L.viewButton-3Onbn19L{left:30px}.wrap-3Onbn19L .rightButtons-3Onbn19L.threeButtons-3Onbn19L{width:90px}.wrap-3Onbn19L .rightButtons-3Onbn19L.threeButtons-3Onbn19L .button-3Onbn19L.viewButton-3Onbn19L{left:30px}.wrap-3Onbn19L .rightButtons-3Onbn19L.threeButtons-3Onbn19L .button-3Onbn19L.lockButton-3Onbn19L{left:60px}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#e0e3eb;position:absolute}html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#363a45}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.removeButton-3Onbn19L,.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.viewButton-3Onbn19L{left:0}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.lockButton-3Onbn19L{left:60px}.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L,.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:active,html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L{color:#fb8c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:hover{color:#fb8c00}}html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:active{color:#fb8c00}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .wrap-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L.warn-3Onbn19L:hover{color:#fb8c00}}.wrap-3Onbn19L.hover-3Onbn19L{background-color:#f0f3fa}html.theme-dark .wrap-3Onbn19L.hover-3Onbn19L{background-color:#2a2e39}.wrap-3Onbn19L.disabled-3Onbn19L{--tv-list-item-button-background-hover-color:#f0f3fa}html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L{--tv-list-item-button-background-hover-color:#2a2e39}.wrap-3Onbn19L.disabled-3Onbn19L .button-3Onbn19L,.wrap-3Onbn19L.disabled-3Onbn19L .expandHandle-3Onbn19L,.wrap-3Onbn19L.disabled-3Onbn19L .icon-3Onbn19L,.wrap-3Onbn19L.disabled-3Onbn19L .title-3Onbn19L{color:#b2b5be}html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .button-3Onbn19L,html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .expandHandle-3Onbn19L,html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .icon-3Onbn19L,html.theme-dark .wrap-3Onbn19L.disabled-3Onbn19L .title-3Onbn19L{color:#50535e}.wrap-3Onbn19L.selected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#90bff9}html.theme-dark .wrap-3Onbn19L.selected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#143a87}.wrap-3Onbn19L.childOfSelected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#bbd9fb}html.theme-dark .wrap-3Onbn19L.childOfSelected-3Onbn19L .rightButtons-3Onbn19L .button-3Onbn19L{--tv-list-item-button-background-hover-color:#142e61}.wrap-3Onbn19L .renameInput-3Onbn19L{background-color:#fff;height:28px;margin-right:3px;width:100%}html.theme-dark .wrap-3Onbn19L .renameInput-3Onbn19L{background-color:#2a2e39}.wrap-3Onbn19L .renameInput-3Onbn19L[draggable=true]{-webkit-user-select:text;user-select:text}.dialog-3q1-PXu-{height:400px}.button-3q1-PXu-{align-items:center;border-radius:2px;color:#131722;display:flex;height:34px;justify-content:center;width:34px}html.theme-dark .button-3q1-PXu-{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-3q1-PXu-:hover{background-color:#f0f3fa}html.theme-dark .button-3q1-PXu-:hover{background-color:#2a2e39}} \ No newline at end of file diff --git a/static/charting_library/bundles/75.1c9a3a6524248ddf88bf.js b/static/charting_library/bundles/75.1c9a3a6524248ddf88bf.js new file mode 100644 index 0000000..e8e864c --- /dev/null +++ b/static/charting_library/bundles/75.1c9a3a6524248ddf88bf.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[75],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/75.fefbc386c59bf7d4f9f7.css b/static/charting_library/bundles/75.fefbc386c59bf7d4f9f7.css new file mode 100644 index 0000000..9edf132 --- /dev/null +++ b/static/charting_library/bundles/75.fefbc386c59bf7d4f9f7.css @@ -0,0 +1 @@ +.floating-toolbar-react-widgets{display:inline-flex}.floating-toolbar-react-widgets__button{align-items:center;border-left:1px solid #f0f3fa;color:#131722;display:flex;height:38px;justify-content:center;min-width:38px}html.theme-dark .floating-toolbar-react-widgets__button{border-left:1px solid #2a2e39;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.floating-toolbar-react-widgets__button:hover{color:#131722}html.theme-dark .floating-toolbar-react-widgets__button:hover{color:#b2b5be}}.tv-floating-toolbar{align-items:stretch;background-color:#fff;border:1px solid #f0f3fa;border-radius:6px;box-shadow:0 2px 6px #6a6d7899;display:flex;flex-direction:column;opacity:1;position:absolute!important;transition:transform .2625s cubic-bezier(.215,.61,.355,1),opacity .2625s cubic-bezier(.215,.61,.355,1)}html.theme-dark .tv-floating-toolbar{background-color:#1e222d;border-color:#2a2e39;box-shadow:0 2px 6px #0009}.tv-floating-toolbar.i-closed{opacity:0;pointer-events:none;transform:scale(.925)}.tv-floating-toolbar.i-vertical{height:auto;min-width:37px}.tv-floating-toolbar__widget-wrapper{display:flex}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget-wrapper{flex-direction:column}.tv-floating-toolbar__drag{align-items:center;color:#b2b5be;cursor:grab;display:flex;flex-shrink:0;justify-content:center;width:24px}html.theme-dark .tv-floating-toolbar__drag{color:#50535e}.feature-mobiletouch .tv-floating-toolbar__drag{width:20px}.tv-floating-toolbar.ui-draggable-dragging .tv-floating-toolbar__drag{cursor:grabbing}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__drag{height:24px;width:100%}.feature-mobiletouch .tv-floating-toolbar.i-vertical .tv-floating-toolbar__drag{height:20px}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__drag svg{transform:rotate(90deg)}.tv-floating-toolbar__content{border-bottom-right-radius:6px;border-top-right-radius:6px;display:flex;flex-shrink:0;overflow:hidden}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__content{border-bottom-left-radius:6px;border-top-right-radius:0;flex-direction:column}.tv-floating-toolbar .ui-sortable-placeholder{border-left:1px solid #f0f3fa}html.theme-dark .tv-floating-toolbar .ui-sortable-placeholder{border-left:1px solid #2a2e39}.tv-floating-toolbar.i-vertical .ui-sortable-placeholder{border-left:none;border-top:1px solid #f0f3fa}html.theme-dark .tv-floating-toolbar.i-vertical .ui-sortable-placeholder{border-top:1px solid #2a2e39}.tv-floating-toolbar__widget{align-items:stretch;border-left:1px solid #f0f3fa;display:flex}html.theme-dark .tv-floating-toolbar__widget{border-left-color:#2a2e39}.tv-floating-toolbar__widget.ui-sortable-placeholder{visibility:visible!important}.tv-floating-toolbar__widget.ui-sortable-helper{border-left-color:#0000}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget{border-left:none;border-top:1px solid #eceff2}html.theme-dark .tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget{border-top-color:#363c4e}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget.ui-sortable-helper{border-top-color:#0000}.button-1gEXpG61{color:#131722;height:38px;width:38px}html.theme-dark .button-1gEXpG61{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1gEXpG61:hover{color:#131722}html.theme-dark .button-1gEXpG61:hover{color:#b2b5be}}.tv-caret{border-color:currentcolor #0000 #0000;border-style:solid;border-width:4px 4px 0;content:"";display:inline-block;height:0;margin-left:5px;transition:transform .35s ease;vertical-align:middle;width:0}.active .tv-caret,.i-dropped .tv-caret:not(.tv-caret--strict),.tv-caret--strict.i-dropped{transform:rotate(-180deg);transition-duration:.33;will-change:transform}.tv-caret--small{border-left-width:3px;border-right-width:3px;border-top-width:3px;margin-left:3px;margin-right:-1px}.tv-caret--colored{transition:transform .35s ease,color .35s ease}.tv-caret--no-margin{margin-left:0}.tv-grouped-floating-toolbar{color:#434651}html.theme-dark .tv-grouped-floating-toolbar{color:#d1d4dc}.tv-grouped-floating-toolbar__popup{background-color:#fff;border-radius:0 0 1px 1px;border-radius:3px;box-shadow:0 2px 4px #0003;display:flex;opacity:0;position:absolute;top:100%;transition:opacity .35s ease}html.theme-dark .tv-grouped-floating-toolbar__popup{background-color:#1e222d;box-shadow:0 2px 4px #0006}.tv-grouped-floating-toolbar__popup.i-opened{opacity:1;transition-duration:.11666667s}.tv-grouped-floating-toolbar__popup--at-top{border-radius:1px 1px 0 0;box-shadow:0 -5px 10px -5px #00000026;top:calc(-100% - 2px)}.tv-grouped-floating-toolbar__popup--at-left{border-radius:1px 0 0 1px;left:0;transform:translateX(-100%)}.tv-grouped-floating-toolbar.i-vertical .tv-grouped-floating-toolbar__popup:not(.tv-grouped-floating-toolbar__popup--at-left){border-radius:0 1px 1px 0;left:100%}.tv-grouped-floating-toolbar__sub-widget{align-items:center;cursor:pointer;display:flex;justify-content:center;opacity:0;transition:background-color .35s ease,opacity .35s ease}.tv-grouped-floating-toolbar__sub-widget--current{background-color:#bbd9fb;transition-duration:.06s}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-grouped-floating-toolbar__sub-widget:hover{background-color:#bbd9fb;transition-duration:.06s}}html.theme-dark .tv-grouped-floating-toolbar__sub-widget--current{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-grouped-floating-toolbar__sub-widget:hover{background-color:#2a2e39}}.tv-grouped-floating-toolbar__sub-widget:active{background-color:#eaecef;transition-duration:.06s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-9,.tv-grouped-floating-toolbar__sub-widget--slide-right-9{transition-delay:0s,.2422s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-8,.tv-grouped-floating-toolbar__sub-widget--slide-right-8{transition-delay:0s,.20055s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-7,.tv-grouped-floating-toolbar__sub-widget--slide-right-7{transition-delay:0s,.1638s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-6,.tv-grouped-floating-toolbar__sub-widget--slide-right-6{transition-delay:0s,.13195s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-5,.tv-grouped-floating-toolbar__sub-widget--slide-right-5{transition-delay:0s,.105s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-4,.tv-grouped-floating-toolbar__sub-widget--slide-right-4{transition-delay:0s,.08295s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-3,.tv-grouped-floating-toolbar__sub-widget--slide-right-3{transition-delay:0s,.0658s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-2,.tv-grouped-floating-toolbar__sub-widget--slide-right-2{transition-delay:0s,.05355s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-1,.tv-grouped-floating-toolbar__sub-widget--slide-right-1{transition-delay:0s,.0462s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-0,.tv-grouped-floating-toolbar__sub-widget--slide-right-0{transition-delay:0s,.04375s}.tv-grouped-floating-toolbar__popup.i-opened .tv-grouped-floating-toolbar__sub-widget{opacity:1}.tv-grouped-floating-toolbar__sub-widget:not(:first-child){border-left:1px solid #e0e3eb}html.theme-dark .tv-grouped-floating-toolbar__sub-widget:not(:first-child){border-left-color:#363a45}.tv-grouped-floating-toolbar__widget-wrapper{align-items:center;background-color:#fff;cursor:pointer;display:flex;flex-grow:1;justify-content:center;transition:background-color .35s ease}html.theme-dark .tv-grouped-floating-toolbar__widget-wrapper{background-color:#1e222d}.tv-grouped-floating-toolbar__widget-wrapper.i-dropped{background-color:#bbd9fb;transition-duration:.06s}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-grouped-floating-toolbar__widget-wrapper:hover{background-color:#bbd9fb;transition-duration:.06s}}html.theme-dark .tv-grouped-floating-toolbar__widget-wrapper.i-dropped{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-grouped-floating-toolbar__widget-wrapper:hover{background-color:#2a2e39}}.tv-grouped-floating-toolbar__widget-wrapper.i-disabled{color:#adaeb0;cursor:default}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-grouped-floating-toolbar__widget-wrapper.i-disabled:hover{background-color:#fff}}.tv-grouped-floating-toolbar__widget-wrapper:active{background-color:#eaecef;transition-duration:.06s}.wrap-2EG6_6QR{flex-direction:column;height:38px;width:38px}.icon-2EG6_6QR,.wrap-2EG6_6QR{align-items:center;display:flex;justify-content:center}.icon-2EG6_6QR{height:16px;width:16px}.colorBg-2EG6_6QR{background-color:#fff;background-image:url(a6506134daec7169f68f563f084a9d41.svg);background-size:4px;border-radius:2px;height:4px;margin-top:4px;width:22px}html.theme-dark .colorBg-2EG6_6QR{background-color:#000}.color-2EG6_6QR{border-radius:2px;height:4px;width:22px}.color-2EG6_6QR.multicolor-2EG6_6QR{background:linear-gradient(270deg,#ff2e00,#ffe600 27.27%,#61ff00 50%,#00c2ff 72.44%,#8f00ff)}.color-2EG6_6QR.white-2EG6_6QR{border:1px solid #d1d4dc;height:2px;width:20px}html.theme-dark .color-2EG6_6QR.white-2EG6_6QR{border:1px solid #0000}.item-3Te2Sp8a{padding-left:13px;padding-right:0}.item-3Te2Sp8a.withIcon-3Te2Sp8a{padding-bottom:2px;padding-top:2px}.icon-3Te2Sp8a{margin-right:11px}.labelRow-3Te2Sp8a:last-child{padding-right:2px}.multiWidth-3Te2Sp8a{padding:5px}.buttonWrap-3Te2Sp8a{align-items:center;display:flex;padding:11px 11px 11px 10px}.buttonLabel-3Te2Sp8a{margin-left:7px}.tv-favorited-drawings-toolbar__widget{align-items:center;color:#4c525e;cursor:pointer;display:flex;flex-grow:1;justify-content:center;min-height:38px;min-width:38px;transition:color .35s ease}html.theme-dark .tv-favorited-drawings-toolbar__widget{color:#758696}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-favorited-drawings-toolbar__widget:hover{color:#131722}html.theme-dark .tv-favorited-drawings-toolbar__widget:hover{color:#9db2bd}}.tv-favorited-drawings-toolbar__widget.i-active,html.theme-dark .tv-favorited-drawings-toolbar__widget.i-active{color:#2962ff} \ No newline at end of file diff --git a/static/charting_library/bundles/75.fefbc386c59bf7d4f9f7.rtl.css b/static/charting_library/bundles/75.fefbc386c59bf7d4f9f7.rtl.css new file mode 100644 index 0000000..025bce5 --- /dev/null +++ b/static/charting_library/bundles/75.fefbc386c59bf7d4f9f7.rtl.css @@ -0,0 +1 @@ +.floating-toolbar-react-widgets{display:inline-flex}.floating-toolbar-react-widgets__button{align-items:center;border-right:1px solid #f0f3fa;color:#131722;display:flex;height:38px;justify-content:center;min-width:38px}html.theme-dark .floating-toolbar-react-widgets__button{border-right:1px solid #2a2e39;color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.floating-toolbar-react-widgets__button:hover{color:#131722}html.theme-dark .floating-toolbar-react-widgets__button:hover{color:#b2b5be}}.tv-floating-toolbar{align-items:stretch;background-color:#fff;border:1px solid #f0f3fa;border-radius:6px;box-shadow:0 2px 6px #6a6d7899;display:flex;flex-direction:column;opacity:1;position:absolute!important;transition:transform .2625s cubic-bezier(.215,.61,.355,1),opacity .2625s cubic-bezier(.215,.61,.355,1)}html.theme-dark .tv-floating-toolbar{background-color:#1e222d;border-color:#2a2e39;box-shadow:0 2px 6px #0009}.tv-floating-toolbar.i-closed{opacity:0;pointer-events:none;transform:scale(.925)}.tv-floating-toolbar.i-vertical{height:auto;min-width:37px}.tv-floating-toolbar__widget-wrapper{display:flex}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget-wrapper{flex-direction:column}.tv-floating-toolbar__drag{align-items:center;color:#b2b5be;cursor:grab;display:flex;flex-shrink:0;justify-content:center;width:24px}html.theme-dark .tv-floating-toolbar__drag{color:#50535e}.feature-mobiletouch .tv-floating-toolbar__drag{width:20px}.tv-floating-toolbar.ui-draggable-dragging .tv-floating-toolbar__drag{cursor:grabbing}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__drag{height:24px;width:100%}.feature-mobiletouch .tv-floating-toolbar.i-vertical .tv-floating-toolbar__drag{height:20px}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__drag svg{transform:rotate(-90deg)}.tv-floating-toolbar__content{border-bottom-left-radius:6px;border-top-left-radius:6px;display:flex;flex-shrink:0;overflow:hidden}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__content{border-bottom-right-radius:6px;border-top-left-radius:0;flex-direction:column}.tv-floating-toolbar .ui-sortable-placeholder{border-right:1px solid #f0f3fa}html.theme-dark .tv-floating-toolbar .ui-sortable-placeholder{border-right:1px solid #2a2e39}.tv-floating-toolbar.i-vertical .ui-sortable-placeholder{border-right:none;border-top:1px solid #f0f3fa}html.theme-dark .tv-floating-toolbar.i-vertical .ui-sortable-placeholder{border-top:1px solid #2a2e39}.tv-floating-toolbar__widget{align-items:stretch;border-right:1px solid #f0f3fa;display:flex}html.theme-dark .tv-floating-toolbar__widget{border-right-color:#2a2e39}.tv-floating-toolbar__widget.ui-sortable-placeholder{visibility:visible!important}.tv-floating-toolbar__widget.ui-sortable-helper{border-right-color:#0000}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget{border-right:none;border-top:1px solid #eceff2}html.theme-dark .tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget{border-top-color:#363c4e}.tv-floating-toolbar.i-vertical .tv-floating-toolbar__widget.ui-sortable-helper{border-top-color:#0000}.button-1gEXpG61{color:#131722;height:38px;width:38px}html.theme-dark .button-1gEXpG61{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-1gEXpG61:hover{color:#131722}html.theme-dark .button-1gEXpG61:hover{color:#b2b5be}}.tv-caret{border-color:currentcolor #0000 #0000;border-style:solid;border-width:4px 4px 0;content:"";display:inline-block;height:0;margin-right:5px;transition:transform .35s ease;vertical-align:middle;width:0}.active .tv-caret,.i-dropped .tv-caret:not(.tv-caret--strict),.tv-caret--strict.i-dropped{transform:rotate(180deg);transition-duration:.33;will-change:transform}.tv-caret--small{border-left-width:3px;border-right-width:3px;border-top-width:3px;margin-left:-1px;margin-right:3px}.tv-caret--colored{transition:transform .35s ease,color .35s ease}.tv-caret--no-margin{margin-right:0}.tv-grouped-floating-toolbar{color:#434651}html.theme-dark .tv-grouped-floating-toolbar{color:#d1d4dc}.tv-grouped-floating-toolbar__popup{background-color:#fff;border-radius:0 0 1px 1px;border-radius:3px;box-shadow:0 2px 4px #0003;display:flex;opacity:0;position:absolute;top:100%;transition:opacity .35s ease}html.theme-dark .tv-grouped-floating-toolbar__popup{background-color:#1e222d;box-shadow:0 2px 4px #0006}.tv-grouped-floating-toolbar__popup.i-opened{opacity:1;transition-duration:.11666667s}.tv-grouped-floating-toolbar__popup--at-top{border-radius:1px 1px 0 0;box-shadow:0 -5px 10px -5px #00000026;top:calc(-100% - 2px)}.tv-grouped-floating-toolbar__popup--at-left{border-radius:0 1px 1px 0;right:0;transform:translateX(100%)}.tv-grouped-floating-toolbar.i-vertical .tv-grouped-floating-toolbar__popup:not(.tv-grouped-floating-toolbar__popup--at-left){border-radius:1px 0 0 1px;right:100%}.tv-grouped-floating-toolbar__sub-widget{align-items:center;cursor:pointer;display:flex;justify-content:center;opacity:0;transition:background-color .35s ease,opacity .35s ease}.tv-grouped-floating-toolbar__sub-widget--current{background-color:#bbd9fb;transition-duration:.06s}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-grouped-floating-toolbar__sub-widget:hover{background-color:#bbd9fb;transition-duration:.06s}}html.theme-dark .tv-grouped-floating-toolbar__sub-widget--current{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-grouped-floating-toolbar__sub-widget:hover{background-color:#2a2e39}}.tv-grouped-floating-toolbar__sub-widget:active{background-color:#eaecef;transition-duration:.06s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-9,.tv-grouped-floating-toolbar__sub-widget--slide-right-9{transition-delay:0s,.2422s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-8,.tv-grouped-floating-toolbar__sub-widget--slide-right-8{transition-delay:0s,.20055s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-7,.tv-grouped-floating-toolbar__sub-widget--slide-right-7{transition-delay:0s,.1638s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-6,.tv-grouped-floating-toolbar__sub-widget--slide-right-6{transition-delay:0s,.13195s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-5,.tv-grouped-floating-toolbar__sub-widget--slide-right-5{transition-delay:0s,.105s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-4,.tv-grouped-floating-toolbar__sub-widget--slide-right-4{transition-delay:0s,.08295s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-3,.tv-grouped-floating-toolbar__sub-widget--slide-right-3{transition-delay:0s,.0658s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-2,.tv-grouped-floating-toolbar__sub-widget--slide-right-2{transition-delay:0s,.05355s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-1,.tv-grouped-floating-toolbar__sub-widget--slide-right-1{transition-delay:0s,.0462s}.tv-grouped-floating-toolbar__popup--at-left .tv-grouped-floating-toolbar__sub-widget--slide-left-0,.tv-grouped-floating-toolbar__sub-widget--slide-right-0{transition-delay:0s,.04375s}.tv-grouped-floating-toolbar__popup.i-opened .tv-grouped-floating-toolbar__sub-widget{opacity:1}.tv-grouped-floating-toolbar__sub-widget:not(:first-child){border-right:1px solid #e0e3eb}html.theme-dark .tv-grouped-floating-toolbar__sub-widget:not(:first-child){border-right-color:#363a45}.tv-grouped-floating-toolbar__widget-wrapper{align-items:center;background-color:#fff;cursor:pointer;display:flex;flex-grow:1;justify-content:center;transition:background-color .35s ease}html.theme-dark .tv-grouped-floating-toolbar__widget-wrapper{background-color:#1e222d}.tv-grouped-floating-toolbar__widget-wrapper.i-dropped{background-color:#bbd9fb;transition-duration:.06s}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-grouped-floating-toolbar__widget-wrapper:hover{background-color:#bbd9fb;transition-duration:.06s}}html.theme-dark .tv-grouped-floating-toolbar__widget-wrapper.i-dropped{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-grouped-floating-toolbar__widget-wrapper:hover{background-color:#2a2e39}}.tv-grouped-floating-toolbar__widget-wrapper.i-disabled{color:#adaeb0;cursor:default}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-grouped-floating-toolbar__widget-wrapper.i-disabled:hover{background-color:#fff}}.tv-grouped-floating-toolbar__widget-wrapper:active{background-color:#eaecef;transition-duration:.06s}.wrap-2EG6_6QR{flex-direction:column;height:38px;width:38px}.icon-2EG6_6QR,.wrap-2EG6_6QR{align-items:center;display:flex;justify-content:center}.icon-2EG6_6QR{height:16px;width:16px}.colorBg-2EG6_6QR{background-color:#fff;background-image:url(a6506134daec7169f68f563f084a9d41.svg);background-size:4px;border-radius:2px;height:4px;margin-top:4px;width:22px}html.theme-dark .colorBg-2EG6_6QR{background-color:#000}.color-2EG6_6QR{border-radius:2px;height:4px;width:22px}.color-2EG6_6QR.multicolor-2EG6_6QR{background:linear-gradient(-270deg,#ff2e00,#ffe600 27.27%,#61ff00 50%,#00c2ff 72.44%,#8f00ff)}.color-2EG6_6QR.white-2EG6_6QR{border:1px solid #d1d4dc;height:2px;width:20px}html.theme-dark .color-2EG6_6QR.white-2EG6_6QR{border:1px solid #0000}.item-3Te2Sp8a{padding-left:0;padding-right:13px}.item-3Te2Sp8a.withIcon-3Te2Sp8a{padding-bottom:2px;padding-top:2px}.icon-3Te2Sp8a{margin-left:11px}.labelRow-3Te2Sp8a:last-child{padding-left:2px}.multiWidth-3Te2Sp8a{padding:5px}.buttonWrap-3Te2Sp8a{align-items:center;display:flex;padding:11px 10px 11px 11px}.buttonLabel-3Te2Sp8a{margin-right:7px}.tv-favorited-drawings-toolbar__widget{align-items:center;color:#4c525e;cursor:pointer;display:flex;flex-grow:1;justify-content:center;min-height:38px;min-width:38px;transition:color .35s ease}html.theme-dark .tv-favorited-drawings-toolbar__widget{color:#758696}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-favorited-drawings-toolbar__widget:hover{color:#131722}html.theme-dark .tv-favorited-drawings-toolbar__widget:hover{color:#9db2bd}}.tv-favorited-drawings-toolbar__widget.i-active,html.theme-dark .tv-favorited-drawings-toolbar__widget.i-active{color:#2962ff} \ No newline at end of file diff --git a/static/charting_library/bundles/76.5d20bed213399f326603.js b/static/charting_library/bundles/76.5d20bed213399f326603.js new file mode 100644 index 0000000..acb3894 --- /dev/null +++ b/static/charting_library/bundles/76.5d20bed213399f326603.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[76],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/76.f14d71a31295d8cd8d8b.css b/static/charting_library/bundles/76.f14d71a31295d8cd8d8b.css new file mode 100644 index 0000000..f249429 --- /dev/null +++ b/static/charting_library/bundles/76.f14d71a31295d8cd8d8b.css @@ -0,0 +1 @@ +.row-PABCY1cG{grid-gap:12px;display:grid;grid-template-columns:150px 100px;margin-bottom:16px;padding-left:20px;padding-right:20px}.mobileRow-PABCY1cG{justify-content:flex-start;padding-left:20px}.calendar-3r0qUNSu{background-color:#fff;box-sizing:border-box;color:#131722;cursor:default;direction:ltr;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;height:100%;padding:12px;-webkit-user-select:none;user-select:none;width:286px}html.theme-dark .calendar-3r0qUNSu{background-color:#1e222d;color:#b2b5be}.popupStyle-3r0qUNSu{background-color:#fff;border-radius:3px;box-shadow:0 2px 4px #0003}html.theme-dark .popupStyle-3r0qUNSu{background-color:#1e222d;box-shadow:0 2px 4px #0006}.header-3r0qUNSu{align-items:center;display:flex;justify-content:space-between;padding-left:3px;padding-right:3px}.header-3r0qUNSu .title-3r0qUNSu{font-size:16px;line-height:24px;max-width:160px}.header-3r0qUNSu .switchBtn-3r0qUNSu{border-radius:4px;cursor:pointer;font-size:0;margin:-3px;padding:3px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.header-3r0qUNSu .switchBtn-3r0qUNSu:hover{background-color:#f0f3fa}html.theme-dark .header-3r0qUNSu .switchBtn-3r0qUNSu:hover{background-color:#2a2e39}}.header-3r0qUNSu .switchBtn-3r0qUNSu.prev-3r0qUNSu{transform:scale(-1)}.month-3r0qUNSu{display:flex;flex-direction:column}.month-3r0qUNSu .weekdays-3r0qUNSu{align-items:center;background-color:#f8f9fd;border-radius:4px;display:flex;justify-content:space-between;margin-top:12px;padding-bottom:2px;padding-top:2px}html.theme-dark .month-3r0qUNSu .weekdays-3r0qUNSu{background-color:#2a2e39}.month-3r0qUNSu .weekdays-3r0qUNSu>span{color:#787b86;font-size:13px;line-height:20px;text-align:center;width:34px}.month-3r0qUNSu .weeks-3r0qUNSu{display:flex;flex-direction:column;margin-top:12px}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu{display:flex;justify-content:space-between}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:first-child .day-3r0qUNSu+.day-3r0qUNSu,.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:last-child .day-3r0qUNSu+.day-3r0qUNSu{margin-left:4px}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:first-child{justify-content:flex-end}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:last-child{justify-content:flex-start}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu+.week-3r0qUNSu{margin-top:4px}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu{align-items:center;border-radius:4px;box-sizing:border-box;display:flex;font-size:14px;height:34px;justify-content:center;width:34px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu:hover:not(.disabled-3r0qUNSu):not(.selected-3r0qUNSu){background-color:#f0f3fa}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu:hover:not(.disabled-3r0qUNSu):not(.selected-3r0qUNSu){background-color:#2a2e39}}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.disabled-3r0qUNSu{color:#b2b5be;cursor:not-allowed}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.disabled-3r0qUNSu{color:#50535e}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.currentDay-3r0qUNSu{color:#2962ff;position:relative}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#2962ff;border-radius:1px;bottom:5px;content:"";height:2px;left:50%;position:absolute;transform:translateX(-50%);width:20px}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#2962ff}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.isOnHighlightedEdge-3r0qUNSu:not(.selected-3r0qUNSu){background-color:#e3effd;border:2px solid #2962ff}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.isOnHighlightedEdge-3r0qUNSu:not(.selected-3r0qUNSu){background-color:#132042;border:2px solid #2962ff}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu{background-color:#2962ff;color:#fff}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu{background-color:#2962ff;color:#f0f3fa}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#fff}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#f0f3fa}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.withinSelectedRange-3r0qUNSu{background-color:#e3effd}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.withinSelectedRange-3r0qUNSu{background-color:#132042}.pickerInput-2oRut0q-{position:relative}.pickerInput-2oRut0q- .icon-2oRut0q-{align-items:center;cursor:pointer;display:inline-flex;opacity:.5;padding:0 6px}.pickerInput-2oRut0q- .icon-2oRut0q- svg{fill:#787b86;height:16px;width:16px}html.theme-dark .pickerInput-2oRut0q- .icon-2oRut0q- svg{fill:#787b86}.pickerInput-2oRut0q- .icon-2oRut0q-.disabled-2oRut0q-{opacity:.1}.picker-2oRut0q-{transition:opacity .2625s ease;z-index:99}.fixed-2oRut0q-{position:fixed}.absolute-2oRut0q-{position:absolute}.nativePicker-2oRut0q-{bottom:0;left:0;margin:0;max-width:100%;min-width:100%;opacity:0;position:absolute;top:0}.tooltip-3y8LFwiB{background-color:#2a2e39;border-radius:2px;color:#f0f3fa;padding:4px 8px;white-space:nowrap}html.theme-dark .tooltip-3y8LFwiB{background-color:#434651}.container-3tk-77P6{display:inline-block;position:relative}.icon-3tk-77P6{color:var(--ui-lib-control-default-slot-color,currentColor);font-size:0}.tooltip-3tk-77P6{bottom:calc(100% + 4px);left:50%;pointer-events:none;position:absolute;transform:translateX(-50%)}.date-3tk-77P6{max-width:150px}.time-3tk-77P6{max-width:100px}.calendar-1NjzAl_S{margin-left:8px;margin-right:8px;padding-bottom:15px;padding-top:1px}.dialogWrapper-C-Wab_3K{min-width:302px}.dialogWrapperSmall-C-Wab_3K{max-width:419px;width:100%}.tabs-C-Wab_3K{padding-top:1px}.content-C-Wab_3K{-ms-overflow-style:none;overflow:auto;padding-top:17px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .content-C-Wab_3K{scrollbar-color:#363a45 #0000}.content-C-Wab_3K::-webkit-scrollbar{height:5px;width:5px}.content-C-Wab_3K::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .content-C-Wab_3K::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.content-C-Wab_3K::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.content-C-Wab_3K::-webkit-scrollbar-corner{display:none}.contentMobile-C-Wab_3K{display:flex;flex-direction:column;flex-grow:1}.bodyWrapper-C-Wab_3K{flex:0 1 201px} \ No newline at end of file diff --git a/static/charting_library/bundles/76.f14d71a31295d8cd8d8b.rtl.css b/static/charting_library/bundles/76.f14d71a31295d8cd8d8b.rtl.css new file mode 100644 index 0000000..403affd --- /dev/null +++ b/static/charting_library/bundles/76.f14d71a31295d8cd8d8b.rtl.css @@ -0,0 +1 @@ +.row-PABCY1cG{grid-gap:12px;display:grid;grid-template-columns:150px 100px;margin-bottom:16px;padding-left:20px;padding-right:20px}.mobileRow-PABCY1cG{justify-content:flex-start;padding-right:20px}.calendar-3r0qUNSu{background-color:#fff;box-sizing:border-box;color:#131722;cursor:default;direction:ltr;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;height:100%;padding:12px;-webkit-user-select:none;user-select:none;width:286px}html.theme-dark .calendar-3r0qUNSu{background-color:#1e222d;color:#b2b5be}.popupStyle-3r0qUNSu{background-color:#fff;border-radius:3px;box-shadow:0 2px 4px #0003}html.theme-dark .popupStyle-3r0qUNSu{background-color:#1e222d;box-shadow:0 2px 4px #0006}.header-3r0qUNSu{align-items:center;display:flex;justify-content:space-between;padding-left:3px;padding-right:3px}.header-3r0qUNSu .title-3r0qUNSu{font-size:16px;line-height:24px;max-width:160px}.header-3r0qUNSu .switchBtn-3r0qUNSu{border-radius:4px;cursor:pointer;font-size:0;margin:-3px;padding:3px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.header-3r0qUNSu .switchBtn-3r0qUNSu:hover{background-color:#f0f3fa}html.theme-dark .header-3r0qUNSu .switchBtn-3r0qUNSu:hover{background-color:#2a2e39}}.header-3r0qUNSu .switchBtn-3r0qUNSu.prev-3r0qUNSu{transform:scale(-1)}.month-3r0qUNSu{display:flex;flex-direction:column}.month-3r0qUNSu .weekdays-3r0qUNSu{align-items:center;background-color:#f8f9fd;border-radius:4px;display:flex;justify-content:space-between;margin-top:12px;padding-bottom:2px;padding-top:2px}html.theme-dark .month-3r0qUNSu .weekdays-3r0qUNSu{background-color:#2a2e39}.month-3r0qUNSu .weekdays-3r0qUNSu>span{color:#787b86;font-size:13px;line-height:20px;text-align:center;width:34px}.month-3r0qUNSu .weeks-3r0qUNSu{display:flex;flex-direction:column;margin-top:12px}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu{display:flex;justify-content:space-between}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:first-child .day-3r0qUNSu+.day-3r0qUNSu,.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:last-child .day-3r0qUNSu+.day-3r0qUNSu{margin-right:4px}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:first-child{justify-content:flex-end}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu:last-child{justify-content:flex-start}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu+.week-3r0qUNSu{margin-top:4px}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu{align-items:center;border-radius:4px;box-sizing:border-box;display:flex;font-size:14px;height:34px;justify-content:center;width:34px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu:hover:not(.disabled-3r0qUNSu):not(.selected-3r0qUNSu){background-color:#f0f3fa}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu:hover:not(.disabled-3r0qUNSu):not(.selected-3r0qUNSu){background-color:#2a2e39}}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.disabled-3r0qUNSu{color:#b2b5be;cursor:not-allowed}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.disabled-3r0qUNSu{color:#50535e}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.currentDay-3r0qUNSu{color:#2962ff;position:relative}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#2962ff;border-radius:1px;bottom:5px;content:"";height:2px;position:absolute;right:50%;transform:translateX(50%);width:20px}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#2962ff}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.isOnHighlightedEdge-3r0qUNSu:not(.selected-3r0qUNSu){background-color:#e3effd;border:2px solid #2962ff}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.isOnHighlightedEdge-3r0qUNSu:not(.selected-3r0qUNSu){background-color:#132042;border:2px solid #2962ff}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu{background-color:#2962ff;color:#fff}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu{background-color:#2962ff;color:#f0f3fa}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#fff}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.selected-3r0qUNSu.currentDay-3r0qUNSu:after{background-color:#f0f3fa}.month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.withinSelectedRange-3r0qUNSu{background-color:#e3effd}html.theme-dark .month-3r0qUNSu .weeks-3r0qUNSu .week-3r0qUNSu .day-3r0qUNSu.withinSelectedRange-3r0qUNSu{background-color:#132042}.pickerInput-2oRut0q-{position:relative}.pickerInput-2oRut0q- .icon-2oRut0q-{align-items:center;cursor:pointer;display:inline-flex;opacity:.5;padding:0 6px}.pickerInput-2oRut0q- .icon-2oRut0q- svg{fill:#787b86;height:16px;width:16px}html.theme-dark .pickerInput-2oRut0q- .icon-2oRut0q- svg{fill:#787b86}.pickerInput-2oRut0q- .icon-2oRut0q-.disabled-2oRut0q-{opacity:.1}.picker-2oRut0q-{transition:opacity .2625s ease;z-index:99}.fixed-2oRut0q-{position:fixed}.absolute-2oRut0q-{position:absolute}.nativePicker-2oRut0q-{bottom:0;margin:0;max-width:100%;min-width:100%;opacity:0;position:absolute;right:0;top:0}.tooltip-3y8LFwiB{background-color:#2a2e39;border-radius:2px;color:#f0f3fa;padding:4px 8px;white-space:nowrap}html.theme-dark .tooltip-3y8LFwiB{background-color:#434651}.container-3tk-77P6{display:inline-block;position:relative}.icon-3tk-77P6{color:var(--ui-lib-control-default-slot-color,currentColor);font-size:0}.tooltip-3tk-77P6{bottom:calc(100% + 4px);pointer-events:none;position:absolute;right:50%;transform:translateX(50%)}.date-3tk-77P6{max-width:150px}.time-3tk-77P6{max-width:100px}.calendar-1NjzAl_S{margin-left:8px;margin-right:8px;padding-bottom:15px;padding-top:1px}.dialogWrapper-C-Wab_3K{min-width:302px}.dialogWrapperSmall-C-Wab_3K{max-width:419px;width:100%}.tabs-C-Wab_3K{padding-top:1px}.content-C-Wab_3K{-ms-overflow-style:none;overflow:auto;padding-top:17px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .content-C-Wab_3K{scrollbar-color:#363a45 #0000}.content-C-Wab_3K::-webkit-scrollbar{height:5px;width:5px}.content-C-Wab_3K::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .content-C-Wab_3K::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.content-C-Wab_3K::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.content-C-Wab_3K::-webkit-scrollbar-corner{display:none}.contentMobile-C-Wab_3K{display:flex;flex-direction:column;flex-grow:1}.bodyWrapper-C-Wab_3K{flex:0 1 201px} \ No newline at end of file diff --git a/static/charting_library/bundles/77.3e4ccccc7d3eb03c488f.js b/static/charting_library/bundles/77.3e4ccccc7d3eb03c488f.js new file mode 100644 index 0000000..810f20f --- /dev/null +++ b/static/charting_library/bundles/77.3e4ccccc7d3eb03c488f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[77],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/77.9c35f7046b848fbfd7f5.css b/static/charting_library/bundles/77.9c35f7046b848fbfd7f5.css new file mode 100644 index 0000000..92ee1dc --- /dev/null +++ b/static/charting_library/bundles/77.9c35f7046b848fbfd7f5.css @@ -0,0 +1 @@ +.wrap-379NmUSU{direction:ltr;height:100%;overflow:hidden;position:relative;width:100%}.wrap-379NmUSU svg{display:block}.scrollWrap-379NmUSU{-webkit-overflow-scrolling:touch;display:flex;flex:0 0 auto;flex-direction:column;height:100%;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.scrollWrap-379NmUSU::-webkit-scrollbar{height:5px;width:5px}.scrollWrap-379NmUSU::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollWrap-379NmUSU::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollWrap-379NmUSU::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollWrap-379NmUSU::-webkit-scrollbar-corner{display:none}.scrollWrap-379NmUSU.noScrollBar-379NmUSU{-ms-overflow-style:none;padding-right:100px}.scrollWrap-379NmUSU.noScrollBar-379NmUSU.sb-scrollbar-wrap{display:none}.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar{display:none;height:0;width:0}.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar-thumb,.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar-track{display:none}.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar-corner{display:none}.content-379NmUSU{display:flex;flex:1 0 auto;flex-direction:column;position:relative}.icon-379NmUSU{display:block;transition:transform 60ms ease}.scrollBot-379NmUSU,.scrollTop-379NmUSU{align-items:center;background-color:#1e222d99;color:#fff;display:flex;height:24px;justify-content:center;left:0;overflow:hidden;position:absolute;transition:background-color .35s ease,transform .11666667s cubic-bezier(.55,.055,.675,.19);width:100%}html.theme-dark .scrollBot-379NmUSU,html.theme-dark .scrollTop-379NmUSU{background-color:#6a6d7899;color:#fff}.scrollBot-379NmUSU:active,.scrollTop-379NmUSU:active{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollBot-379NmUSU:hover,.scrollTop-379NmUSU:hover{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}}.scrollBot-379NmUSU:active .icon-379NmUSU,.scrollTop-379NmUSU:active .icon-379NmUSU{transform:translateY(1px)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollBot-379NmUSU:hover .icon-379NmUSU,.scrollTop-379NmUSU:hover .icon-379NmUSU{transform:translateY(1px)}}.scrollBot-379NmUSU.isVisible-379NmUSU,.scrollTop-379NmUSU.isVisible-379NmUSU{transform:translateY(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.scrollTop-379NmUSU{top:0;transform:translateY(-100%)}.scrollTop-379NmUSU .iconWrap-379NmUSU{transform:rotate(180deg)}.scrollBot-379NmUSU{bottom:0;transform:translateY(100%)}.fadeBot-379NmUSU,.fadeTop-379NmUSU{height:24px;left:0;pointer-events:none;position:absolute;width:100%}.fadeBot-379NmUSU.isVisible-379NmUSU,.fadeTop-379NmUSU.isVisible-379NmUSU{transform:translateY(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.fadeTop-379NmUSU{background-image:linear-gradient(0deg,#fff0,#fff);top:0;transform:translateY(-100%)}html.theme-dark .fadeTop-379NmUSU{background-image:linear-gradient(0deg,#13172200,#131722)}.fadeBot-379NmUSU{background-image:linear-gradient(180deg,#fff0,#fff);bottom:0;transform:translateY(100%)}html.theme-dark .fadeBot-379NmUSU{background-image:linear-gradient(180deg,#13172200,#131722)}.dropdown-191zO2Od{position:relative}.buttonWrap-191zO2Od{transform:translateX(0)}.control-191zO2Od{box-sizing:border-box;overflow:hidden;position:relative;touch-action:manipulation;width:52px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od{opacity:1}}.arrow-191zO2Od{align-items:center;border-radius:4px 0 0 4px;bottom:1px;box-sizing:border-box;color:#131722;cursor:default;display:flex;justify-content:center;opacity:0;overflow:hidden;position:absolute;right:0;top:1px;width:11px}html.theme-dark .arrow-191zO2Od{color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.arrow-191zO2Od:hover{color:#000}html.theme-dark .arrow-191zO2Od:hover{color:#868993}}.arrow-191zO2Od .arrowIcon-191zO2Od,.arrow-191zO2Od .arrowIcon-191zO2Od svg{transition:transform .5s cubic-bezier(.175,.885,.32,1.275)}.arrow-191zO2Od .arrowIcon-191zO2Od svg{fill:currentColor;display:block;height:7px;width:4px}.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od{transform:translateX(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od{transform:translateX(0)}}.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od.hover-191zO2Od,.control-191zO2Od:hover .arrow-191zO2Od:hover,.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od:hover,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}}html.theme-dark .feature-mobiletouch .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od,html.theme-dark .isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .control-191zO2Od:hover .arrow-191zO2Od.hover-191zO2Od,html.theme-dark .control-191zO2Od:hover .arrow-191zO2Od:hover,html.theme-dark .feature-mobiletouch .control-191zO2Od .arrow-191zO2Od:hover,html.theme-dark .isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od svg,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od svg{transform:translateX(1px)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od.hover-191zO2Od svg,.control-191zO2Od:hover .arrow-191zO2Od:hover svg,.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od:hover svg,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover svg{transform:translateX(1px)}}.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);opacity:1}html.theme-dark .isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od .arrowIcon-191zO2Od{transform:rotate(180deg)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover svg{transform:translateX(-1px)}}.feature-mobiletouch .isGrayed-191zO2Od .control-191zO2Od .buttonWrap-191zO2Od{transform:translateX(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.isGrayed-191zO2Od .control-191zO2Od:hover .buttonWrap-191zO2Od{transform:translateX(0)}}.wrap-2qy9YC6D{box-sizing:border-box;display:flex;flex-wrap:wrap;padding:0 5px;width:390px}.wrap-2qy9YC6D.smallTablet-2qy9YC6D{padding:0 16px;width:100%}.buttonIcon-2qy9YC6D,.item-2qy9YC6D{font-family:FontAwesome;font-size:19px}.item-2qy9YC6D{align-items:center;color:#131722;cursor:pointer;display:flex;height:38px;justify-content:center;text-align:center;width:38px}html.theme-dark .item-2qy9YC6D{color:#b2b5be}.item-2qy9YC6D.smallTablet-2qy9YC6D{margin-bottom:6px;margin-right:8px}.item-2qy9YC6D.hovered-2qy9YC6D,.item-2qy9YC6D:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2qy9YC6D:hover{color:#131722}}html.theme-dark .item-2qy9YC6D.hovered-2qy9YC6D,html.theme-dark .item-2qy9YC6D:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2qy9YC6D:hover{color:#c1c4cd}}.active-2qy9YC6D{border-radius:6px;color:#fff}.active-2qy9YC6D,html.theme-dark .active-2qy9YC6D{background-color:#2962ff}html.theme-dark .active-2qy9YC6D{color:#d1d4dc}.title-2qy9YC6D{color:#787b86;font-size:11px;font-style:normal;font-weight:400;letter-spacing:.4px;line-height:16px;padding:10px 0 8px 20px;text-transform:uppercase}html.theme-dark .title-2qy9YC6D{color:#787b86}.separator-2qy9YC6D{margin-top:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2qy9YC6D:hover .buttonIcon-2qy9YC6D{transition-duration:60ms}}.item-3NgvBqLJ{font-size:16px;padding-bottom:6px;padding-top:10px;white-space:normal}.item-3NgvBqLJ:before{content:none}.label-3NgvBqLJ{line-height:24px;overflow:visible}.container-3CL4Geq2{display:block;transition:fill 60ms ease,stroke 60ms ease}.container-3CL4Geq2.mirror-3CL4Geq2{transform:rotate(180deg)}.container-3CL4Geq2 .background-3CL4Geq2{fill:var(--tv-color-pane-background,#fff);stroke:var(--tv-color-platform-background,#e0e3eb)}html.theme-dark .container-3CL4Geq2 .background-3CL4Geq2{stroke:var(--tv-color-platform-background,#2a2e39);fill:var(--tv-color-pane-background,#131722)}.container-3CL4Geq2 .arrow-3CL4Geq2,html.theme-dark .container-3CL4Geq2 .arrow-3CL4Geq2{stroke:#9db2bd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3CL4Geq2:hover .background-3CL4Geq2{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.container-3CL4Geq2:hover .background-3CL4Geq2,html.theme-dark .container-3CL4Geq2:hover .background-3CL4Geq2{stroke:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}html.theme-dark .container-3CL4Geq2:hover .background-3CL4Geq2{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.container-3CL4Geq2:hover .arrow-3CL4Geq2{stroke:var(--tv-color-pane-background,#fff)}html.theme-dark .container-3CL4Geq2:hover .arrow-3CL4Geq2{stroke:var(--tv-color-pane-background,#131722)}}.toggleButton-3zv4iS2j{bottom:58px;left:100%;margin-left:-6px;position:absolute;z-index:10}.toggleButton-3zv4iS2j.collapsed-3zv4iS2j{left:0;margin-left:0}.toggleButton-3zv4iS2j .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.toggleButton-3zv4iS2j .background-3zv4iS2j,html.theme-dark .toggleButton-3zv4iS2j .background-3zv4iS2j{stroke:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}html.theme-dark .toggleButton-3zv4iS2j .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.toggleButton-3zv4iS2j .arrow-3zv4iS2j{stroke:var(--tv-color-pane-background,#fff)}html.theme-dark .toggleButton-3zv4iS2j .arrow-3zv4iS2j{stroke:var(--tv-color-pane-background,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.toggleButton-3zv4iS2j:hover .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}.toggleButton-3zv4iS2j:hover .background-3zv4iS2j,html.theme-dark .toggleButton-3zv4iS2j:hover .background-3zv4iS2j{stroke:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}html.theme-dark .toggleButton-3zv4iS2j:hover .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}}.drawingToolbar-2_so5thS{background-color:var(--tv-color-pane-background,#fff);height:100%;position:relative;-webkit-user-select:none;user-select:none}html.theme-dark .drawingToolbar-2_so5thS{background-color:var(--tv-color-pane-background,#131722)}.drawingToolbar-2_so5thS.isHidden-2_so5thS,html.theme-dark .drawingToolbar-2_so5thS.isHidden-2_so5thS{background-color:initial}.drawingToolbar-2_so5thS.isHidden-2_so5thS .inner-2_so5thS{display:none}.popupMenuItem-2_so5thS{font-size:16px}.inner-2_so5thS{background-color:var(--tv-color-platform-background,#e0e3eb);display:flex;flex:1 0 auto;flex-direction:column;width:52px}html.theme-dark .inner-2_so5thS{background-color:var(--tv-color-platform-background,#2a2e39)}.group-2_so5thS{background-color:var(--tv-color-pane-background,#fff);border-bottom-right-radius:2px;border-top-right-radius:2px;padding:6px 0}html.theme-dark .group-2_so5thS{background-color:var(--tv-color-pane-background,#131722)}.group-2_so5thS+.group-2_so5thS{margin-top:1px}.group-2_so5thS:first-child{border-top-right-radius:0}.group-2_so5thS.noGroupPadding-2_so5thS{padding:0}.lastGroup-2_so5thS{border-radius:0;padding-bottom:20px}.fill-2_so5thS{background-color:var(--tv-color-pane-background,#fff);flex:1 1 100%;margin-top:-2px;min-height:2px}html.theme-dark .fill-2_so5thS{background-color:var(--tv-color-pane-background,#131722)}.separator-2_so5thS{background-color:#e0e3eb;height:1px;margin:5px 0;position:relative;width:100%}html.theme-dark .separator-2_so5thS{background-color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/77.9c35f7046b848fbfd7f5.rtl.css b/static/charting_library/bundles/77.9c35f7046b848fbfd7f5.rtl.css new file mode 100644 index 0000000..7195962 --- /dev/null +++ b/static/charting_library/bundles/77.9c35f7046b848fbfd7f5.rtl.css @@ -0,0 +1 @@ +.wrap-379NmUSU{direction:rtl;height:100%;overflow:hidden;position:relative;width:100%}.wrap-379NmUSU svg{display:block}.scrollWrap-379NmUSU{-webkit-overflow-scrolling:touch;display:flex;flex:0 0 auto;flex-direction:column;height:100%;overflow-x:hidden;overflow-y:auto;position:relative;width:100%}.scrollWrap-379NmUSU::-webkit-scrollbar{height:5px;width:5px}.scrollWrap-379NmUSU::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollWrap-379NmUSU::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollWrap-379NmUSU::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollWrap-379NmUSU::-webkit-scrollbar-corner{display:none}.scrollWrap-379NmUSU.noScrollBar-379NmUSU{-ms-overflow-style:none;padding-left:100px}.scrollWrap-379NmUSU.noScrollBar-379NmUSU.sb-scrollbar-wrap{display:none}.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar{display:none;height:0;width:0}.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar-thumb,.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar-track{display:none}.scrollWrap-379NmUSU.noScrollBar-379NmUSU::-webkit-scrollbar-corner{display:none}.content-379NmUSU{display:flex;flex:1 0 auto;flex-direction:column;position:relative}.icon-379NmUSU{display:block;transition:transform 60ms ease}.scrollBot-379NmUSU,.scrollTop-379NmUSU{align-items:center;background-color:#1e222d99;color:#fff;display:flex;height:24px;justify-content:center;overflow:hidden;position:absolute;right:0;transition:background-color .35s ease,transform .11666667s cubic-bezier(.55,.055,.675,.19);width:100%}html.theme-dark .scrollBot-379NmUSU,html.theme-dark .scrollTop-379NmUSU{background-color:#6a6d7899;color:#fff}.scrollBot-379NmUSU:active,.scrollTop-379NmUSU:active{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollBot-379NmUSU:hover,.scrollTop-379NmUSU:hover{transition:background-color 58.33333ms ease,transform .11666667s cubic-bezier(.215,.61,.355,1)}}.scrollBot-379NmUSU:active .icon-379NmUSU,.scrollTop-379NmUSU:active .icon-379NmUSU{transform:translateY(1px)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.scrollBot-379NmUSU:hover .icon-379NmUSU,.scrollTop-379NmUSU:hover .icon-379NmUSU{transform:translateY(1px)}}.scrollBot-379NmUSU.isVisible-379NmUSU,.scrollTop-379NmUSU.isVisible-379NmUSU{transform:translateY(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.scrollTop-379NmUSU{top:0;transform:translateY(-100%)}.scrollTop-379NmUSU .iconWrap-379NmUSU{transform:rotate(-180deg)}.scrollBot-379NmUSU{bottom:0;transform:translateY(100%)}.fadeBot-379NmUSU,.fadeTop-379NmUSU{height:24px;pointer-events:none;position:absolute;right:0;width:100%}.fadeBot-379NmUSU.isVisible-379NmUSU,.fadeTop-379NmUSU.isVisible-379NmUSU{transform:translateY(0);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.fadeTop-379NmUSU{background-image:linear-gradient(0deg,#fff0,#fff);top:0;transform:translateY(-100%)}html.theme-dark .fadeTop-379NmUSU{background-image:linear-gradient(0deg,#13172200,#131722)}.fadeBot-379NmUSU{background-image:linear-gradient(180deg,#fff0,#fff);bottom:0;transform:translateY(100%)}html.theme-dark .fadeBot-379NmUSU{background-image:linear-gradient(180deg,#13172200,#131722)}.dropdown-191zO2Od{position:relative}.buttonWrap-191zO2Od{transform:translateX(0)}.control-191zO2Od{box-sizing:border-box;overflow:hidden;position:relative;touch-action:manipulation;width:52px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od{opacity:1}}.arrow-191zO2Od{align-items:center;border-radius:0 4px 4px 0;bottom:1px;box-sizing:border-box;color:#131722;cursor:default;display:flex;justify-content:center;opacity:0;overflow:hidden;position:absolute;right:0;top:1px;width:11px}html.theme-dark .arrow-191zO2Od{color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.arrow-191zO2Od:hover{color:#000}html.theme-dark .arrow-191zO2Od:hover{color:#868993}}.arrow-191zO2Od .arrowIcon-191zO2Od,.arrow-191zO2Od .arrowIcon-191zO2Od svg{transition:transform .5s cubic-bezier(.175,.885,.32,1.275)}.arrow-191zO2Od .arrowIcon-191zO2Od svg{fill:currentColor;display:block;height:7px;width:4px}.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od{transform:translateX(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od{transform:translateX(0)}}.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od.hover-191zO2Od,.control-191zO2Od:hover .arrow-191zO2Od:hover,.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od:hover,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa)}}html.theme-dark .feature-mobiletouch .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od,html.theme-dark .isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .control-191zO2Od:hover .arrow-191zO2Od.hover-191zO2Od,html.theme-dark .control-191zO2Od:hover .arrow-191zO2Od:hover,html.theme-dark .feature-mobiletouch .control-191zO2Od .arrow-191zO2Od:hover,html.theme-dark .isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}}.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od svg,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od.hover-191zO2Od svg{transform:translateX(-1px)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.control-191zO2Od:hover .arrow-191zO2Od.hover-191zO2Od svg,.control-191zO2Od:hover .arrow-191zO2Od:hover svg,.feature-mobiletouch .control-191zO2Od .arrow-191zO2Od:hover svg,.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover svg{transform:translateX(-1px)}}.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#f0f3fa);opacity:1}html.theme-dark .isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od{background-color:var(--tv-color-toolbar-button-background-hover,#2a2e39)}.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od .arrowIcon-191zO2Od{transform:rotate(-180deg)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.isOpened-191zO2Od .control-191zO2Od .arrow-191zO2Od:hover svg{transform:translateX(1px)}}.feature-mobiletouch .isGrayed-191zO2Od .control-191zO2Od .buttonWrap-191zO2Od{transform:translateX(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.isGrayed-191zO2Od .control-191zO2Od:hover .buttonWrap-191zO2Od{transform:translateX(0)}}.wrap-2qy9YC6D{box-sizing:border-box;display:flex;flex-wrap:wrap;padding:0 5px;width:390px}.wrap-2qy9YC6D.smallTablet-2qy9YC6D{padding:0 16px;width:100%}.buttonIcon-2qy9YC6D,.item-2qy9YC6D{font-family:FontAwesome;font-size:19px}.item-2qy9YC6D{align-items:center;color:#131722;cursor:pointer;display:flex;height:38px;justify-content:center;text-align:center;width:38px}html.theme-dark .item-2qy9YC6D{color:#b2b5be}.item-2qy9YC6D.smallTablet-2qy9YC6D{margin-bottom:6px;margin-left:8px}.item-2qy9YC6D.hovered-2qy9YC6D,.item-2qy9YC6D:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.item-2qy9YC6D:hover{color:#131722}}html.theme-dark .item-2qy9YC6D.hovered-2qy9YC6D,html.theme-dark .item-2qy9YC6D:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .item-2qy9YC6D:hover{color:#c1c4cd}}.active-2qy9YC6D{border-radius:6px;color:#fff}.active-2qy9YC6D,html.theme-dark .active-2qy9YC6D{background-color:#2962ff}html.theme-dark .active-2qy9YC6D{color:#d1d4dc}.title-2qy9YC6D{color:#787b86;font-size:11px;font-style:normal;font-weight:400;letter-spacing:.4px;line-height:16px;padding:10px 20px 8px 0;text-transform:uppercase}html.theme-dark .title-2qy9YC6D{color:#787b86}.separator-2qy9YC6D{margin-top:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-2qy9YC6D:hover .buttonIcon-2qy9YC6D{transition-duration:60ms}}.item-3NgvBqLJ{font-size:16px;padding-bottom:6px;padding-top:10px;white-space:normal}.item-3NgvBqLJ:before{content:none}.label-3NgvBqLJ{line-height:24px;overflow:visible}.container-3CL4Geq2{display:block;transition:fill 60ms ease,stroke 60ms ease}.container-3CL4Geq2.mirror-3CL4Geq2{transform:rotate(-180deg)}.container-3CL4Geq2 .background-3CL4Geq2{fill:var(--tv-color-pane-background,#fff);stroke:var(--tv-color-platform-background,#e0e3eb)}html.theme-dark .container-3CL4Geq2 .background-3CL4Geq2{stroke:var(--tv-color-platform-background,#2a2e39);fill:var(--tv-color-pane-background,#131722)}.container-3CL4Geq2 .arrow-3CL4Geq2,html.theme-dark .container-3CL4Geq2 .arrow-3CL4Geq2{stroke:#9db2bd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3CL4Geq2:hover .background-3CL4Geq2{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.container-3CL4Geq2:hover .background-3CL4Geq2,html.theme-dark .container-3CL4Geq2:hover .background-3CL4Geq2{stroke:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}html.theme-dark .container-3CL4Geq2:hover .background-3CL4Geq2{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.container-3CL4Geq2:hover .arrow-3CL4Geq2{stroke:var(--tv-color-pane-background,#fff)}html.theme-dark .container-3CL4Geq2:hover .arrow-3CL4Geq2{stroke:var(--tv-color-pane-background,#131722)}}.toggleButton-3zv4iS2j{bottom:58px;left:100%;margin-left:-6px;position:absolute;z-index:10}.toggleButton-3zv4iS2j.collapsed-3zv4iS2j{left:0;margin-left:0}.toggleButton-3zv4iS2j .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.toggleButton-3zv4iS2j .background-3zv4iS2j,html.theme-dark .toggleButton-3zv4iS2j .background-3zv4iS2j{stroke:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}html.theme-dark .toggleButton-3zv4iS2j .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active,#2962ff)}.toggleButton-3zv4iS2j .arrow-3zv4iS2j{stroke:var(--tv-color-pane-background,#fff)}html.theme-dark .toggleButton-3zv4iS2j .arrow-3zv4iS2j{stroke:var(--tv-color-pane-background,#131722)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.toggleButton-3zv4iS2j:hover .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}.toggleButton-3zv4iS2j:hover .background-3zv4iS2j,html.theme-dark .toggleButton-3zv4iS2j:hover .background-3zv4iS2j{stroke:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}html.theme-dark .toggleButton-3zv4iS2j:hover .background-3zv4iS2j{fill:var(--tv-color-toolbar-toggle-button-background-active-hover,#1e53e5)}}.drawingToolbar-2_so5thS{background-color:var(--tv-color-pane-background,#fff);height:100%;position:relative;-webkit-user-select:none;user-select:none}html.theme-dark .drawingToolbar-2_so5thS{background-color:var(--tv-color-pane-background,#131722)}.drawingToolbar-2_so5thS.isHidden-2_so5thS,html.theme-dark .drawingToolbar-2_so5thS.isHidden-2_so5thS{background-color:initial}.drawingToolbar-2_so5thS.isHidden-2_so5thS .inner-2_so5thS{display:none}.popupMenuItem-2_so5thS{font-size:16px}.inner-2_so5thS{background-color:var(--tv-color-platform-background,#e0e3eb);display:flex;flex:1 0 auto;flex-direction:column;width:52px}html.theme-dark .inner-2_so5thS{background-color:var(--tv-color-platform-background,#2a2e39)}.group-2_so5thS{background-color:var(--tv-color-pane-background,#fff);border-bottom-left-radius:2px;border-top-left-radius:2px;padding:6px 0}html.theme-dark .group-2_so5thS{background-color:var(--tv-color-pane-background,#131722)}.group-2_so5thS+.group-2_so5thS{margin-top:1px}.group-2_so5thS:first-child{border-top-left-radius:0}.group-2_so5thS.noGroupPadding-2_so5thS{padding:0}.lastGroup-2_so5thS{border-radius:0;padding-bottom:20px}.fill-2_so5thS{background-color:var(--tv-color-pane-background,#fff);flex:1 1 100%;margin-top:-2px;min-height:2px}html.theme-dark .fill-2_so5thS{background-color:var(--tv-color-pane-background,#131722)}.separator-2_so5thS{background-color:#e0e3eb;height:1px;margin:5px 0;position:relative;width:100%}html.theme-dark .separator-2_so5thS{background-color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/78.0d502ab4d94441708606.css b/static/charting_library/bundles/78.0d502ab4d94441708606.css new file mode 100644 index 0000000..643bf53 --- /dev/null +++ b/static/charting_library/bundles/78.0d502ab4d94441708606.css @@ -0,0 +1 @@ +.container-12vIMEmh{min-width:0;overflow:auto;position:relative;width:100%}.title-1gYObTuJ{color:#131722;font-size:14px;margin-left:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.title-1gYObTuJ.disabled-1gYObTuJ,html.theme-dark .title-1gYObTuJ{color:#b2b5be}html.theme-dark .title-1gYObTuJ.disabled-1gYObTuJ{color:#50535e}.icon-1gYObTuJ{font-size:0;margin-left:4px}.icon-1gYObTuJ.locked-1gYObTuJ{color:#ef5350}.icon-1gYObTuJ.open-1gYObTuJ{color:#26a69a}.actionIcon-1gYObTuJ+.actionIcon-1gYObTuJ{margin-left:4px}.actionIcon-1gYObTuJ.selected-1gYObTuJ{--tv-list-item-button-background-hover-color:#90bff9}html.theme-dark .actionIcon-1gYObTuJ.selected-1gYObTuJ{--tv-list-item-button-background-hover-color:#143a87}@media screen and (max-height:445px),screen and (max-width:567px){.codeIcon-1gYObTuJ{display:none}}@keyframes highlight-animation-theme-light-3Ywm3-oo{0%{background-color:initial}30%{background-color:#e3effd}60%{background-color:initial}to{background-color:#bbd9fb}}@keyframes highlight-animation-theme-dark-3Ywm3-oo{0%{background-color:initial}30%{background-color:#132042}60%{background-color:initial}to{background-color:#142e61}}.container-3Ywm3-oo{align-items:center;box-sizing:border-box;cursor:default;display:flex;height:32px;padding-left:6px;padding-right:16px}.container-3Ywm3-oo.selected-3Ywm3-oo{background-color:#bbd9fb}html.theme-dark .container-3Ywm3-oo.selected-3Ywm3-oo{background-color:#142e61}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover{background-color:#f0f3fa}html.theme-dark .container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover{background-color:#2a2e39}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover .favorite-3Ywm3-oo{visibility:visible}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo{background-color:#bbd9fb}html.theme-dark .container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo{background-color:#142e61}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo .favorite-3Ywm3-oo:hover{background-color:#90bff9}html.theme-dark .container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo .favorite-3Ywm3-oo:hover{background-color:#143a87}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover .actions-3Ywm3-oo{visibility:visible}}.container-3Ywm3-oo.highlighted-3Ywm3-oo{animation-duration:.8s;animation-fill-mode:forwards;animation-iteration-count:1}.container-3Ywm3-oo.highlighted-3Ywm3-oo.light-3Ywm3-oo{animation-name:highlight-animation-theme-light-3Ywm3-oo}.container-3Ywm3-oo.highlighted-3Ywm3-oo.dark-3Ywm3-oo{animation-name:highlight-animation-theme-dark-3Ywm3-oo}@media screen and (max-width:428px){.container-3Ywm3-oo{height:40px}}.pill-3Ywm3-oo{margin-left:4px}.main-3Ywm3-oo{align-items:center;display:flex;flex:1 1 auto;margin-right:auto;min-width:0}.main-3Ywm3-oo.paddingLeft-3Ywm3-oo{padding-left:22px}.favorite-3Ywm3-oo{visibility:hidden}@media (pointer:coarse){.favorite-3Ywm3-oo{visibility:visible}}.favorite-3Ywm3-oo.isActive-3Ywm3-oo{visibility:visible}.author-3Ywm3-oo{color:#2962ff;cursor:default;flex-basis:100px;margin-left:24px;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .author-3Ywm3-oo{color:#2962ff}.likes-3Ywm3-oo{color:#131722;flex-basis:50px;margin-left:24px;min-width:50px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .likes-3Ywm3-oo{color:#b2b5be}.actions-3Ywm3-oo{display:flex;flex-basis:44px;justify-content:flex-end;margin-left:24px;min-width:44px;visibility:hidden}@media (pointer:coarse){.actions-3Ywm3-oo{visibility:visible}}.title-hq9up-8e{color:#787b86;font-size:11px;font-weight:400;letter-spacing:.4px;line-height:16px;margin:0;text-transform:uppercase;white-space:nowrap}html.theme-dark .title-hq9up-8e{color:#787b86}.title-hq9up-8e:first-child{margin-right:auto}.title-hq9up-8e+.title-hq9up-8e{margin-left:24px}.title-hq9up-8e.small-hq9up-8e{width:50px}.title-hq9up-8e.normal-hq9up-8e{width:100px}.title-hq9up-8e.large-hq9up-8e{width:150px}.container-gb0TB1FN{box-sizing:border-box;cursor:default;display:flex;padding:16px 84px 8px 32px}.container-39xfFXyr{align-items:center;cursor:default;display:flex;flex-direction:column;justify-content:center;text-align:center}.image-39xfFXyr{margin-bottom:8px}.title-39xfFXyr{color:#000;font-size:20px;font-weight:700;margin:0 0 16px}html.theme-dark .title-39xfFXyr{color:#b2b5be}.description-39xfFXyr{color:#000;font-size:16px;line-height:24px;margin:0}html.theme-dark .description-39xfFXyr{color:#b2b5be}.button-39xfFXyr{cursor:default;margin-top:24px}.dialog-3kc5LZDR{height:600px;max-width:840px;width:calc(100% - 20px)}.dialogLibrary-3kc5LZDR{height:600px}.listContainer-3kc5LZDR::-webkit-scrollbar{height:5px;width:5px}.listContainer-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .listContainer-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.listContainer-3kc5LZDR::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.listContainer-3kc5LZDR::-webkit-scrollbar-corner{display:none}.scroll-3kc5LZDR::-webkit-scrollbar{height:5px;width:5px}.scroll-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scroll-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scroll-3kc5LZDR::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scroll-3kc5LZDR::-webkit-scrollbar-corner{display:none}@media screen and (max-width:428px){.scroll-3kc5LZDR{box-sizing:border-box;padding-bottom:6px;padding-top:6px}}.sidebarContainer-3kc5LZDR{padding-bottom:6px;padding-top:6px}.noContentBlock-3kc5LZDR{box-sizing:border-box;min-height:100%;padding:24px 40px 60px} \ No newline at end of file diff --git a/static/charting_library/bundles/78.0d502ab4d94441708606.rtl.css b/static/charting_library/bundles/78.0d502ab4d94441708606.rtl.css new file mode 100644 index 0000000..7778ba3 --- /dev/null +++ b/static/charting_library/bundles/78.0d502ab4d94441708606.rtl.css @@ -0,0 +1 @@ +.container-12vIMEmh{min-width:0;overflow:auto;position:relative;width:100%}.title-1gYObTuJ{color:#131722;font-size:14px;margin-right:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.title-1gYObTuJ.disabled-1gYObTuJ,html.theme-dark .title-1gYObTuJ{color:#b2b5be}html.theme-dark .title-1gYObTuJ.disabled-1gYObTuJ{color:#50535e}.icon-1gYObTuJ{font-size:0;margin-right:4px}.icon-1gYObTuJ.locked-1gYObTuJ{color:#ef5350}.icon-1gYObTuJ.open-1gYObTuJ{color:#26a69a}.actionIcon-1gYObTuJ+.actionIcon-1gYObTuJ{margin-right:4px}.actionIcon-1gYObTuJ.selected-1gYObTuJ{--tv-list-item-button-background-hover-color:#90bff9}html.theme-dark .actionIcon-1gYObTuJ.selected-1gYObTuJ{--tv-list-item-button-background-hover-color:#143a87}@media screen and (max-height:445px),screen and (max-width:567px){.codeIcon-1gYObTuJ{display:none}}@keyframes highlight-animation-theme-light-3Ywm3-oo{0%{background-color:initial}30%{background-color:#e3effd}60%{background-color:initial}to{background-color:#bbd9fb}}@keyframes highlight-animation-theme-dark-3Ywm3-oo{0%{background-color:initial}30%{background-color:#132042}60%{background-color:initial}to{background-color:#142e61}}.container-3Ywm3-oo{align-items:center;box-sizing:border-box;cursor:default;display:flex;height:32px;padding-left:16px;padding-right:6px}.container-3Ywm3-oo.selected-3Ywm3-oo{background-color:#bbd9fb}html.theme-dark .container-3Ywm3-oo.selected-3Ywm3-oo{background-color:#142e61}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover{background-color:#f0f3fa}html.theme-dark .container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover{background-color:#2a2e39}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover .favorite-3Ywm3-oo{visibility:visible}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo{background-color:#bbd9fb}html.theme-dark .container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo{background-color:#142e61}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo .favorite-3Ywm3-oo:hover{background-color:#90bff9}html.theme-dark .container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover.selected-3Ywm3-oo .favorite-3Ywm3-oo:hover{background-color:#143a87}.container-3Ywm3-oo:not(.disabled-3Ywm3-oo):hover .actions-3Ywm3-oo{visibility:visible}}.container-3Ywm3-oo.highlighted-3Ywm3-oo{animation-duration:.8s;animation-fill-mode:forwards;animation-iteration-count:1}.container-3Ywm3-oo.highlighted-3Ywm3-oo.light-3Ywm3-oo{animation-name:highlight-animation-theme-light-3Ywm3-oo}.container-3Ywm3-oo.highlighted-3Ywm3-oo.dark-3Ywm3-oo{animation-name:highlight-animation-theme-dark-3Ywm3-oo}@media screen and (max-width:428px){.container-3Ywm3-oo{height:40px}}.pill-3Ywm3-oo{margin-right:4px}.main-3Ywm3-oo{align-items:center;display:flex;flex:1 1 auto;margin-left:auto;min-width:0}.main-3Ywm3-oo.paddingLeft-3Ywm3-oo{padding-right:22px}.favorite-3Ywm3-oo{visibility:hidden}@media (pointer:coarse){.favorite-3Ywm3-oo{visibility:visible}}.favorite-3Ywm3-oo.isActive-3Ywm3-oo{visibility:visible}.author-3Ywm3-oo{color:#2962ff;cursor:default;flex-basis:100px;margin-right:24px;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .author-3Ywm3-oo{color:#2962ff}.likes-3Ywm3-oo{color:#131722;flex-basis:50px;margin-right:24px;min-width:50px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .likes-3Ywm3-oo{color:#b2b5be}.actions-3Ywm3-oo{display:flex;flex-basis:44px;justify-content:flex-end;margin-right:24px;min-width:44px;visibility:hidden}@media (pointer:coarse){.actions-3Ywm3-oo{visibility:visible}}.title-hq9up-8e{color:#787b86;font-size:11px;font-weight:400;letter-spacing:.4px;line-height:16px;margin:0;text-transform:uppercase;white-space:nowrap}html.theme-dark .title-hq9up-8e{color:#787b86}.title-hq9up-8e:first-child{margin-left:auto}.title-hq9up-8e+.title-hq9up-8e{margin-right:24px}.title-hq9up-8e.small-hq9up-8e{width:50px}.title-hq9up-8e.normal-hq9up-8e{width:100px}.title-hq9up-8e.large-hq9up-8e{width:150px}.container-gb0TB1FN{box-sizing:border-box;cursor:default;display:flex;padding:16px 32px 8px 84px}.container-39xfFXyr{align-items:center;cursor:default;display:flex;flex-direction:column;justify-content:center;text-align:center}.image-39xfFXyr{margin-bottom:8px}.title-39xfFXyr{color:#000;font-size:20px;font-weight:700;margin:0 0 16px}html.theme-dark .title-39xfFXyr{color:#b2b5be}.description-39xfFXyr{color:#000;font-size:16px;line-height:24px;margin:0}html.theme-dark .description-39xfFXyr{color:#b2b5be}.button-39xfFXyr{cursor:default;margin-top:24px}.dialog-3kc5LZDR{height:600px;max-width:840px;width:calc(100% - 20px)}.dialogLibrary-3kc5LZDR{height:600px}.listContainer-3kc5LZDR::-webkit-scrollbar{height:5px;width:5px}.listContainer-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .listContainer-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.listContainer-3kc5LZDR::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.listContainer-3kc5LZDR::-webkit-scrollbar-corner{display:none}.scroll-3kc5LZDR::-webkit-scrollbar{height:5px;width:5px}.scroll-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scroll-3kc5LZDR::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scroll-3kc5LZDR::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scroll-3kc5LZDR::-webkit-scrollbar-corner{display:none}@media screen and (max-width:428px){.scroll-3kc5LZDR{box-sizing:border-box;padding-bottom:6px;padding-top:6px}}.sidebarContainer-3kc5LZDR{padding-bottom:6px;padding-top:6px}.noContentBlock-3kc5LZDR{box-sizing:border-box;min-height:100%;padding:24px 40px 60px} \ No newline at end of file diff --git a/static/charting_library/bundles/78.1d1d47a915b06f1496fb.js b/static/charting_library/bundles/78.1d1d47a915b06f1496fb.js new file mode 100644 index 0000000..f11df5e --- /dev/null +++ b/static/charting_library/bundles/78.1d1d47a915b06f1496fb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[78],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/79.86e92b77f8cf32e6bc37.js b/static/charting_library/bundles/79.86e92b77f8cf32e6bc37.js new file mode 100644 index 0000000..d88f9f0 --- /dev/null +++ b/static/charting_library/bundles/79.86e92b77f8cf32e6bc37.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[79],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/79.b990749a4839f9123f26.css b/static/charting_library/bundles/79.b990749a4839f9123f26.css new file mode 100644 index 0000000..c16bf55 --- /dev/null +++ b/static/charting_library/bundles/79.b990749a4839f9123f26.css @@ -0,0 +1 @@ +.group-3uonVBsm{align-items:center;background-color:var(--tv-color-pane-background,#fff);border-radius:0;cursor:default;display:flex;flex:0 0 auto;height:100%;justify-content:center;margin-left:1px;min-width:37px;overflow:hidden}html.theme-dark .group-3uonVBsm{background-color:var(--tv-color-pane-background,#131722)}.group-3uonVBsm:first-child{border-bottom-left-radius:0;margin-left:0}.group-3uonVBsm:last-child{border-bottom-right-radius:0;margin-right:0}.group-3uonVBsm.noLeftDecoration-3uonVBsm{border-bottom-left-radius:0;margin-left:0}.group-3uonVBsm.noRightDecoration-3uonVBsm{border-bottom-right-radius:0;margin-right:0}.group-3uonVBsm.noMinimalWidth-3uonVBsm{min-width:0}.wrap-1ETeWwz2{display:flex;flex:1 1 auto;height:38px;min-width:0}.wrap-35jKyg6w{align-items:center;color:#8797a5;cursor:default;display:flex}html.theme-dark .wrap-35jKyg6w{color:#8797a5}.wrap-35jKyg6w .icon-35jKyg6w{margin:0 1px 0 8px}.wrap-35jKyg6w svg{fill:currentColor}.inner-pzOKvpP8{display:flex;height:100%}.fake-pzOKvpP8{height:38px;left:0;position:fixed;top:0;visibility:hidden}.fill-pzOKvpP8{flex:1 1 100%;min-width:0}.fill-pzOKvpP8.minimalPriority-pzOKvpP8{flex:1 1 0%}.fill-pzOKvpP8.collapse-pzOKvpP8{flex:0 0 0%}.button-pzOKvpP8{padding:0 10px 0 5px}.iconButton-pzOKvpP8{padding:0 5px}.hidden-pzOKvpP8{display:none}.symbolSearch-pzOKvpP8{flex:1 1 100%;justify-content:flex-start;max-width:500px}.symbolSearchClose-pzOKvpP8{justify-content:center;min-width:38px}.content-pzOKvpP8{display:table;height:100%;position:relative;white-space:nowrap;width:100%}.desktopPublish-pzOKvpP8{display:flex}@media screen and (max-width:1019px){.desktopPublish-pzOKvpP8{display:none}}.mobilePublish-pzOKvpP8{display:none}@media screen and (max-width:1019px){.mobilePublish-pzOKvpP8{display:flex}}.toolbar-LZaMRgb9{font-size:14px;height:100%;padding:0;position:relative}.toolbar-LZaMRgb9.isHidden-LZaMRgb9,html.theme-dark .toolbar-LZaMRgb9.isHidden-LZaMRgb9{background-color:initial}.toolbar-LZaMRgb9.isHidden-LZaMRgb9 .overflowWrap-LZaMRgb9{display:none}.overflowWrap-LZaMRgb9{height:38px;overflow:hidden}.customButton-LZaMRgb9{color:#131722;padding:0 10px}html.theme-dark .customButton-LZaMRgb9{color:#b2b5be}.customButton-LZaMRgb9.hovered-LZaMRgb9,.customButton-LZaMRgb9:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.customButton-LZaMRgb9:hover{color:#131722}}html.theme-dark .customButton-LZaMRgb9.hovered-LZaMRgb9,html.theme-dark .customButton-LZaMRgb9:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .customButton-LZaMRgb9:hover{color:#c1c4cd}} \ No newline at end of file diff --git a/static/charting_library/bundles/79.b990749a4839f9123f26.rtl.css b/static/charting_library/bundles/79.b990749a4839f9123f26.rtl.css new file mode 100644 index 0000000..8741840 --- /dev/null +++ b/static/charting_library/bundles/79.b990749a4839f9123f26.rtl.css @@ -0,0 +1 @@ +.group-3uonVBsm{align-items:center;background-color:var(--tv-color-pane-background,#fff);border-radius:0;cursor:default;display:flex;flex:0 0 auto;height:100%;justify-content:center;margin-right:1px;min-width:37px;overflow:hidden}html.theme-dark .group-3uonVBsm{background-color:var(--tv-color-pane-background,#131722)}.group-3uonVBsm:first-child{border-bottom-right-radius:0;margin-right:0}.group-3uonVBsm:last-child{border-bottom-left-radius:0;margin-left:0}.group-3uonVBsm.noLeftDecoration-3uonVBsm{border-bottom-right-radius:0;margin-right:0}.group-3uonVBsm.noRightDecoration-3uonVBsm{border-bottom-left-radius:0;margin-left:0}.group-3uonVBsm.noMinimalWidth-3uonVBsm{min-width:0}.wrap-1ETeWwz2{display:flex;flex:1 1 auto;height:38px;min-width:0}.wrap-35jKyg6w{align-items:center;color:#8797a5;cursor:default;display:flex}html.theme-dark .wrap-35jKyg6w{color:#8797a5}.wrap-35jKyg6w .icon-35jKyg6w{margin:0 8px 0 1px}.wrap-35jKyg6w svg{fill:currentColor}.inner-pzOKvpP8{display:flex;height:100%}.fake-pzOKvpP8{height:38px;position:fixed;right:0;top:0;visibility:hidden}.fill-pzOKvpP8{flex:1 1 100%;min-width:0}.fill-pzOKvpP8.minimalPriority-pzOKvpP8{flex:1 1 0%}.fill-pzOKvpP8.collapse-pzOKvpP8{flex:0 0 0%}.button-pzOKvpP8{padding:0 5px 0 10px}.iconButton-pzOKvpP8{padding:0 5px}.hidden-pzOKvpP8{display:none}.symbolSearch-pzOKvpP8{flex:1 1 100%;justify-content:flex-start;max-width:500px}.symbolSearchClose-pzOKvpP8{justify-content:center;min-width:38px}.content-pzOKvpP8{display:table;height:100%;position:relative;white-space:nowrap;width:100%}.desktopPublish-pzOKvpP8{display:flex}@media screen and (max-width:1019px){.desktopPublish-pzOKvpP8{display:none}}.mobilePublish-pzOKvpP8{display:none}@media screen and (max-width:1019px){.mobilePublish-pzOKvpP8{display:flex}}.toolbar-LZaMRgb9{font-size:14px;height:100%;padding:0;position:relative}.toolbar-LZaMRgb9.isHidden-LZaMRgb9,html.theme-dark .toolbar-LZaMRgb9.isHidden-LZaMRgb9{background-color:initial}.toolbar-LZaMRgb9.isHidden-LZaMRgb9 .overflowWrap-LZaMRgb9{display:none}.overflowWrap-LZaMRgb9{height:38px;overflow:hidden}.customButton-LZaMRgb9{color:#131722;padding:0 10px}html.theme-dark .customButton-LZaMRgb9{color:#b2b5be}.customButton-LZaMRgb9.hovered-LZaMRgb9,.customButton-LZaMRgb9:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.customButton-LZaMRgb9:hover{color:#131722}}html.theme-dark .customButton-LZaMRgb9.hovered-LZaMRgb9,html.theme-dark .customButton-LZaMRgb9:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .customButton-LZaMRgb9:hover{color:#c1c4cd}} \ No newline at end of file diff --git a/static/charting_library/bundles/7e0cc5f7d7f5151500dd60b8d6ca60a1.png b/static/charting_library/bundles/7e0cc5f7d7f5151500dd60b8d6ca60a1.png new file mode 100644 index 0000000..e42efca Binary files /dev/null and b/static/charting_library/bundles/7e0cc5f7d7f5151500dd60b8d6ca60a1.png differ diff --git a/static/charting_library/bundles/8.e66ab8f27911a033604f.css b/static/charting_library/bundles/8.e66ab8f27911a033604f.css new file mode 100644 index 0000000..7d3cbf9 --- /dev/null +++ b/static/charting_library/bundles/8.e66ab8f27911a033604f.css @@ -0,0 +1 @@ +.separator-3No0pWrk{background-color:#e0e3eb;height:1px;margin:8px 0}html.theme-dark .separator-3No0pWrk{background-color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/8.e66ab8f27911a033604f.rtl.css b/static/charting_library/bundles/8.e66ab8f27911a033604f.rtl.css new file mode 100644 index 0000000..7d3cbf9 --- /dev/null +++ b/static/charting_library/bundles/8.e66ab8f27911a033604f.rtl.css @@ -0,0 +1 @@ +.separator-3No0pWrk{background-color:#e0e3eb;height:1px;margin:8px 0}html.theme-dark .separator-3No0pWrk{background-color:#434651} \ No newline at end of file diff --git a/static/charting_library/bundles/8.ffab20b86db484062268.js b/static/charting_library/bundles/8.ffab20b86db484062268.js new file mode 100644 index 0000000..1db6c69 --- /dev/null +++ b/static/charting_library/bundles/8.ffab20b86db484062268.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/80.5bdd53d5fc42d40eee28.css b/static/charting_library/bundles/80.5bdd53d5fc42d40eee28.css new file mode 100644 index 0000000..913fc69 --- /dev/null +++ b/static/charting_library/bundles/80.5bdd53d5fc42d40eee28.css @@ -0,0 +1 @@ +.sortButton-Srpxcu6T{align-items:center;border-radius:2px;color:#131722;display:flex;height:34px;justify-content:center;margin-left:auto;width:34px}html.theme-dark .sortButton-Srpxcu6T{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.sortButton-Srpxcu6T:hover{background-color:#f0f3fa}html.theme-dark .sortButton-Srpxcu6T:hover{background-color:#363a45}}.sortButton-Srpxcu6T .icon-Srpxcu6T{height:28px}.container-xPtOXn4t{padding:2px 0}.labelWrap-xPtOXn4t{align-items:center;display:flex;justify-content:center}.labelWrap-xPtOXn4t .icon-xPtOXn4t{height:28px;padding-right:6px;width:28px}.labelWrap-xPtOXn4t .text-xPtOXn4t{padding-right:11px}.container-30_lleAw{align-items:flex-end;box-sizing:border-box;cursor:default;display:flex;flex-shrink:0;padding:9px 17px 3px 32px}.title-30_lleAw{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;margin-bottom:5px;text-transform:uppercase}.container-1NQ91aze{cursor:default;height:100%;overflow:hidden;position:relative;z-index:0}@media (pointer:fine){.list-1NQ91aze{-ms-overflow-style:none;scrollbar-width:none}.list-1NQ91aze.sb-scrollbar-wrap{display:none}.list-1NQ91aze::-webkit-scrollbar{display:none;height:0;width:0}.list-1NQ91aze::-webkit-scrollbar-thumb,.list-1NQ91aze::-webkit-scrollbar-track{display:none}.list-1NQ91aze::-webkit-scrollbar-corner{display:none}}.overlayScrollWrap-1NQ91aze{bottom:0;left:0;right:0;top:0;z-index:1}.scroll-1NQ91aze::-webkit-scrollbar{height:5px;width:5px}.scroll-1NQ91aze::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scroll-1NQ91aze::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scroll-1NQ91aze::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scroll-1NQ91aze::-webkit-scrollbar-corner{display:none}@media tablet-small-breakpoint{.scroll-1NQ91aze{box-sizing:border-box;padding-bottom:6px;padding-top:6px}}.highlight-1aROqc2m{color:#1848cc}.active-1aROqc2m,html.theme-dark .active-1aROqc2m{color:#90bff9}.dialog-1xjtlTJV{height:540px;width:420px}@media screen and (min-width:480px){.dialog-1xjtlTJV{width:480px}}.contentList-1xjtlTJV{min-height:0}@media screen and (min-width:480px){.contentList-1xjtlTJV{max-height:526px}}@media screen and (max-width:428px){.contentList-1xjtlTJV{max-height:none}} \ No newline at end of file diff --git a/static/charting_library/bundles/80.5bdd53d5fc42d40eee28.rtl.css b/static/charting_library/bundles/80.5bdd53d5fc42d40eee28.rtl.css new file mode 100644 index 0000000..022df17 --- /dev/null +++ b/static/charting_library/bundles/80.5bdd53d5fc42d40eee28.rtl.css @@ -0,0 +1 @@ +.sortButton-Srpxcu6T{align-items:center;border-radius:2px;color:#131722;display:flex;height:34px;justify-content:center;margin-right:auto;width:34px}html.theme-dark .sortButton-Srpxcu6T{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.sortButton-Srpxcu6T:hover{background-color:#f0f3fa}html.theme-dark .sortButton-Srpxcu6T:hover{background-color:#363a45}}.sortButton-Srpxcu6T .icon-Srpxcu6T{height:28px}.container-xPtOXn4t{padding:2px 0}.labelWrap-xPtOXn4t{align-items:center;display:flex;justify-content:center}.labelWrap-xPtOXn4t .icon-xPtOXn4t{height:28px;padding-left:6px;width:28px}.labelWrap-xPtOXn4t .text-xPtOXn4t{padding-left:11px}.container-30_lleAw{align-items:flex-end;box-sizing:border-box;cursor:default;display:flex;flex-shrink:0;padding:9px 32px 3px 17px}.title-30_lleAw{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;margin-bottom:5px;text-transform:uppercase}.container-1NQ91aze{cursor:default;height:100%;overflow:hidden;position:relative;z-index:0}@media (pointer:fine){.list-1NQ91aze{-ms-overflow-style:none;scrollbar-width:none}.list-1NQ91aze.sb-scrollbar-wrap{display:none}.list-1NQ91aze::-webkit-scrollbar{display:none;height:0;width:0}.list-1NQ91aze::-webkit-scrollbar-thumb,.list-1NQ91aze::-webkit-scrollbar-track{display:none}.list-1NQ91aze::-webkit-scrollbar-corner{display:none}}.overlayScrollWrap-1NQ91aze{bottom:0;left:0;right:0;top:0;z-index:1}.scroll-1NQ91aze::-webkit-scrollbar{height:5px;width:5px}.scroll-1NQ91aze::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scroll-1NQ91aze::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scroll-1NQ91aze::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scroll-1NQ91aze::-webkit-scrollbar-corner{display:none}@media tablet-small-breakpoint{.scroll-1NQ91aze{box-sizing:border-box;padding-bottom:6px;padding-top:6px}}.highlight-1aROqc2m{color:#1848cc}.active-1aROqc2m,html.theme-dark .active-1aROqc2m{color:#90bff9}.dialog-1xjtlTJV{height:540px;width:420px}@media screen and (min-width:480px){.dialog-1xjtlTJV{width:480px}}.contentList-1xjtlTJV{min-height:0}@media screen and (min-width:480px){.contentList-1xjtlTJV{max-height:526px}}@media screen and (max-width:428px){.contentList-1xjtlTJV{max-height:none}} \ No newline at end of file diff --git a/static/charting_library/bundles/80.b5bc6acec3b531a510a9.js b/static/charting_library/bundles/80.b5bc6acec3b531a510a9.js new file mode 100644 index 0000000..6f29cc5 --- /dev/null +++ b/static/charting_library/bundles/80.b5bc6acec3b531a510a9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[80],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/81.552e046aa828739c508b.css b/static/charting_library/bundles/81.552e046aa828739c508b.css new file mode 100644 index 0000000..436d90b --- /dev/null +++ b/static/charting_library/bundles/81.552e046aa828739c508b.css @@ -0,0 +1 @@ +.header-2ibjJG9Z{border-bottom:1px solid #e0e3eb;color:#212121;font-size:14px;font-weight:700;padding:30px 60px 30px 30px;position:relative}html.theme-dark .header-2ibjJG9Z{border-bottom-color:#363a45;color:#c5cbce}@media screen and (max-width:767px){.header-2ibjJG9Z{padding:20px 60px 20px 20px}}.header-2ibjJG9Z .close-2ibjJG9Z{color:#434651;cursor:pointer;opacity:.5;padding:15px;position:absolute;right:15px;top:17px;transition:opacity .35s ease;-webkit-user-select:none;user-select:none}html.theme-dark .header-2ibjJG9Z .close-2ibjJG9Z{color:#d1d4dc}@media screen and (max-width:767px){.header-2ibjJG9Z .close-2ibjJG9Z{right:7px;top:7px}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.header-2ibjJG9Z .close-2ibjJG9Z:hover{opacity:1;transition-duration:.06s}}.header-2ibjJG9Z .close-2ibjJG9Z svg{display:block;height:13px;width:13px}.footer-16Va6-EJ{padding:0 30px 30px}@media screen and (max-width:767px){.footer-16Va6-EJ{padding:0 20px 20px}}.body-2IgbkgW8{-webkit-overflow-scrolling:touch;flex-grow:1;overflow:auto;padding:30px}.body-2IgbkgW8::-webkit-scrollbar{height:5px;width:5px}.body-2IgbkgW8::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .body-2IgbkgW8::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.body-2IgbkgW8::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.body-2IgbkgW8::-webkit-scrollbar-corner{display:none}@media screen and (max-width:767px){.body-2IgbkgW8{padding:20px}}.message-2dEP78zc{background:#ebf9f5;color:#37bc9b;font-size:14px;left:0;padding:30px;position:absolute;right:0;text-align:center;top:0;transition:opacity .2625s ease,transform .2625s ease}html.theme-dark .message-2dEP78zc{background:#21384d}.message-2dEP78zc.error-2dEP78zc{background:#ffedf0;color:#ef5350}html.theme-dark .message-2dEP78zc.error-2dEP78zc{background:#6f2626}.popupDialog-2uQzjNpP{max-width:450px}.content-2uQzjNpP .row-2uQzjNpP{display:flex;padding-bottom:12px}.content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP{font-size:13px}.content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .title-2uQzjNpP{color:#868993}html.theme-dark .content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .title-2uQzjNpP{color:#787b86}.content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .value-2uQzjNpP{color:#434651;font-weight:700}html.theme-dark .content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .value-2uQzjNpP{color:#d1d4dc}.content-2uQzjNpP .row-2uQzjNpP .columnTitle-2uQzjNpP{text-align:left}.content-2uQzjNpP .row-2uQzjNpP .columnValue-2uQzjNpP{margin-left:auto;text-align:right} \ No newline at end of file diff --git a/static/charting_library/bundles/81.552e046aa828739c508b.rtl.css b/static/charting_library/bundles/81.552e046aa828739c508b.rtl.css new file mode 100644 index 0000000..6374a2f --- /dev/null +++ b/static/charting_library/bundles/81.552e046aa828739c508b.rtl.css @@ -0,0 +1 @@ +.header-2ibjJG9Z{border-bottom:1px solid #e0e3eb;color:#212121;font-size:14px;font-weight:700;padding:30px 30px 30px 60px;position:relative}html.theme-dark .header-2ibjJG9Z{border-bottom-color:#363a45;color:#c5cbce}@media screen and (max-width:767px){.header-2ibjJG9Z{padding:20px 20px 20px 60px}}.header-2ibjJG9Z .close-2ibjJG9Z{color:#434651;cursor:pointer;left:15px;opacity:.5;padding:15px;position:absolute;top:17px;transition:opacity .35s ease;-webkit-user-select:none;user-select:none}html.theme-dark .header-2ibjJG9Z .close-2ibjJG9Z{color:#d1d4dc}@media screen and (max-width:767px){.header-2ibjJG9Z .close-2ibjJG9Z{left:7px;top:7px}}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.header-2ibjJG9Z .close-2ibjJG9Z:hover{opacity:1;transition-duration:.06s}}.header-2ibjJG9Z .close-2ibjJG9Z svg{display:block;height:13px;width:13px}.footer-16Va6-EJ{padding:0 30px 30px}@media screen and (max-width:767px){.footer-16Va6-EJ{padding:0 20px 20px}}.body-2IgbkgW8{-webkit-overflow-scrolling:touch;flex-grow:1;overflow:auto;padding:30px}.body-2IgbkgW8::-webkit-scrollbar{height:5px;width:5px}.body-2IgbkgW8::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .body-2IgbkgW8::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.body-2IgbkgW8::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.body-2IgbkgW8::-webkit-scrollbar-corner{display:none}@media screen and (max-width:767px){.body-2IgbkgW8{padding:20px}}.message-2dEP78zc{background:#ebf9f5;color:#37bc9b;font-size:14px;left:0;padding:30px;position:absolute;right:0;text-align:center;top:0;transition:opacity .2625s ease,transform .2625s ease}html.theme-dark .message-2dEP78zc{background:#21384d}.message-2dEP78zc.error-2dEP78zc{background:#ffedf0;color:#ef5350}html.theme-dark .message-2dEP78zc.error-2dEP78zc{background:#6f2626}.popupDialog-2uQzjNpP{max-width:450px}.content-2uQzjNpP .row-2uQzjNpP{display:flex;padding-bottom:12px}.content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP{font-size:13px}.content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .title-2uQzjNpP{color:#868993}html.theme-dark .content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .title-2uQzjNpP{color:#787b86}.content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .value-2uQzjNpP{color:#434651;font-weight:700}html.theme-dark .content-2uQzjNpP .row-2uQzjNpP .column-2uQzjNpP .value-2uQzjNpP{color:#d1d4dc}.content-2uQzjNpP .row-2uQzjNpP .columnTitle-2uQzjNpP{text-align:right}.content-2uQzjNpP .row-2uQzjNpP .columnValue-2uQzjNpP{margin-right:auto;text-align:left} \ No newline at end of file diff --git a/static/charting_library/bundles/81.e6a1f76017a44b03480b.js b/static/charting_library/bundles/81.e6a1f76017a44b03480b.js new file mode 100644 index 0000000..6a28b41 --- /dev/null +++ b/static/charting_library/bundles/81.e6a1f76017a44b03480b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[81],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/82.8c2919e6c8f54e36e9e6.js b/static/charting_library/bundles/82.8c2919e6c8f54e36e9e6.js new file mode 100644 index 0000000..966b3eb --- /dev/null +++ b/static/charting_library/bundles/82.8c2919e6c8f54e36e9e6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[82],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/82.e06fe84c8cdead4bd52e.css b/static/charting_library/bundles/82.e06fe84c8cdead4bd52e.css new file mode 100644 index 0000000..9334082 --- /dev/null +++ b/static/charting_library/bundles/82.e06fe84c8cdead4bd52e.css @@ -0,0 +1 @@ +.button-3vkvsUbb{background-color:#fff;border:none;border-radius:4px;color:#787b86;font-size:12px;height:22px;padding-left:8px;padding-right:8px;white-space:nowrap}html.theme-dark .button-3vkvsUbb{background-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-3vkvsUbb:hover{background-color:#e0e3eb;color:#131722}html.theme-dark .button-3vkvsUbb:hover{background-color:#5d606b;color:#b2b5be}}.button-3vkvsUbb.bordersVisible-3vkvsUbb{border:1px solid #e0e3eb;padding:0 7px}html.theme-dark .button-3vkvsUbb.bordersVisible-3vkvsUbb{border:1px solid #363a45}.button-3vkvsUbb.selected-3vkvsUbb{background-color:#90bff9;color:#131722}html.theme-dark .button-3vkvsUbb.selected-3vkvsUbb{background-color:#143a87;color:#b2b5be}.button-3vkvsUbb+.button-3vkvsUbb{margin-left:8px}.wrap-38TyPnxL{align-items:center;border-bottom:1px solid #f0f3fa;display:flex;height:52px;padding-right:20px}html.theme-dark .wrap-38TyPnxL{border-bottom-color:#2a2e39}.header-38TyPnxL{color:#787b86;font-size:11px;line-height:16px;margin-top:2px;padding:8px 20px;text-transform:uppercase}.item-38TyPnxL{box-sizing:border-box;color:#131722;font-size:16px;height:40px;line-height:24px;padding:10px 16px}html.theme-dark .item-38TyPnxL{color:#b2b5be}.item-38TyPnxL:active{background-color:#2962ff;color:#fff}html.theme-dark .item-38TyPnxL:active{background-color:#2962ff;color:#d1d4dc}.scrollable-1zurvWNw{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;height:100%;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-1zurvWNw{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-1zurvWNw{min-height:auto}}.scrollable-1zurvWNw::-webkit-scrollbar{height:5px;width:5px}.scrollable-1zurvWNw::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-1zurvWNw::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-1zurvWNw::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-1zurvWNw::-webkit-scrollbar-corner{display:none}.spinnerWrap-1zurvWNw{height:100%;width:100%}.item-1zurvWNw:first-child{margin-top:6px}.item-1zurvWNw:last-child{margin-bottom:6px}.heading-1zurvWNw{color:#787b86;font-size:11px;line-height:16px;padding:16px 20px 8px;text-transform:uppercase}.checkboxWrap-1zurvWNw{padding-right:8px}.checkbox-1zurvWNw{align-items:baseline;display:flex;height:28px;justify-content:center;padding:0;width:28px}.emptyState-1zurvWNw{align-items:center;display:flex;flex-flow:column;height:100%;justify-content:center}.emptyState-1zurvWNw .image-1zurvWNw{align-items:center;display:flex;height:120px}.emptyState-1zurvWNw .text-1zurvWNw{color:#131722;font-size:16px;line-height:24px;margin-top:8px}html.theme-dark .emptyState-1zurvWNw .text-1zurvWNw{color:#b2b5be}.dialog-1o8lbzhQ{height:565px;max-width:640px;overflow:hidden;width:640px}.tablet-1o8lbzhQ{width:calc(100% - 20px)}.label-AT0tDw0n{margin-left:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/82.e06fe84c8cdead4bd52e.rtl.css b/static/charting_library/bundles/82.e06fe84c8cdead4bd52e.rtl.css new file mode 100644 index 0000000..ea33716 --- /dev/null +++ b/static/charting_library/bundles/82.e06fe84c8cdead4bd52e.rtl.css @@ -0,0 +1 @@ +.button-3vkvsUbb{background-color:#fff;border:none;border-radius:4px;color:#787b86;font-size:12px;height:22px;padding-left:8px;padding-right:8px;white-space:nowrap}html.theme-dark .button-3vkvsUbb{background-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.button-3vkvsUbb:hover{background-color:#e0e3eb;color:#131722}html.theme-dark .button-3vkvsUbb:hover{background-color:#5d606b;color:#b2b5be}}.button-3vkvsUbb.bordersVisible-3vkvsUbb{border:1px solid #e0e3eb;padding:0 7px}html.theme-dark .button-3vkvsUbb.bordersVisible-3vkvsUbb{border:1px solid #363a45}.button-3vkvsUbb.selected-3vkvsUbb{background-color:#90bff9;color:#131722}html.theme-dark .button-3vkvsUbb.selected-3vkvsUbb{background-color:#143a87;color:#b2b5be}.button-3vkvsUbb+.button-3vkvsUbb{margin-right:8px}.wrap-38TyPnxL{align-items:center;border-bottom:1px solid #f0f3fa;display:flex;height:52px;padding-left:20px}html.theme-dark .wrap-38TyPnxL{border-bottom-color:#2a2e39}.header-38TyPnxL{color:#787b86;font-size:11px;line-height:16px;margin-top:2px;padding:8px 20px;text-transform:uppercase}.item-38TyPnxL{box-sizing:border-box;color:#131722;font-size:16px;height:40px;line-height:24px;padding:10px 16px}html.theme-dark .item-38TyPnxL{color:#b2b5be}.item-38TyPnxL:active{background-color:#2962ff;color:#fff}html.theme-dark .item-38TyPnxL:active{background-color:#2962ff;color:#d1d4dc}.scrollable-1zurvWNw{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;height:100%;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-1zurvWNw{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-1zurvWNw{min-height:auto}}.scrollable-1zurvWNw::-webkit-scrollbar{height:5px;width:5px}.scrollable-1zurvWNw::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-1zurvWNw::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-1zurvWNw::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-1zurvWNw::-webkit-scrollbar-corner{display:none}.spinnerWrap-1zurvWNw{height:100%;width:100%}.item-1zurvWNw:first-child{margin-top:6px}.item-1zurvWNw:last-child{margin-bottom:6px}.heading-1zurvWNw{color:#787b86;font-size:11px;line-height:16px;padding:16px 20px 8px;text-transform:uppercase}.checkboxWrap-1zurvWNw{padding-left:8px}.checkbox-1zurvWNw{align-items:baseline;display:flex;height:28px;justify-content:center;padding:0;width:28px}.emptyState-1zurvWNw{align-items:center;display:flex;flex-flow:column;height:100%;justify-content:center}.emptyState-1zurvWNw .image-1zurvWNw{align-items:center;display:flex;height:120px}.emptyState-1zurvWNw .text-1zurvWNw{color:#131722;font-size:16px;line-height:24px;margin-top:8px}html.theme-dark .emptyState-1zurvWNw .text-1zurvWNw{color:#b2b5be}.dialog-1o8lbzhQ{height:565px;max-width:640px;overflow:hidden;width:640px}.tablet-1o8lbzhQ{width:calc(100% - 20px)}.label-AT0tDw0n{margin-right:8px} \ No newline at end of file diff --git a/static/charting_library/bundles/83.e238aa056c5d4827cbdd.css b/static/charting_library/bundles/83.e238aa056c5d4827cbdd.css new file mode 100644 index 0000000..2dd914a --- /dev/null +++ b/static/charting_library/bundles/83.e238aa056c5d4827cbdd.css @@ -0,0 +1 @@ +.action-DhEzLCdX{box-sizing:border-box;color:#131722;display:flex;flex-flow:column;justify-content:center;min-height:55px;padding:4px 4px 8px 20px}html.theme-dark .action-DhEzLCdX{color:#b2b5be}.action-DhEzLCdX.hovered-DhEzLCdX,.action-DhEzLCdX:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.action-DhEzLCdX:hover{color:#131722}}html.theme-dark .action-DhEzLCdX.hovered-DhEzLCdX,html.theme-dark .action-DhEzLCdX:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .action-DhEzLCdX:hover{color:#c1c4cd}}.action-DhEzLCdX.hovered-DhEzLCdX,.action-DhEzLCdX:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.action-DhEzLCdX:hover{background-color:#f0f3fa}}html.theme-dark .action-DhEzLCdX.hovered-DhEzLCdX,html.theme-dark .action-DhEzLCdX:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .action-DhEzLCdX:hover{background-color:#2a2e39}}.action-DhEzLCdX.active-DhEzLCdX,html.theme-dark .action-DhEzLCdX.active-DhEzLCdX{background-color:#2962ff}.action-DhEzLCdX.active-DhEzLCdX .description-DhEzLCdX,.action-DhEzLCdX.active-DhEzLCdX .label-DhEzLCdX{color:#fff}html.theme-dark .action-DhEzLCdX.active-DhEzLCdX .description-DhEzLCdX,html.theme-dark .action-DhEzLCdX.active-DhEzLCdX .label-DhEzLCdX{color:#d1d4dc}.action-DhEzLCdX.small-DhEzLCdX{min-height:32px}.action-DhEzLCdX.small-DhEzLCdX.smallPadding-DhEzLCdX{padding-bottom:5px;padding-top:5px}.label-DhEzLCdX{color:#131722;font-size:16px;font-weight:400;line-height:24px}html.theme-dark .label-DhEzLCdX{color:#b2b5be}.label-DhEzLCdX.small-DhEzLCdX{font-size:14px;line-height:22px}.label-DhEzLCdX.centerAlign-DhEzLCdX{margin-top:4px}.description-DhEzLCdX{color:#787b86;font-size:12px;line-height:18px;margin-top:2px}.highlighted-DhEzLCdX,html.theme-dark .highlighted-DhEzLCdX{color:#90bff9}.menu-__tSsAAY{width:180px}.header-__tSsAAY{background-color:#fff;left:0;position:absolute;top:6px;width:100%}html.theme-dark .header-__tSsAAY{background-color:#1e222d}.title-__tSsAAY{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;overflow:hidden;padding:4px 12px;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.container-__tSsAAY{align-items:center;border-bottom:1px solid #e0e3eb;display:flex;padding-bottom:8px;padding-left:12px;padding-top:8px;position:relative}html.theme-dark .container-__tSsAAY{border-bottom:1px solid #434651}.icon-__tSsAAY{color:#a3a6af;flex-shrink:0;height:18px;width:18px}.clear-__tSsAAY,.icon-__tSsAAY{align-items:center;display:flex;justify-content:center}.clear-__tSsAAY{border-radius:4px;height:22px;position:absolute;right:10px;top:50%;transform:translateY(-50%);width:22px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.clear-__tSsAAY:hover{background-color:#f0f3fa}html.theme-dark .clear-__tSsAAY:hover{background-color:#2a2e39}}.input-__tSsAAY{background-color:initial;border:none;color:#131722;flex:1;font-size:14px;height:22px;margin:0 0 0 8px;padding:0}html.theme-dark .input-__tSsAAY{color:#a3a6af}.input-__tSsAAY::placeholder{color:#a3a6af;font-weight:400}html.theme-dark .input-__tSsAAY::placeholder{color:#434651}.highlighted-__tSsAAY{color:#90bff9}html.theme-dark .highlighted-__tSsAAY{color:#143a87}.highlighted-__tSsAAY.active-__tSsAAY,html.theme-dark .highlighted-__tSsAAY.active-__tSsAAY{color:#90bff9}.section-__tSsAAY{padding-bottom:1px;padding-top:1px}.scrollWrap-2-It3_hB{margin-top:69px}.container-9xiUj6X_{-ms-overflow-style:none;overflow-y:auto;padding-top:6px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .container-9xiUj6X_{scrollbar-color:#363a45 #0000}.container-9xiUj6X_::-webkit-scrollbar{height:5px;width:5px}.container-9xiUj6X_::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .container-9xiUj6X_::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.container-9xiUj6X_::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.container-9xiUj6X_::-webkit-scrollbar-corner{display:none}.separator-9xiUj6X_{background-color:#e0e3eb;height:1px;margin-bottom:6px;margin-top:6px}html.theme-dark .separator-9xiUj6X_{background-color:#434651}.section-9xiUj6X_{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;padding:10px 4px 8px 20px;text-transform:uppercase} \ No newline at end of file diff --git a/static/charting_library/bundles/83.e238aa056c5d4827cbdd.rtl.css b/static/charting_library/bundles/83.e238aa056c5d4827cbdd.rtl.css new file mode 100644 index 0000000..be8afc9 --- /dev/null +++ b/static/charting_library/bundles/83.e238aa056c5d4827cbdd.rtl.css @@ -0,0 +1 @@ +.action-DhEzLCdX{box-sizing:border-box;color:#131722;display:flex;flex-flow:column;justify-content:center;min-height:55px;padding:4px 20px 8px 4px}html.theme-dark .action-DhEzLCdX{color:#b2b5be}.action-DhEzLCdX.hovered-DhEzLCdX,.action-DhEzLCdX:active{color:#131722}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.action-DhEzLCdX:hover{color:#131722}}html.theme-dark .action-DhEzLCdX.hovered-DhEzLCdX,html.theme-dark .action-DhEzLCdX:active{color:#c1c4cd}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .action-DhEzLCdX:hover{color:#c1c4cd}}.action-DhEzLCdX.hovered-DhEzLCdX,.action-DhEzLCdX:active{background-color:#f0f3fa}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.action-DhEzLCdX:hover{background-color:#f0f3fa}}html.theme-dark .action-DhEzLCdX.hovered-DhEzLCdX,html.theme-dark .action-DhEzLCdX:active{background-color:#2a2e39}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .action-DhEzLCdX:hover{background-color:#2a2e39}}.action-DhEzLCdX.active-DhEzLCdX,html.theme-dark .action-DhEzLCdX.active-DhEzLCdX{background-color:#2962ff}.action-DhEzLCdX.active-DhEzLCdX .description-DhEzLCdX,.action-DhEzLCdX.active-DhEzLCdX .label-DhEzLCdX{color:#fff}html.theme-dark .action-DhEzLCdX.active-DhEzLCdX .description-DhEzLCdX,html.theme-dark .action-DhEzLCdX.active-DhEzLCdX .label-DhEzLCdX{color:#d1d4dc}.action-DhEzLCdX.small-DhEzLCdX{min-height:32px}.action-DhEzLCdX.small-DhEzLCdX.smallPadding-DhEzLCdX{padding-bottom:5px;padding-top:5px}.label-DhEzLCdX{color:#131722;font-size:16px;font-weight:400;line-height:24px}html.theme-dark .label-DhEzLCdX{color:#b2b5be}.label-DhEzLCdX.small-DhEzLCdX{font-size:14px;line-height:22px}.label-DhEzLCdX.centerAlign-DhEzLCdX{margin-top:4px}.description-DhEzLCdX{color:#787b86;font-size:12px;line-height:18px;margin-top:2px}.highlighted-DhEzLCdX,html.theme-dark .highlighted-DhEzLCdX{color:#90bff9}.menu-__tSsAAY{width:180px}.header-__tSsAAY{background-color:#fff;position:absolute;right:0;top:6px;width:100%}html.theme-dark .header-__tSsAAY{background-color:#1e222d}.title-__tSsAAY{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;overflow:hidden;padding:4px 12px;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.container-__tSsAAY{align-items:center;border-bottom:1px solid #e0e3eb;display:flex;padding-bottom:8px;padding-right:12px;padding-top:8px;position:relative}html.theme-dark .container-__tSsAAY{border-bottom:1px solid #434651}.icon-__tSsAAY{color:#a3a6af;flex-shrink:0;height:18px;width:18px}.clear-__tSsAAY,.icon-__tSsAAY{align-items:center;display:flex;justify-content:center}.clear-__tSsAAY{border-radius:4px;height:22px;left:10px;position:absolute;top:50%;transform:translateY(-50%);width:22px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.clear-__tSsAAY:hover{background-color:#f0f3fa}html.theme-dark .clear-__tSsAAY:hover{background-color:#2a2e39}}.input-__tSsAAY{background-color:initial;border:none;color:#131722;flex:1;font-size:14px;height:22px;margin:0 8px 0 0;padding:0}html.theme-dark .input-__tSsAAY{color:#a3a6af}.input-__tSsAAY::placeholder{color:#a3a6af;font-weight:400}html.theme-dark .input-__tSsAAY::placeholder{color:#434651}.highlighted-__tSsAAY{color:#90bff9}html.theme-dark .highlighted-__tSsAAY{color:#143a87}.highlighted-__tSsAAY.active-__tSsAAY,html.theme-dark .highlighted-__tSsAAY.active-__tSsAAY{color:#90bff9}.section-__tSsAAY{padding-bottom:1px;padding-top:1px}.scrollWrap-2-It3_hB{margin-top:69px}.container-9xiUj6X_{-ms-overflow-style:none;overflow-y:auto;padding-top:6px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .container-9xiUj6X_{scrollbar-color:#363a45 #0000}.container-9xiUj6X_::-webkit-scrollbar{height:5px;width:5px}.container-9xiUj6X_::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .container-9xiUj6X_::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.container-9xiUj6X_::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.container-9xiUj6X_::-webkit-scrollbar-corner{display:none}.separator-9xiUj6X_{background-color:#e0e3eb;height:1px;margin-bottom:6px;margin-top:6px}html.theme-dark .separator-9xiUj6X_{background-color:#434651}.section-9xiUj6X_{color:#787b86;font-size:11px;letter-spacing:.4px;line-height:16px;padding:10px 20px 8px 4px;text-transform:uppercase} \ No newline at end of file diff --git a/static/charting_library/bundles/83.f3e53bb5a5940e084955.js b/static/charting_library/bundles/83.f3e53bb5a5940e084955.js new file mode 100644 index 0000000..ede8a3e --- /dev/null +++ b/static/charting_library/bundles/83.f3e53bb5a5940e084955.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[83],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/84.8acc496b4deeeeefb5af.js b/static/charting_library/bundles/84.8acc496b4deeeeefb5af.js new file mode 100644 index 0000000..8252d73 --- /dev/null +++ b/static/charting_library/bundles/84.8acc496b4deeeeefb5af.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[84],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/84.bb4fc57627c8626019fd.css b/static/charting_library/bundles/84.bb4fc57627c8626019fd.css new file mode 100644 index 0000000..b7c02c8 --- /dev/null +++ b/static/charting_library/bundles/84.bb4fc57627c8626019fd.css @@ -0,0 +1 @@ +.close-button-1WFSq2PU{background:#0000;border:none;border-radius:4px;box-sizing:initial;color:#131722;margin:0;padding:8px}html.theme-dark .close-button-1WFSq2PU{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.close-button-1WFSq2PU:hover{background:#f0f3fa}html.theme-dark .close-button-1WFSq2PU:hover{background:#2a2e39}}.close-button-1WFSq2PU:active{background:#e0e3eb}html.theme-dark .close-button-1WFSq2PU:active{background:#1e222d}.close-button-1WFSq2PU{outline:none;overflow:visible;position:absolute}.close-button-1WFSq2PU:focus{outline:none}.close-button-1WFSq2PU:focus-visible{outline:none}.close-button-1WFSq2PU:after{border-style:solid;border-width:2px;box-sizing:border-box;content:"";display:none;height:calc(100% + 8px);left:-4px;pointer-events:none;position:absolute;top:-4px;width:calc(100% + 8px);z-index:1}.close-button-1WFSq2PU:focus:after{display:block}.close-button-1WFSq2PU:focus-visible:after{display:block}.close-button-1WFSq2PU:focus:not(:focus-visible):after{display:none}.close-button-1WFSq2PU:after{border-color:#2962ffcc;border-radius:8px}.close-icon-3unB1Yrw,.close-icon-3unB1Yrw svg{display:block;height:100%}.button-l-uIo2rThA{height:23px;padding:8px;width:23px}.button-m-3MMteafV{height:17px;padding:8px;width:17px}.button-s-Nv9EL6Kl{height:13px;padding:8px;width:13px}.button-xs-3f-PiL7F{height:11px;padding:4px;width:11px}.button-xxs-1ElYVuPk{height:9px;padding:4px;width:9px}.container-9ckn123c{align-items:flex-start;background:#fff;border:1px solid;border-radius:4px;color:#131722;display:flex;font-size:13px;font-style:normal;font-weight:400;line-height:19px;padding:11px 12px}html.theme-dark .container-9ckn123c{background:#1e222d;color:#d1d4dc}.container-9ckn123c.container-danger-3U4WdGto{border-color:#f44336}.container-9ckn123c.container-danger-3U4WdGto .header-287NeSeQ,.container-9ckn123c.container-danger-3U4WdGto .icon-2ZK1Y3zH{color:#f44336}.container-9ckn123c.container-warning-1jkRTadj{border-color:#ff9800}.container-9ckn123c.container-warning-1jkRTadj .header-287NeSeQ,.container-9ckn123c.container-warning-1jkRTadj .icon-2ZK1Y3zH{color:#ff9800}.container-9ckn123c.container-success-2srhYBbo{border-color:#009688}.container-9ckn123c.container-success-2srhYBbo .header-287NeSeQ,.container-9ckn123c.container-success-2srhYBbo .icon-2ZK1Y3zH{color:#009688}.container-9ckn123c.container-default-2MDEpAUG{background-color:#f0f3fa;border-color:#f0f3fa}html.theme-dark .container-9ckn123c.container-default-2MDEpAUG{background-color:#2a2e39;border-color:#2a2e39}.container-9ckn123c.container-default-2MDEpAUG .header-287NeSeQ,.container-9ckn123c.container-default-2MDEpAUG .icon-2ZK1Y3zH{color:#787b86}.container-9ckn123c .icon-2ZK1Y3zH{display:flex;margin-right:8px}.container-9ckn123c .text-wrap-26IUyzzc{align-self:center;margin-right:4px}.container-9ckn123c .header-287NeSeQ{font-weight:700}.close-button-2LkcSirN{flex-shrink:0;position:static}.container-2PMGBrHh{bottom:30px;display:flex;justify-content:center;left:4px;pointer-events:none;position:absolute;right:4px}.container-2PMGBrHh.bottomPadding-2PMGBrHh{bottom:70px}.centerElement-2PMGBrHh{pointer-events:auto;z-index:1}.notice-2PMGBrHh{opacity:0;transform:translateY(10px);transition:transform .2s ease-in-out,opacity .2s ease-in-out}.notice-showed-2PMGBrHh{opacity:1;transform:translateY(0)} \ No newline at end of file diff --git a/static/charting_library/bundles/84.bb4fc57627c8626019fd.rtl.css b/static/charting_library/bundles/84.bb4fc57627c8626019fd.rtl.css new file mode 100644 index 0000000..f95a36e --- /dev/null +++ b/static/charting_library/bundles/84.bb4fc57627c8626019fd.rtl.css @@ -0,0 +1 @@ +.close-button-1WFSq2PU{background:#0000;border:none;border-radius:4px;box-sizing:initial;color:#131722;margin:0;padding:8px}html.theme-dark .close-button-1WFSq2PU{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.close-button-1WFSq2PU:hover{background:#f0f3fa}html.theme-dark .close-button-1WFSq2PU:hover{background:#2a2e39}}.close-button-1WFSq2PU:active{background:#e0e3eb}html.theme-dark .close-button-1WFSq2PU:active{background:#1e222d}.close-button-1WFSq2PU{outline:none;overflow:visible;position:absolute}.close-button-1WFSq2PU:focus{outline:none}.close-button-1WFSq2PU:focus-visible{outline:none}.close-button-1WFSq2PU:after{border-style:solid;border-width:2px;box-sizing:border-box;content:"";display:none;height:calc(100% + 8px);pointer-events:none;position:absolute;right:-4px;top:-4px;width:calc(100% + 8px);z-index:1}.close-button-1WFSq2PU:focus:after{display:block}.close-button-1WFSq2PU:focus-visible:after{display:block}.close-button-1WFSq2PU:focus:not(:focus-visible):after{display:none}.close-button-1WFSq2PU:after{border-color:#2962ffcc;border-radius:8px}.close-icon-3unB1Yrw,.close-icon-3unB1Yrw svg{display:block;height:100%}.button-l-uIo2rThA{height:23px;padding:8px;width:23px}.button-m-3MMteafV{height:17px;padding:8px;width:17px}.button-s-Nv9EL6Kl{height:13px;padding:8px;width:13px}.button-xs-3f-PiL7F{height:11px;padding:4px;width:11px}.button-xxs-1ElYVuPk{height:9px;padding:4px;width:9px}.container-9ckn123c{align-items:flex-start;background:#fff;border:1px solid;border-radius:4px;color:#131722;display:flex;font-size:13px;font-style:normal;font-weight:400;line-height:19px;padding:11px 12px}html.theme-dark .container-9ckn123c{background:#1e222d;color:#d1d4dc}.container-9ckn123c.container-danger-3U4WdGto{border-color:#f44336}.container-9ckn123c.container-danger-3U4WdGto .header-287NeSeQ,.container-9ckn123c.container-danger-3U4WdGto .icon-2ZK1Y3zH{color:#f44336}.container-9ckn123c.container-warning-1jkRTadj{border-color:#ff9800}.container-9ckn123c.container-warning-1jkRTadj .header-287NeSeQ,.container-9ckn123c.container-warning-1jkRTadj .icon-2ZK1Y3zH{color:#ff9800}.container-9ckn123c.container-success-2srhYBbo{border-color:#009688}.container-9ckn123c.container-success-2srhYBbo .header-287NeSeQ,.container-9ckn123c.container-success-2srhYBbo .icon-2ZK1Y3zH{color:#009688}.container-9ckn123c.container-default-2MDEpAUG{background-color:#f0f3fa;border-color:#f0f3fa}html.theme-dark .container-9ckn123c.container-default-2MDEpAUG{background-color:#2a2e39;border-color:#2a2e39}.container-9ckn123c.container-default-2MDEpAUG .header-287NeSeQ,.container-9ckn123c.container-default-2MDEpAUG .icon-2ZK1Y3zH{color:#787b86}.container-9ckn123c .icon-2ZK1Y3zH{display:flex;margin-left:8px}.container-9ckn123c .text-wrap-26IUyzzc{align-self:center;margin-left:4px}.container-9ckn123c .header-287NeSeQ{font-weight:700}.close-button-2LkcSirN{flex-shrink:0;position:static}.container-2PMGBrHh{bottom:30px;display:flex;justify-content:center;left:4px;pointer-events:none;position:absolute;right:4px}.container-2PMGBrHh.bottomPadding-2PMGBrHh{bottom:70px}.centerElement-2PMGBrHh{pointer-events:auto;z-index:1}.notice-2PMGBrHh{opacity:0;transform:translateY(10px);transition:transform .2s ease-in-out,opacity .2s ease-in-out}.notice-showed-2PMGBrHh{opacity:1;transform:translateY(0)} \ No newline at end of file diff --git a/static/charting_library/bundles/85.39c78fbeaabae306f343.js b/static/charting_library/bundles/85.39c78fbeaabae306f343.js new file mode 100644 index 0000000..ed537b2 --- /dev/null +++ b/static/charting_library/bundles/85.39c78fbeaabae306f343.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[85],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/85.e0ba32bafcab02208901.css b/static/charting_library/bundles/85.e0ba32bafcab02208901.css new file mode 100644 index 0000000..7cadc31 --- /dev/null +++ b/static/charting_library/bundles/85.e0ba32bafcab02208901.css @@ -0,0 +1 @@ +.autocomplete-2wlTLOUu{flex:1 1 auto;position:relative}.autocomplete-2wlTLOUu .caret-2wlTLOUu{border-radius:2px;display:flex;height:calc(100% - 2px);justify-content:center;margin:1px 0;width:21px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.autocomplete-2wlTLOUu .caret-2wlTLOUu:hover{background-color:#f0f3fa}html.theme-dark .autocomplete-2wlTLOUu .caret-2wlTLOUu:hover{background-color:#363a45}.autocomplete-2wlTLOUu .caret-2wlTLOUu:hover .icon-2wlTLOUu{color:#131722}html.theme-dark .autocomplete-2wlTLOUu .caret-2wlTLOUu:hover .icon-2wlTLOUu{color:#b2b5be}}.autocomplete-2wlTLOUu .caret-2wlTLOUu .icon-2wlTLOUu{color:#787b86}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu{background-color:#fff;border-radius:3px;box-shadow:0 1px 2px 1px rgba(0,0,0,.275);font-size:13px;max-height:0;outline:0;overflow-x:hidden;overflow-y:auto;padding:10px 0;position:absolute;transform:translateZ(0);visibility:hidden;width:100%;z-index:150}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu{background-color:#1e222d}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar{height:5px;width:5px}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-corner{display:none}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .noResults-2wlTLOUu,.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu{overflow:hidden;padding:10px 15px;position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu{cursor:pointer}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu.selected-2wlTLOUu{background-color:#e3effd;color:#4a4a4a}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu.selected-2wlTLOUu{background-color:#142e61;color:#758696}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:hover{background-color:#e0e3eb;color:#4a4a4a}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:hover{background-color:#1e222d;color:#758696}}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:active{background-color:#e0e3eb;color:#4a4a4a}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:active{background-color:#2a2e39;color:#758696}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .noResults-2wlTLOUu,html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .noResults-2wlTLOUu{color:#787b86}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu{max-height:45vh;visibility:visible}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar{height:5px;width:5px}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-corner{display:none}.loading-20Nb4yny{color:#0000}.container-1FV_LSwA{border-top:1px solid #e0e3eb;display:flex;flex:1 1 auto;flex-direction:column;height:100%;max-width:400px;min-height:0;overflow:auto;padding:16px 20px 0}html.theme-dark .container-1FV_LSwA{border-top:1px solid #434651}.container-1FV_LSwA::-webkit-scrollbar{height:5px;width:5px}.container-1FV_LSwA::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .container-1FV_LSwA::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.container-1FV_LSwA::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.container-1FV_LSwA::-webkit-scrollbar-corner{display:none}.container-1FV_LSwA.withSuggestions-1FV_LSwA{overflow:visible}.container-1FV_LSwA .title-1FV_LSwA{color:#787b86;cursor:default;display:flex;flex:0 0 auto;font-size:11px;letter-spacing:.4px;line-height:16px;text-transform:uppercase}.container-1FV_LSwA .autocomplete-1FV_LSwA{display:flex;flex:0 0 auto;padding-top:2px}.container-1FV_LSwA .saveInterval-1FV_LSwA,.container-1FV_LSwA .saveSymbol-1FV_LSwA{display:flex;flex:0 0 auto;padding-top:16px}.container-1FV_LSwA .saveInterval-1FV_LSwA{padding-bottom:24px}.container-1FV_LSwA .indicators-1FV_LSwA{word-wrap:break-word;color:#131722;cursor:default;display:flex;flex:1 1 auto;flex-direction:column;font-size:14px;line-height:21px;padding-top:8px}html.theme-dark .container-1FV_LSwA .indicators-1FV_LSwA{color:#b2b5be}.container-1FV_LSwA .indicators-1FV_LSwA.withSuggestions-1FV_LSwA{overflow:hidden}.container-1FV_LSwA .indicators-1FV_LSwA:after{content:"";display:block;padding-bottom:20px}.container-1FV_LSwA .hintLabel-1FV_LSwA{align-items:center;display:flex}.container-1FV_LSwA .hintLabel-1FV_LSwA .hintMark-1FV_LSwA{color:#787b86;height:18px;margin-left:8px;width:18px} \ No newline at end of file diff --git a/static/charting_library/bundles/85.e0ba32bafcab02208901.rtl.css b/static/charting_library/bundles/85.e0ba32bafcab02208901.rtl.css new file mode 100644 index 0000000..e844550 --- /dev/null +++ b/static/charting_library/bundles/85.e0ba32bafcab02208901.rtl.css @@ -0,0 +1 @@ +.autocomplete-2wlTLOUu{flex:1 1 auto;position:relative}.autocomplete-2wlTLOUu .caret-2wlTLOUu{border-radius:2px;display:flex;height:calc(100% - 2px);justify-content:center;margin:1px 0;width:21px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.autocomplete-2wlTLOUu .caret-2wlTLOUu:hover{background-color:#f0f3fa}html.theme-dark .autocomplete-2wlTLOUu .caret-2wlTLOUu:hover{background-color:#363a45}.autocomplete-2wlTLOUu .caret-2wlTLOUu:hover .icon-2wlTLOUu{color:#131722}html.theme-dark .autocomplete-2wlTLOUu .caret-2wlTLOUu:hover .icon-2wlTLOUu{color:#b2b5be}}.autocomplete-2wlTLOUu .caret-2wlTLOUu .icon-2wlTLOUu{color:#787b86}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu{background-color:#fff;border-radius:3px;box-shadow:0 1px 2px 1px rgba(0,0,0,.275);font-size:13px;max-height:0;outline:0;overflow-x:hidden;overflow-y:auto;padding:10px 0;position:absolute;transform:translateZ(0);visibility:hidden;width:100%;z-index:150}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu{background-color:#1e222d}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar{height:5px;width:5px}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-corner{display:none}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .noResults-2wlTLOUu,.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu{overflow:hidden;padding:10px 15px;position:relative;text-align:right;text-overflow:ellipsis;white-space:nowrap}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu{cursor:pointer}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu.selected-2wlTLOUu{background-color:#e3effd;color:#4a4a4a}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu.selected-2wlTLOUu{background-color:#142e61;color:#758696}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:hover{background-color:#e0e3eb;color:#4a4a4a}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:hover{background-color:#1e222d;color:#758696}}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:active{background-color:#e0e3eb;color:#4a4a4a}html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .suggestion-2wlTLOUu:active{background-color:#2a2e39;color:#758696}.autocomplete-2wlTLOUu .suggestions-2wlTLOUu .noResults-2wlTLOUu,html.theme-dark .autocomplete-2wlTLOUu .suggestions-2wlTLOUu .noResults-2wlTLOUu{color:#787b86}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu{max-height:45vh;visibility:visible}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar{height:5px;width:5px}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.autocomplete-2wlTLOUu.opened-2wlTLOUu .suggestions-2wlTLOUu::-webkit-scrollbar-corner{display:none}.loading-20Nb4yny{color:#0000}.container-1FV_LSwA{border-top:1px solid #e0e3eb;display:flex;flex:1 1 auto;flex-direction:column;height:100%;max-width:400px;min-height:0;overflow:auto;padding:16px 20px 0}html.theme-dark .container-1FV_LSwA{border-top:1px solid #434651}.container-1FV_LSwA::-webkit-scrollbar{height:5px;width:5px}.container-1FV_LSwA::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .container-1FV_LSwA::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.container-1FV_LSwA::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.container-1FV_LSwA::-webkit-scrollbar-corner{display:none}.container-1FV_LSwA.withSuggestions-1FV_LSwA{overflow:visible}.container-1FV_LSwA .title-1FV_LSwA{color:#787b86;cursor:default;display:flex;flex:0 0 auto;font-size:11px;letter-spacing:.4px;line-height:16px;text-transform:uppercase}.container-1FV_LSwA .autocomplete-1FV_LSwA{display:flex;flex:0 0 auto;padding-top:2px}.container-1FV_LSwA .saveInterval-1FV_LSwA,.container-1FV_LSwA .saveSymbol-1FV_LSwA{display:flex;flex:0 0 auto;padding-top:16px}.container-1FV_LSwA .saveInterval-1FV_LSwA{padding-bottom:24px}.container-1FV_LSwA .indicators-1FV_LSwA{word-wrap:break-word;color:#131722;cursor:default;display:flex;flex:1 1 auto;flex-direction:column;font-size:14px;line-height:21px;padding-top:8px}html.theme-dark .container-1FV_LSwA .indicators-1FV_LSwA{color:#b2b5be}.container-1FV_LSwA .indicators-1FV_LSwA.withSuggestions-1FV_LSwA{overflow:hidden}.container-1FV_LSwA .indicators-1FV_LSwA:after{content:"";display:block;padding-bottom:20px}.container-1FV_LSwA .hintLabel-1FV_LSwA{align-items:center;display:flex}.container-1FV_LSwA .hintLabel-1FV_LSwA .hintMark-1FV_LSwA{color:#787b86;height:18px;margin-right:8px;width:18px} \ No newline at end of file diff --git a/static/charting_library/bundles/86.4bbbb9e6262243419986.js b/static/charting_library/bundles/86.4bbbb9e6262243419986.js new file mode 100644 index 0000000..345d070 --- /dev/null +++ b/static/charting_library/bundles/86.4bbbb9e6262243419986.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[86],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/86.9244fc2bcc2370425a15.css b/static/charting_library/bundles/86.9244fc2bcc2370425a15.css new file mode 100644 index 0000000..0ee5c27 --- /dev/null +++ b/static/charting_library/bundles/86.9244fc2bcc2370425a15.css @@ -0,0 +1 @@ +.scrollable-2CTvqFKf{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-2CTvqFKf{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-2CTvqFKf{min-height:auto}}.scrollable-2CTvqFKf::-webkit-scrollbar{height:5px;width:5px}.scrollable-2CTvqFKf::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-2CTvqFKf::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-2CTvqFKf::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-2CTvqFKf::-webkit-scrollbar-corner{display:none}.recalculateCheckbox-2z5ytJSA{margin-bottom:16px}.recalculateCheckbox-2z5ytJSA:last-child{margin-bottom:0}.descriptionCell-2z5ytJSA{margin-left:12px}.smallStyleControl-11tnC1DU{margin-left:8px;width:34px}.smallStyleControl-11tnC1DU:first-child{margin-left:0}.additionalSelect-11tnC1DU{margin-left:8px}.childRowContainer-11tnC1DU{cursor:default;margin-left:26px}.defaultSelect-11tnC1DU{cursor:default;width:100px}.defaultSelectItem-11tnC1DU{box-sizing:border-box;min-width:100px}.block-11tnC1DU{display:flex}@media screen and (max-width:379px){.block-11tnC1DU{display:block}}.group-11tnC1DU{display:flex}@media screen and (max-width:379px){.wrapGroup-11tnC1DU{margin-left:0;margin-top:8px}}.textMarkGraphicBlock-11tnC1DU{display:flex}@media screen and (max-width:550px){.textMarkGraphicBlock-11tnC1DU{display:block}}.textMarkGraphicWrapGroup-11tnC1DU{display:flex}@media screen and (max-width:550px){.textMarkGraphicWrapGroup-11tnC1DU{margin-left:0;margin-top:8px}} \ No newline at end of file diff --git a/static/charting_library/bundles/86.9244fc2bcc2370425a15.rtl.css b/static/charting_library/bundles/86.9244fc2bcc2370425a15.rtl.css new file mode 100644 index 0000000..8791f69 --- /dev/null +++ b/static/charting_library/bundles/86.9244fc2bcc2370425a15.rtl.css @@ -0,0 +1 @@ +.scrollable-2CTvqFKf{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-2CTvqFKf{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-2CTvqFKf{min-height:auto}}.scrollable-2CTvqFKf::-webkit-scrollbar{height:5px;width:5px}.scrollable-2CTvqFKf::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-2CTvqFKf::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-2CTvqFKf::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-2CTvqFKf::-webkit-scrollbar-corner{display:none}.recalculateCheckbox-2z5ytJSA{margin-bottom:16px}.recalculateCheckbox-2z5ytJSA:last-child{margin-bottom:0}.descriptionCell-2z5ytJSA{margin-right:12px}.smallStyleControl-11tnC1DU{margin-right:8px;width:34px}.smallStyleControl-11tnC1DU:first-child{margin-right:0}.additionalSelect-11tnC1DU{margin-right:8px}.childRowContainer-11tnC1DU{cursor:default;margin-right:26px}.defaultSelect-11tnC1DU{cursor:default;width:100px}.defaultSelectItem-11tnC1DU{box-sizing:border-box;min-width:100px}.block-11tnC1DU{display:flex}@media screen and (max-width:379px){.block-11tnC1DU{display:block}}.group-11tnC1DU{display:flex}@media screen and (max-width:379px){.wrapGroup-11tnC1DU{margin-right:0;margin-top:8px}}.textMarkGraphicBlock-11tnC1DU{display:flex}@media screen and (max-width:550px){.textMarkGraphicBlock-11tnC1DU{display:block}}.textMarkGraphicWrapGroup-11tnC1DU{display:flex}@media screen and (max-width:550px){.textMarkGraphicWrapGroup-11tnC1DU{margin-right:0;margin-top:8px}} \ No newline at end of file diff --git a/static/charting_library/bundles/87.605cbc508223ec27341c.css b/static/charting_library/bundles/87.605cbc508223ec27341c.css new file mode 100644 index 0000000..c93a012 --- /dev/null +++ b/static/charting_library/bundles/87.605cbc508223ec27341c.css @@ -0,0 +1 @@ +.themesButtonText-3vn5WLwC{color:#131722;font-size:14px;width:100px}html.theme-dark .themesButtonText-3vn5WLwC{color:#b2b5be}.themesButtonIcon-3vn5WLwC{display:flex}.defaultsButtonText-3vn5WLwC{color:#131722;font-size:16px;width:100px}html.theme-dark .defaultsButtonText-3vn5WLwC{color:#b2b5be}.defaultsButtonItem-3vn5WLwC{min-width:100px}.backButton-ukxmTk5_{align-items:center;color:#131722;display:flex;height:100%;padding-right:20px;width:28px}html.theme-dark .backButton-ukxmTk5_{color:#b2b5be}.withSidebar-1e-cIUlp{display:block;max-width:750px;min-width:610px;width:auto}@media screen and (max-width:768px){.withSidebar-1e-cIUlp{max-width:610px;min-width:420px;width:auto}}@media screen and (max-width:428px){.withSidebar-1e-cIUlp{min-height:auto;min-width:100%}}.withSidebar-1e-cIUlp .content-1e-cIUlp{border-top:1px solid #e0e3eb;display:flex;flex:1 1 auto;flex-direction:row;overflow:hidden}html.theme-dark .withSidebar-1e-cIUlp .content-1e-cIUlp{border-top:1px solid #434651}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin;width:auto}html.theme-dark .withSidebar-1e-cIUlp .tabContent-1e-cIUlp{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.withSidebar-1e-cIUlp .tabContent-1e-cIUlp{min-height:auto}}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar{height:5px;width:5px}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-corner{display:none}.withSidebar-1e-cIUlp .applyToAllButton-1e-cIUlp{padding-right:12px} \ No newline at end of file diff --git a/static/charting_library/bundles/87.605cbc508223ec27341c.rtl.css b/static/charting_library/bundles/87.605cbc508223ec27341c.rtl.css new file mode 100644 index 0000000..0442eb2 --- /dev/null +++ b/static/charting_library/bundles/87.605cbc508223ec27341c.rtl.css @@ -0,0 +1 @@ +.themesButtonText-3vn5WLwC{color:#131722;font-size:14px;width:100px}html.theme-dark .themesButtonText-3vn5WLwC{color:#b2b5be}.themesButtonIcon-3vn5WLwC{display:flex}.defaultsButtonText-3vn5WLwC{color:#131722;font-size:16px;width:100px}html.theme-dark .defaultsButtonText-3vn5WLwC{color:#b2b5be}.defaultsButtonItem-3vn5WLwC{min-width:100px}.backButton-ukxmTk5_{align-items:center;color:#131722;display:flex;height:100%;padding-left:20px;width:28px}html.theme-dark .backButton-ukxmTk5_{color:#b2b5be}.backButton-ukxmTk5_ svg{transform:rotate(180deg)}.withSidebar-1e-cIUlp{display:block;max-width:750px;min-width:610px;width:auto}@media screen and (max-width:768px){.withSidebar-1e-cIUlp{max-width:610px;min-width:420px;width:auto}}@media screen and (max-width:428px){.withSidebar-1e-cIUlp{min-height:auto;min-width:100%}}.withSidebar-1e-cIUlp .content-1e-cIUlp{border-top:1px solid #e0e3eb;display:flex;flex:1 1 auto;flex-direction:row;overflow:hidden}html.theme-dark .withSidebar-1e-cIUlp .content-1e-cIUlp{border-top:1px solid #434651}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin;width:auto}html.theme-dark .withSidebar-1e-cIUlp .tabContent-1e-cIUlp{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.withSidebar-1e-cIUlp .tabContent-1e-cIUlp{min-height:auto}}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar{height:5px;width:5px}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.withSidebar-1e-cIUlp .tabContent-1e-cIUlp::-webkit-scrollbar-corner{display:none}.withSidebar-1e-cIUlp .applyToAllButton-1e-cIUlp{padding-left:12px} \ No newline at end of file diff --git a/static/charting_library/bundles/87.cf03fa0a76bfcadd157d.js b/static/charting_library/bundles/87.cf03fa0a76bfcadd157d.js new file mode 100644 index 0000000..051f109 --- /dev/null +++ b/static/charting_library/bundles/87.cf03fa0a76bfcadd157d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[87],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/88.158dd8a18e176936a343.css b/static/charting_library/bundles/88.158dd8a18e176936a343.css new file mode 100644 index 0000000..6429da5 --- /dev/null +++ b/static/charting_library/bundles/88.158dd8a18e176936a343.css @@ -0,0 +1 @@ +.actionButton-3wPv1Zy2{margin:0 6px}.actionButton-3wPv1Zy2:first-child{margin-right:0}.actionButton-3wPv1Zy2:last-child{margin-left:0}.actionButton-3wPv1Zy2.small-3wPv1Zy2{margin:6px 0}.actionButton-3wPv1Zy2.small-3wPv1Zy2:first-child{margin-top:0}.actionButton-3wPv1Zy2.small-3wPv1Zy2:last-child{margin-bottom:0}.hiddenTitle-3wPv1Zy2{visibility:hidden}.popupDialog-35doN71j{max-height:calc(100% - 20px);max-width:480px;width:calc(100% - 20px)}.wrap-35doN71j{cursor:default;display:flex;overflow:hidden}.main-35doN71j{color:#131722;display:flex;flex:1 1 auto;flex-direction:column;margin:40px 0 40px 40px}html.theme-dark .main-35doN71j{color:#b2b5be}.main-35doN71j.small-35doN71j{margin:20px 0 20px 20px}.title-35doN71j{align-items:center;display:flex;flex:none;font-size:20px;font-style:normal;font-weight:700;line-height:28px;margin-bottom:8px;width:calc(100% - 9px);word-break:break-word}.title-35doN71j.small-35doN71j{width:calc(100% - 29px)}.content-35doN71j{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;display:flex;flex:1 1 auto;flex-direction:column;font-size:16px;font-style:normal;font-weight:400;line-height:24px;margin:0 -40px;min-height:145px;min-height:0;overflow-x:hidden;overflow-y:auto;padding:8px 40px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin;white-space:pre-wrap;word-break:break-word}html.theme-dark .content-35doN71j{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.content-35doN71j{min-height:auto}}.content-35doN71j::-webkit-scrollbar{height:5px;width:5px}.content-35doN71j::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .content-35doN71j::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.content-35doN71j::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.content-35doN71j::-webkit-scrollbar-corner{display:none}.content-35doN71j.small-35doN71j{margin:0 -20px;padding:8px 20px}.content-35doN71j.html-35doN71j{display:block}.content-35doN71j.html-35doN71j a,html.theme-dark .content-35doN71j.html-35doN71j a{color:#2962ff}.footer-35doN71j{display:flex;flex:none;flex-direction:row-reverse;justify-content:flex-start;margin-top:16px}.footer-35doN71j.small-35doN71j{flex-direction:column}.close-35doN71j{align-items:center;border-radius:2px;color:#131722;cursor:default;display:flex;flex:none;height:34px;justify-content:center;margin:8px 8px 0 -2px;width:34px}html.theme-dark .close-35doN71j{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.close-35doN71j:hover{background-color:#f0f3fa}html.theme-dark .close-35doN71j:hover{background-color:#2a2e39}}.close-35doN71j.small-35doN71j{margin-left:-22px}.label-32bOLbsS{color:#787b86;font-size:14px;line-height:21px}.input-32bOLbsS{word-break:normal} \ No newline at end of file diff --git a/static/charting_library/bundles/88.158dd8a18e176936a343.rtl.css b/static/charting_library/bundles/88.158dd8a18e176936a343.rtl.css new file mode 100644 index 0000000..ba1c0c3 --- /dev/null +++ b/static/charting_library/bundles/88.158dd8a18e176936a343.rtl.css @@ -0,0 +1 @@ +.actionButton-3wPv1Zy2{margin:0 6px}.actionButton-3wPv1Zy2:first-child{margin-left:0}.actionButton-3wPv1Zy2:last-child{margin-right:0}.actionButton-3wPv1Zy2.small-3wPv1Zy2{margin:6px 0}.actionButton-3wPv1Zy2.small-3wPv1Zy2:first-child{margin-top:0}.actionButton-3wPv1Zy2.small-3wPv1Zy2:last-child{margin-bottom:0}.hiddenTitle-3wPv1Zy2{visibility:hidden}.popupDialog-35doN71j{max-height:calc(100% - 20px);max-width:480px;width:calc(100% - 20px)}.wrap-35doN71j{cursor:default;display:flex;overflow:hidden}.main-35doN71j{color:#131722;display:flex;flex:1 1 auto;flex-direction:column;margin:40px 40px 40px 0}html.theme-dark .main-35doN71j{color:#b2b5be}.main-35doN71j.small-35doN71j{margin:20px 20px 20px 0}.title-35doN71j{align-items:center;display:flex;flex:none;font-size:20px;font-style:normal;font-weight:700;line-height:28px;margin-bottom:8px;width:calc(100% - 9px);word-break:break-word}.title-35doN71j.small-35doN71j{width:calc(100% - 29px)}.content-35doN71j{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;display:flex;flex:1 1 auto;flex-direction:column;font-size:16px;font-style:normal;font-weight:400;line-height:24px;margin:0 -40px;min-height:145px;min-height:0;overflow-x:hidden;overflow-y:auto;padding:8px 40px;scrollbar-color:#9598a1 #0000;scrollbar-width:thin;white-space:pre-wrap;word-break:break-word}html.theme-dark .content-35doN71j{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.content-35doN71j{min-height:auto}}.content-35doN71j::-webkit-scrollbar{height:5px;width:5px}.content-35doN71j::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .content-35doN71j::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.content-35doN71j::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.content-35doN71j::-webkit-scrollbar-corner{display:none}.content-35doN71j.small-35doN71j{margin:0 -20px;padding:8px 20px}.content-35doN71j.html-35doN71j{display:block}.content-35doN71j.html-35doN71j a,html.theme-dark .content-35doN71j.html-35doN71j a{color:#2962ff}.footer-35doN71j{display:flex;flex:none;flex-direction:row-reverse;justify-content:flex-start;margin-top:16px}.footer-35doN71j.small-35doN71j{flex-direction:column}.close-35doN71j{align-items:center;border-radius:2px;color:#131722;cursor:default;display:flex;flex:none;height:34px;justify-content:center;margin:8px -2px 0 8px;width:34px}html.theme-dark .close-35doN71j{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.close-35doN71j:hover{background-color:#f0f3fa}html.theme-dark .close-35doN71j:hover{background-color:#2a2e39}}.close-35doN71j.small-35doN71j{margin-right:-22px}.label-32bOLbsS{color:#787b86;font-size:14px;line-height:21px}.input-32bOLbsS{word-break:normal} \ No newline at end of file diff --git a/static/charting_library/bundles/88.d1e3aec63ece25f6b8a9.js b/static/charting_library/bundles/88.d1e3aec63ece25f6b8a9.js new file mode 100644 index 0000000..8e229ea --- /dev/null +++ b/static/charting_library/bundles/88.d1e3aec63ece25f6b8a9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[88],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/89.5f142643917701de773b.css b/static/charting_library/bundles/89.5f142643917701de773b.css new file mode 100644 index 0000000..3b26a85 --- /dev/null +++ b/static/charting_library/bundles/89.5f142643917701de773b.css @@ -0,0 +1 @@ +.container-113jHcZc{align-items:flex-start;background:#2962ff;border-radius:4px;cursor:default;display:flex;overflow:auto;padding:8px}html.theme-dark .container-113jHcZc{background:#2962ff}.content-113jHcZc{padding:4px 8px}.arrowHolder-113jHcZc{position:absolute}.arrowHolder-113jHcZc:after{border:0 solid #2962ff;box-sizing:border-box;content:"";display:block;height:0;position:absolute;width:0}html.theme-dark .arrowHolder-113jHcZc:after{border-color:#2962ff}.arrowHolder--above-113jHcZc:after,.arrowHolder--below-113jHcZc:after{border-left:6px solid #0000;border-right:6px solid #0000;left:50%;margin-left:-6px}html.theme-dark .arrowHolder--above-113jHcZc:after,html.theme-dark .arrowHolder--below-113jHcZc:after{border-left-color:#0000;border-right-color:#0000}.arrowHolder--below-113jHcZc:after{border-bottom-width:4px;bottom:100%}.arrowHolder--above-113jHcZc:after{border-top-width:4px;top:100%}.arrowHolder--after-113jHcZc:after,.arrowHolder--before-113jHcZc:after{border-bottom:6px solid #0000;border-top:6px solid #0000;margin-top:-6px;top:50%}html.theme-dark .arrowHolder--after-113jHcZc:after,html.theme-dark .arrowHolder--before-113jHcZc:after{border-bottom-color:#0000;border-top-color:#0000}.arrowHolder--before-113jHcZc:after{border-right-width:4px;right:100%}.arrowHolder--after-113jHcZc:after{border-left-width:4px;left:100%}.arrowHolder--above-fix-113jHcZc{bottom:0}.arrowHolder--after-ltr-fix-113jHcZc{right:0}.label-113jHcZc{display:flex;flex:1 1 auto;margin-right:24px}.closeButton-113jHcZc{color:#fff}.container-RnpzRzG6{bottom:70px;display:flex;justify-content:center;left:10px;pointer-events:none;position:absolute;right:10px}.centerElement-RnpzRzG6{pointer-events:auto;z-index:1}.text-RnpzRzG6{word-wrap:break-word;color:#fff;font-size:14px;line-height:21px;margin-bottom:auto} \ No newline at end of file diff --git a/static/charting_library/bundles/89.5f142643917701de773b.rtl.css b/static/charting_library/bundles/89.5f142643917701de773b.rtl.css new file mode 100644 index 0000000..a6f85ee --- /dev/null +++ b/static/charting_library/bundles/89.5f142643917701de773b.rtl.css @@ -0,0 +1 @@ +.container-113jHcZc{align-items:flex-start;background:#2962ff;border-radius:4px;cursor:default;display:flex;overflow:auto;padding:8px}html.theme-dark .container-113jHcZc{background:#2962ff}.content-113jHcZc{padding:4px 8px}.arrowHolder-113jHcZc{position:absolute}.arrowHolder-113jHcZc:after{border:0 solid #2962ff;box-sizing:border-box;content:"";display:block;height:0;position:absolute;width:0}html.theme-dark .arrowHolder-113jHcZc:after{border-color:#2962ff}.arrowHolder--above-113jHcZc:after,.arrowHolder--below-113jHcZc:after{border-left:6px solid #0000;border-right:6px solid #0000;left:50%;margin-left:-6px}html.theme-dark .arrowHolder--above-113jHcZc:after,html.theme-dark .arrowHolder--below-113jHcZc:after{border-left-color:#0000;border-right-color:#0000}.arrowHolder--below-113jHcZc:after{border-bottom-width:4px;bottom:100%}.arrowHolder--above-113jHcZc:after{border-top-width:4px;top:100%}.arrowHolder--after-113jHcZc:after,.arrowHolder--before-113jHcZc:after{border-bottom:6px solid #0000;border-top:6px solid #0000;margin-top:-6px;top:50%}html.theme-dark .arrowHolder--after-113jHcZc:after,html.theme-dark .arrowHolder--before-113jHcZc:after{border-bottom-color:#0000;border-top-color:#0000}.arrowHolder--before-113jHcZc:after{border-right-width:4px;right:100%}.arrowHolder--after-113jHcZc:after{border-left-width:4px;left:100%}.arrowHolder--above-fix-113jHcZc{bottom:0}.arrowHolder--before-rtl-fix-113jHcZc{left:0}.arrowHolder--after-ltr-fix-113jHcZc{right:0}.label-113jHcZc{display:flex;flex:1 1 auto;margin-left:24px}.closeButton-113jHcZc{color:#fff}.container-RnpzRzG6{bottom:70px;display:flex;justify-content:center;left:10px;pointer-events:none;position:absolute;right:10px}.centerElement-RnpzRzG6{pointer-events:auto;z-index:1}.text-RnpzRzG6{word-wrap:break-word;color:#fff;font-size:14px;line-height:21px;margin-bottom:auto} \ No newline at end of file diff --git a/static/charting_library/bundles/89.d8aa43b4b9378722d572.js b/static/charting_library/bundles/89.d8aa43b4b9378722d572.js new file mode 100644 index 0000000..794a6ed --- /dev/null +++ b/static/charting_library/bundles/89.d8aa43b4b9378722d572.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[89],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/898929f1acdb622689e0fc0c95c8fcd0.png b/static/charting_library/bundles/898929f1acdb622689e0fc0c95c8fcd0.png new file mode 100644 index 0000000..f12b96f Binary files /dev/null and b/static/charting_library/bundles/898929f1acdb622689e0fc0c95c8fcd0.png differ diff --git a/static/charting_library/bundles/9.84ecbc930e51cb26d06a.js b/static/charting_library/bundles/9.84ecbc930e51cb26d06a.js new file mode 100644 index 0000000..ec800d5 --- /dev/null +++ b/static/charting_library/bundles/9.84ecbc930e51cb26d06a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/9.8ab09f93a5113a634119.css b/static/charting_library/bundles/9.8ab09f93a5113a634119.css new file mode 100644 index 0000000..c89cba6 --- /dev/null +++ b/static/charting_library/bundles/9.8ab09f93a5113a634119.css @@ -0,0 +1 @@ +.container-2sL5JydP{align-items:center;cursor:default;display:flex;flex:0 0 auto;padding:0 20px}.unsetAlign-2sL5JydP{align-items:stretch}.title-2sL5JydP{color:#131722;flex-grow:1;font-size:20px;font-weight:700;line-height:28px;min-width:0;padding:17px 0}html.theme-dark .title-2sL5JydP{color:#b2b5be}@media screen and (max-height:360px){.title-2sL5JydP{padding:10px 0}}.subtitle-2sL5JydP{font-size:16px;font-weight:400;line-height:24px;margin:8px 0 3px}.ellipsis-2sL5JydP{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close-2sL5JydP{align-items:center;border-radius:2px;color:#131722;cursor:default;display:flex;flex-shrink:0;height:34px;justify-content:center;margin:17px -3px 17px 0;width:34px}html.theme-dark .close-2sL5JydP{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.close-2sL5JydP:hover{background-color:#f0f3fa}html.theme-dark .close-2sL5JydP:hover{background-color:#2a2e39}}@media screen and (max-height:360px){.close-2sL5JydP{margin-bottom:10px;margin-top:10px}}.dialog-2cMrvu9r{display:block;max-width:550px;min-width:380px;width:auto}@media screen and (max-width:379px){.dialog-2cMrvu9r{min-height:auto;min-width:100%}}.wrapper-2cMrvu9r{display:flex;flex-direction:column;height:100%}.separator-2cMrvu9r{flex:none;margin:0 0 2px} \ No newline at end of file diff --git a/static/charting_library/bundles/9.8ab09f93a5113a634119.rtl.css b/static/charting_library/bundles/9.8ab09f93a5113a634119.rtl.css new file mode 100644 index 0000000..d5bf04e --- /dev/null +++ b/static/charting_library/bundles/9.8ab09f93a5113a634119.rtl.css @@ -0,0 +1 @@ +.container-2sL5JydP{align-items:center;cursor:default;display:flex;flex:0 0 auto;padding:0 20px}.unsetAlign-2sL5JydP{align-items:stretch}.title-2sL5JydP{color:#131722;flex-grow:1;font-size:20px;font-weight:700;line-height:28px;min-width:0;padding:17px 0}html.theme-dark .title-2sL5JydP{color:#b2b5be}@media screen and (max-height:360px){.title-2sL5JydP{padding:10px 0}}.subtitle-2sL5JydP{font-size:16px;font-weight:400;line-height:24px;margin:8px 0 3px}.ellipsis-2sL5JydP{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close-2sL5JydP{align-items:center;border-radius:2px;color:#131722;cursor:default;display:flex;flex-shrink:0;height:34px;justify-content:center;margin:17px 0 17px -3px;width:34px}html.theme-dark .close-2sL5JydP{color:#b2b5be}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.close-2sL5JydP:hover{background-color:#f0f3fa}html.theme-dark .close-2sL5JydP:hover{background-color:#2a2e39}}@media screen and (max-height:360px){.close-2sL5JydP{margin-bottom:10px;margin-top:10px}}.dialog-2cMrvu9r{display:block;max-width:550px;min-width:380px;width:auto}@media screen and (max-width:379px){.dialog-2cMrvu9r{min-height:auto;min-width:100%}}.wrapper-2cMrvu9r{display:flex;flex-direction:column;height:100%}.separator-2cMrvu9r{flex:none;margin:0 0 2px} \ No newline at end of file diff --git a/static/charting_library/bundles/90.877114560c4828a97702.css b/static/charting_library/bundles/90.877114560c4828a97702.css new file mode 100644 index 0000000..d691dd4 --- /dev/null +++ b/static/charting_library/bundles/90.877114560c4828a97702.css @@ -0,0 +1 @@ +.titleWrapper-SNaRagqV{align-items:center;display:flex;justify-content:flex-start;padding:4px 0}.titleWrapper-SNaRagqV>:not(:last-child){margin-right:8px}.title-SNaRagqV{font-size:18px;font-weight:700;line-height:26px}.subtitle-SNaRagqV{font-size:14px;line-height:21px}.subtitle-SNaRagqV .text-SNaRagqV{flex:1 0 0;overflow:hidden;text-overflow:ellipsis}.icon-SNaRagqV{color:currentColor}.group-SNaRagqV{padding-top:12px}.groupTitle-SNaRagqV{color:#787b86;font-size:11px;font-weight:400;letter-spacing:.4px;line-height:16px;text-transform:uppercase}.groupRow-SNaRagqV{display:flex;flex-direction:row}.groupRow-SNaRagqV>:not(:last-child){margin-right:32px}.group-SNaRagqV .text-SNaRagqV{flex:1 0 0;font-size:14px;line-height:21px;overflow:hidden;text-overflow:ellipsis}.drawer-1QFSt-Zu>:not(:last-child){border-bottom:1px solid #e0e3eb}.drawerItem-1QFSt-Zu{color:#131722;padding:16px}html.theme-dark .drawerItem-1QFSt-Zu{color:#d1d4dc}.drawerItem-1QFSt-Zu .title-1QFSt-Zu{font-size:20px;line-height:28px}.drawerItem-1QFSt-Zu .subtitle-1QFSt-Zu,.drawerItem-1QFSt-Zu .text-1QFSt-Zu{font-size:16px;line-height:24px}.menuWrap-1QFSt-Zu{background:#0000}.menuWrap-1QFSt-Zu,html.theme-dark .menuWrap-1QFSt-Zu{box-shadow:0 0 #0000}html.theme-dark .menuWrap-1QFSt-Zu{background:#0000}.menuWrap-1QFSt-Zu .menuBox-1QFSt-Zu{margin:8px 4px 12px;padding:0}.menuWrap-1QFSt-Zu .menuBox-1QFSt-Zu>:not(:last-child){margin-bottom:8px}.card-1QFSt-Zu{background:#fff;border-left:4px solid;border-radius:4px;box-shadow:0 2px 4px #6b798866;box-sizing:border-box;color:#131722;min-width:300px;padding:16px 16px 16px 12px}html.theme-dark .card-1QFSt-Zu{background:#1e222d;box-shadow:0 2px 4px #0006;color:#d1d4dc} \ No newline at end of file diff --git a/static/charting_library/bundles/90.877114560c4828a97702.rtl.css b/static/charting_library/bundles/90.877114560c4828a97702.rtl.css new file mode 100644 index 0000000..b9e829a --- /dev/null +++ b/static/charting_library/bundles/90.877114560c4828a97702.rtl.css @@ -0,0 +1 @@ +.titleWrapper-SNaRagqV{align-items:center;display:flex;justify-content:flex-start;padding:4px 0}.titleWrapper-SNaRagqV>:not(:last-child){margin-left:8px}.title-SNaRagqV{font-size:18px;font-weight:700;line-height:26px}.subtitle-SNaRagqV{font-size:14px;line-height:21px}.subtitle-SNaRagqV .text-SNaRagqV{flex:1 0 0;overflow:hidden;text-overflow:ellipsis}.icon-SNaRagqV{color:currentColor}.group-SNaRagqV{padding-top:12px}.groupTitle-SNaRagqV{color:#787b86;font-size:11px;font-weight:400;letter-spacing:.4px;line-height:16px;text-transform:uppercase}.groupRow-SNaRagqV{display:flex;flex-direction:row}.groupRow-SNaRagqV>:not(:last-child){margin-left:32px}.group-SNaRagqV .text-SNaRagqV{flex:1 0 0;font-size:14px;line-height:21px;overflow:hidden;text-overflow:ellipsis}.drawer-1QFSt-Zu>:not(:last-child){border-bottom:1px solid #e0e3eb}.drawerItem-1QFSt-Zu{color:#131722;padding:16px}html.theme-dark .drawerItem-1QFSt-Zu{color:#d1d4dc}.drawerItem-1QFSt-Zu .title-1QFSt-Zu{font-size:20px;line-height:28px}.drawerItem-1QFSt-Zu .subtitle-1QFSt-Zu,.drawerItem-1QFSt-Zu .text-1QFSt-Zu{font-size:16px;line-height:24px}.menuWrap-1QFSt-Zu{background:#0000}.menuWrap-1QFSt-Zu,html.theme-dark .menuWrap-1QFSt-Zu{box-shadow:0 0 #0000}html.theme-dark .menuWrap-1QFSt-Zu{background:#0000}.menuWrap-1QFSt-Zu .menuBox-1QFSt-Zu{margin:8px 4px 12px;padding:0}.menuWrap-1QFSt-Zu .menuBox-1QFSt-Zu>:not(:last-child){margin-bottom:8px}.card-1QFSt-Zu{background:#fff;border-radius:4px;border-right:4px solid;box-shadow:0 2px 4px #6b798866;box-sizing:border-box;color:#131722;min-width:300px;padding:16px 12px 16px 16px}html.theme-dark .card-1QFSt-Zu{background:#1e222d;box-shadow:0 2px 4px #0006;color:#d1d4dc} \ No newline at end of file diff --git a/static/charting_library/bundles/90.ce47bb68fc3fc88b5590.js b/static/charting_library/bundles/90.ce47bb68fc3fc88b5590.js new file mode 100644 index 0000000..caa741f --- /dev/null +++ b/static/charting_library/bundles/90.ce47bb68fc3fc88b5590.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[90],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/91.2142b248a2bb29549a99.css b/static/charting_library/bundles/91.2142b248a2bb29549a99.css new file mode 100644 index 0000000..8e4632f --- /dev/null +++ b/static/charting_library/bundles/91.2142b248a2bb29549a99.css @@ -0,0 +1 @@ +.scrollable-FNPZI_Xo{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-FNPZI_Xo{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-FNPZI_Xo{min-height:auto}}.scrollable-FNPZI_Xo::-webkit-scrollbar{height:5px;width:5px}.scrollable-FNPZI_Xo::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-FNPZI_Xo::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-FNPZI_Xo::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-FNPZI_Xo::-webkit-scrollbar-corner{display:none}.content-FNPZI_Xo{border-color:currentcolor #e0e3eb #e0e3eb;border-top:1px solid #e0e3eb;box-sizing:border-box;flex:1 1 auto;padding:24px 20px}html.theme-dark .content-FNPZI_Xo{border-color:#434651}.content-FNPZI_Xo .row-FNPZI_Xo{align-items:center;color:#131722;display:flex;margin-top:16px}html.theme-dark .content-FNPZI_Xo .row-FNPZI_Xo{color:#b2b5be}.content-FNPZI_Xo .row-FNPZI_Xo:first-child{margin-top:0}.content-FNPZI_Xo .row-FNPZI_Xo .title-FNPZI_Xo{display:flex;flex:none;line-height:21px;margin-right:20px;width:80px;word-break:break-word}.content-FNPZI_Xo .row-FNPZI_Xo .control-FNPZI_Xo{line-height:21px;width:100px} \ No newline at end of file diff --git a/static/charting_library/bundles/91.2142b248a2bb29549a99.rtl.css b/static/charting_library/bundles/91.2142b248a2bb29549a99.rtl.css new file mode 100644 index 0000000..9448ad1 --- /dev/null +++ b/static/charting_library/bundles/91.2142b248a2bb29549a99.rtl.css @@ -0,0 +1 @@ +.scrollable-FNPZI_Xo{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-FNPZI_Xo{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-FNPZI_Xo{min-height:auto}}.scrollable-FNPZI_Xo::-webkit-scrollbar{height:5px;width:5px}.scrollable-FNPZI_Xo::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-FNPZI_Xo::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-FNPZI_Xo::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-FNPZI_Xo::-webkit-scrollbar-corner{display:none}.content-FNPZI_Xo{border-color:currentcolor #e0e3eb #e0e3eb;border-top:1px solid #e0e3eb;box-sizing:border-box;flex:1 1 auto;padding:24px 20px}html.theme-dark .content-FNPZI_Xo{border-color:#434651}.content-FNPZI_Xo .row-FNPZI_Xo{align-items:center;color:#131722;display:flex;margin-top:16px}html.theme-dark .content-FNPZI_Xo .row-FNPZI_Xo{color:#b2b5be}.content-FNPZI_Xo .row-FNPZI_Xo:first-child{margin-top:0}.content-FNPZI_Xo .row-FNPZI_Xo .title-FNPZI_Xo{display:flex;flex:none;line-height:21px;margin-left:20px;width:80px;word-break:break-word}.content-FNPZI_Xo .row-FNPZI_Xo .control-FNPZI_Xo{line-height:21px;width:100px} \ No newline at end of file diff --git a/static/charting_library/bundles/91.a9b79ef7ba0a62311a53.js b/static/charting_library/bundles/91.a9b79ef7ba0a62311a53.js new file mode 100644 index 0000000..3f04ae8 --- /dev/null +++ b/static/charting_library/bundles/91.a9b79ef7ba0a62311a53.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[91],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/92.76d5ca7ebec10a1a7a12.js b/static/charting_library/bundles/92.76d5ca7ebec10a1a7a12.js new file mode 100644 index 0000000..f6afbbe --- /dev/null +++ b/static/charting_library/bundles/92.76d5ca7ebec10a1a7a12.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[92],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/92.e46f0aa06bcdbddf3831.css b/static/charting_library/bundles/92.e46f0aa06bcdbddf3831.css new file mode 100644 index 0000000..973c13b --- /dev/null +++ b/static/charting_library/bundles/92.e46f0aa06bcdbddf3831.css @@ -0,0 +1 @@ +.popupWidget-1LnizAbt{box-sizing:border-box;display:flex;padding:12px 14px}@media only screen and (min-width:428px){.popupWidget-1LnizAbt{max-width:342px}}.popupWidget-1LnizAbt:not(:last-child){border-bottom:1px solid #f0f3fa}html.theme-dark .popupWidget-1LnizAbt:not(:last-child){border-bottom:1px solid #2a2e39}.popupWidget-1LnizAbt .desc-1LnizAbt{display:flex;flex:1 1 auto;flex-direction:column}.popupWidget-1LnizAbt .icon-1LnizAbt{flex:0 0 auto;margin:2px 6px 2px 0;overflow:hidden}.popupWidget-1LnizAbt .icon-1LnizAbt.small-1LnizAbt{border-radius:9px;height:18px;width:18px}.popupWidget-1LnizAbt .icon-1LnizAbt.large-1LnizAbt{border-radius:11px;height:22px;width:22px}.popupWidget-1LnizAbt .title-1LnizAbt{font-weight:700}.popupWidget-1LnizAbt .title-1LnizAbt.small-1LnizAbt{font-size:16px;line-height:22px;margin-bottom:4px}.popupWidget-1LnizAbt .title-1LnizAbt.large-1LnizAbt{font-size:18px;line-height:26px;margin-bottom:2px}.popupWidget-1LnizAbt .text-1LnizAbt:first-letter{text-transform:capitalize}.popupWidget-1LnizAbt .text-1LnizAbt.small-1LnizAbt{font-size:14px;line-height:21px}.popupWidget-1LnizAbt .text-1LnizAbt.large-1LnizAbt{font-size:16px;line-height:25px}.popupWidget-1LnizAbt .action-1LnizAbt{color:#2962ff;cursor:pointer;margin-top:8px}.popupWidget-1LnizAbt .action-1LnizAbt.small-1LnizAbt{font-size:14px;line-height:21px}.popupWidget-1LnizAbt .action-1LnizAbt.large-1LnizAbt{font-size:16px;line-height:25px}.additionalWidget-1LnizAbt{margin-bottom:12px;margin-top:12px}.additionalWidget-1LnizAbt:last-child{margin-bottom:0} \ No newline at end of file diff --git a/static/charting_library/bundles/92.e46f0aa06bcdbddf3831.rtl.css b/static/charting_library/bundles/92.e46f0aa06bcdbddf3831.rtl.css new file mode 100644 index 0000000..e8fdd8a --- /dev/null +++ b/static/charting_library/bundles/92.e46f0aa06bcdbddf3831.rtl.css @@ -0,0 +1 @@ +.popupWidget-1LnizAbt{box-sizing:border-box;display:flex;padding:12px 14px}@media only screen and (min-width:428px){.popupWidget-1LnizAbt{max-width:342px}}.popupWidget-1LnizAbt:not(:last-child){border-bottom:1px solid #f0f3fa}html.theme-dark .popupWidget-1LnizAbt:not(:last-child){border-bottom:1px solid #2a2e39}.popupWidget-1LnizAbt .desc-1LnizAbt{display:flex;flex:1 1 auto;flex-direction:column}.popupWidget-1LnizAbt .icon-1LnizAbt{flex:0 0 auto;margin:2px 0 2px 6px;overflow:hidden}.popupWidget-1LnizAbt .icon-1LnizAbt.small-1LnizAbt{border-radius:9px;height:18px;width:18px}.popupWidget-1LnizAbt .icon-1LnizAbt.large-1LnizAbt{border-radius:11px;height:22px;width:22px}.popupWidget-1LnizAbt .title-1LnizAbt{font-weight:700}.popupWidget-1LnizAbt .title-1LnizAbt.small-1LnizAbt{font-size:16px;line-height:22px;margin-bottom:4px}.popupWidget-1LnizAbt .title-1LnizAbt.large-1LnizAbt{font-size:18px;line-height:26px;margin-bottom:2px}.popupWidget-1LnizAbt .text-1LnizAbt:first-letter{text-transform:capitalize}.popupWidget-1LnizAbt .text-1LnizAbt.small-1LnizAbt{font-size:14px;line-height:21px}.popupWidget-1LnizAbt .text-1LnizAbt.large-1LnizAbt{font-size:16px;line-height:25px}.popupWidget-1LnizAbt .action-1LnizAbt{color:#2962ff;cursor:pointer;margin-top:8px}.popupWidget-1LnizAbt .action-1LnizAbt.small-1LnizAbt{font-size:14px;line-height:21px}.popupWidget-1LnizAbt .action-1LnizAbt.large-1LnizAbt{font-size:16px;line-height:25px}.additionalWidget-1LnizAbt{margin-bottom:12px;margin-top:12px}.additionalWidget-1LnizAbt:last-child{margin-bottom:0} \ No newline at end of file diff --git a/static/charting_library/bundles/93.17d34ca77a7fc85a24d9.css b/static/charting_library/bundles/93.17d34ca77a7fc85a24d9.css new file mode 100644 index 0000000..d932b57 --- /dev/null +++ b/static/charting_library/bundles/93.17d34ca77a7fc85a24d9.css @@ -0,0 +1 @@ +.dialog-23lGwisF{min-width:254px;padding:40px;width:auto}.dialogInner-23lGwisF{align-items:center;display:flex;flex-direction:column}.titleWrapper-23lGwisF{align-items:center;display:flex;justify-content:center;margin-bottom:16px;max-width:100%}.title-23lGwisF{color:#131722;cursor:default;font-size:20px;font-weight:700;line-height:28px;overflow:hidden;white-space:nowrap}html.theme-dark .title-23lGwisF{color:#b2b5be}.infoHint-23lGwisF{color:#787b86;height:18px;margin-left:8px;width:18px}.form-23lGwisF{display:flex;width:100%}.inputWrapper-23lGwisF{flex-grow:1}.input-23lGwisF{text-align:center}.hint-23lGwisF{color:#787b86;cursor:default;font-size:12px;line-height:18px;margin-top:3px;max-width:100%;overflow:hidden;white-space:nowrap}.error-23lGwisF{color:#f44336} \ No newline at end of file diff --git a/static/charting_library/bundles/93.17d34ca77a7fc85a24d9.rtl.css b/static/charting_library/bundles/93.17d34ca77a7fc85a24d9.rtl.css new file mode 100644 index 0000000..78d1509 --- /dev/null +++ b/static/charting_library/bundles/93.17d34ca77a7fc85a24d9.rtl.css @@ -0,0 +1 @@ +.dialog-23lGwisF{min-width:254px;padding:40px;width:auto}.dialogInner-23lGwisF{align-items:center;display:flex;flex-direction:column}.titleWrapper-23lGwisF{align-items:center;display:flex;justify-content:center;margin-bottom:16px;max-width:100%}.title-23lGwisF{color:#131722;cursor:default;font-size:20px;font-weight:700;line-height:28px;overflow:hidden;white-space:nowrap}html.theme-dark .title-23lGwisF{color:#b2b5be}.infoHint-23lGwisF{color:#787b86;height:18px;margin-right:8px;width:18px}.form-23lGwisF{display:flex;width:100%}.inputWrapper-23lGwisF{flex-grow:1}.input-23lGwisF{text-align:center}.hint-23lGwisF{color:#787b86;cursor:default;font-size:12px;line-height:18px;margin-top:3px;max-width:100%;overflow:hidden;white-space:nowrap}.error-23lGwisF{color:#f44336} \ No newline at end of file diff --git a/static/charting_library/bundles/93.6de56ef1975f4a31e542.js b/static/charting_library/bundles/93.6de56ef1975f4a31e542.js new file mode 100644 index 0000000..6d9ef0d --- /dev/null +++ b/static/charting_library/bundles/93.6de56ef1975f4a31e542.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[93],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/94.231bea5fb12b806ef287.js b/static/charting_library/bundles/94.231bea5fb12b806ef287.js new file mode 100644 index 0000000..c6a6710 --- /dev/null +++ b/static/charting_library/bundles/94.231bea5fb12b806ef287.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[94],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/94.b204218cb73b576333a1.css b/static/charting_library/bundles/94.b204218cb73b576333a1.css new file mode 100644 index 0000000..d734f29 --- /dev/null +++ b/static/charting_library/bundles/94.b204218cb73b576333a1.css @@ -0,0 +1 @@ +.dialog-Gd2kEiLq{min-height:300px;min-width:380px}.wrap-Gd2kEiLq{margin-top:10px;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .wrap-Gd2kEiLq{scrollbar-color:#363a45 #0000}.wrap-Gd2kEiLq::-webkit-scrollbar{height:5px;width:5px}.wrap-Gd2kEiLq::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .wrap-Gd2kEiLq::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.wrap-Gd2kEiLq::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.wrap-Gd2kEiLq::-webkit-scrollbar-corner{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/94.b204218cb73b576333a1.rtl.css b/static/charting_library/bundles/94.b204218cb73b576333a1.rtl.css new file mode 100644 index 0000000..d734f29 --- /dev/null +++ b/static/charting_library/bundles/94.b204218cb73b576333a1.rtl.css @@ -0,0 +1 @@ +.dialog-Gd2kEiLq{min-height:300px;min-width:380px}.wrap-Gd2kEiLq{margin-top:10px;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .wrap-Gd2kEiLq{scrollbar-color:#363a45 #0000}.wrap-Gd2kEiLq::-webkit-scrollbar{height:5px;width:5px}.wrap-Gd2kEiLq::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .wrap-Gd2kEiLq::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.wrap-Gd2kEiLq::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.wrap-Gd2kEiLq::-webkit-scrollbar-corner{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/95.51244d1c4baf49d08807.css b/static/charting_library/bundles/95.51244d1c4baf49d08807.css new file mode 100644 index 0000000..6e7571e --- /dev/null +++ b/static/charting_library/bundles/95.51244d1c4baf49d08807.css @@ -0,0 +1 @@ +.separator-3wSrFLTr{border-top:1px solid #e0e3eb}html.theme-dark .separator-3wSrFLTr{border-top:1px solid #434651}.scrollable-3wSrFLTr{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-3wSrFLTr{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-3wSrFLTr{min-height:auto}}.scrollable-3wSrFLTr::-webkit-scrollbar{height:5px;width:5px}.scrollable-3wSrFLTr::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-3wSrFLTr::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-3wSrFLTr::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-3wSrFLTr::-webkit-scrollbar-corner{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/95.51244d1c4baf49d08807.rtl.css b/static/charting_library/bundles/95.51244d1c4baf49d08807.rtl.css new file mode 100644 index 0000000..6e7571e --- /dev/null +++ b/static/charting_library/bundles/95.51244d1c4baf49d08807.rtl.css @@ -0,0 +1 @@ +.separator-3wSrFLTr{border-top:1px solid #e0e3eb}html.theme-dark .separator-3wSrFLTr{border-top:1px solid #434651}.scrollable-3wSrFLTr{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-3wSrFLTr{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-3wSrFLTr{min-height:auto}}.scrollable-3wSrFLTr::-webkit-scrollbar{height:5px;width:5px}.scrollable-3wSrFLTr::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-3wSrFLTr::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-3wSrFLTr::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-3wSrFLTr::-webkit-scrollbar-corner{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/95.6f7da80aac5cf2bf77d6.js b/static/charting_library/bundles/95.6f7da80aac5cf2bf77d6.js new file mode 100644 index 0000000..ace3b59 --- /dev/null +++ b/static/charting_library/bundles/95.6f7da80aac5cf2bf77d6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[95],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/96.43bb935eee30715afff7.js b/static/charting_library/bundles/96.43bb935eee30715afff7.js new file mode 100644 index 0000000..ca3eb9c --- /dev/null +++ b/static/charting_library/bundles/96.43bb935eee30715afff7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[96],[]]); \ No newline at end of file diff --git a/static/charting_library/bundles/96.be9ad3d6a7c91501bb55.css b/static/charting_library/bundles/96.be9ad3d6a7c91501bb55.css new file mode 100644 index 0000000..254b0e0 --- /dev/null +++ b/static/charting_library/bundles/96.be9ad3d6a7c91501bb55.css @@ -0,0 +1 @@ +.scrollable-2w4-r8AL{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-2w4-r8AL{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-2w4-r8AL{min-height:auto}}.scrollable-2w4-r8AL::-webkit-scrollbar{height:5px;width:5px}.scrollable-2w4-r8AL::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-2w4-r8AL::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-2w4-r8AL::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-2w4-r8AL::-webkit-scrollbar-corner{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/96.be9ad3d6a7c91501bb55.rtl.css b/static/charting_library/bundles/96.be9ad3d6a7c91501bb55.rtl.css new file mode 100644 index 0000000..254b0e0 --- /dev/null +++ b/static/charting_library/bundles/96.be9ad3d6a7c91501bb55.rtl.css @@ -0,0 +1 @@ +.scrollable-2w4-r8AL{-ms-overflow-style:none;-webkit-overflow-scrolling:touch;flex:1 1 auto;min-height:145px;overflow-x:hidden;overflow-y:auto;scrollbar-color:#9598a1 #0000;scrollbar-width:thin}html.theme-dark .scrollable-2w4-r8AL{scrollbar-color:#363a45 #0000}@media screen and (max-height:290px){.scrollable-2w4-r8AL{min-height:auto}}.scrollable-2w4-r8AL::-webkit-scrollbar{height:5px;width:5px}.scrollable-2w4-r8AL::-webkit-scrollbar-thumb{background-color:#9598a1;border:1px solid #f0f3fa;border-radius:3px}html.theme-dark .scrollable-2w4-r8AL::-webkit-scrollbar-thumb{background-color:#363a45;border-color:#1e222d}.scrollable-2w4-r8AL::-webkit-scrollbar-track{background-color:initial;border-radius:3px}.scrollable-2w4-r8AL::-webkit-scrollbar-corner{display:none} \ No newline at end of file diff --git a/static/charting_library/bundles/a6506134daec7169f68f563f084a9d41.svg b/static/charting_library/bundles/a6506134daec7169f68f563f084a9d41.svg new file mode 100644 index 0000000..8c4fa80 --- /dev/null +++ b/static/charting_library/bundles/a6506134daec7169f68f563f084a9d41.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/charting_library/bundles/add-compare-dialog.f980c19f222ff9cb8fe6.js b/static/charting_library/bundles/add-compare-dialog.f980c19f222ff9cb8fe6.js new file mode 100644 index 0000000..6c7d750 --- /dev/null +++ b/static/charting_library/bundles/add-compare-dialog.f980c19f222ff9cb8fe6.js @@ -0,0 +1,9 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["add-compare-dialog"],{"/KDZ":function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n("q1tI");class o extends a.PureComponent{constructor(e){super(e),this._handleChange=()=>{this.forceUpdate()},this.state={query:window.matchMedia(this.props.rule)}}componentDidMount(){this._subscribe(this.state.query)}componentDidUpdate(e,t){this.state.query!==t.query&&(this._unsubscribe(t.query),this._subscribe(this.state.query))}componentWillUnmount(){this._unsubscribe(this.state.query)}render(){return this.props.children(this.state.query.matches)}static getDerivedStateFromProps(e,t){return e.rule!==t.query.media?{query:window.matchMedia(e.rule)}:null}_subscribe(e){e.addListener(this._handleChange)}_unsubscribe(e){e.removeListener(this._handleChange)}}},"8R5U":function(e,t){e.exports=''},"8d0Q":function(e,t,n){"use strict";var a=n("q1tI");function o(){const[e,t]=Object(a.useState)(!1);return[e,{onMouseOver:function(e){r(e)&&t(!0)},onMouseOut:function(e){r(e)&&t(!1)}}]}function r(e){return!e.currentTarget.contains(e.relatedTarget)}function c(e){const[t,n]=Object(a.useState)(!1);return Object(a.useEffect)(()=>{const t=t=>{if(null===e.current)return;const a=e.current.contains(t.target);n(a)} +;return document.addEventListener("mouseover",t),()=>document.removeEventListener("mouseover",t)},[]),t}n.d(t,"c",(function(){return o})),n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return c}))},B2fo:function(e,t,n){e.exports={label:"label-AT0tDw0n"}},DtPX:function(e,t,n){e.exports={dialog:"dialog-1o8lbzhQ",tablet:"tablet-1o8lbzhQ"}},F0Qt:function(e){e.exports=JSON.parse('{"wrapper":"wrapper-21v50zE8","input":"input-24iGIobO","box":"box-3574HVnv","icon":"icon-2jsUbtec","noOutline":"noOutline-3VoWuntz","intent-danger":"intent-danger-1Sr9dowC","check":"check-382c8Fu1","dot":"dot-3gRd-7Qt"}')},GqiZ:function(e,t,n){e.exports={button:"button-3vkvsUbb",bordersVisible:"bordersVisible-3vkvsUbb",selected:"selected-3vkvsUbb"}},N5tr:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return v}));var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),c=n("tWVy"),l=n("JWMC"),i=n("ijHL"),s=n("v1bN");const u=s;function d(e){const{reference:t,...n}=e,a={...n,ref:t};return o.a.createElement(e.href?"a":"div",a)}function m(e){e.stopPropagation()}function v(e){const{id:t,role:n,"aria-selected":u,className:v,title:h,labelRowClassName:p,labelClassName:b,shortcut:f,forceShowShortcuts:g,icon:w,isActive:S,isDisabled:y,isHovered:x,appearAsDisabled:E,label:O,link:C,showToolboxOnHover:k,target:I,rel:N,toolbox:j,reference:M,onMouseOut:D,onMouseOver:T,suppressToolboxClick:_=!0,theme:z=s}=e,B=Object(i.b)(e),A=Object(a.useRef)(null);return o.a.createElement(d,{...B,id:t,role:n,"aria-selected":u,className:r(v,z.item,w&&z.withIcon,{[z.isActive]:S,[z.isDisabled]:y||E,[z.hovered]:x}),title:h,href:C,target:I,rel:N,reference:function(e){A.current=e,"function"==typeof M&&M(e);"object"==typeof M&&(M.current=e)},onClick:function(t){const{dontClosePopup:n,onClick:a,onClickArg:o,trackEventObject:r}=e;if(y)return;r&&Object(l.trackEvent)(r.category,r.event,r.label);a&&a(o,t);n||Object(c.b)()},onContextMenu:function(t){const{trackEventObject:n,trackRightClick:a}=e;n&&a&&Object(l.trackEvent)(n.category,n.event,n.label+"_rightClick")},onMouseUp:function(t){const{trackEventObject:n,trackMouseWheelClick:a}=e;if(1===t.button&&C&&n){let e=n.label;a&&(e+="_mouseWheelClick"),Object(l.trackEvent)(n.category,n.event,e)}},onMouseOver:T,onMouseOut:D},void 0!==w&&o.a.createElement("div",{className:z.icon,dangerouslySetInnerHTML:{__html:w}}),o.a.createElement("div",{className:r(z.labelRow,p)},o.a.createElement("div",{className:r(z.label,b)},O)),(void 0!==f||g)&&o.a.createElement("div",{className:z.shortcut},(P=f)&&P.split("+").join(" + ")),void 0!==j&&o.a.createElement("div",{onClick:_?m:void 0,className:r(z.toolbox,{[z.showOnHover]:k})},j));var P}},"P4l+":function(e,t,n){},Q5EB:function(e,t,n){e.exports={wrap:"wrap-38TyPnxL",header:"header-38TyPnxL",item:"item-38TyPnxL"}},Sn4D:function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var a=n("q1tI"),o=n.n(a),r=n("Eyy1"),c=n("TSYQ"),l=n("x0D+"),i=n("0YpW"),s=n("AiMB"),u=n("mkWe"),d=n("qFKp"),m=n("X0gx"),v=n("sHQ4");function h(e){ +const{position:t="Bottom",onClose:n,children:h,className:p,theme:b=v}=e,f=Object(r.ensureNotNull)(Object(a.useContext)(u.a)),[g,w]=Object(a.useState)(0),S=Object(a.useRef)(null),y=Object(a.useContext)(m.a);return Object(a.useEffect)(()=>{const e=Object(r.ensureNotNull)(S.current);return e.focus({preventScroll:!0}),y.subscribe(f,n),Object(i.a)(!0),d.CheckMobile.iOS()&&Object(l.disableBodyScroll)(e),w(f.addDrawer()),()=>{y.unsubscribe(f,n);const t=f.removeDrawer();d.CheckMobile.iOS()&&Object(l.enableBodyScroll)(e),0===t&&Object(i.a)(!1)}},[]),o.a.createElement(s.a,null,o.a.createElement("div",{className:c(v.wrap,v["position"+t])},g===f.currentDrawer&&o.a.createElement("div",{className:v.backdrop,onClick:n}),o.a.createElement("div",{className:c(v.drawer,b.drawer,v["position"+t],p),ref:S,tabIndex:-1,"data-name":e["data-name"]},h)))}},X0gx:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n("q1tI"),o=n.n(a),r=n("tWVy");const c=o.a.createContext(r.a)},XG33:function(e,t,n){e.exports={scrollable:"scrollable-1zurvWNw",spinnerWrap:"spinnerWrap-1zurvWNw",item:"item-1zurvWNw",heading:"heading-1zurvWNw",checkboxWrap:"checkboxWrap-1zurvWNw",checkbox:"checkbox-1zurvWNw",emptyState:"emptyState-1zurvWNw",image:"image-1zurvWNw",text:"text-1zurvWNw"}},Xy1d:function(e,t){e.exports=''},"a+BI":function(e,t,n){"use strict";n.r(t);var a=n("q1tI"),o=n.n(a),r=n("YFKU"),c=n("8+VR"),l=n("Kxc7"),i=n("kNVT"),s=n("TSYQ"),u=n.n(s),d=n("cvc5"),m=n.n(d),v=n("Eyy1"),h=n("Iivm"),p=n("tmL0"),b=n("vqb8"),f=n("jPOK"),g=n("zM7N"),w=n("oiZD"),S=n("VogD"),y=n("zjoO");const x=o.a.createContext(null);var E=n("8d0Q"),O=n("OoQL");const C=o.a.createContext(null);var k=n("N5tr"),I=n("Sn4D"),N=n("mkWe"),j=n("GqiZ");function M(e){const{theme:t=j,children:n,onClick:a,isSelected:r,areBordersVisible:c,isItemSelected:l,className:i,value:s,name:d}=e;return o.a.createElement("button",{type:"button",className:u()(i,t.button,r&&t.selected,c&&!r&&!l&&t.bordersVisible),name:d,value:s,onClick:a},n)}function D(e){const{value:t,onClick:n,...r}=e,c=Object(a.useCallback)(e=>n(t,e),[t,n]);return o.a.createElement(M,{...r,value:String(t),onClick:c})}var T=n("xlAh"),_=n("Q5EB");const z={sameScale:Object(r.t)("Same % scale"),newPriceScale:Object(r.t)("New price scale"),newPane:Object(r.t)("New pane")};function B(e){const{fullSymbolName:t,isSelected:n,className:a}=e,{isMobile:c,searchRef:l,setMode:s}=Object(O.a)(S.a),{compareModel:d,selectedCompareOption:m,setHoveredItemId:v,clearInput:h,allowExtendTimeScale:p}=Object(O.a)(x),{callback:b}=Object(O.a)(C);return c?o.a.createElement(N.b,null,o.a.createElement(I.a,{position:"Bottom",onClose:f.bind(null,!1)},o.a.createElement("div",{className:_.header},Object(r.t)("Add to")),o.a.createElement(k.b,{className:_.item,onClick:g,onClickArg:T.a.SameScale,label:z.sameScale}),o.a.createElement(k.b,{className:_.item,onClick:g, +onClickArg:T.a.NewPriceScale,label:z.newPriceScale}),o.a.createElement(k.b,{className:_.item,onClick:g,onClickArg:T.a.NewPane,label:z.newPane}))):o.a.createElement("div",{className:u()(_.wrap,a),"data-name":"compare-buttons-group"},o.a.createElement(D,{onClick:g,value:T.a.SameScale,isItemSelected:Boolean(n),isSelected:n&&m===T.a.SameScale},z.sameScale),o.a.createElement(D,{onClick:g,value:T.a.NewPriceScale,isItemSelected:Boolean(n),isSelected:n&&m===T.a.NewPriceScale},z.newPriceScale),o.a.createElement(D,{onClick:g,value:T.a.NewPane,isItemSelected:Boolean(n),isSelected:n&&m===T.a.NewPane},z.newPane));function f(e){c&&b&&b(),h&&e&&h(l,s)}function g(e,n){if(n.preventDefault(),d&&t&&void 0!==e){Object(i.getSymbolSearchCompleteOverrideFunction)()(t).then(t=>{d.applyStudy(t,e,p),v(""),f(!0)})}}}function A(e){const{isSelected:t,fullSymbolName:n,onExpandClick:r,actions:l,id:s,isOffset:u}=e,{isMobile:d,toggleExpand:m,searchSpreads:v,searchRef:h,setMode:p}=Object(O.a)(S.a),{compareModel:b,hoveredItemId:f,setHoveredItemId:g,clearInput:w,allowExtendTimeScale:k}=Object(O.a)(x),[I,N]=Object(a.useState)(!1),j=Object(a.useRef)(null),M=Object(E.b)(j),D=Object(a.useMemo)(()=>({callback:A}),[A]),_=!Boolean(r)&&!Boolean(l),z=s===f;return o.a.createElement(C.Provider,{value:D},o.a.createElement(y.a,{...e,reference:j,onClick:function(t){if(Boolean(r)&&s&&!u)return t.preventDefault(),void m(s);if(!I&&d)return void N(!0);if(v&&e.onClick)return void e.onClick(t);if((c.mobiletouch?z:!I)&&n){Object(i.getSymbolSearchCompleteOverrideFunction)()(n).then(e=>{b.applyStudy(e,T.a.SameScale,k)}),g(""),w&&w(h,p)}c.mobiletouch&&!d&&!z&&s&&g(s)},hoverComponent:function(){if(!_)return!1;if(d)return I;if(c.mobiletouch)return z;return Boolean(M||t)}()?B:void 0}));function A(){N(!1)}}var P=n("8R5U"),R=n("mjks"),W=n("Xy1d"),L=n("XG33");function q(e){const{handleListWidth:t}=Object(v.ensureNotNull)(Object(a.useContext)(S.a)),{compareModel:n,selectedCompareIndex:c,selectedItemRef:l}=Object(v.ensureNotNull)(Object(a.useContext)(x)),i=Object(b.a)({watchedValue:n.isDataReady()}),s=Object(b.a)({watchedValue:n.studies()}),d=Object(b.a)({watchedValue:n.highlightedSymbol()}),E=Object(a.useMemo)(()=>s.filter(e=>e.checked),[s]),O=Object(a.useMemo)(()=>s.filter(e=>!e.checked),[s]);return Object(a.useEffect)(()=>(n.chartModel().dataSourceCollectionChanged().subscribe(n,n.handleSourcesChange),()=>n.chartModel().dataSourceCollectionChanged().unsubscribe(n,n.handleSourcesChange)),[n]),o.a.createElement(m.a,{onMeasure:function(e){t(e.width)}},o.a.createElement(p.a,{className:L.scrollable},function(){if(!i)return o.a.createElement("div",{className:L.spinnerWrap},o.a.createElement(f.a,null));if(!Boolean(E.length)&&!Boolean(O.length)){const e=w.watchedTheme.value()===g.a.Dark?R:P;return o.a.createElement("div",{className:L.emptyState},o.a.createElement(h.a,{className:L.image,icon:e}),o.a.createElement("div",{className:L.text},Object(r.t)("No symbols here yet — why not add some?")))} +return o.a.createElement(o.a.Fragment,null,Boolean(E.length)&&o.a.createElement(o.a.Fragment,null,o.a.createElement("div",{className:L.heading},Object(r.t)("Added symbols")),E.map((e,t)=>o.a.createElement(y.a,{"data-role":"added-symbol-item",className:L.item,key:e.id,id:e.id,title:e.title,dangerousDescriptionHTML:e.description,exchangeName:e.exchangeName,marketType:e.marketType,country:e.country,providerId:e.providerId,onClick:C.bind(null,e),isHighlighted:e.id===d,isSelected:k(e),itemRef:k(e)?l:void 0,actions:o.a.createElement("div",{className:L.checkboxWrap},o.a.createElement(M,{className:L.checkbox,onClick:C.bind(null,e),isSelected:k(e)},o.a.createElement(h.a,{icon:W})))}))),Boolean(O.length)&&o.a.createElement(o.a.Fragment,null,o.a.createElement("div",{className:L.heading},Object(r.t)("Recent symbols")),O.map(e=>o.a.createElement(A,{"data-role":"recent-symbol-item",className:u()(L.item,e.id===d&&L.highlighted),key:e.id,id:e.id,title:e.title,dangerousDescriptionHTML:e.description,exchangeName:e.exchangeName,marketType:e.marketType,country:e.country,providerId:e.providerId,fullSymbolName:e.symbol,isSelected:k(e),itemRef:k(e)?l:void 0}))))}()));function C(e,t){t.preventDefault(),n.removeStudy(e)}function k(e){return s.indexOf(e)===c}}var H=n("Vdly");class V extends o.a.PureComponent{constructor(e){super(e),this._selectedItemRef=o.a.createRef(),this._getContextValue=()=>{const{compareModel:e}=this.props,{selectedCompareOption:t,selectedCompareIndex:n,hoveredItemId:a,allowExtendTimeScale:o}=this.state;return{compareModel:e,selectedCompareOption:t,setSelectedCompareOption:this._setSelectedCompareOption,hoveredItemId:a,setHoveredItemId:this._setHoveredItemId,selectedCompareIndex:n,setSelectedCompareIndex:this._setSelectedCompareIndex,selectedItemRef:this._selectedItemRef,clearInput:this._clearInput,allowExtendTimeScale:o,toggleAllowExtendTimeScale:this._toggleAllowExtendTimeScale}},this._clearInput=(e,t)=>{e&&e.current&&(e.current.value="",t("compare"))},this._setSelectedCompareOption=e=>{this.setState({selectedCompareOption:e})},this._setHoveredItemId=e=>{this.setState({hoveredItemId:e})},this._setSelectedCompareIndex=(e,t)=>{this.setState({selectedCompareIndex:e},t)},this._toggleAllowExtendTimeScale=()=>{const e=!this.state.allowExtendTimeScale;H.setValue("showAddSymbolDialog.extendCheckboxState",e),this.setState({allowExtendTimeScale:e})},this.state={selectedCompareOption:0,selectedCompareIndex:-1,hoveredItemId:void 0,allowExtendTimeScale:Boolean(H.getBool("showAddSymbolDialog.extendCheckboxState"))}}render(){const{children:e}=this.props;return o.a.createElement(x.Provider,{value:this._getContextValue()},e)}}var F=n("/3z9"),Q=n("g89m"),U=n("DtPX");const X=Object.keys(T.a).length/2;function Y(e){ +const{openedItems:t,searchRef:n,feedItems:r,selectedIndex:c,toggleExpand:l,onSearchComplete:i,mode:u,setMode:d,setSelectedIndex:m,isMobile:v,isTablet:h,onClose:p,upperCaseEnabled:f}=Object(O.a)(S.a),{compareModel:g,hoveredItemId:w,setHoveredItemId:y,selectedCompareOption:E,setSelectedCompareOption:C,selectedCompareIndex:k,setSelectedCompareIndex:I,selectedItemRef:N,clearInput:j,allowExtendTimeScale:M}=Object(O.a)(x),D=Object(b.a)({watchedValue:g.studies()}),T=r[c],_="compare"===u;return Object(a.useEffect)(()=>{w&&y(""),k&&I(-1)},[u]),o.a.createElement(Q.a,{...e,className:s(U.dialog,!v&&h&&U.tablet),onKeyDown:function(e){var a;const o=Object(F.hashFromEvent)(e),s=_?k:c,u=_?D:r;switch(o){case 38:if(e.preventDefault(),0===s)return;if(-1===s)return void z(0);z(s-1);break;case 40:if(e.preventDefault(),s===u.length-1)return;z(s+1);break;case 37:{const n=A();if(n&&t.has(n))return e.preventDefault(),void l(n);if(!E||n)return;e.preventDefault(),C(E-1);break}case 39:{const n=A();if(n&&!t.has(n))return e.preventDefault(),void l(n);if(E===X-1||n)return;e.preventDefault(),C(E+1);break}case 13:{if(_)return void function(){if(-1===k)return;const e=D[k];e.checked?g.removeStudy(e):g.applyStudy(e.symbol,E,M);I(-1)}();const t=A();if(t)return e.preventDefault(),void l(t);e.preventDefault();const o=null===(a=null==n?void 0:n.current)||void 0===a?void 0:a.value.trim();o&&j&&(i([{symbol:f?o.toUpperCase():o,resolved:!1,compareOption:E,allowExtendTimeScale:M}]),j(n,d));break}case 27:e.preventDefault(),p()}},dataName:"compare-dialog",draggable:!0});function z(e){_?I(e,B):m(e)}function B(){var e;null===(e=N.current)||void 0===e||e.scrollIntoView({block:"nearest"})}function A(){if(!T)return;const{id:e,isOffset:t,onExpandClick:n}=T;return!t&&Boolean(n)&&e?e:void 0}}var G=n("i8i4"),K=n.n(G),J=n("CJov"),Z=n("uTDg"),$=(n("p04v"),n("sQaR"));class ee extends $.a{constructor(e){super(),this._props=e}show(){if(this.visible().value())return;const e=o.a.createElement(J.a.Provider,{value:null},o.a.createElement(Z.a,{...this._props,initialMode:this._props.initialMode||"symbolSearch",onClose:()=>this.hide()}));K.a.render(e,this._container),this._setVisibility(!0)}hide(){var e,t;K.a.unmountComponentAtNode(this._container),this._visibility.setValue(!1),null===(t=(e=this._props).onClose)||void 0===t||t.call(e)}}var te=n("TgrR"),ne=n("QHWU"),ae=n("ki38");function oe(e){const{searchRef:t,setMode:n}=Object(O.a)(S.a),{currentMode:r}=Object(O.a)(ae.a);return Object(a.useEffect)(()=>{const e=t.current;if(e)return e.addEventListener("input",c),()=>{e&&e.removeEventListener("input",c)}},[]),o.a.createElement(ne.a,{...e});function c(){var e,a,o,c;t.current&&r&&("compare"!==r.current||""===(null===(a=null===(e=null==t?void 0:t.current)||void 0===e?void 0:e.value)||void 0===a?void 0:a.trim())?"symbolSearch"===r.current&&""===(null===(c=null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.value)||void 0===c?void 0:c.trim())&&n("compare"):n("symbolSearch"))}}var re=n("vCF3"),ce=n("tOje"),le=n("B2fo");function ie(e){ +const{allowExtendTimeScale:t,toggleAllowExtendTimeScale:n}=Object(v.ensureNotNull)(Object(a.useContext)(x));return o.a.createElement(ce.a,null,o.a.createElement("label",null,o.a.createElement(re.a,{checked:t,value:t?"on":"off",onChange:n}),o.a.createElement("span",{className:le.label},Object(r.t)("Allow extend time scale"))))}n.d(t,"getCompareDialogRenderer",(function(){return ue}));const se=l.enabled("secondary_series_extend_time_scale");function ue(e){return new ee({wrapper:(t=e,e=>o.a.createElement(V,{...e,compareModel:t})),dialog:Y,contentItem:A,initialScreen:q,searchInput:oe,footer:se?o.a.createElement(ie):void 0,initialMode:"compare",dialogTitle:Object(r.t)("Compare symbol"),autofocus:!c.mobiletouch,dialogWidth:"fixed",onSearchComplete:t=>{const{compareOption:n,allowExtendTimeScale:a}=t[0];if(void 0!==n){Object(i.getSymbolSearchCompleteOverrideFunction)()(t[0].symbol).then(t=>{e.applyStudy(t,n,a)})}},symbolTypes:Object(te.d)(),showSpreadActions:l.enabled("show_spread_operators")&&l.enabled("compare_symbol_search_spread_operators")});var t}},mjks:function(e,t){e.exports=''},mkWe:function(e,t,n){"use strict";n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return c}));var a=n("q1tI"),o=n.n(a);class r extends o.a.PureComponent{constructor(e){super(e),this._addDrawer=()=>{ +const e=this.state.currentDrawer+1;return this.setState({currentDrawer:e}),e},this._removeDrawer=()=>{const e=this.state.currentDrawer-1;return this.setState({currentDrawer:e}),e},this.state={currentDrawer:0}}render(){return o.a.createElement(c.Provider,{value:{addDrawer:this._addDrawer,removeDrawer:this._removeDrawer,currentDrawer:this.state.currentDrawer}},this.props.children)}}const c=o.a.createContext(null)},os48:function(e,t,n){e.exports={footer:"footer-3r-9t_XG"}},sHQ4:function(e,t,n){e.exports={wrap:"wrap-164vy-kj",positionBottom:"positionBottom-164vy-kj",backdrop:"backdrop-164vy-kj",drawer:"drawer-164vy-kj",positionLeft:"positionLeft-164vy-kj"}},tOje:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n("q1tI"),o=n.n(a),r=n("TSYQ"),c=n.n(r),l=n("os48");function i(e){const{className:t,children:n}=e;return o.a.createElement("div",{className:c()(l.footer,t)},n)}},tUxN:function(e,t){e.exports=''},tmL0:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n("q1tI"),o=n.n(a),r=n("x0D+"),c=n("Eyy1"),l=n("qFKp");function i(e){const{reference:t,children:n,...c}=e,i=Object(a.useRef)(null),u=Object(a.useCallback)(e=>{t&&(t.current=e),l.CheckMobile.iOS()&&(null!==i.current&&Object(r.enableBodyScroll)(i.current),i.current=e,null!==i.current&&Object(r.disableBodyScroll)(i.current,{allowTouchMove:s(i)}))},[t]);return o.a.createElement("div",{ref:u,...c},n)}function s(e){return t=>{const n=Object(c.ensureNotNull)(e.current),a=document.activeElement;return!n.contains(t)||null!==a&&n.contains(a)&&a.contains(t)}}},v1bN:function(e,t,n){e.exports={"tablet-small-breakpoint":"screen and (max-width: 428px)",item:"item-2IihgTnv",hovered:"hovered-2IihgTnv",isDisabled:"isDisabled-2IihgTnv",isActive:"isActive-2IihgTnv",shortcut:"shortcut-2IihgTnv",toolbox:"toolbox-2IihgTnv",withIcon:"withIcon-2IihgTnv",icon:"icon-2IihgTnv",labelRow:"labelRow-2IihgTnv",label:"label-2IihgTnv",showOnHover:"showOnHover-2IihgTnv"}},vCF3:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n("q1tI"),o=n("TSYQ"),r=n("Iivm"),c=n("tUxN"),l=n("F0Qt");n("P4l+");function i(e){const t=o(l.box,l["intent-"+e.intent],{[l.check]:!Boolean(e.indeterminate),[l.dot]:Boolean(e.indeterminate),[l.noOutline]:-1===e.tabIndex}),n=o(l.wrapper,e.className);return a.createElement("span",{className:n,title:e.title},a.createElement("input",{id:e.id,tabIndex:e.tabIndex,className:l.input,type:"checkbox",name:e.name,checked:e.checked,disabled:e.disabled,value:e.value,autoFocus:e.autoFocus,role:e.role,onChange:function(){e.onChange&&e.onChange(e.value)},ref:e.reference}),a.createElement("span",{className:t},a.createElement(r.a,{icon:c,className:l.icon})))}},"x0D+":function(e,t,n){var a,o,r;o=[t],void 0===(r="function"==typeof(a=function(e){"use strict";function t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);ti.timeStamp)return;const o=i.target;void 0!==n&&null!==t&&null!==o&&o.ownerDocument===r&&(t.contains(o)||n(i))}return i.click&&r.addEventListener("click",o,!1),i.mouseDown&&r.addEventListener("mousedown",o,!1),i.touchEnd&&r.addEventListener("touchend",o,!1),i.touchStart&&r.addEventListener("touchstart",o,!1),()=>{r.removeEventListener("click",o,!1),r.removeEventListener("mousedown",o,!1),r.removeEventListener("touchend",o,!1),r.removeEventListener("touchstart",o,!1)}}n.d(t,"a",(function(){return r}))},iT0o:function(e,t,n){"use strict";n.r(t);var r=n("q1tI"),i=n.n(r),o=n("i8i4"),a=n.n(o),l=n("TSYQ"),s=n.n(l),c=n("YFKU"),u=n("wHCJ"),d=n("ldG2"),f=n("PT1i"),m=n("WXjp"),p=n("Iivm"),v=n("xJ0h");const g=Object(c.t)("Type the interval number for minute charts (i.e. 5 if it is going to be a five minute chart). Or number plus letter for H (Hourly), D (Daily), W (Weekly), M (Monthly) intervals (i.e. D or 2H)"),h=Object(c.t)("Type the interval number for minute charts (i.e. 5 if it's going to be a five minute chart). Or number plus letter for other intervals: S for 1 second chart (15S for 15 second chart, etc.), H (Hourly), D (Daily), W (Weekly), M (Monthly) intervals (i.e. D or 2H)");function b(e){const{className:t,isSecondsEnabled:n}=e;return i.a.createElement(p.a,{icon:v,className:s()("apply-common-tooltip",t),title:n?h:g})}var O=n("h24c"),w=n("pPtI");var E=n("LxhU"),y=n("kXN+");function j(e){const{initVal:t,selectOnInit:n,onClose:o}=e,a=Object(r.useRef)(null),[l,p]=Object(r.useState)(t.toUpperCase()),v=Object(r.useMemo)(()=>Object(O.d)(l),[l]),g=function(e,t){return Object(r.useMemo)(()=>{let n=!t.error&&Object(O.c)(e);if(!n)return!1;const r=t.unit;if("R"===r&&t.qty>Object(w.getMaxResolutionValue)("R"))n=!1;else if(null===r||"H"===r){t.qty*("H"===r?60:1)>Object(w.getMaxResolutionValue)("1")&&(n=!1)}else"S"===r?t.qty>Object(w.getMaxResolutionValue)("S")&&(n=!1):"T"===r&&1!==t.qty&&(n=!1);return n},[e,t])}(l,v),h=Object(r.useMemo)(()=>{if(!g)return null;const e=v.qty+(v.unit||"");return Object(w.getTranslatedResolutionModel)(e).hint},[g,v]);return Object(r.useLayoutEffect)(()=>{var e,t;n?null===(e=a.current)||void 0===e||e.select():null===(t=a.current)||void 0===t||t.focus()},[n]),i.a.createElement(m.a,{className:y.dialog,"data-dialog-name":"change-interval-dialog",isOpened:!0,onClickOutside:o,onFocus:function(){var e;null===(e=a.current)||void 0===e||e.focus()},onKeyDown:function(e){27===e.keyCode&&(null==o||o())}},i.a.createElement("div",{className:y.dialogInner},i.a.createElement("div",{className:y.titleWrapper},i.a.createElement("div",{ +className:y.title},Object(c.t)("Change interval")),i.a.createElement(b,{className:y.infoHint,isSecondsEnabled:Object(w.isSecondsEnabled)()})),i.a.createElement("form",{className:y.form,onSubmit:function(e){e.preventDefault();const t=f.linking.interval.value(),n=E.Interval.normalize(l);n&&t!==n&&g&&(r=n,Object(w.setLastUsedResolution)(r),f.linking.interval.setValue(r));var r;null==o||o()}},i.a.createElement(u.a,{className:s()(y.inputWrapper,d.b.FontSizeLarge),inputClassName:y.input,type:"text",size:"large",reference:a,value:l,maxLength:8,intent:g?void 0:"danger",onChange:function(e){const{value:t}=e.target;p(t.toUpperCase())}})),g?i.a.createElement("div",{className:y.hint},h):i.a.createElement("div",{className:s()(y.hint,y.error)},Object(c.t)("Not applicable"))))}var C=n("Gtzb");function N(e){if(C.b.isOpened("ChangeIntervalDialog")||C.b.isOpened("SymbolSearch"))return;const t=document.createElement("div"),{initVal:n,selectOnInit:r,onClose:o}=e,l=i.a.createElement(j,{initVal:n,selectOnInit:r,onClose:function(){a.a.unmountComponentAtNode(t),C.b.setAsClosed("ChangeIntervalDialog"),null==o||o()}});a.a.render(l,t),C.b.setAsOpened("ChangeIntervalDialog")}n.d(t,"showChangeIntervalDialog",(function(){return N}))},ijHL:function(e,t,n){"use strict";function r(e){return o(e,a)}function i(e){return o(e,l)}function o(e,t){const n=Object.entries(e).filter(t),r={};for(const[e,t]of n)r[e]=t;return r}function a(e){const[t,n]=e;return 0===t.indexOf("data-")&&"string"==typeof n}function l(e){return 0===e[0].indexOf("aria-")}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return i})),n.d(t,"c",(function(){return o})),n.d(t,"e",(function(){return a})),n.d(t,"d",(function(){return l}))},"kXN+":function(e,t,n){e.exports={dialog:"dialog-23lGwisF",dialogInner:"dialogInner-23lGwisF",titleWrapper:"titleWrapper-23lGwisF",title:"title-23lGwisF",infoHint:"infoHint-23lGwisF",form:"form-23lGwisF",inputWrapper:"inputWrapper-23lGwisF",input:"input-23lGwisF",hint:"hint-23lGwisF",error:"error-23lGwisF"}},xJ0h:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/chart-bottom-toolbar.b2e895a5fd3f204fb6b6.js b/static/charting_library/bundles/chart-bottom-toolbar.b2e895a5fd3f204fb6b6.js new file mode 100644 index 0000000..dd2196c --- /dev/null +++ b/static/charting_library/bundles/chart-bottom-toolbar.b2e895a5fd3f204fb6b6.js @@ -0,0 +1,2124 @@ +(window.webpackJsonp = window.webpackJsonp || []).push([ + ["chart-bottom-toolbar"], { + "+GaQ": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var i = n("q1tI"); + + function a(e) { + if (e.map) { + return i.Children.toArray(e.children).map(e.map) + } + return e.children + } + }, + "02pg": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return o + })); + var i = n("q1tI"), + a = n("TSYQ"), + s = n("XiJV"); + + function o(e) { + return i.createElement("div", { + className: a(s.separator, e.className) + }) + } + }, + "1TxM": function(e, t, n) { + "use strict"; + n.d(t, "c", (function() { + return l + })), n.d(t, "a", (function() { + return c + })), n.d(t, "b", (function() { + return h + })); + var i = n("q1tI"), + a = n.n(i), + s = n("17x9"), + o = n.n(s); + const r = a.a.createContext({}); + + function l(e, t) { + o.a.checkPropTypes(t, e, "context", "RegistryContext") + } + + function c(e) { + const { + validation: t, + value: n + } = e; + return l(n, t), a.a.createElement(r.Provider, { + value: n + }, e.children) + } + + function h() { + return r + } + }, + "20PO": function(e, t) { + e.exports = + '' + }, + "2mG+": function(e, t, n) { + e.exports = { + button: "button-2-onvH7F" + } + }, + "5o6O": function(e, t, n) { + e.exports = { + tabs: "tabs-3I2ohC86", + tab: "tab-3I2ohC86", + noBorder: "noBorder-3I2ohC86", + disabled: "disabled-3I2ohC86", + active: "active-3I2ohC86", + defaultCursor: "defaultCursor-3I2ohC86", + slider: "slider-3I2ohC86", + content: "content-3I2ohC86" + } + }, + "6KyJ": function(e, t, n) { + "use strict"; + var i, a = n("q1tI"), + s = n("TSYQ"), + o = n("K9GE"), + r = n("YZ9j"); + n("O7m7"); + ! function(e) { + e[e.Initial = 0] = "Initial", e[e.Appear = 1] = "Appear", e[e.Active = 2] = "Active" + }(i || (i = {})); + class l extends a.PureComponent { + constructor(e) { + super(e), this._stateChangeTimeout = null, this.state = { + state: i.Initial + } + } + render() { + const { + className: e, + color: t = "black" + } = this.props, n = s(r.item, { + [r[t]]: Boolean(t) + }); + return a.createElement("span", { + className: s(r.loader, e, this._getStateClass()) + }, a.createElement("span", { + className: n + }), a.createElement("span", { + className: n + }), a.createElement("span", { + className: n + })) + } + componentDidMount() { + this.setState({ + state: i.Appear + }), this._stateChangeTimeout = setTimeout(() => { + this.setState({ + state: i.Active + }) + }, 2 * o.b) + } + componentWillUnmount() { + this._stateChangeTimeout && (clearTimeout(this._stateChangeTimeout), this + ._stateChangeTimeout = null) + } + _getStateClass() { + switch (this.state.state) { + case i.Initial: + return r["loader-initial"]; + case i.Appear: + return r["loader-appear"]; + default: + return "" + } + } + } + n.d(t, "a", (function() { + return l + })) + }, + "9VJd": function(e, t) { + e.exports = + '' + }, + "9dlw": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return d + })); + var i = n("q1tI"), + a = n.n(i), + s = n("i8i4"), + o = n.n(s), + r = n("AiMB"), + l = n("DTHj"), + c = n("X0gx"), + h = n("8Rai"); + + function d(e) { + const { + controller: t, + children: n, + isOpened: s, + closeOnClickOutside: d = !0, + doNotCloseOn: u, + onClickOutside: m, + onClose: g, + ...p + } = e, b = Object(i.useContext)(c.a), v = Object(h.a)({ + handler: function(e) { + m && m(e); + if (!d) return; + if (u && e.target instanceof Node) { + const t = o.a.findDOMNode(u); + if (t instanceof Node && t.contains(e.target)) return + } + g() + }, + mouseDown: !0, + touchStart: !0 + }); + return s ? a.a.createElement(r.a, { + top: "0", + left: "0", + right: "0", + bottom: "0", + pointerEvents: "none" + }, a.a.createElement("span", { + ref: v, + style: { + pointerEvents: "auto" + } + }, a.a.createElement(l.b, { + ...p, + onClose: g, + onScroll: function(t) { + const { + onScroll: n + } = e; + n && n(t) + }, + customCloseDelegate: b, + ref: t + }, n))) : null + } + }, + ApAi: function(e, t) { + e.exports = + '' + }, + "J+f8": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return a + })); + var i = n("q1tI"); + const a = i.createContext(!1) + }, + J3OW: function(e, t, n) { + e.exports = { + button: "button-15caiVtH", + separator: "separator-15caiVtH" + } + }, + K3s3: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return r + })), n.d(t, "b", (function() { + return l + })), n.d(t, "c", (function() { + return c + })); + var i = n("q1tI"), + a = n("TSYQ"), + s = n("Eyy1"), + o = n("5o6O"); + const r = o; + + function l(e) { + const t = a(e.className, o.tab, { + [o.active]: e.isActive, + [o.disabled]: e.isDisabled, + [o.defaultCursor]: !!e.shouldUseDefaultCursor, + [o.noBorder]: !!e.noBorder + }); + return i.createElement("div", { + className: t, + onClick: e.onClick, + ref: e.reference, + "data-type": "tab-item", + "data-value": e.value, + "data-name": "tab-item-" + e.value.toString().toLowerCase() + }, e.children) + } + + function c(e) { + return class extends i.PureComponent { + constructor() { + super(...arguments), this.activeTab = { + current: null + } + } + componentDidUpdate() { + Object(s.ensureNotNull)(this._slider).style.transition = "transform 350ms", + this._componentDidUpdate() + } + componentDidMount() { + this._componentDidUpdate() + } + render() { + const { + className: t + } = this.props, n = this._generateTabs(); + return i.createElement("div", { + className: a(t, o.tabs), + "data-name": this.props["data-name"] + }, n, i.createElement(e, { + reference: e => { + this._slider = e + } + })) + } + _generateTabs() { + return this.activeTab.current = null, i.Children.map(this.props.children, + e => { + const t = e, + n = Boolean(t.props.isActive), + a = { + reference: e => { + n && (this.activeTab.current = e), t.props + .reference && t.props.reference(e) + } + }; + return i.cloneElement(t, a) + }) + } + _componentDidUpdate() { + const e = Object(s.ensureNotNull)(this._slider).style; + if (this.activeTab.current) { + const t = this.activeTab.current.offsetWidth, + n = this.activeTab.current.offsetLeft; + e.transform = `translateX(${n}px)`, e.width = t + "px", e.opacity = "1" + } else e.opacity = "0" + } + } + } + c((function(e) { + return i.createElement("div", { + className: o.slider, + ref: e.reference + }) + })) + }, + KKsp: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return r + })); + var i = n("q1tI"), + a = n("TSYQ"), + s = n.n(a), + o = n("NOPy"); + + function r(e) { + const { + size: t = "normal", + className: n + } = e; + return i.createElement("div", { + className: s()(o.separator, "small" === t && o.small, "normal" === t && o + .normal, "large" === t && o.large, n) + }) + } + }, + MfqI: function(e, t, n) { + "use strict"; + n.r(t); + var i = n("q1tI"), + a = n.n(i), + s = n("i8i4"), + o = n("YFKU"), + r = n("17x9"), + l = n("TSYQ"), + c = n("cvc5"), + h = n("Kxc7"), + d = n("82wv"), + u = n("Iksw"), + m = n("tWVy"), + g = n("/KDZ"), + p = n("N5tr"), + b = n("KKsp"), + v = n("Eyy1"), + f = n("JWMC"), + _ = n("1TxM"), + C = n("aIyQ"), + S = n.n(C), + y = n("dfhE"); + class E { + constructor(e) { + this._state = { + ranges: [] + }, this._change = new S.a, this._rangeChangedListenerBound = this + ._onRangeChanged.bind(this); + const { + chartWidget: t + } = this._context = e; + t.withModel(null, () => { + const e = t.model(), + n = e.mainSeries(); + n.onStatusChanged().subscribe(this, this._updateAvailableRanges), h + .enabled("update_timeframes_set_on_symbol_resolve") && n + .dataEvents().symbolResolved().subscribe(this, this + ._updateAvailableRanges), n.priceScale().properties().childs() + .lockScale.subscribe(this, this._updateAvailableRanges); + const i = e.model().appliedTimeFrame(); + i.subscribe(this._rangeChangedListenerBound), this + ._rangeChangedListenerBound(i.value()), this + ._updateAvailableRanges() + }) + } + state() { + return this._state + } + onChange() { + return this._change + } + selectRange(e) { + this._setState({ + activeRange: e.value.value + }); + const { + chartWidgetCollection: t + } = this._context, n = { + val: e.value, + res: e.targetResolution + }; + t.setTimeFrame(n) + } + destroy() { + const { + chartWidget: e + } = this._context; + e.withModel(null, () => { + const t = e.model(), + n = t.mainSeries(); + n.onStatusChanged().unsubscribe(this, this._updateAvailableRanges), h + .enabled("update_timeframes_set_on_symbol_resolve") && n + .dataEvents().symbolResolved().unsubscribe(this, this + ._updateAvailableRanges), n.priceScale().properties().childs() + .lockScale.unsubscribe(this, this._updateAvailableRanges), t.model() + .appliedTimeFrame().unsubscribe(this._rangeChangedListenerBound) + }), this._change.destroy() + } + _setState(e) { + this._state = Object.assign({}, this._state, e), this._change.fire(this._state) + } + _onRangeChanged(e) { + let t; + null !== e && "period-back" === e.val.type && (t = e.val.value), this._setState({ + activeRange: t + }) + } + _updateAvailableRanges() { + const { + availableTimeFrames: e, + chartWidget: t + } = this._context; + if (!t.hasModel()) return; + const n = t.model().mainSeries(), + i = n.status(); + if (i === y.STATUS_LOADING || i === y.STATUS_RESOLVING) return; + const a = e(n.symbolInfo(), n.status()); + 0 !== a.length && this._setState({ + ranges: a + }) + } + } + const x = Object(_.b)(); + + function w(e) { + var t; + return (t = class extends i.PureComponent { + constructor(e, t) { + super(e, t), this._handleUpdate = e => { + this.setState(e) + }, this._handleSelectRange = e => { + Object(f.trackEvent)("GUI", "Chart Bottom Toolbar", "range " + e + .value), this._binding.selectRange(e) + }, Object(_.c)(t, { + availableTimeFrames: r.any.isRequired, + chartWidgetCollection: r.any.isRequired, + chartWidget: r.any.isRequired + }), N.has(t.chartWidget) || N.set(t.chartWidget, new E(t)); + const n = this._binding = Object(v.ensureDefined)(N.get(t.chartWidget)); + this.state = n.state() + } + componentDidMount() { + this._binding.onChange().subscribe(this, this._handleUpdate) + } + componentWillUnmount() { + this._binding.onChange().unsubscribe(this, this._handleUpdate) + } + render() { + return i.createElement(e, { + goToDateButton: this.props.goToDateButton, + className: this.props.className, + ranges: this.state.ranges, + activeRange: this.state.activeRange, + onSelectRange: this._handleSelectRange + }) + } + }).contextType = x, t + } + const N = new WeakMap; + var R = n("cdbK"), + T = n("l4ku"), + k = n("02pg"), + M = n("2uTr"), + A = n("9VJd"), + W = n("J3OW"); + + function O(e) { + const { + ranges: t, + activeRange: n, + onSelectRange: i + } = e; + return a.a.createElement(a.a.Fragment, null, t.map(e => a.a.createElement(T.a, { + key: e.value.value, + label: e.description || e.text, + active: n === e.value.value, + checked: n === e.value.value, + checkable: !0, + disabled: !1, + onClick: s.bind(null, e), + doNotCloseOnClick: !1, + subItems: [] + }))); + + function s(e) { + e && i && i(e), Object(m.b)() + } + } + + function B(e) { + const { + onGoToDateClick: t + } = e; + return a.a.createElement(a.a.Fragment, null, a.a.createElement(k.a, { + className: W.separator + }), a.a.createElement(T.a, { + icon: A, + label: Object(M.appendEllipsis)(Object(o.t)("Go to")), + onClick: t, + active: !1, + checked: !1, + checkable: !1, + disabled: !1, + doNotCloseOnClick: !1, + subItems: [] + })) + } + const j = { + title: window.t("Date Range"), + goToDate: Object(M.appendEllipsis)(window.t("Go to")) + }, + I = Object(_.b)(); + class D extends i.PureComponent { + constructor(e, t) { + super(e, t), this._handleGoToDateClick = () => { + const { + chartWidget: e + } = this.context; + Object(R.showGoToDateDialog)(e), Object(m.b)() + }, this._handleRangeSelect = e => { + e && this.props.onSelectRange && this.props.onSelectRange(e), Object(m + .b)() + }, this._renderChildren = e => { + const { + ranges: t, + activeRange: n, + goToDateButton: a + } = this.props; + return e ? i.createElement(i.Fragment, null, i.createElement(O, { + ranges: t, + activeRange: n, + onSelectRange: this._handleRangeSelect + }), a && i.createElement(B, { + onGoToDateClick: this._handleGoToDateClick + })) : i.createElement(i.Fragment, null, t.map(e => i.createElement(p + .b, { + key: e.value.value, + label: e.description || e.text, + isActive: n === e.value.value, + onClick: this._handleRangeSelect, + onClickArg: e + })), a && i.createElement(b.a, null), a && i.createElement(p + .b, { + label: j.goToDate, + onClick: this._handleGoToDateClick + })) + }, Object(_.c)(t, { + chartWidget: r.any.isRequired + }) + } + render() { + return i.createElement(g.a, { + rule: "screen and (max-width: 428px)" + }, e => i.createElement(d.a, { + className: W.button, + content: j.title, + arrow: !0, + verticalAttachEdge: u.c.Top, + verticalDropDirection: u.d.FromBottomToTop, + horizontalMargin: 4, + "data-name": "date-ranges-menu", + isDrawer: e + }, this._renderChildren(e))) + } + } + D.contextType = I; + const L = w(D); + var z = n("K3s3"), + P = n("W9Y+"); + + function F(e) { + const t = l(e.className, P.item, { + [P.isActive]: e.isActive, + [P.isFirst]: e.isFirst, + [P.isLast]: e.isLast + }); + return i.createElement("div", { + className: t, + onClick: e.onClick, + ref: e.reference + }, e.children) + } + var U = n("nPPD"), + q = n("RZ2Z"); + const H = Object(U.a)(z.a, q); + var K = n("qSb5"); + const G = Object(z.c)((function(e) { + return i.createElement("div", { + className: l(e.className, H.slider), + ref: e.reference + }, i.createElement("div", { + className: H.inner + })) + })); + const X = w((function(e) { + const { + className: t, + ranges: n, + activeRange: a, + onSelectRange: s + } = e; + return i.createElement(G, { + className: l(K.sliderRow, t), + "data-name": "date-ranges-tabs" + }, n.map((e, t) => i.createElement(F, { + key: e.value.value, + value: e.value.value, + isFirst: 0 === t, + isLast: t === n.length - 1, + isActive: a === e.value.value, + onClick: s && s.bind(null, e) + }, i.createElement("div", { + title: e.description || e.text, + className: "apply-common-tooltip" + }, e.text)))) + })); + var V = n("Iivm"), + Y = n("/DW5"), + Z = n("ul7r"), + Q = n("c7H2"); + const J = Object(Y.b)({ + keys: ["Alt", "G"], + text: "{0} + {1}" + }), + $ = Object(_.b)(); + class ee extends i.PureComponent { + constructor(e, t) { + super(e, t), this._handleClick = () => { + const { + chartWidget: e + } = this.context; + Object(f.trackEvent)("GUI", "Chart Bottom Toolbar", "go to"), Object(R + .showGoToDateDialog)(e) + }, Object(_.c)(t, { + chartWidget: r.any.isRequired + }) + } + render() { + const { + className: e, + ranges: t + } = this.props; + return t.length > 0 && i.createElement("div", { + className: l("apply-common-tooltip", Q.button, e), + "data-name": "go-to-date", + "data-tooltip-hotkey": J, + onClick: this._handleClick, + title: Object(o.t)("Go to") + }, i.createElement(V.a, { + className: Q.icon, + icon: Z + })) + } + } + ee.contextType = $; + const te = w(ee); + var ne = n("URQ3"); + + function ie(e) { + const { + reference: t, + className: n, + children: a, + ...s + } = e; + return i.createElement("button", { + ...s, + className: l(n, ne.button), + ref: t + }, i.createElement("span", { + className: ne.inner + }, a)) + } + var ae = n("/+9u"), + se = n("4kQX"), + oe = n("7KDR"), + re = n("5VQP"); + class le extends i.PureComponent { + constructor(e) { + super(e), this._element = null, this._menu = null, this._handleRef = e => { + this._element = e + }, this._showMenu = () => { + if (this._menu && this._menu.isShown()) return this._menu.hide(), + void this._menu.destroy(); + const { + getActions: e, + right: t + } = this.props, n = Object(v.ensureNotNull)(this._element), i = e(); + 0 !== i.length && re.ContextMenuManager.createMenu(i).then(e => { + this._menu = e, e.show((e, i) => { + const a = n.getBoundingClientRect(); + return { + clientX: t ? a.right - e : a.left, + clientY: a.top - Math.min(i, a.top), + overrideHeight: a.top < i ? a.top : void 0 + } + }, this._element || void 0) + }) + } + } + render() { + const { + children: e + } = this.props; + return i.createElement("span", { + onClick: this._showMenu, + ref: this._handleRef + }, e) + } + } + var ce = n("jCNj"), + he = n("2mG+"); + const de = { + hint: window.t("Timezone") + }; + const ue = Object(_.b)(); + class me extends i.PureComponent { + constructor(e, t) { + super(e, t), this._timeFormatter = new se.TimeFormatter, this._tickInterval = + void 0, this._tickClock = () => { + const { + chartApiInstance: e + } = this.context; + if (void 0 !== this._timezone) { + const t = Object(ce.utc_to_cal)(this._timezone, e.serverTime()); + this.setState({ + time: this._timeFormatter.format(t) + }) + } + }, this._getActions = () => { + if (!this.props.withMenu) return []; + const { + chartWidget: e + } = this.context; + return function(e) { + e.updateActions(); + const t = e.actions(); + return t && t.applyTimeZone instanceof oe.Action ? t + .applyTimeZone.getSubItems() : [] + }(e) + }, Object(_.c)(t, { + chartWidget: r.any.isRequired, + chartApiInstance: r.any.isRequired + }), this.state = { + time: "" + } + } + componentDidMount() { + const { + chartWidget: e + } = this.context; + this._tickInterval = setInterval(this._tickClock, 1e3), e.withModel(null, + () => { + const t = e.model(); + t.model().mainSeries().dataEvents().symbolResolved().subscribe(this, + this.updateTimezonesButton), t.model().properties().timezone + .subscribe(this, this.updateTimezonesButton) + }) + } + componentWillUnmount() { + const { + chartWidget: e + } = this.context; + clearInterval(this._tickInterval), e.withModel(null, () => { + const t = e.model(); + t.model().mainSeries().dataEvents().symbolResolved().unsubscribe( + this, this.updateTimezonesButton), t.model().properties() + .timezone.unsubscribe(this, this.updateTimezonesButton) + }) + } + render() { + const { + className: e, + withMenu: t + } = this.props, { + time: n + } = this.state, a = void 0 !== this._timezone ? Object(ae.a)(this._timezone + .name()).string : null; + return i.createElement(le, { + getActions: this._getActions + }, i.createElement(ie, { + className: l(e, he.button, "apply-common-tooltip"), + title: t ? de.hint : void 0, + disabled: !t, + "data-name": "time-zone-menu" + }, n && a && `${n} (${a})`)) + } + updateTimezonesButton() { + const { + chartWidget: e + } = this.context; + if (!e.hasModel()) return; + if (null === e.model().mainSeries().symbolInfo()) return; + let t = e.model().model().timezone(); + if ("exchange" === t) { + const n = Object(v.ensureNotNull)(e.model().mainSeries().symbolInfo()) + .timezone; + n && (t = n) + } + this._timezone = Object(ce.get_timezone)(t), this._tickClock() + } + } + me.contextType = ue; + var ge = n("z6ID"); + + function pe(e) { + return i.createElement("span", { + className: l(ge.separator, e.className) + }) + } + var be = n("tU7i"), + ve = n("qFKp"); + class fe { + constructor(e, t, n) { + this._highlighted = !1, this._chartWidget = e, this._priceScaleGetter = t, this + ._owner = n, this._setHighlight = this._setHighlight.bind(this), this + ._removeHighlight = this._removeHighlight.bind(this) + } + destroy() { + this._highlighted && this._removeHighlight() + } + handlers() { + const e = ve.CheckMobile.any(); + return { + onMouseEnter: e ? void 0 : this._setHighlight, + onMouseLeave: e ? void 0 : this._removeHighlight + } + } + _setHighlight() { + const e = this._chartWidget.model().model(), + t = e.paneForSource(e.mainSeries()), + n = this._priceScaleGetter(); + if (null === t || null === n) return; + const i = this._chartWidget.paneByState(t); + if (null !== i) { + const t = i.rightPriceAxisesContainer().findAxisWidgetForScale(n); + let a = null; + null !== t && (a = t.axisInfo()); + const s = i.leftPriceAxisesContainer().findAxisWidgetForScale(n); + null !== s && (a = s.axisInfo()); + const o = i.highlightedPriceAxis(); + null !== a && o.value().axis !== a && (o.setValue({ + owner: this._owner, + axis: a + }), e.lightUpdate(), this._highlighted = !0) + } + } + _removeHighlight() { + const e = this._chartWidget.model().model(), + t = e.paneForSource(e.mainSeries()); + if (null === t) return; + const n = this._chartWidget.paneByState(t); + if (null !== n) { + const t = n.highlightedPriceAxis(), + i = t.value(); + null !== i.axis && i.owner === this._owner && (t.setValue({ + owner: this._owner, + axis: null + }), e.lightUpdate(), this._highlighted = !1) + } + } + } + const _e = Object(_.b)(); + const Ce = Object(_.b)(); + const Se = Object(_.b)(); + const ye = Object(_.b)(); + var Ee = n("+GaQ"), + xe = n("XAms"), + we = n("T4/F"), + Ne = n("ApAi"), + Re = n("PP+v"); + const Te = { + extLabel: window.t("ext"), + extHint: window.t("Extended Hours is available only for intraday charts"), + percentageHint: window.t("Toggle Percentage"), + logLabel: window.t("log", { + context: "scale" + }), + logHint: window.t("Toggle Log Scale"), + autoLabel: window.t("auto", { + context: "scale" + }), + autoHint: window.t("Toggle Auto Scale"), + fullscreenHint: window.t("Toggle Maximize Chart"), + adjLabel: window.t("adj", { + context: "adjustments" + }), + adjHint: window.t("Adjust data for dividends"), + adjForDividendsOnlyHint: window.t("Data is adjusted for dividends only"), + adjForSplitsOnlyHint: window.t("Data is adjusted for splits only") + }, + ke = (Me = e => i.createElement(be.b, { + text: Te.logLabel, + title: Te.logHint, + className: e.className, + isActive: e.isLogarithm, + isGrouped: !0, + onClick: e.onClick, + onMouseEnter: e.onMouseEnter, + onMouseLeave: e.onMouseLeave, + "data-name": "logarithm" + }), (Ae = class extends i.PureComponent { + constructor(e, t) { + super(e, t), this._priceScale = null, this._handleSelect = () => { + const e = this.context.chartWidget.model(), + t = Object(v.ensureNotNull)(this.state.series), + n = t.priceScale(), + i = n.mode(); + t.priceScale().isLockScale() || e.setPriceScaleMode({ + log: !i.log + }, n, window.t("Toggle Log Scale")) + }, Object(_.c)(t, { + chartWidget: r.any.isRequired + }), this.state = { + isActive: !1, + series: null + }, this._priceAxisHighlighter = new fe(this.context.chartWidget, + () => this._priceScale, "logarithm") + } + componentDidMount() { + const e = this.context.chartWidget; + e.withModel(null, () => { + const t = e.model().mainSeries(), + n = t.priceScale(); + this._handleMainSeriesPriceScaleChanged(n), t + .priceScaleChanged().subscribe(this, this + ._handleMainSeriesPriceScaleChanged), this + ._handleModeChanged({}, n.mode()), this.setState({ + isActive: t.priceScale().isLog(), + series: t + }) + }) + } + componentWillUnmount() { + const e = this.context.chartWidget; + e.withModel(null, () => { + e.model().mainSeries().priceScaleChanged().unsubscribe(this, + this._handleMainSeriesPriceScaleChanged) + }), null !== this._priceScale && (this._priceScale.modeChanged() + .unsubscribeAll(this), this._priceScale = null), this + ._priceAxisHighlighter.destroy() + } + render() { + const { + className: e + } = this.props, { + isActive: t, + series: n + } = this.state; + return i.createElement(Me, { + ...this._priceAxisHighlighter.handlers(), + className: e, + isLogarithm: t, + isDisabled: null === n, + onClick: this._handleSelect + }) + } + _handleMainSeriesPriceScaleChanged(e) { + null !== this._priceScale && this._priceScale.modeChanged().unsubscribe( + this, this._handleModeChanged), this._priceScale = e, this + ._priceScale.modeChanged().subscribe(this, this._handleModeChanged), + this._handleModeChanged({}, e.mode()) + } + _handleModeChanged(e, t) { + Boolean(t.log) !== this.state.isActive && this.setState({ + isActive: Boolean(t.log) + }) + } + }).contextType = _e, Ae); + var Me, Ae; + const We = function(e) { + var t; + return (t = class extends i.PureComponent { + constructor(e, t) { + super(e, t), this._priceScale = null, this._handleSelect = () => { + const e = this.context.chartWidget.model(), + t = Object(v.ensureNotNull)(this.state.series) + .priceScale(), + n = t.mode(); + e.setPriceScaleMode({ + autoScale: !n.autoScale + }, t, window.t("Toggle Auto Scale")) + }, Object(_.c)(t, { + chartWidget: r.any.isRequired + }), this.state = { + isActive: !1, + series: null + }, this._priceAxisHighlighter = new fe(this.context.chartWidget, + () => this._priceScale, "auto") + } + componentDidMount() { + const e = this.context.chartWidget; + e.withModel(null, () => { + const t = e.model().mainSeries(), + n = t.priceScale(); + this._handleMainSeriesPriceScaleChanged(n), t + .priceScaleChanged().subscribe(this, this + ._handleMainSeriesPriceScaleChanged), this + ._handleModeChanged({}, n.mode()), this.setState({ + isActive: t.priceScale().isAutoScale(), + series: t + }) + }) + } + componentWillUnmount() { + const e = this.context.chartWidget; + e.withModel(null, () => { + e.model().mainSeries().priceScaleChanged().unsubscribe( + this, this._handleMainSeriesPriceScaleChanged) + }), null !== this._priceScale && (this._priceScale.modeChanged() + .unsubscribeAll(this), this._priceScale = null), this + ._priceAxisHighlighter.destroy() + } + render() { + const { + className: t + } = this.props, { + isActive: n, + series: a + } = this.state; + return i.createElement(e, { + ...this._priceAxisHighlighter.handlers(), + className: t, + isAuto: n, + isDisabled: null === a, + onClick: this._handleSelect + }) + } + _handleMainSeriesPriceScaleChanged(e) { + null !== this._priceScale && this._priceScale.modeChanged() + .unsubscribe(this, this._handleModeChanged), this._priceScale = + e, this._priceScale.modeChanged().subscribe(this, this + ._handleModeChanged), this._handleModeChanged({}, e.mode()) + } + _handleModeChanged(e, t) { + Boolean(t.autoScale) !== this.state.isActive && this.setState({ + isActive: Boolean(t.autoScale) + }) + } + }).contextType = Ce, t + }(e => i.createElement(be.b, { + text: Te.autoLabel, + title: Te.autoHint, + className: e.className, + isActive: e.isAuto, + isGrouped: !0, + onClick: e.onClick, + onMouseEnter: e.onMouseEnter, + onMouseLeave: e.onMouseLeave, + "data-name": "auto" + })), + Oe = function(e) { + var t; + return (t = class extends i.PureComponent { + constructor(e, t) { + super(e, t), this._priceScale = null, this._handleSelect = () => { + const e = this.context.chartWidget.model(), + t = Object(v.ensureNotNull)(this.state.series), + n = t.priceScale(), + i = n.mode(); + t.priceScale().isLockScale() || e.setPriceScaleMode({ + percentage: !i.percentage + }, n, window.t("Toggle Percentage Scale")) + }, Object(_.c)(t, { + chartWidget: r.any.isRequired + }), this.state = { + isActive: !1, + series: null + }, this._priceAxisHighlighter = new fe(this.context.chartWidget, + () => this._priceScale, "percentage") + } + componentDidMount() { + const e = this.context.chartWidget; + e.withModel(null, () => { + const t = e.model().mainSeries(), + n = t.priceScale(); + this._handleMainSeriesPriceScaleChanged(n), t + .priceScaleChanged().subscribe(this, this + ._handleMainSeriesPriceScaleChanged), this + ._handleScaleChange({}, n.mode()), this.setState({ + isActive: t.priceScale().isPercentage(), + series: t + }) + }) + } + componentWillUnmount() { + const e = this.context.chartWidget; + e.withModel(null, () => { + e.model().mainSeries().priceScaleChanged().unsubscribe( + this, this._handleMainSeriesPriceScaleChanged) + }), null !== this._priceScale && (this._priceScale.modeChanged() + .unsubscribeAll(this), this._priceScale = null), this + ._priceAxisHighlighter.destroy() + } + render() { + const { + className: t + } = this.props, { + isActive: n, + series: a + } = this.state; + return i.createElement(e, { + ...this._priceAxisHighlighter.handlers(), + className: t, + isPercentage: n, + isDisabled: null === a, + onClick: this._handleSelect + }) + } + _handleMainSeriesPriceScaleChanged(e) { + null !== this._priceScale && this._priceScale.modeChanged() + .unsubscribe(this, this._handleScaleChange), this._priceScale = + e, this._priceScale.modeChanged().subscribe(this, this + ._handleScaleChange), this._handleScaleChange({}, e.mode()) + } + _handleScaleChange(e, t) { + Boolean(t.percentage) !== this.state.isActive && this.setState({ + isActive: Boolean(t.percentage) + }) + } + }).contextType = Se, t + }(e => i.createElement(be.b, { + icon: we, + title: Te.percentageHint, + className: e.className, + isActive: e.isPercentage, + isDisabled: e.isDisabled, + isGrouped: !0, + onClick: e.onClick, + onMouseEnter: e.onMouseEnter, + onMouseLeave: e.onMouseLeave, + "data-name": "percentage" + })); + const Be = Object(Y.b)({ + keys: ["Alt", "Enter"], + text: "{0} + {1}" + }), + je = function(e) { + var t; + return (t = class extends i.PureComponent { + constructor(e, t) { + super(e, t), this._handleClick = e => { + const { + resizerDetacher: t, + chartWidgetCollection: n + } = this.context; + e.shiftKey && t.detachable.value() ? t.detach() : this.state + .isFullscreen ? t.exitFullscreen() : t + .requestFullscreen() + }, this._handleLayoutChange = e => { + this.setState({ + isFullscreen: e + }) + }, this._handlePhoneSize = () => { + 0 + }, Object(_.c)(t, { + chartWidgetCollection: r.any.isRequired, + resizerDetacher: r.any.isRequired + }); + const { + resizerDetacher: n + } = t; + this.state = { + isFullscreen: n.fullscreen.value(), + isChangeLayoutButton: this._isChangeLayoutButton() + } + } + componentDidMount() { + const { + resizerDetacher: e, + chartWidgetCollection: t + } = this.context, { + mobileChangeLayoutEnabled: n + } = this.props; + e.fullscreen.subscribe(this._handleLayoutChange) + } + componentWillUnmount() { + const { + resizerDetacher: e, + chartWidgetCollection: t + } = this.context, { + mobileChangeLayoutEnabled: n + } = this.props; + e.fullscreen.unsubscribe(this._handleLayoutChange) + } + render() { + const { + className: t + } = this.props, { + isFullscreen: n, + isChangeLayoutButton: a + } = this.state; + return i.createElement(e, { + className: t, + isFullscreen: n, + onClick: this._handleClick + }) + } + _isChangeLayoutButton() { + return !1 + } + }).contextType = ye, t + }(e => i.createElement(be.b, { + icon: Ne, + title: Te.fullscreenHint, + className: e.className, + isActive: e.isFullscreen, + onClick: e.onClick, + "data-tooltip-hotkey": Be, + "data-name": "fullscreen" + })), + Ie = { + properties: !0, + fullscreen: !0, + preventPhoneLayout: !0 + }, + De = { + fullscreen: Number.MIN_SAFE_INTEGER, + preventPhoneLayout: Number.MIN_SAFE_INTEGER, + properties: Number.MIN_SAFE_INTEGER, + separator: -2, + timeZones: -1, + auto: 0, + logarithm: 1, + percentage: 2, + session: 3, + adj: 4 + }, + Le = (() => { + const e = new Map; + return e.set(ke, "logarithm"), e.set(Oe, "percentage"), e.set(We, "auto"), e.set(je, + "fullscreen"), e + })(); + + function ze(e) { + 0 + } + const Pe = { + dateRangeMode: "hidden", + separator: !0, + timeZones: !0, + fullscreen: !0, + preventPhoneLayout: !0, + properties: !0, + auto: !0, + logarithm: !0, + percentage: !0, + session: !0, + adj: !0 + }, + Fe = Object(_.b)(); + class Ue extends i.PureComponent { + constructor(e, t) { + var n, a; + super(e, t), this._timezoneButtonRef = null, this._layout = Object.assign({}, + Pe), this._raf = null, this._toolbar = null, this._rangeExpanded = null, + this._rangeCollapsed = null, this._seriesComponents = {}, this._injector = ( + n = () => this._layout, a = (e, t) => this._seriesComponents[t] = e, (e, + t, s) => { + if (i.isValidElement(e) && "string" != typeof e.type) { + const { + props: o + } = e; + if ("string" == typeof o.className) { + const r = { + className: l(o.className, 0 === t && Re.first, t === + s.length - 1 && Re.last) + }, + c = n(), + h = Object(v.ensureDefined)(Le.get(e.type)); + return i.createElement("div", { + key: null === e.key ? void 0 : e.key, + className: l(Re.inline, c[h] && Re.collapsed), + ref: e => a(e, h), + onClick: () => ze() + }, i.cloneElement(e, r)) + } + } + return e + }), this._handleResize = () => { + null === this._raf && (this._raf = requestAnimationFrame(() => { + const e = this._layout, + t = Object(v.ensureNotNull)(this._toolbar), + n = Object(v.ensureNotNull)(this._rangeExpanded), + i = (a = function(e) { + const t = {}; + return Object.keys(e).forEach(n => { + const i = e[n]; + if (null !== i) { + const e = s.findDOMNode(i); + null !== e && (t[n] = e) + } + }), t + }(this._seriesComponents), Object.keys(a).map( + e => ({ + name: e, + width: a[e].offsetWidth + })).sort((e, t) => De[e.name] - De[t.name])); + var a; + const o = t.offsetWidth, + r = i.reduce((e, t) => e + t.width, 0), + l = n.offsetWidth, + c = !Boolean(n.textContent) || o - r - l <= 0 ? + "collapsed" : "expanded"; + if (Object.assign(e, { + dateRangeMode: c + }), "expanded" !== c) { + const t = o - Object(v.ensureNotNull)(this + ._rangeCollapsed).offsetWidth - 0; + let n = 0, + a = 0; + for (const s of i) n += s.width, s.name in Ie ? ( + a += s.width, Object.assign(e, { + [s.name]: !1 + })) : Object.assign(e, { + [s.name]: t <= n + }); + t <= a && Object.assign(e, { + dateRangeMode: "hidden" + }) + } else Object.assign(e, { + separator: !1, + timeZones: !1, + fullscreen: !1, + preventPhoneLayout: !1, + properties: !1, + auto: !1, + logarithm: !1, + percentage: !1, + session: !1, + adj: !1 + }); + this._applyResizing(), this._raf = null + })) + }, this._handleTimezoneButtonRef = e => { + this._timezoneButtonRef = e + }, this._handleMeasure = () => { + null !== this._toolbar && this.resizeUI() + }, this._handleFullscreenableChange = e => { + this._setStateWithResize({ + isFullscreenable: e + }) + }, this._handlePreventPhoneLayoutButtonVisibility = () => { + 0 + }, this._handleToolbarRef = e => this._toolbar = e, this + ._handleRangeCollapsedRef = e => this._rangeCollapsed = e, this + ._handleRangeExpandedRef = e => this._rangeExpanded = e, this + ._handleTimeZonesRef = e => { + this._seriesComponents.timeZones = e + }, this._handleSessionsRef = e => { + this._seriesComponents.session = e + }, this._handleSeparatorRef = e => { + this._seriesComponents.separator = e + }, Object(_.c)(t, { + onContentBoxChanged: r.any.isRequired, + chartApiInstance: r.any.isRequired, + chartWidget: r.any.isRequired, + chartWidgetCollection: r.any.isRequired, + resizerDetacher: r.any.isRequired + }); + const { + resizerDetacher: o + } = this.context; + this.state = { + isFullscreenable: o.fullscreenable.value(), + isPreventPhoneLayoutButton: this._isPreventPhoneLayoutButton() + } + } + componentDidMount() { + const { + onContentBoxChanged: e, + resizerDetacher: t, + chartWidgetCollection: n, + chartWidget: i + } = this.context; + e.subscribe(this, this._handleResize), t.fullscreenable.subscribe(this + ._handleFullscreenableChange), this.updateTimezonesButton(), this + .resizeUI() + } + componentWillUnmount() { + const { + onContentBoxChanged: e, + resizerDetacher: t, + chartWidgetCollection: n, + chartWidget: i + } = this.context; + e.unsubscribe(this, this._handleResize), t.fullscreenable.unsubscribe(this + ._handleFullscreenableChange), null !== this._raf && ( + cancelAnimationFrame(this._raf), this._raf = null) + } + render() { + const e = this._layout, + { + timeFramesWidgetEnabled: t, + timeWidgetEnabled: n, + percentageScaleButtonEnabled: a, + logScaleButtonEnabled: s, + autoScaleButtonEnabled: o, + fullscreenButtonEnabled: r + } = this.props; + return i.createElement("div", { + className: Re.toolbar, + ref: this._handleToolbarRef, + onContextMenu: xe.a + }, t && i.createElement(Ee.a, null, i.createElement("div", { + className: l(Re.dateRangeWrapper, "collapsed" !== e + .dateRangeMode && Re.collapsed), + ref: this._handleRangeCollapsedRef + }, i.createElement("div", { + className: l(Re.dateRangeCollapsed) + }, i.createElement(L, { + goToDateButton: this.props.goToDateEnabled + }))), i.createElement(c, { + onMeasure: this._handleMeasure + }, i.createElement("div", { + className: l(Re.dateRangeWrapper, "expanded" !== e + .dateRangeMode && Re.collapsed), + ref: this._handleRangeExpandedRef + }, i.createElement("div", { + className: l(Re.dateRangeExpanded) + }, i.createElement(X, null), this.props + .goToDateEnabled && i.createElement(pe, null), this + .props.goToDateEnabled && i.createElement(te, null))))), i + .createElement("div", { + className: Re.seriesControlWrapper + }, n && i.createElement(c, { + onMeasure: this._handleMeasure + }, i.createElement("div", { + className: l(Re.inline, e.timeZones && Re.collapsed), + ref: this._handleTimeZonesRef + }, i.createElement("div", { + className: Re.inline, + onClick: this._trackTimezonesButtonClick + }, i.createElement(me, { + className: Re.timezone, + withMenu: this.props.timezoneMenuEnabled, + ref: this._handleTimezoneButtonRef + })))), !1, i.createElement("div", { + ref: this._handleSeparatorRef, + className: l(Re.inline, e.separator && Re.collapsed) + }, i.createElement(pe, null)), i.createElement(Ee.a, { + map: this._injector + }, !1, a && !h.enabled("fundamental_widget") && i.createElement( + Oe, { + className: Re.icon + }), s && i.createElement(ke, { + className: Re.item + }), o && i.createElement(We, { + className: Re.item + }), r && this.state.isFullscreenable && i.createElement(je, { + className: Re.icon, + mobileChangeLayoutEnabled: this.props + .mobileChangeLayoutEnabled + }), !1))) + } + updateTimezonesButton() { + null !== this._timezoneButtonRef && this._timezoneButtonRef + .updateTimezonesButton() + } + resizeUI() { + this._handleResize() + } + _updateButtonsVisibility() { + 0 + } + _trackTimezonesButtonClick() { + ze() + } + _setStateWithResize(e) { + Object.assign(this._layout, Pe), this._applyResizing(), this.setState(e, () => + this._handleResize()) + } + _applyResizing() { + const { + dateRangeMode: e, + ...t + } = this._layout; + this._rangeExpanded && this._rangeExpanded.classList.toggle(Re.collapsed, + "expanded" !== e), this._rangeCollapsed && this._rangeCollapsed + .classList.toggle(Re.collapsed, "collapsed" !== e), Object.keys(t).forEach( + e => { + const n = e, + i = this._seriesComponents[n]; + i && i.classList.toggle(Re.collapsed, t[n]) + }) + } + _isPreventPhoneLayoutButton() { + return !1 + } + } + Ue.contextType = Fe; + const qe = { + onContentBoxChanged: r.any, + computeContentBox: r.any, + chartWidget: r.any, + chartApiInstance: r.any, + chartWidgetCollection: r.any, + resizerDetacher: r.any, + availableTimeFrames: r.any + }; + class He extends i.PureComponent { + constructor(e) { + super(e), this._setActiveChart = e => { + this._defineRegistry(e), this.setState({ + chartWidget: e + }) + }; + const t = this.props.chartWidgetCollection.activeChartWidget.value(); + this.state = { + chartWidget: t + }, this._defineRegistry(t) + } + componentDidMount() { + this.props.chartWidgetCollection.activeChartWidget.subscribe(this + ._setActiveChart) + } + componentWillUnmount() { + this.props.chartWidgetCollection.activeChartWidget.unsubscribe(this + ._setActiveChart) + } + render() { + const { + chartWidget: e + } = this.state; + if (!e) return null; + const { + options: t + } = this.props, n = { + timeFramesWidgetEnabled: t.timeFramesWidgetEnabled, + goToDateEnabled: t.timeFramesWidget.goToDateEnabled, + timeWidgetEnabled: t.timeWidgetEnabled, + timezoneMenuEnabled: t.timeWidget && t.timeWidget.timezoneMenuEnabled, + sessionIdButtonEnabled: t.sessionIdButtonEnabled, + adjustForDividendsButtonEnabled: t.adjustForDividendsButtonEnabled, + logScaleButtonEnabled: t.logScaleButtonEnabled, + percentageScaleButtonEnabled: t.percentageScaleButtonEnabled, + autoScaleButtonEnabled: t.autoScaleButtonEnabled, + fullscreenButtonEnabled: t.fullscreenButtonEnabled, + mobileChangeLayoutEnabled: t.mobileChangeLayoutEnabled + }; + return i.createElement(_.a, { + validation: qe, + value: this._registry + }, i.createElement(Ue, { + key: e.id(), + ...n + })) + } + _defineRegistry(e) { + const { + onContentBoxChanged: t, + computeContentBox: n, + chartApiInstance: i, + chartWidgetCollection: a, + options: { + timeFramesWidgetEnabled: s, + timeFramesWidget: o + } + } = this.props, r = s ? o.availableTimeFrames : void 0; + this._registry = { + onContentBoxChanged: t, + computeContentBox: n, + chartWidget: e, + availableTimeFrames: r, + chartApiInstance: i, + chartWidgetCollection: a, + resizerDetacher: e.getResizerDetacher() + } + } + } + n.d(t, "BottomToolbarRenderer", (function() { + return Ke + })); + class Ke { + constructor(e, t, n, a, o, r, l) { + this._container = e; + const c = i.createElement(He, { + onContentBoxChanged: t, + computeContentBox: n, + chartWidgetCollection: a, + chartApiInstance: o, + chartWidgetOptions: r, + options: l + }); + s.render(c, e), e.setAttribute("data-initialized", "true") + } + destroy() { + s.unmountComponentAtNode(this._container), this._container.removeAttribute( + "data-initialized") + } + } + }, + N5tr: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return h + })), n.d(t, "b", (function() { + return m + })); + var i = n("q1tI"), + a = n.n(i), + s = n("TSYQ"), + o = n("tWVy"), + r = n("JWMC"), + l = n("ijHL"), + c = n("v1bN"); + const h = c; + + function d(e) { + const { + reference: t, + ...n + } = e, i = { + ...n, + ref: t + }; + return a.a.createElement(e.href ? "a" : "div", i) + } + + function u(e) { + e.stopPropagation() + } + + function m(e) { + const { + id: t, + role: n, + "aria-selected": h, + className: m, + title: g, + labelRowClassName: p, + labelClassName: b, + shortcut: v, + forceShowShortcuts: f, + icon: _, + isActive: C, + isDisabled: S, + isHovered: y, + appearAsDisabled: E, + label: x, + link: w, + showToolboxOnHover: N, + target: R, + rel: T, + toolbox: k, + reference: M, + onMouseOut: A, + onMouseOver: W, + suppressToolboxClick: O = !0, + theme: B = c + } = e, j = Object(l.b)(e), I = Object(i.useRef)(null); + return a.a.createElement(d, { + ...j, + id: t, + role: n, + "aria-selected": h, + className: s(m, B.item, _ && B.withIcon, { + [B.isActive]: C, + [B.isDisabled]: S || E, + [B.hovered]: y + }), + title: g, + href: w, + target: R, + rel: T, + reference: function(e) { + I.current = e, "function" == typeof M && M(e); + "object" == typeof M && (M.current = e) + }, + onClick: function(t) { + const { + dontClosePopup: n, + onClick: i, + onClickArg: a, + trackEventObject: s + } = e; + if (S) return; + s && Object(r.trackEvent)(s.category, s.event, s.label); + i && i(a, t); + n || Object(o.b)() + }, + onContextMenu: function(t) { + const { + trackEventObject: n, + trackRightClick: i + } = e; + n && i && Object(r.trackEvent)(n.category, n.event, n.label + + "_rightClick") + }, + onMouseUp: function(t) { + const { + trackEventObject: n, + trackMouseWheelClick: i + } = e; + if (1 === t.button && w && n) { + let e = n.label; + i && (e += "_mouseWheelClick"), Object(r.trackEvent)(n.category, n + .event, e) + } + }, + onMouseOver: W, + onMouseOut: A + }, void 0 !== _ && a.a.createElement("div", { + className: B.icon, + dangerouslySetInnerHTML: { + __html: _ + } + }), a.a.createElement("div", { + className: s(B.labelRow, p) + }, a.a.createElement("div", { + className: s(B.label, b) + }, x)), (void 0 !== v || f) && a.a.createElement("div", { + className: B.shortcut + }, (D = v) && D.split("+").join(" + ")), void 0 !== k && a.a.createElement("div", { + onClick: O ? u : void 0, + className: s(B.toolbox, { + [B.showOnHover]: N + }) + }, k)); + var D + } + }, + NOPy: function(e, t, n) { + e.exports = { + separator: "separator-eqcGT_ow", + small: "small-eqcGT_ow", + normal: "normal-eqcGT_ow", + large: "large-eqcGT_ow" + } + }, + O7m7: function(e, t, n) {}, + "PP+v": function(e, t, n) { + e.exports = { + toolbar: "toolbar-2yU8ifXU", + dateRangeWrapper: "dateRangeWrapper-2yU8ifXU", + seriesControlWrapper: "seriesControlWrapper-2yU8ifXU", + dateRangeExpanded: "dateRangeExpanded-2yU8ifXU", + dateRangeCollapsed: "dateRangeCollapsed-2yU8ifXU", + item: "item-2yU8ifXU", + first: "first-2yU8ifXU", + last: "last-2yU8ifXU", + inline: "inline-2yU8ifXU", + timezone: "timezone-2yU8ifXU", + session: "session-2yU8ifXU", + icon: "icon-2yU8ifXU", + hidden: "hidden-2yU8ifXU", + collapsed: "collapsed-2yU8ifXU" + } + }, + RZ2Z: function(e, t, n) { + e.exports = { + slider: "slider-3GYrNsPp", + inner: "inner-3GYrNsPp" + } + }, + "T4/F": function(e, t) { + e.exports = + '' + }, + URQ3: function(e, t, n) { + e.exports = { + button: "button-2pZNJ24z", + hover: "hover-2pZNJ24z", + inner: "inner-2pZNJ24z" + } + }, + "W9Y+": function(e, t, n) { + e.exports = { + item: "item-3SbREAgE", + hover: "hover-3SbREAgE", + isActive: "isActive-3SbREAgE", + isFirst: "isFirst-3SbREAgE", + isLast: "isLast-3SbREAgE" + } + }, + XXQ5: function(e, t, n) { + e.exports = { + item: "item-1-SF84yU", + emptyIcons: "emptyIcons-1-SF84yU", + loading: "loading-1-SF84yU", + disabled: "disabled-1-SF84yU", + interactive: "interactive-1-SF84yU", + hovered: "hovered-1-SF84yU", + icon: "icon-1-SF84yU", + label: "label-1-SF84yU", + fullWidth: "fullWidth-1-SF84yU", + title: "title-1-SF84yU", + nested: "nested-1-SF84yU", + shortcut: "shortcut-1-SF84yU", + remove: "remove-1-SF84yU" + } + }, + XiJV: function(e, t, n) { + e.exports = { + separator: "separator-3No0pWrk" + } + }, + Xy1d: function(e, t) { + e.exports = + '' + }, + Xzy5: function(e, t) { + e.exports = + '' + }, + YZ9j: function(e) { + e.exports = JSON.parse( + '{"loader":"loader-8x1ZxRwP","item":"item-2-89r_cd","tv-button-loader":"tv-button-loader-23vqS1uY","black":"black-20Ytsf0V","white":"white-1ucCcc2I","gray":"gray-XDhHSS-T","loader-initial":"loader-initial-1deQDeio","loader-appear":"loader-appear-2krFtMrd"}' + ) + }, + c7H2: function(e, t, n) { + e.exports = { + button: "button-yLOygoSG", + hover: "hover-yLOygoSG", + icon: "icon-yLOygoSG" + } + }, + l4ku: function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return g + })); + var i = n("q1tI"), + a = n.n(i), + s = n("TSYQ"), + o = n("Iivm"), + r = n("6KyJ"), + l = n("J+f8"), + c = n("w+Rv"), + h = n("Xy1d"), + d = n("Xzy5"), + u = n("20PO"), + m = n("XXQ5"); + + function g(e) { + const { + isTitle: t, + isLoading: n, + isHovered: g, + active: p, + checkable: b, + disabled: v, + checked: f, + icon: _, + iconChecked: C, + hint: S, + subItems: y, + label: E, + onClick: x, + children: w, + toolbox: N, + fullWidthLabel: R + } = e, T = Object(i.useContext)(l.a), k = !!y.length; + return n ? a.a.createElement("li", { + className: s(m.item, m.loading) + }, a.a.createElement(r.a, { + color: "gray" + })) : a.a.createElement("li", { + className: s(m.item, m.interactive, t && m.title, v && m.disabled, g && m + .hovered, p && m.active, T && m.emptyIcons), + onClick: x + }, a.a.createElement(o.a, { + className: s(m.icon), + icon: function() { + if (b && f) return C || _ || h; + return _ + }() + }), a.a.createElement("span", { + className: s(m.label, R && m.fullWidth) + }, E), !!N && a.a.createElement(o.a, { + onClick: function() { + N && N.action() + }, + className: m.remove, + icon: u + }), !k && S && a.a.createElement(c.a, { + className: m.shortcut, + text: S + }), k && a.a.createElement(o.a, { + className: m.nested, + icon: d + }), w) + } + }, + nPPD: function(e, t, n) { + "use strict"; + + function i(e, t, n = {}) { + const i = Object.assign({}, t); + for (const a of Object.keys(t)) { + const s = n[a] || a; + s in e && (i[a] = [e[s], t[a]].join(" ")) + } + return i + } + + function a(e, t, n = {}) { + return Object.assign({}, e, i(e, t, n)) + } + n.d(t, "b", (function() { + return i + })), n.d(t, "a", (function() { + return a + })) + }, + qSb5: function(e, t, n) { + e.exports = { + sliderRow: "sliderRow-1emAA4_D" + } + }, + ul7r: function(e, t) { + e.exports = + '' + }, + v1bN: function(e, t, n) { + e.exports = { + "tablet-small-breakpoint": "screen and (max-width: 428px)", + item: "item-2IihgTnv", + hovered: "hovered-2IihgTnv", + isDisabled: "isDisabled-2IihgTnv", + isActive: "isActive-2IihgTnv", + shortcut: "shortcut-2IihgTnv", + toolbox: "toolbox-2IihgTnv", + withIcon: "withIcon-2IihgTnv", + icon: "icon-2IihgTnv", + labelRow: "labelRow-2IihgTnv", + label: "label-2IihgTnv", + showOnHover: "showOnHover-2IihgTnv" + } + }, + "w+Rv": function(e, t, n) { + "use strict"; + n.d(t, "a", (function() { + return r + })); + var i = n("q1tI"), + a = n("TSYQ"), + s = n.n(a), + o = n("ycgn"); + + function r(e) { + const { + text: t = "", + className: n + } = e; + return i.createElement("span", { + className: s()(o.shortcut, n) + }, t) + } + }, + "x0D+": function(e, t, n) { + var i, a, s; + a = [t], void 0 === (s = "function" == typeof(i = function(e) { + "use strict"; + + function t(e) { + if (Array.isArray(e)) { + for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t]; + return n + } + return Array.from(e) + } + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var n = !1; + if ("undefined" != typeof window) { + var i = { + get passive() { + n = !0 + } + }; + window.addEventListener("testPassive", null, i), window.removeEventListener( + "testPassive", null, i) + } + var a = "undefined" != typeof window && window.navigator && window.navigator + .platform && /iP(ad|hone|od)/.test(window.navigator.platform), + s = [], + o = !1, + r = -1, + l = void 0, + c = void 0, + h = function(e) { + return s.some((function(t) { + return !(!t.options.allowTouchMove || !t.options + .allowTouchMove(e)) + })) + }, + d = function(e) { + var t = e || window.event; + return !!h(t.target) || 1 < t.touches.length || (t.preventDefault && t + .preventDefault(), !1) + }, + u = function() { + setTimeout((function() { + void 0 !== c && (document.body.style.paddingRight = c, + c = void 0), void 0 !== l && (document.body + .style.overflow = l, l = void 0) + })) + }; + e.disableBodyScroll = function(e, i) { + if (a) { + if (!e) return void console.error( + "disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices." + ); + if (e && !s.some((function(t) { + return t.targetElement === e + }))) { + var u = { + targetElement: e, + options: i || {} + }; + s = [].concat(t(s), [u]), e.ontouchstart = function(e) { + 1 === e.targetTouches.length && (r = e.targetTouches[0] + .clientY) + }, e.ontouchmove = function(t) { + var n, i, a, s; + 1 === t.targetTouches.length && (i = e, s = (n = t) + .targetTouches[0].clientY - r, !h(n.target) && ( + i && 0 === i.scrollTop && 0 < s || (a = + i) && a.scrollHeight - a.scrollTop <= a + .clientHeight && s < 0 ? d(n) : n + .stopPropagation())) + }, o || (document.addEventListener("touchmove", d, n ? { + passive: !1 + } : void 0), o = !0) + } + } else { + g = i, setTimeout((function() { + if (void 0 === c) { + var e = !!g && !0 === g.reserveScrollBarGap, + t = window.innerWidth - document + .documentElement.clientWidth; + e && 0 < t && (c = document.body.style + .paddingRight, + document.body.style.paddingRight = t + + "px") + } + void 0 === l && (l = document.body.style.overflow, + document.body.style.overflow = "hidden") + })); + var m = { + targetElement: e, + options: i || {} + }; + s = [].concat(t(s), [m]) + } + var g + }, e.clearAllBodyScrollLocks = function() { + a ? (s.forEach((function(e) { + e.targetElement.ontouchstart = null, e.targetElement + .ontouchmove = null + })), o && (document.removeEventListener("touchmove", d, n ? { + passive: !1 + } : void 0), o = !1), s = [], r = -1) : (u(), s = []) + }, e.enableBodyScroll = function(e) { + if (a) { + if (!e) return void console.error( + "enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices." + ); + e.ontouchstart = null, e.ontouchmove = null, s = s.filter((function( + t) { + return t.targetElement !== e + })), o && 0 === s.length && (document.removeEventListener( + "touchmove", d, n ? { + passive: !1 + } : void 0), o = !1) + } else 1 === s.length && s[0].targetElement === e ? (u(), s = []) : s = + s.filter((function(t) { + return t.targetElement !== e + })) + } + }) ? i.apply(t, a) : i) || (e.exports = s) + }, + ycgn: function(e, t, n) { + e.exports = { + item: "item-f5BaKrKq", + interactive: "interactive-f5BaKrKq", + hovered: "hovered-f5BaKrKq", + disabled: "disabled-f5BaKrKq", + active: "active-f5BaKrKq", + shortcut: "shortcut-f5BaKrKq", + iconCell: "iconCell-f5BaKrKq", + icon: "icon-f5BaKrKq", + checkmark: "checkmark-f5BaKrKq", + content: "content-f5BaKrKq", + label: "label-f5BaKrKq", + checked: "checked-f5BaKrKq", + toolbox: "toolbox-f5BaKrKq", + showToolboxOnHover: "showToolboxOnHover-f5BaKrKq", + arrowIcon: "arrowIcon-f5BaKrKq", + subMenu: "subMenu-f5BaKrKq", + invisibleHotkey: "invisibleHotkey-f5BaKrKq" + } + }, + z6ID: function(e, t, n) { + e.exports = { + separator: "separator-13-1nlsQ" + } + } + } +]); diff --git a/static/charting_library/bundles/chart-event-hint.94e94e93f9fdee936b66.js b/static/charting_library/bundles/chart-event-hint.94e94e93f9fdee936b66.js new file mode 100644 index 0000000..8d9fa0f --- /dev/null +++ b/static/charting_library/bundles/chart-event-hint.94e94e93f9fdee936b66.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["chart-event-hint"],{"+EG+":function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return i}));var r=n("q1tI");class o extends r.Component{shouldComponentUpdate(){return!1}render(){return r.createElement("div",{style:{position:"fixed",zIndex:150,left:0,top:0},ref:this.props.reference})}}const i=r.createContext(null)},"79vt":function(e,t,n){e.exports={container:"container-113jHcZc",content:"content-113jHcZc",arrowHolder:"arrowHolder-113jHcZc","arrowHolder--below":"arrowHolder--below-113jHcZc","arrowHolder--above":"arrowHolder--above-113jHcZc","arrowHolder--before":"arrowHolder--before-113jHcZc","arrowHolder--after":"arrowHolder--after-113jHcZc","arrowHolder--above-fix":"arrowHolder--above-fix-113jHcZc","arrowHolder--before-rtl-fix":"arrowHolder--before-rtl-fix-113jHcZc","arrowHolder--after-ltr-fix":"arrowHolder--after-ltr-fix-113jHcZc",label:"label-113jHcZc",closeButton:"closeButton-113jHcZc"}},AiMB:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return l}));var r=n("q1tI"),o=n("i8i4"),i=n("e3/o"),s=n("jAh7"),a=n("+EG+");class c extends r.PureComponent{constructor(){super(...arguments),this._uuid=Object(i.guid)()}componentWillUnmount(){this._manager().removeWindow(this._uuid)}render(){const e=this._manager().ensureWindow(this._uuid,this.props.layerOptions);return e.style.top=this.props.top||"",e.style.bottom=this.props.bottom||"",e.style.left=this.props.left||"",e.style.right=this.props.right||"",e.style.pointerEvents=this.props.pointerEvents||"",o.createPortal(r.createElement(l.Provider,{value:this},this.props.children),e)}moveToTop(){this._manager().moveToTop(this._uuid)}_manager(){return null===this.context?Object(s.b)():this.context}}c.contextType=a.b;const l=r.createContext(null)},Iivm:function(e,t,n){"use strict";var r=n("q1tI");const o=r.forwardRef((e,t)=>{const{icon:n="",...o}=e;return r.createElement("span",{...o,ref:t,dangerouslySetInnerHTML:{__html:n}})});n.d(t,"a",(function(){return o}))},PN5r:function(e,t,n){"use strict";n.r(t);var r=n("q1tI"),o=n.n(r),i=n("i8i4"),s=n("TSYQ"),a=n("Iivm"),c=(n("AiMB"),n("To8B")),l=n("79vt");r.PureComponent;function d(e){const{className:t,containerClassName:n,contentClassName:o,reference:i,style:d,arrow:h=!0,arrowClassName:u,arrowReference:p,onClose:m,arrowStyle:w,children:f,..._}=e;return r.createElement("div",{..._,className:t,ref:i,style:d},h&&r.createElement("div",{className:u,ref:p,style:w}),r.createElement("div",{className:s(l.container,n)},r.createElement("div",{className:s(l.content,o)},f),m&&r.createElement(a.a,{className:l.closeButton,icon:c,onClick:m})))}var h=n("g2Cz");function u(e){const{text:t,onClose:n}=e;return o.a.createElement("div",{className:h.container},o.a.createElement("div",{className:h.centerElement},o.a.createElement(d,{arrow:!1,onClose:n},o.a.createElement("div",{className:h.text},t))))}n.d(t,"ChartEventHintRenderer",(function(){return p}));class p{constructor(e){this._wrap=document.createElement("div"),this._container=e} +show(e,t){if(!this._wrap)return;this.hide(),this._container.append(this._wrap);const n={text:e,onClose:()=>{t&&t(),this.hide()}};i.render(r.createElement(u,{...n}),this._wrap)}hide(){this._wrap&&(i.unmountComponentAtNode(this._wrap),this._wrap.remove())}destroy(){this.hide(),delete this._wrap}}},To8B:function(e,t){e.exports=''},g2Cz:function(e,t,n){e.exports={container:"container-RnpzRzG6",centerElement:"centerElement-RnpzRzG6",text:"text-RnpzRzG6"}},jAh7:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return a}));var r=n("Eyy1");class o{constructor(){this._storage=[]}add(e){this._storage.push(e)}remove(e){this._storage=this._storage.filter(t=>e!==t)}has(e){return this._storage.includes(e)}getItems(){return this._storage}}class i{constructor(e=document){this._storage=new o,this._windows=new Map,this._index=0,this._document=e,this._container=e.createDocumentFragment()}setContainer(e){const t=this._container,n=null===e?this._document.createDocumentFragment():e;!function(e,t){Array.from(e.childNodes).forEach(e=>{e.nodeType===Node.ELEMENT_NODE&&t.appendChild(e)})}(t,n),this._container=n}registerWindow(e){this._storage.has(e)||this._storage.add(e)}ensureWindow(e,t={position:"fixed",direction:"normal"}){const n=this._windows.get(e);if(void 0!==n)return n;this.registerWindow(e);const r=this._document.createElement("div");if(r.style.position=t.position,r.style.zIndex=this._index.toString(),r.dataset.id=e,void 0!==t.index){const e=this._container.childNodes.length;if(t.index>=e)this._container.appendChild(r);else if(t.index<=0)this._container.insertBefore(r,this._container.firstChild);else{const e=this._container.childNodes[t.index];this._container.insertBefore(r,e)}}else"reverse"===t.direction?this._container.insertBefore(r,this._container.firstChild):this._container.appendChild(r);return this._windows.set(e,r),++this._index,r}unregisterWindow(e){this._storage.remove(e);const t=this._windows.get(e);void 0!==t&&(null!==t.parentElement&&t.parentElement.removeChild(t),this._windows.delete(e))}getZindex(e){const t=this.ensureWindow(e);return parseInt(t.style.zIndex||"0")}moveToTop(e){if(this.getZindex(e)!==this._index){this.ensureWindow(e).style.zIndex=(++this._index).toString()}}removeWindow(e){this.unregisterWindow(e)}}const s=new WeakMap;function a(e=document){const t=e.getElementById("overlap-manager-root");if(null!==t)return Object(r.ensureDefined)(s.get(t));{const t=new i(e),n=function(e){const t=e.createElement("div");return t.style.position="absolute",t.style.zIndex=150..toString(),t.style.top="0px",t.style.left="0px",t.id="overlap-manager-root",t}(e);return s.set(n,t),t.setContainer(n),e.body.appendChild(n),t}}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/chart-screenshot-hint.14bfec43c52bc3d28f82.js b/static/charting_library/bundles/chart-screenshot-hint.14bfec43c52bc3d28f82.js new file mode 100644 index 0000000..63c0142 --- /dev/null +++ b/static/charting_library/bundles/chart-screenshot-hint.14bfec43c52bc3d28f82.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["chart-screenshot-hint"],{"+PSo":function(t,e,n){t.exports={container:"container-2PMGBrHh",bottomPadding:"bottomPadding-2PMGBrHh",centerElement:"centerElement-2PMGBrHh",notice:"notice-2PMGBrHh","notice-showed":"notice-showed-2PMGBrHh"}},"/f/q":function(t,e,n){},ByBs:function(t,e){t.exports=''},Iivm:function(t,e,n){"use strict";var o=n("q1tI");const s=o.forwardRef((t,e)=>{const{icon:n="",...s}=t;return o.createElement("span",{...s,ref:e,dangerouslySetInnerHTML:{__html:n}})});n.d(e,"a",(function(){return s}))},K5qS:function(t){t.exports=JSON.parse('{"container":"container-9ckn123c","container-danger":"container-danger-3U4WdGto","icon":"icon-2ZK1Y3zH","header":"header-287NeSeQ","container-warning":"container-warning-1jkRTadj","container-success":"container-success-2srhYBbo","container-default":"container-default-2MDEpAUG","text-wrap":"text-wrap-26IUyzzc","close-button":"close-button-2LkcSirN"}')},KkTf:function(t,e){t.exports=''},LeKP:function(t,e){t.exports=''},N9IK:function(t,e){t.exports=''},SJs6:function(t,e){t.exports=''},USSy:function(t,e,n){"use strict";n.r(e);var o=n("q1tI"),s=n.n(o),r=n("i8i4"),i=n("hbEN"),c=n("TSYQ"),a=n("Iivm"),l=n("N9IK"),h=n("KkTf"),u=n("zvJH"),w=n("LeKP"),d=n("ByBs"),m=n("yMrP");n("wk5D");function g(t="l"){switch(t){case"l":return l;case"m":return h;case"s":return u;case"xs":return w;case"xxs":return d;default:return h}}const p=o.forwardRef((t,e)=>{const{className:n,size:s,...r}=t,i=c(m["close-button"],m["button-"+s],n);return o.createElement("button",{...r,type:"button",className:i,ref:e},o.createElement(a.a,{icon:g(s),className:m["close-icon"]}))});var v=n("ZZTB"),f=n("c6oV"),x=n("SJs6"),b=n("K5qS");n("/f/q");const B={danger:v,warning:v,success:x,default:f};function k(t){const{informerIntent:e,content:n,className:s,header:r,isIconShown:i=!0,isCloseButtonShown:l,icon:h,onCloseClick:u,closeButtonLabel:w="Close"}=t;return o.createElement("div",{className:c(b.container,b["container-"+e],s)},i&&o.createElement(a.a,{className:b.icon,icon:null!=h?h:B[e]}),o.createElement("div",{className:b["text-wrap"]},o.createElement("span",{ +className:b.header},r)," ",n),l&&o.createElement(p,{"aria-label":w,onClick:u,className:b["close-button"],size:"xs"}))}var M=n("+PSo");function P(t){const[e,n]=Object(o.useState)(!1);return Object(o.useLayoutEffect)(()=>{const t=setTimeout(()=>n(!0),50),e=setTimeout(()=>n(!1),2500);return()=>{clearTimeout(t),clearTimeout(e)}},[]),s.a.createElement("div",{className:c(M.container,t.bottomPadding&&M.bottomPadding)},s.a.createElement("div",{className:M.centerElement},s.a.createElement(k,{content:t.text,informerIntent:"success",className:c(M.notice,e&&M["notice-showed"])})))}n.d(e,"ChartScreenshotHintRenderer",(function(){return E}));class E{constructor(t,e){this._showed=!1,this._wrap=document.createElement("div"),this._container=t,this._debouncedHide=Object(i.default)(()=>this.hide(),3e3),this._bottomPadding=e.bottomPadding}show(t){this._wrap&&!this._showed&&(this._showed=!0,this._container.append(this._wrap),r.render(o.createElement(P,{text:t,bottomPadding:this._bottomPadding}),this._wrap),this._debouncedHide())}hide(){this._wrap&&(this._showed=!1,r.unmountComponentAtNode(this._wrap),this._wrap.remove())}destroy(){this.hide(),delete this._wrap}}},ZZTB:function(t,e){t.exports=''},c6oV:function(t,e){t.exports=''},wk5D:function(t,e,n){},yMrP:function(t){t.exports=JSON.parse('{"close-button":"close-button-1WFSq2PU","close-icon":"close-icon-3unB1Yrw","button-l":"button-l-uIo2rThA","button-m":"button-m-3MMteafV","button-s":"button-s-Nv9EL6Kl","button-xs":"button-xs-3f-PiL7F","button-xxs":"button-xxs-1ElYVuPk"}')},zvJH:function(t,e){t.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/chart-widget-gui.226991e9f53aba124fc2.js b/static/charting_library/bundles/chart-widget-gui.226991e9f53aba124fc2.js new file mode 100644 index 0000000..3ff169b --- /dev/null +++ b/static/charting_library/bundles/chart-widget-gui.226991e9f53aba124fc2.js @@ -0,0 +1,4655 @@ +(window.webpackJsonp = window.webpackJsonp || []).push([ + ["chart-widget-gui"], { + "+xKI": function(e, t) { + e.exports = + '' + }, + "/NcV": function(e, t) { + e.exports = + '' + }, + "0jws": function(e, t, s) { + e.exports = { + blockHidden: "blockHidden-xPfK7aM7", + "pane-button": "pane-button-xPfK7aM7" + } + }, + "1INk": function(e, t) { + e.exports = + '' + }, + "1Wf8": function(e, t) { + e.exports = + '' + }, + "2CEX": function(e, t) { + e.exports = + '' + }, + "4nwx": function(e, t, s) { + "use strict"; + s.r(t), s.d(t, "monthsFullNames", (function() { + return l + })), s.d(t, "monthsShortNames", (function() { + return n + })), s.d(t, "weekDaysFullNames", (function() { + return a + })), s.d(t, "weekDaysShortNames", (function() { + return r + })), s.d(t, "weekDaysMiniNames", (function() { + return d + })); + var i = s("YFKU"), + o = s("99ZO"); + const l = { + [o.Months.JANUARY]: Object(i.t)("January"), + [o.Months.FEBRUARY]: Object(i.t)("February"), + [o.Months.MARCH]: Object(i.t)("March"), + [o.Months.APRIL]: Object(i.t)("April"), + [o.Months.MAY]: Object(i.t)("May"), + [o.Months.JUNE]: Object(i.t)("June"), + [o.Months.JULY]: Object(i.t)("July"), + [o.Months.AUGUST]: Object(i.t)("August"), + [o.Months.SEPTEMBER]: Object(i.t)("September"), + [o.Months.OCTOBER]: Object(i.t)("October"), + [o.Months.NOVEMBER]: Object(i.t)("November"), + [o.Months.DECEMBER]: Object(i.t)("December") + }, + n = { + [o.Months.JANUARY]: Object(i.t)("Jan"), + [o.Months.FEBRUARY]: Object(i.t)("Feb"), + [o.Months.MARCH]: Object(i.t)("Mar"), + [o.Months.APRIL]: Object(i.t)("Apr"), + [o.Months.MAY]: Object(i.t)("May", { + context: "short" + }), + [o.Months.JUNE]: Object(i.t)("Jun"), + [o.Months.JULY]: Object(i.t)("Jul"), + [o.Months.AUGUST]: Object(i.t)("Aug"), + [o.Months.SEPTEMBER]: Object(i.t)("Sep"), + [o.Months.OCTOBER]: Object(i.t)("Oct"), + [o.Months.NOVEMBER]: Object(i.t)("Nov"), + [o.Months.DECEMBER]: Object(i.t)("Dec") + }, + a = { + [o.WeekDays.SUNDAY]: Object(i.t)("Sunday"), + [o.WeekDays.MONDAY]: Object(i.t)("Monday"), + [o.WeekDays.TUESDAY]: Object(i.t)("Tuesday"), + [o.WeekDays.WEDNESDAY]: Object(i.t)("Wednesday"), + [o.WeekDays.THURSDAY]: Object(i.t)("Thursday"), + [o.WeekDays.FRIDAY]: Object(i.t)("Friday"), + [o.WeekDays.SATURDAY]: Object(i.t)("Saturday") + }, + r = { + [o.WeekDays.SUNDAY]: Object(i.t)("Sun"), + [o.WeekDays.MONDAY]: Object(i.t)("Mon"), + [o.WeekDays.TUESDAY]: Object(i.t)("Tue"), + [o.WeekDays.WEDNESDAY]: Object(i.t)("Wed"), + [o.WeekDays.THURSDAY]: Object(i.t)("Thu"), + [o.WeekDays.FRIDAY]: Object(i.t)("Fri"), + [o.WeekDays.SATURDAY]: Object(i.t)("Sat") + }, + d = { + [o.WeekDays.SUNDAY]: Object(i.t)("Su", { + context: "day_of_week" + }), + [o.WeekDays.MONDAY]: Object(i.t)("Mo", { + context: "day_of_week" + }), + [o.WeekDays.TUESDAY]: Object(i.t)("Tu", { + context: "day_of_week" + }), + [o.WeekDays.WEDNESDAY]: Object(i.t)("We", { + context: "day_of_week" + }), + [o.WeekDays.THURSDAY]: Object(i.t)("Th", { + context: "day_of_week" + }), + [o.WeekDays.FRIDAY]: Object(i.t)("Fr", { + context: "day_of_week" + }), + [o.WeekDays.SATURDAY]: Object(i.t)("Sa", { + context: "day_of_week" + }) + } + }, + "5Alx": function(e, t, s) { + e.exports = { + marginlegendhoriz: "4px", + legend: "legend-2KhwsEwE", + item: "item-2KhwsEwE", + withAction: "withAction-2KhwsEwE", + selected: "selected-2KhwsEwE", + last: "last-2KhwsEwE", + text: "text-2KhwsEwE", + noWrapWrapper: "noWrapWrapper-2KhwsEwE", + noWrap: "noWrap-2KhwsEwE", + series: "series-2KhwsEwE", + valuesAdditionalWrapper: "valuesAdditionalWrapper-2KhwsEwE", + valueItem: "valueItem-2KhwsEwE", + valueTitle: "valueTitle-2KhwsEwE", + valueValue: "valueValue-2KhwsEwE", + valuesWrapper: "valuesWrapper-2KhwsEwE", + directionColumn: "directionColumn-2KhwsEwE", + titleWrapper: "titleWrapper-2KhwsEwE", + button: "button-2KhwsEwE", + statusesWrapper: "statusesWrapper-2KhwsEwE", + buttonsWrapper: "buttonsWrapper-2KhwsEwE", + buttons: "buttons-2KhwsEwE", + noActions: "noActions-2KhwsEwE", + title: "title-2KhwsEwE", + title2nd: "title2nd-2KhwsEwE", + disabled: "disabled-2KhwsEwE", + disabledOnInterval: "disabledOnInterval-2KhwsEwE", + withCustomTextColor: "withCustomTextColor-2KhwsEwE", + study: "study-2KhwsEwE", + title1st: "title1st-2KhwsEwE", + hideValues: "hideValues-2KhwsEwE", + has5Buttons: "has5Buttons-2KhwsEwE", + stayInHoveredMode: "stayInHoveredMode-2KhwsEwE", + withTail: "withTail-2KhwsEwE", + loading: "loading-2KhwsEwE", + loader: "loader-2KhwsEwE", + withDot: "withDot-2KhwsEwE", + title3rd: "title3rd-2KhwsEwE", + title4th: "title4th-2KhwsEwE", + miniHidden2Title: "miniHidden2Title-2KhwsEwE", + microHidden2Title: "microHidden2Title-2KhwsEwE", + hidden3Title: "hidden3Title-2KhwsEwE", + flagged: "flagged-2KhwsEwE", + medium: "medium-2KhwsEwE", + minimized: "minimized-2KhwsEwE", + micro: "micro-2KhwsEwE", + onlyOneButtonCanBeStick: "onlyOneButtonCanBeStick-2KhwsEwE", + touchMode: "touchMode-2KhwsEwE", + buttonIcon: "buttonIcon-2KhwsEwE", + flag: "flag-2KhwsEwE", + invisibleHover: "invisibleHover-2KhwsEwE", + eye: "eye-2KhwsEwE", + hiddenLoading: "hiddenLoading-2KhwsEwE", + "eye-animation": "eye-animation-2KhwsEwE", + markerContainer: "markerContainer-2KhwsEwE", + flagWrapper: "flagWrapper-2KhwsEwE", + sourcesWrapper: "sourcesWrapper-2KhwsEwE", + newCollapser: "newCollapser-2KhwsEwE", + sources: "sources-2KhwsEwE", + toggler: "toggler-2KhwsEwE pane-button-xPfK7aM7", + counter: "counter-2KhwsEwE", + iconArrow: "iconArrow-2KhwsEwE", + objectTree: "objectTree-2KhwsEwE", + onlyOneSourceShown: "onlyOneSourceShown-2KhwsEwE", + closed: "closed-2KhwsEwE", + objectsTreeCanBeShown: "objectsTreeCanBeShown-2KhwsEwE" + } + }, + "61S9": function(e, t) { + e.exports = + '' + }, + "6dGu": function(e, t) { + e.exports = + '' + }, + "94TV": function(e, t) { + e.exports = + '' + }, + "956S": function(e, t) { + e.exports = + '' + }, + "9Crk": function(e, t) { + e.exports = + '' + }, + "9lPX": function(e, t) { + e.exports = + '' + }, + AH3n: function(e, t) { + e.exports = + '' + }, + AvGy: function(e, t, s) { + "use strict"; + s.d(t, "a", (function() { + return o + })); + var i = s("qFKp"); + const o = i.CheckMobile.any() + }, + D8x7: function(e, t) { + e.exports = + '' + }, + EV8o: function(e, t, s) { + "use strict"; + s.d(t, "a", (function() { + return o + })); + var i = s("ogJP"); + + function o(e, t, s, o, l) { + const n = document.createElement("div"); + n.className = t, n.classList.toggle(o, !e.visible.value()), Object.assign(n.dataset, e + .dataset), void 0 !== e.className && n.classList.add(e.className), void 0 !== e + .title && (n.classList.add("apply-common-tooltip"), n.setAttribute("title", e.title + .value()), void 0 !== e.hotKeyTitle && (n.dataset.tooltipHotkey = e + .hotKeyTitle)), n.addEventListener("touchend", e.action), n.addEventListener( + "mousedown", t => { + 0 === t.button && e.action(t) + }); + const a = document.createElement("div"); + a.classList.add(s); + const r = e.iconMap.get(l) || ""; + return Object(i.isString)(r) ? a.innerHTML = r : a.appendChild(r), n.appendChild(a), n + } + }, + G2LI: function(e, t) { + e.exports = + '' + }, + GOhO: function(e, t, s) { + "use strict"; + var i = s("+DwS"); + s("tc+8"); + var o = s("m/cY"); + + function l(e, ...t) { + const s = () => e(...t.map(e => e.value())), + i = Object(o.a)(s()), + l = () => i.setValue(s()), + n = {}; + for (const e of t) e.subscribe(n, l); + return i.destroy = () => { + t.forEach(e => e.unsubscribeAll(n)) + }, i + } + s.d(t, "b", (function() { + return i.a + })), s.d(t, "a", (function() { + return l + })) + }, + "Gp/h": function(e, t) { + e.exports = + '' + }, + Jjb7: function(e, t) { + e.exports = + '' + }, + JmzL: function(e, t) { + e.exports = + '' + }, + LIcf: function(e, t) { + e.exports = + '' + }, + LVLx: function(e, t, s) { + "use strict"; + (e => { + function t(e) { + return e instanceof Node ? e : document.createTextNode(String(e)) + } + for (const s of e) { + if (s.hasOwnProperty("append")) return; + Object.defineProperty(s, "append", { + configurable: !0, + enumerable: !0, + writable: !0, + value: function(...e) { + if (1 === e.length) return void this.appendChild(t(e[0])); + const s = document.createDocumentFragment(); + for (const i of e) s.appendChild(t(i)); + this.appendChild(s) + } + }) + } + })([Element.prototype, Document.prototype, DocumentFragment.prototype]) + }, + M3mX: function(e, t) { + e.exports = + '' + }, + MQEA: function(e, t) { + e.exports = + '' + }, + MjtL: function(e, t) { + e.exports = + '' + }, + "MyT/": function(e, t) { + e.exports = + '' + }, + OJSF: function(e, t) { + e.exports = + '' + }, + OcaN: function(e, t, s) { + e.exports = { + loader: "loader-1pOK1lo2", + loaderItem: "loaderItem-1pOK1lo2", + "loader-animation": "loader-animation-1pOK1lo2", + touchMode: "touchMode-1pOK1lo2" + } + }, + PXSR: function(e, t) { + e.exports = + '' + }, + QEZv: function(e, t) { + e.exports = + '' + }, + QkND: function(e, t) { + e.exports = + '' + }, + R5JZ: function(e, t, s) { + "use strict"; + + function i(e, t, s, i, o) { + function l(o) { + if (e > o.timeStamp) return; + const l = o.target; + void 0 !== s && null !== t && null !== l && l.ownerDocument === i && (t.contains(l) || + s(o)) + } + return o.click && i.addEventListener("click", l, !1), o.mouseDown && i.addEventListener( + "mousedown", l, !1), o.touchEnd && i.addEventListener("touchend", l, !1), o + .touchStart && i.addEventListener("touchstart", l, !1), () => { + i.removeEventListener("click", l, !1), i.removeEventListener("mousedown", l, !1), i + .removeEventListener("touchend", l, !1), i.removeEventListener("touchstart", l, + !1) + } + } + s.d(t, "a", (function() { + return i + })) + }, + RgOa: function(e, t) { + e.exports = + '' + }, + S48P: function(e, t) { + e.exports = + '' + }, + TGRH: function(e, t, s) { + "use strict"; + s.r(t), s.d(t, "ControlBarNavigation", (function() { + return A + })); + var i = s("Eyy1"), + o = (s("YFKU"), s("8+VR")), + l = s("Kxc7"), + n = s("1ANp"), + a = s("Ialn"), + r = s("gWrr"), + d = s("/DW5"), + h = s("qFKp"), + u = (s("JWMC"), s("MjtL")), + c = s("e8Rm"), + _ = s("e2QN"), + p = s("vg09"), + m = s("/NcV"), + b = s("94TV"), + g = s("qfuz"), + w = s("MQEA"), + v = s("1INk"), + y = s("+xKI"), + S = s("eYcT"), + M = s("nFx7"); + s("jrhZ"); + const f = Object(d.b)({ + keys: ["Alt", "R"], + text: "{0} + {1}" + }), + E = Object(d.b)({ + keys: ["Alt", "Click", "Alt", "Enter"], + text: "{0} + {1}, {2} + {3}" + }), + C = Object(d.b)({ + keys: [g], + text: "{0}" + }), + k = Object(d.b)({ + keys: [w], + text: "{0}" + }), + V = Object(d.b)({ + keys: ["Ctrl", v], + text: "{0} + {1}" + }), + x = Object(d.b)({ + keys: ["Ctrl", y], + text: "{0} + {1}" + }), + W = + `
\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t${c}\n\t\t\t
\n\t\t\t
\n\t\t\t\t${p}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t${S}\n\t\t\t
\n\t\t\t
\n\t\t\t\t${M}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t${u}\n\t\t\t
\n\t\t\t
\n\t\t\t\t${m}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t${_}\n\t\t\t
\n\t\t
\n\t
\n
`, + T = + `
\n\t${b}\n
`, + L = h.CheckMobile.any(), + O = { + zoomInOut: !0, + maximize: !0, + scrollLeftRight: !0, + resetScale: !0, + goToRealtime: !0 + }; + class A { + constructor(e, t, s) { + this._widget = Object(i.ensureNotNull)(Object(r.a)(W).querySelector( + ".control-bar-wrapper")), this._controlBar = Object(i.ensureNotNull)(this + ._widget.querySelector(".control-bar")), this._back = Object(i + .ensureNotNull)(Object(r.a)(T).querySelector( + ".control-bar__btn--back-present")), this._btnGroups = Array.from(this + ._controlBar.querySelectorAll(".js-btn-group")), this._backButtonVisible = ! + 1, this._boundMouseHandler = null, this._chartModel = null, this + ._checkIntervalId = 0, this._controlBarVisible = !1, this._priceAxisChanged = + null, this._resetAvailabilityChanged = null, this._priceAxisName = "right", this + ._rafId = 0, this._visibilityTypeProperty = null, this + ._boundUpdateMaximizeButtonsVisibility = this._updateMaximizeButtonsVisibility + .bind(this), this._boundToggleFullscreenButtons = this._toggleFullscreenButtons + .bind(this), this._paneWidth = 0, this._leftPriceScaleWidth = 0, this + ._rightPriceScaleWidth = 0, this._chart = e, this._parent = t, this._options = + Object.assign({}, O, s), this._visibilityPrioritizedGroups = this + ._initGroupDescriptions(), this._init(), this._initHandlers(), this + .updatePosition() + } + destroy() { + if (null !== this._visibilityTypeProperty && (this._visibilityTypeProperty + .unsubscribe(this, this._onVisibilityTypeChange), this + ._visibilityTypeProperty = null), null !== this._boundMouseHandler && (this + ._parent.removeEventListener("mousemove", this._boundMouseHandler, !1), this + ._parent.removeEventListener("mouseleave", this._boundMouseHandler, !1), + this._boundMouseHandler = null), null !== this._priceAxisChanged && (this + ._priceAxisChanged.unsubscribe(this, this._updateBackBtnPosition), this + ._priceAxisChanged = null), clearInterval(this._checkIntervalId), null !== + this._resetAvailabilityChanged) { + this._resetAvailabilityChanged.unsubscribe(this, this + ._updateResetScalesButtonVisibility); + const e = this._chart.getResizerDetacher(); + e.fullscreenable.unsubscribe(this._boundUpdateMaximizeButtonsVisibility), e + .fullscreen.unsubscribe(this._boundToggleFullscreenButtons), this + ._resetAvailabilityChanged = null + } + this._chart = null + } + updatePosition() { + const e = this._chart.paneWidgets(); + if (0 === e.length) return; + this._paneWidth = e[0].width(), this._leftPriceScaleWidth = this._chart + .getPriceAxisMaxWidthByName("left"), this._rightPriceScaleWidth = this._chart + .getPriceAxisMaxWidthByName("right"); + const t = this._chart.timeAxisHeight() + this._bottomMargin(); + this._widget.style.bottom = t + "px", this._back.style.bottom = t + "px", this + ._updateBtnGroupVisibility() + } + _bottomMargin() { + var e; + const t = this._chart.paneWidgets(); + return (null !== (e = this._chart.maximizedPaneWidget()) && void 0 !== e ? e : t[t + .length - 1]).containsMainSeries() ? 32 : 5 + } + _init() { + if (h.CheckMobile.any()) + for (const e of this._btnGroups) e.classList.add("js-hidden"); + this._buttons = { + zoomIn: this._widget.querySelector(".control-bar__btn--zoom-in"), + zoomOut: this._widget.querySelector(".control-bar__btn--zoom-out"), + moveLeft: this._widget.querySelector(".control-bar__btn--move-left"), + moveRight: this._widget.querySelector(".control-bar__btn--move-right"), + turn: this._widget.querySelector(".control-bar__btn--turn-button"), + maximize: this._widget.querySelector(".control-bar__btn--maximize"), + minimize: this._widget.querySelector(".control-bar__btn--minimize") + }, this._initVisibility(), this._parent.appendChild(this._widget), this._parent + .appendChild(this._back), this._backButtonVisible = !1, this._priceAxisName = + Object(a.isRtl)() ? "left" : "right", this._chart.withModel(this, () => { + this._chartModel = this._chart.model(), this._priceAxisChanged = this + ._chart.getPriceAxisWidthChangedByName(this._priceAxisName), this + ._resetAvailabilityChanged = this._chartModel.model() + .isScalesResetAvailableChanged(), this._priceAxisChanged.subscribe( + this, this._updateBackBtnPosition), this + ._resetAvailabilityChanged.subscribe(this, this + ._updateResetScalesButtonVisibility); + const e = this._chart.getResizerDetacher(); + e.fullscreenable.subscribe(this._boundUpdateMaximizeButtonsVisibility), + e.fullscreen.subscribe(this._boundToggleFullscreenButtons), this + ._updateMaximizeButtonsVisibility(), this._updateBackBtnPosition(), + this._back.addEventListener("click", () => { + null !== this._chartModel && this._chartModel.timeScale() + .scrollToRealtime(!0) + }), this._checkIntervalId = setInterval(() => this._check(), 1e3) + }) + } + _initHandlers() { + const e = o.mobiletouch ? "touchstart" : "mousedown", + t = o.mobiletouch ? ["touchend"] : ["mouseup", "mouseout"]; + this._buttons.moveLeft.addEventListener(e, e => { + e.preventDefault(), this._chart.scrollHelper().moveByBar(1), this + ._trackEvent("Move Left") + }), this._buttons.moveRight.addEventListener(e, e => { + e.preventDefault(), this._chart.scrollHelper().moveByBar(-1), this + ._trackEvent("Move Right") + }); + for (const e of t) this._buttons.moveLeft.addEventListener(e, () => this._chart + .scrollHelper().stopMoveByBar()), this._buttons.moveRight.addEventListener( + e, () => this._chart.scrollHelper().stopMoveByBar()); + this._buttons.turn.addEventListener("click", e => { + e.preventDefault(), this._chart.GUIResetScales(), this._trackEvent( + "Reset to Default Settings") + }), this._buttons.zoomOut.addEventListener("click", e => { + e.preventDefault(), null !== this._chartModel && this._chartModel + .zoomOut(), this._trackEvent("Zoom Out") + }), this._buttons.zoomIn.addEventListener("click", e => { + e.preventDefault(), null !== this._chartModel && this._chartModel + .zoomIn(), this._trackEvent("Zoom In") + }), this._buttons.maximize.addEventListener("click", e => { + e.preventDefault(), this._chart.setActive(!0), this._chart + .getResizerDetacher().requestFullscreen(), this._trackEvent( + " Maximize Chart") + }), this._buttons.minimize.addEventListener("click", e => { + e.preventDefault(), this._chart.getResizerDetacher().exitFullscreen(), + this._trackEvent(" Restore Chart") + }); + const s = e => e.addEventListener("contextmenu", e => e.preventDefault()); + s(this._buttons.moveLeft), s(this._buttons.moveRight), s(this._buttons.turn), s(this + ._buttons.zoomOut), s(this._buttons.zoomIn), s(this._buttons.minimize), s( + this._buttons.maximize) + } + _initGroupDescriptions() { + return [{ + shouldBeHiddenOnMobile: !1, + available: this._isMaximizeButtonAvailable.bind(this), + className: "js-btn-group-maximize", + element: this._getBtnGroup("js-btn-group-maximize"), + totalWidth: 50 + }, { + shouldBeHiddenOnMobile: !1, + available: () => this._options.resetScale, + className: "js-btn-group-reset-scale", + element: this._getBtnGroup("js-btn-group-reset-scale"), + totalWidth: 50 + }, { + shouldBeHiddenOnMobile: !l.enabled( + "show_zoom_and_move_buttons_on_touch"), + available: () => this._options.zoomInOut, + className: "js-btn-group-zoom", + element: this._getBtnGroup("js-btn-group-zoom"), + totalWidth: 86 + }, { + shouldBeHiddenOnMobile: !l.enabled( + "show_zoom_and_move_buttons_on_touch"), + available: () => this._options.scrollLeftRight, + className: "js-btn-group-scroll", + element: this._getBtnGroup("js-btn-group-scroll"), + totalWidth: 86 + }] + } + _check() { + if (null === this._chartModel || !this._options.goToRealtime) return; + const e = this._chartModel.timeScale().rightOffset() < 0; + e !== this._backButtonVisible && (this._backButtonVisible = e, this._back.classList + .toggle("control-bar__btn--btn-hidden", !this._backButtonVisible)) + } + _initVisibility() { + this._visibilityTypeProperty = Object(n.actualBehavior)(), this + ._visibilityTypeProperty.subscribe(this, this._onVisibilityTypeChange), this + ._onVisibilityTypeChange() + } + _onVisibilityTypeChange() { + if (null === this._visibilityTypeProperty) return; + const e = this._visibilityTypeProperty.value(); + "alwaysOn" === e || "alwaysOff" === e ? (this._controlBarVisible = "alwaysOn" === e, + null !== this._boundMouseHandler && (this._parent.removeEventListener( + "mousemove", this._boundMouseHandler, !1), this._parent + .removeEventListener("mouseleave", this._boundMouseHandler, !1), this + ._boundMouseHandler = null)) : (this._controlBarVisible = !1, this + ._boundMouseHandler || (this._boundMouseHandler = this + ._visibilityMouseHandler.bind(this), this._parent.addEventListener( + "mousemove", this._boundMouseHandler), this._parent + .addEventListener("mouseleave", this._boundMouseHandler))), this + ._updateControlBarVisibility() + } + _visibilityMouseHandler(e) { + if (e.buttons) return; + if (null !== this._chartModel && this._chartModel.lineBeingCreated()) return; + let t = "mouseleave" !== e.type; + if ("mousemove" === e.type) { + const s = this._widget.getBoundingClientRect(), + i = 100 - this._bottomMargin(); + t = e.clientX >= s.left - 100 && e.clientX <= s.right + 100 && e.clientY >= s + .top - i && e.clientY <= s.bottom + 100 + } + this._controlBarVisible !== t && (this._controlBarVisible = t, null === this + ._rafId && (this._rafId = this._controlBar.ownerDocument.defaultView + .requestAnimationFrame(this._updateControlBarVisibility.bind(this)))) + } + _updateControlBarVisibility() { + this._rafId = null, this._controlBar.classList.toggle("control-bar--hidden", !this + ._controlBarVisible) + } + _updateBackBtnPosition() { + if ("left" === this._priceAxisName || "right" === this._priceAxisName) { + const e = this._chart.getPriceAxisMaxWidthByName(this._priceAxisName) + 14; + e && (this._back.style.marginRight = e + "px") + } + } + _updateBtnGroupVisibility() { + const e = this._leftPriceScaleWidth + this._paneWidth, + t = (e + this._rightPriceScaleWidth) / 2; + let s = 2 * Math.min(e - t, t - this._leftPriceScaleWidth) - 50 - 50, + i = !1; + for (const e of this._visibilityPrioritizedGroups) { + e.enoughSpaceForGroup = !1; + e.available() && (!L || !e.shouldBeHiddenOnMobile) && (s -= e.totalWidth, e + .enoughSpaceForGroup = s >= 0 && !i, i = i || !e.enoughSpaceForGroup), ! + e.enoughSpaceForGroup !== e.element.classList.contains("js-hidden") && e + .element.classList.toggle("js-hidden", !e.enoughSpaceForGroup) + } + this._updateControlBarPosition() + } + _getBtnGroup(e) { + return Object(i.ensureDefined)(this._btnGroups.find(t => t.classList.contains(e))) + } + _updateControlBarPosition() { + const e = this._visibilityPrioritizedGroups.reduce((e, t) => e + (t + .enoughSpaceForGroup ? t.totalWidth : 0), 0), + t = (this._paneWidth + this._leftPriceScaleWidth + this._rightPriceScaleWidth) / + 2 - Math.ceil(e / 2); + this._widget.style.left = t + "px" + } + _updateResetScalesButtonVisibility() { + if (null === this._chartModel) return; + const e = this._chartModel.model().isScalesResetAvailable(); + this._buttons.turn.classList.toggle("control-bar__btn--btn-hidden", !e) + } + _updateMaximizeButtonsVisibility() { + this._updateBtnGroupVisibility() + } + _toggleFullscreenButtons() { + const e = this._chart.getResizerDetacher().fullscreen.value(); + this._buttons.maximize.classList.toggle("js-hidden", e), this._buttons.minimize + .classList.toggle("js-hidden", !e) + } + _isMaximizeButtonAvailable() { + return this._options.maximize, !1 + } + _trackEvent(e) { + 0 + } + } + }, + Tq3g: function(e, t) { + e.exports = + '' + }, + Uua9: function(e, t) { + e.exports = + '' + }, + VrXG: function(e, t) { + e.exports = + '' + }, + VrrN: function(e, t) { + e.exports = + '' + }, + WYzw: function(e, t) { + e.exports = + '' + }, + "Y+EN": function(e, t) { + e.exports = + '' + }, + YGQl: function(e, t) { + e.exports = + '' + }, + ZKFq: function(e, t, s) { + e.exports = { + "css-value-pane-controls-padding-left": "1px", + "css-value-pane-controls-padding-right": "5px", + paneControls: "paneControls-2fnY2ZKI", + hasTopMargin: "hasTopMargin-2fnY2ZKI", + hidden: "hidden-2fnY2ZKI", + forceHidden: "forceHidden-2fnY2ZKI", + button: "button-2fnY2ZKI pane-button-xPfK7aM7", + buttonIcon: "buttonIcon-2fnY2ZKI", + minimize: "minimize-2fnY2ZKI", + newButton: "newButton-2fnY2ZKI", + touchMode: "touchMode-2fnY2ZKI", + maximize: "maximize-2fnY2ZKI", + "maximize-animation-up-bracket": "maximize-animation-up-bracket-2fnY2ZKI", + "maximize-animation-down-bracket": "maximize-animation-down-bracket-2fnY2ZKI", + "minimize-animation-up-bracket": "minimize-animation-up-bracket-2fnY2ZKI", + "minimize-animation-down-bracket": "minimize-animation-down-bracket-2fnY2ZKI", + up: "up-2fnY2ZKI", + "up-animation": "up-animation-2fnY2ZKI", + down: "down-2fnY2ZKI", + "down-animation": "down-animation-2fnY2ZKI", + buttonsWrapper: "buttonsWrapper-2fnY2ZKI" + } + }, + bNWL: function(e, t) { + e.exports = + '' + }, + cbig: function(e, t) { + e.exports = + '' + }, + e2QN: function(e, t) { + e.exports = + '' + }, + e8Rm: function(e, t) { + e.exports = + '' + }, + eYcT: function(e, t) { + e.exports = + '' + }, + fk9O: function(e, t) { + e.exports = + '' + }, + gKdq: function(e, t) { + e.exports = + '' + }, + i9xP: function(e, t) { + e.exports = + '' + }, + jXu8: function(e, t) { + e.exports = + '' + }, + jrhZ: function(e, t, s) { + e.exports = { + "animation-minimize-corner-left-top": "animation-minimize-corner-left-top-1yUqeyiZ", + "animation-minimize-corner-right-top": "animation-minimize-corner-right-top-1yUqeyiZ", + "animation-minimize-corner-right-bottom": "animation-minimize-corner-right-bottom-1yUqeyiZ", + "animation-minimize-corner-left-bottom": "animation-minimize-corner-left-bottom-1yUqeyiZ", + "animation-maximize-corner-left-top": "animation-maximize-corner-left-top-1yUqeyiZ", + "animation-maximize-corner-right-top": "animation-maximize-corner-right-top-1yUqeyiZ", + "animation-maximize-corner-right-bottom": "animation-maximize-corner-right-bottom-1yUqeyiZ", + "animation-maximize-corner-left-bottom": "animation-maximize-corner-left-bottom-1yUqeyiZ" + } + }, + ku84: function(e, t) { + e.exports = + '' + }, + lvAK: function(e, t, s) { + "use strict"; + s.r(t); + var i = s("8+VR"), + o = s("RspR"), + l = s("3ClC"), + n = (s("LVLx"), s("Eyy1")), + a = s("eJTA"), + r = s("AvGy"), + d = s("EV8o"), + h = s("ZKFq"), + u = s("0jws"); + class c { + constructor(e, t, s) { + this._parentEl = document.createElement("div"), this._listActionsWrapperEl = null, + this._listActionsElements = {}, this._actionsSpawns = {}, this + ._onMouseEnterLeaveEventHandler = null, this._mouseOverWidget = !1, this + ._wrapEl = e, this._onMouseEnterLeaveEventHandler = this._onMouseEnterLeaveEvent + .bind(this), this._wrapEl.addEventListener("mouseenter", this + ._onMouseEnterLeaveEventHandler), this._wrapEl.addEventListener( + "mouseleave", this._onMouseEnterLeaveEventHandler), this._actions = t, this + ._globalVisibility = s.globalVisibility.spawn(), this._globalVisibility + .subscribe(this._updatePaneControlsWidgetVisibility.bind(this)), this + ._visibilityType = s.visibilityType.spawn(), this._visibilityType.subscribe(this + ._updatePaneControlsWidgetVisibility.bind(this)), this + ._doNotSwitchToContextMenuMode = s.doNotSwitchToContextMenuMode, this + ._themedColor = s.themedColor.spawn(), this._themedColor.subscribe(this + ._updateThemedColor.bind(this)); + for (const [e, t] of Object.entries(this._actions)) { + const s = e; + this._actionsSpawns[s] = { + visible: t.visible.spawn(), + title: void 0 === t.title ? null : t.title.spawn() + }, this._actionsSpawns[s].visible.subscribe(this._updateActionVisibilities + .bind(this, s)); + const i = this._actionsSpawns[s].title; + null !== i && i.subscribe(this._updateActionTitle.bind(this, s)) + } + this._render(), this._updatePaneControlsWidgetVisibility(), this._updateThemedColor( + this._themedColor.value()), this._parentEl.classList.toggle(h.touchMode, r + .a), this._parentEl.addEventListener("contextmenu", e => e.preventDefault()) + } + destroy() { + this._visibilityType.destroy(), this._themedColor.destroy(); + for (const e of Object.keys(this._actionsSpawns)) { + const t = e; + this._actionsSpawns[t].visible.destroy(); + const s = this._actionsSpawns[t].title; + null !== s && s.destroy() + } + null !== this._onMouseEnterLeaveEventHandler && (this._wrapEl.removeEventListener( + "mouseenter", this._onMouseEnterLeaveEventHandler), this._wrapEl + .removeEventListener("mouseleave", this._onMouseEnterLeaveEventHandler), + this._onMouseEnterLeaveEventHandler = null), this._parentEl.innerHTML = "", + delete this._parentEl + } + getElement() { + return this._parentEl + } + updateWidgetModeByWidth(e) { + const t = !this._doNotSwitchToContextMenuMode.value() && e < 356, + s = !this._doNotSwitchToContextMenuMode.value() && e < 666.65, + i = Object(n.ensureNotNull)(this._listActionsWrapperEl), + o = Object(n.ensureNotNull)(this._listActionsElements.more); + i.classList.toggle(u.blockHidden, t || s), o.classList.toggle(u.blockHidden, t || ! + s || !this._actions.more.visible.value()) + } + _render() { + this._renderActions(), + this._parentEl.classList.add(h.paneControls), this._wrapEl.append(this + ._parentEl) + } + _renderActions() { + null === this._listActionsWrapperEl && (this._listActionsWrapperEl = document + .createElement("div"), this._listActionsWrapperEl.classList.add(h + .buttonsWrapper), this._parentEl.append(this._listActionsWrapperEl)); + const e = r.a ? "large" : "small"; + this._listActionsElements.up = Object(d.a)(this._actions.up, h.button, h.buttonIcon, + u.blockHidden, e), this._listActionsElements.down = Object(d.a)(this + ._actions.down, h.button, h.buttonIcon, u.blockHidden, e), this + ._listActionsElements.close = Object(d.a)(this._actions.close, h.button, h + .buttonIcon, u.blockHidden, e), this._listActionsElements.maximize = Object( + d.a)(this._actions.maximize, h.button, h.buttonIcon, u.blockHidden, e), this + ._listActionsElements.minimize = Object(d.a)(this._actions.minimize, h.button, h + .buttonIcon, u.blockHidden, e), this._listActionsWrapperEl.append(this + ._listActionsElements.up, this._listActionsElements.down, this + ._listActionsElements.close, this._listActionsElements.maximize, this + ._listActionsElements.minimize), this._listActionsElements.more = Object(d + .a)(this._actions.more, h.button, h.buttonIcon, u.blockHidden, e); + for (const e of Object.keys(this._listActionsElements)) Object(n.ensureNotNull)(this + ._listActionsElements[e]).classList.add(h.newButton); + this._parentEl.append(this._listActionsElements.more) + } + _updateActionVisibilities(e, t) { + Object(n.ensureNotNull)(this._listActionsElements[e]).classList.toggle(u + .blockHidden, !t) + } + _updateActionTitle(e, t) { + Object(n.ensureNotNull)(this._listActionsElements[e]).setAttribute("title", t) + } + _onMouseEnterLeaveEvent(e) { + this._mouseOverWidget = "mouseenter" === e.type, "visibleOnMouseOver" === this + ._visibilityType.value() && this._updatePaneControlsWidgetVisibility() + } + _updatePaneControlsWidgetVisibility() { + let e, t = !1; + switch (this._visibilityType.value()) { + case "alwaysOff": + e = !1, t = !0; + break; + case "alwaysOn": + e = this._globalVisibility.value(); + break; + case "visibleOnMouseOver": + e = this._globalVisibility.value() && this._mouseOverWidget + } + this._parentEl.classList.toggle(h.hidden, !e), this._parentEl.classList.toggle(h + .forceHidden, !this._globalVisibility.value() || t) + } + _updateThemedColor(e) { + if (e.length > 0) { + const [t, s, i] = Object(a.parseRgb)(e); + this._parentEl.style.color = Object(a.rgbaToString)([t, s, i, Object(a + .normalizeAlphaComponent)(.8)]) + } else this._parentEl.style.removeProperty("color") + } + } + var _ = s("7KDR"), + p = s("5VQP"), + m = s("obM5"), + b = s("fk9O"), + g = s("gKdq"), + w = s("WYzw"); + + function v(e, t) { + const s = Object(n.ensureNotNull)(t.target); + return function(e) { + const t = []; + if (e.maximize.visible.value()) { + const s = Object(n.ensure)(e.maximize.title), + i = Object(n.ensureNotNull)(e.maximize.action); + t.push(new _.Action({ + icon: w, + label: s.value(), + statName: "Maximize Pane", + shortcutHint: y, + onExecute: () => i() + })) + } else if (e.minimize.visible.value()) { + const s = Object(n.ensure)(e.minimize.title), + i = Object(n.ensureNotNull)(e.minimize.action); + t.push(new _.Action({ + icon: w, + label: s.value(), + statName: "Minimize Pane", + shortcutHint: y, + onExecute: () => i() + })) + } + if (e.up.visible.value()) { + const s = Object(n.ensure)(e.up.title), + i = Object(n.ensureNotNull)(e.up.action); + t.push(new _.Action({ + icon: b, + label: s.value(), + statName: "Move pane up", + onExecute: () => i() + })) + } + if (e.down.visible.value()) { + const s = Object(n.ensure)(e.down.title), + i = Object(n.ensureNotNull)(e.down.action); + t.push(new _.Action({ + icon: g, + label: s.value(), + statName: "Move pane down", + onExecute: () => i() + })) + } + if (e.close.visible.value()) { + const s = Object(n.ensure)(e.close.title), + i = Object(n.ensureNotNull)(e.close.action); + t.push(new _.Action({ + icon: m, + label: s.value(), + statName: "Delete pane", + onExecute: () => i() + })) + } + return p.ContextMenuManager.createMenu(t) + }(e).then(e => (e.show(e => { + const t = s.getBoundingClientRect(); + return { + clientX: t.right - e, + clientY: t.top + t.height + 3 + } + }), e)) + } + const y = window.t("Double click"); + var S = s("hY0g"), + M = s.n(S), + f = s("EsvI"), + E = s("/DW5"), + C = s("OJSF"), + k = s("PXSR"), + V = s("QEZv"), + x = s("ku84"), + W = s("i9xP"), + T = s("1Wf8"), + L = s("956S"); + s.d(t, "PaneControlsWidget", (function() { + return I + })); + const O = i.mobiletouch, + A = window.t("Delete pane"), + D = window.t("Move pane up"), + H = window.t("Move pane down"), + B = window.t("Maximize pane"), + P = window.t("Restore pane"), + z = window.t("Manage panes"), + j = window.t("Double click"), + N = Object(E.b)({ + keys: [""], + text: j + }); + class I { + constructor(e, t, s, i, l) { + this._actions = {}, this._moreActionCM = null, this._themedColor = new M.a(""), this + ._model = e, this._paneWidget = t, this._callbacks = i, this + ._closeButtonVisibility = new M.a(this._getCloseButtonVisibility()), this + ._upButtonVisibility = new M.a(this._getUpButtonVisibility()), this + ._downButtonVisibility = new M.a(this._getDownButtonVisibility()), this + ._maximizeButtonVisibility = new M.a(this._getMaximizeButtonVisibility()), this + ._minimizeButtonVisibility = new M.a(this._getMinimizeButtonVisibility()), this + ._createActions(), this._visibilityTypeProperty = Object(o.actualBehavior)(), + this._visibilityTypeProperty.subscribe(this, e => { + this._visibilityType.setValue(e.value()) + }), this._visibilityType = new M.a(this._visibilityTypeProperty.value()), this + ._isPaneMaximize = new M.a(this._getIsPaneMaximizeValue()), this._isWidgetShow = + new M.a(this._getIsWidgetShow()), this._backgroundThemeName = s + .backgroundThemeName, this._renderer = new c(l, this._actions, { + visibilityType: this._visibilityType.readonly(), + globalVisibility: this._isWidgetShow.readonly(), + doNotSwitchToContextMenuMode: this._isPaneMaximize.readonly(), + themedColor: this._themedColor.readonly() + }) + } + destroy() { + this._visibilityTypeProperty.unsubscribeAll(this), this._renderer.destroy() + } + getElement() { + return this._renderer.getElement() + } + action() { + return this._actions + } + update() { + this._updateButtonsVisibility(), this._isPaneMaximize.setValue(this + ._getIsPaneMaximizeValue()), this._isWidgetShow.setValue(this + ._getIsWidgetShow()) + } + updateWidgetModeByWidth(e) { + this._renderer.updateWidgetModeByWidth(e) + } + updateThemedColors(e) { + null === e && (e = Object(f.getStdThemedValue)( + "chartProperties.paneProperties.background", this._backgroundThemeName + .value())), this._themedColor.setValue(e || "") + } + _updateButtonsVisibility() { + this._closeButtonVisibility.setValue(this._getCloseButtonVisibility()), this + ._upButtonVisibility.setValue(this._getUpButtonVisibility()), this + ._downButtonVisibility.setValue(this._getDownButtonVisibility()), + this._maximizeButtonVisibility.setValue(this._getMaximizeButtonVisibility()), + this._minimizeButtonVisibility.setValue(this._getMinimizeButtonVisibility()) + } + _createActions() { + this._actions.up = { + iconMap: new Map([ + ["large", k], + ["small", k] + ]), + action: this._onUpDownButton.bind(this, "up"), + visible: this._upButtonVisibility, + title: new M.a(D), + className: h.up, + dataset: { + name: "pane-button-up" + } + }, this._actions.down = { + iconMap: new Map([ + ["large", V], + ["small", V] + ]), + action: this._onUpDownButton.bind(this, "down"), + visible: this._downButtonVisibility, + title: new M.a(H), + className: h.down, + dataset: { + name: "pane-button-down" + } + }, this._actions.close = { + iconMap: new Map([ + ["large", C], + ["small", C] + ]), + action: this._onCloseButton.bind(this), + visible: this._closeButtonVisibility, + title: new M.a(A), + dataset: { + name: "pane-button-close" + } + }, this._actions.maximize = { + iconMap: new Map([ + ["large", T], + ["small", x] + ]), + action: this._onToggleMaximizeButton.bind(this), + visible: this._maximizeButtonVisibility, + title: new M.a(B), + hotKeyTitle: N, + className: h.maximize, + dataset: { + name: "pane-button-maximize" + } + }, this._actions.minimize = { + iconMap: new Map([ + ["large", T], + ["small", x] + ]), + action: this._onToggleMaximizeButton.bind(this), + visible: this._minimizeButtonVisibility, + title: new M.a(P), + hotKeyTitle: N, + className: h.minimize, + dataset: { + name: "pane-button-minimize" + } + }, this._actions.more = { + iconMap: new Map([ + ["large", L], + ["small", W] + ]), + action: this._showButtonsInContextMenu.bind(this), + visible: new M.a(!O), + title: new M.a(z), + dataset: { + name: "pane-button-more" + } + } + } + _getCloseButtonVisibility() { + const e = this._paneWidget.state(); + let t = !1; + return e.containsMainSeries() || e.isMaximized() || O || (t = e.dataSources().some( + e => Object(l.isStudy)(e))), t + } + _onCloseButton() { + const e = this._model.model().panes().indexOf(this._paneWidget.state()); + this._model.removePane(e) + } + _getUpButtonVisibility() { + const e = this._paneWidget.state(); + return this._model.model().panes().indexOf(e) > 0 && !e.isMaximized() && !O + } + _getDownButtonVisibility() { + const e = this._paneWidget.state(), + t = this._model.model().panes(); + return t.indexOf(e) < t.length - 1 && !e.isMaximized() && !O + } + _onUpDownButton(e) { + const t = this._model.model().panes().indexOf(this._paneWidget.state()); + this._model.rearrangePanes(t, e) + } + _getMaximizeButtonVisibility() { + const e = this._paneWidget.state(); + return this._model.model().panes().length > 1 && !e.isMaximized() && !O + } + _getMinimizeButtonVisibility() { + const e = this._paneWidget.state(); + return this._model.model().panes().length > 1 && e.isMaximized() + } + _onToggleMaximizeButton() { + this._callbacks.toggleMaximizePane(this._paneWidget) + } + _showButtonsInContextMenu(e) { + e.preventDefault(), null !== this._moreActionCM && this._moreActionCM.isShown() ? + this._moreActionCM = null : v(this._actions, e).then(e => { + this._moreActionCM = e + }) + } + _getIsPaneMaximizeValue() { + return this._paneWidget.state().isMaximized() + } + _getIsWidgetShow() { + return this._model.model().panes().length > 1 + } + } + }, + nFx7: function(e, t) { + e.exports = + '' + }, + obM5: function(e, t) { + e.exports = + '' + }, + qfuz: function(e, t) { + e.exports = + '' + }, + rGGD: function(e, t) { + e.exports = + '' + }, + rh3U: function(e, t, s) { + e.exports = { + "css-value-small-size": "18px", + "css-value-border-radius-small-size": "9px", + "css-value-large-size": "22px", + "css-value-border-radius-large-size": "11px", + statuses: "statuses-1Ho_ylkC", + statusItem: "statusItem-1Ho_ylkC", + small: "small-1Ho_ylkC", + large: "large-1Ho_ylkC", + blinking: "blinking-1Ho_ylkC", + oneWidgetsVisible: "oneWidgetsVisible-1Ho_ylkC", + twoWidgetsVisible: "twoWidgetsVisible-1Ho_ylkC", + threeWidgetsVisible: "threeWidgetsVisible-1Ho_ylkC", + "blinking-animation": "blinking-animation-1Ho_ylkC", + marketStatusOpen: "marketStatusOpen-1Ho_ylkC", + marketStatusClose: "marketStatusClose-1Ho_ylkC", + marketStatusPre: "marketStatusPre-1Ho_ylkC", + marketStatusPost: "marketStatusPost-1Ho_ylkC", + marketStatusHoliday: "marketStatusHoliday-1Ho_ylkC", + invalidSymbol: "invalidSymbol-1Ho_ylkC", + replayMode: "replayMode-1Ho_ylkC", + notAccurate: "notAccurate-1Ho_ylkC", + delay: "delay-1Ho_ylkC", + eod: "eod-1Ho_ylkC", + dataProblemHigh: "dataProblemHigh-1Ho_ylkC", + dataProblemLow: "dataProblemLow-1Ho_ylkC" + } + }, + sAH5: function(e, t, s) { + "use strict"; + s.r(t); + var i = s("Eyy1"), + o = s("hY0g"), + l = s.n(o), + n = s("ogJP"), + a = s("ikwP"), + r = s("eJTA"), + d = s("Kxc7"), + h = s("AvGy"), + u = (s("LVLx"), s("MjAr")), + c = s("EV8o"), + _ = s("S8xo"), + p = s("GUQs"), + m = s("0jws"); + var b = s("OcaN"); + class g extends class { + constructor(e, t = {}) { + this._loadingEl = document.createElement("span"), this._renderLoading(t), this + .toggleVisibility(!1), e.appendChild(this._loadingEl) + } + toggleVisibility(e) { + this._loadingEl.classList.toggle(m.blockHidden, !e) + } + _renderLoading(e) { + const { + className: t + } = e; + t && this._loadingEl.classList.add(t) + } + } { + _renderLoading(e) { + super._renderLoading(e), this._loadingEl.innerHTML = + `\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t`, + this._loadingEl.classList.add(b.loader) + } + } + var w = s("qFKp"); + + function v(e, t) { + null === e.firstChild ? e.textContent = t : e.firstChild.nodeValue = t + } + var y = s("5Alx"); + const S = w.CheckMobile.any(), + M = [y.title1st, y.title2nd, y.title3rd, y.title4th]; + class f { + constructor(e, t, s) { + this._el = null, this._firstBlockWrapper = null, this._titleParentEl = null, this + ._titleElements = [], this._valuesParentEl = null, this + ._valuesAdditionalWrapperEl = null, this._valuesElements = [], this + ._actionsParentEl = null, this._actionAdditionalWrapperEl = null, this + ._stayInHoveredMode = !1, this._mode = 4, this._statusesWrapper = null, this + ._resizeObserver = null, this._hideInvisibleHover = null, this._hideValues = + null, this._allButtonsWidth = null, this._lastStatusesWrapperWidth = null, this + ._lastActionsWrapperWidth = null, this._showActionsHandler = null, this + ._hideActionsHandler = null, this._selectedSourceHandler = null, this + ._mouseEventHandlers = [], this._disableTimeout = null, this._loader = null, + this._model = e, this._parentEl = t, this._disabled = this._model.disabled() + .spawn(), this._disabled.subscribe(this._updateDisabledState.bind(this)), this + ._disabledOnInterval = this._model.disabledOnInterval().spawn(), this + ._disabledOnInterval.subscribe(this._updateDisabledOnIntervalState.bind(this)), + this._selected = this._model.selected().spawn(), this._selected.subscribe(this + ._updateSelectedState.bind(this)), this._loading = this._model.loading() + .spawn(), this._loading.subscribe(function(e, t) { + let s = 0; + return i => { + clearTimeout(s), Boolean(i) ? e() : s = setTimeout(e, t, !1) + } + }(this._updateLoadingState.bind(this), 700)), this._isTitleHidden = this._model + .isTitleHidden().spawn(), this._isValuesHidden = this._model.isValuesHidden() + .spawn(), this._isRowHidden = this._model.isRowHidden().spawn(), this + ._isTitleHidden.subscribe(this._updateShowTitles.bind(this)), this + ._isValuesHidden.subscribe(this._updateShowValues.bind(this)), this._isRowHidden + .subscribe(this._updateShowLine.bind(this)), this._titlesSpawns = this._model + .titles().map(e => e.spawn()); + for (let e = 0; e < this._titlesSpawns.length; e++) this._titlesSpawns[e].subscribe( + this._updateTitlesHandler.bind(this, e)); + this._values = this._model.values().spawn(), this._values.subscribe(this + ._updateValues.bind(this)), this._createValuesSpawns(), this + ._addValuesSpawnsSubscriptions(), this._actionsSpawnArray = this._model + .actions().map(e => ({ + visible: e.visible.spawn(), + title: void 0 === e.title ? null : e.title.spawn() + })); + for (let e = 0; e < this._actionsSpawnArray.length; e++) { + this._actionsSpawnArray[e].visible.subscribe(this._updateActionVisibilities + .bind(this, e)); + const t = this._actionsSpawnArray[e].title; + null !== t && t.subscribe(this._updateActionTitle.bind(this, e)) + } + this._withActions = s.withActions, this._render(), this._updateStates(), this + ._updateShowTitles(), this._updateShowValues(), this._updateShowLine(), + null !== this._valuesParentEl && (this._loader = new g(this._valuesParentEl, { + className: y.loader + })), this._customTextColor = s.customTextColor.spawn(), this._customTextColor + .subscribe(this._updateCustomTextColor.bind(this)), this + ._updateCustomTextColor(), this._withActions && (this._showActionsHandler = + Object(p.c)(this._showActions.bind(this)), this._hideActionsHandler = + Object(p.c)(this._hideActions.bind(this)), this._selectedSourceHandler = + Object(p.c)(this._model.setSourceSelected.bind(this._model)), null !== this + ._titleParentEl && (this._titleParentEl.addEventListener("touchend", this + ._selectedSourceHandler), this._titleParentEl.addEventListener( + "mousedown", this._selectedSourceHandler), S || (this._titleParentEl + .addEventListener("mouseenter", this._showActionsHandler), this + ._titleParentEl.addEventListener("mouseleave", this + ._hideActionsHandler)), this._mouseEventHandlers.push(new _ + .MouseEventHandler(this._titleParentEl, { + mouseDoubleClickEvent: this._model.onShowSettings.bind(this + ._model), + doubleTapEvent: this._model.onShowSettings.bind(this._model) + }))), null === this._actionAdditionalWrapperEl || null === this + ._actionsParentEl || S || (this._actionAdditionalWrapperEl.addEventListener( + "mouseenter", this._showActionsHandler), this + ._actionAdditionalWrapperEl.addEventListener("mouseleave", this + ._hideActionsHandler), this._actionsParentEl.addEventListener( + "contextmenu", e => { + e.preventDefault(), e.stopPropagation() + }))) + } + destroy() { + var e, t; + this._disabled.destroy(), this._disabledOnInterval.destroy(), this._selected + .destroy(), this._loading.destroy(), this._isTitleHidden.destroy(), this + ._isValuesHidden.destroy(), this._isRowHidden.destroy(), this._customTextColor + .destroy(), null !== this._disableTimeout && clearTimeout(this._disableTimeout); + for (const e of this._titlesSpawns) e.destroy(); + if (null !== this._titleParentEl) { + for (const e of this._mouseEventHandlers) e.destroy(); + this._titleElements = [], this._withActions && null !== this + ._selectedSourceHandler && null !== this._showActionsHandler && null !== + this._hideActionsHandler && (this._titleParentEl.removeEventListener( + "touchend", this._selectedSourceHandler), this._titleParentEl + .removeEventListener("mousedown", this._selectedSourceHandler), S || ( + this._titleParentEl.removeEventListener("mouseenter", this + ._showActionsHandler), this._titleParentEl.removeEventListener( + "mouseleave", this._hideActionsHandler))), this._titleParentEl = + null + } + for (const e of this._actionsSpawnArray) { + e.visible.destroy(); + const t = e.title; + null !== t && t.destroy() + } + if (null !== this._actionAdditionalWrapperEl && (this._withActions && null !== this + ._showActionsHandler && null !== this._hideActionsHandler && !S && (this + ._actionAdditionalWrapperEl.removeEventListener("mouseenter", this + ._showActionsHandler), this._actionAdditionalWrapperEl + .removeEventListener("mouseleave", this._hideActionsHandler)), this + ._actionAdditionalWrapperEl = null), this._actionsParentEl = null, this + ._removeValuesSpawnsSubscriptions(), this._values.destroy(), null !== this + ._valuesParentEl && (this._valuesElements = [], this._valuesParentEl = null), + null === (e = this._hideInvisibleHover) || void 0 === e || e.destroy(), null === + (t = this._hideValues) || void 0 === t || t.destroy(), + null !== this._resizeObserver && (this._resizeObserver.disconnect(), this + ._resizeObserver = null), null !== this._el) { + Object(i.ensureNotNull)(this._el.parentNode).removeChild(this._el), this._el = + null + } + } + getHeight() { + return null === this._el ? null : 24 + } + updateMode(e) { + this._mode === e && null !== this._allButtonsWidth || (this._mode = e, this + ._updateAllButtonsWidth()) + } + _render() { + this._renderTitle(), this._renderActions(), this._renderValues(), this._el = + document.createElement("div"), this._firstBlockWrapper = document.createElement( + "div"), this._firstBlockWrapper.classList.add(y.noWrapWrapper), this + ._firstBlockWrapper.appendChild(Object(i.ensureNotNull)(this._titleParentEl)), + null !== this._actionsParentEl && this._firstBlockWrapper.appendChild(this + ._actionsParentEl), this._el.appendChild(this._firstBlockWrapper), this._el + .appendChild(Object(i.ensureNotNull)(this._valuesParentEl)), this._parentEl + .append(this._el) + } + _renderTitle() { + null === this._titleParentEl && (this._titleParentEl = document.createElement( + "div"), this._titleParentEl.classList.add(y.titleWrapper)); + const e = this._titleParentEl; + for (let t = 0; t < this._titlesSpawns.length; t++) { + const s = document.createElement("div"); + s.classList.add(y.title, M[t], "apply-overflow-tooltip"), s.dataset.name = + "legend-source-title"; + const i = this._titlesSpawns[t].value(); + i.length > 0 ? (s.appendChild(document.createTextNode(i)), s.classList.add(y + .withDot)) : s.classList.add(m.blockHidden), e.appendChild(s), this + ._titleElements.push(s) + } + } + _renderActions() { + if (!this._withActions) return; + null === this._actionsParentEl && (this._actionsParentEl = document.createElement( + "div"), this._actionsParentEl.classList.add(y.buttonsWrapper), this + ._parentEl.append(this._actionsParentEl), this._actionAdditionalWrapperEl = + document.createElement("div"), this._actionAdditionalWrapperEl.classList + .add(y.buttons), this._actionsParentEl.appendChild(this + ._actionAdditionalWrapperEl)); + const e = Object(i.ensureNotNull)(this._actionAdditionalWrapperEl), + t = h.a ? "large" : "small"; + for (const s of this._model.actions()) { + const i = Object(c.a)(s, y.button, y.buttonIcon, m.blockHidden, t); + e.appendChild(i) + } + } + _isWidthButtonsMode() { + return null !== this._el && (this._el.classList.contains(y.withAction) || this + ._disabled.value() || this._selected.value() || this._stayInHoveredMode) + } + _updateTitlesHandler(e, t) { + const s = Object(i.ensureNotNull)(this._titleElements[e]), + o = 0 === t.length; + s.classList.toggle(m.blockHidden, o), s.classList.toggle(y.withDot, !o), v(s, t) + } + _updateStates(e) { + this._updateDisabledState(), this._updateDisabledOnIntervalState(), this + ._updateSelectedState(), this._updateLoadingState(), e && this + ._clearDisableState() + } + _updateValuesHTMLElHandler(e, t) { + v(Object(i.ensure)(this._valuesElements[e].value), t), this._updateShowValues() + } + _updateValueColorHandler(e, t = "") { + Object(i.ensure)(this._valuesElements[e].value).style.color = t + } + _updateValueVisibleHandler(e, t) { + const s = Object(i.ensure)(this._valuesElements[e].value).closest("." + y + .valueItem); + null !== s && s.classList.toggle(m.blockHidden, !t) + } + _updateShowLine() { + null !== this._el && this._el.classList.toggle(m.blockHidden, this._isRowHidden + .value()) + } + _createValuesSpawns() { + this._valuesSpawnArray = this._values.value().map(e => ({ + value: e.value.spawn(), + color: e.color.spawn(), + visible: e.visible.spawn() + })) + } + _removeValuesSpawnsSubscriptions() { + for (const e of this._valuesSpawnArray) e.value.destroy(), e.color.destroy(), e + .visible.destroy(); + this._valuesSpawnArray = [] + } + _addValuesSpawnsSubscriptions() { + for (let e = 0; e < this._valuesSpawnArray.length; e++) { + const t = this._valuesSpawnArray[e]; + t.value.subscribe(this._updateValuesHTMLElHandler.bind(this, e)), t.color + .subscribe(this._updateValueColorHandler.bind(this, e)), t.visible + .subscribe(this._updateValueVisibleHandler.bind(this, e)) + } + } + _updateShowValues() { + null !== this._valuesAdditionalWrapperEl && this._valuesAdditionalWrapperEl + .classList.toggle(m.blockHidden, this._isValuesShouldBeHidden()) + } + _isValuesShouldBeHidden() { + return !this._valuesSpawnArray.some(e => e.value.value().length > 0) + } + _addStatusesWidget(e, t, s) { + this._statusesWrapper = document.createElement("div"), this._statusesWrapper + .classList.add(y.statusesWrapper), this._statusesWrapper.appendChild(e), Object( + i.ensureNotNull)(this._firstBlockWrapper).appendChild(this + ._statusesWrapper), this._hideInvisibleHover = t.spawn(), this + ._hideInvisibleHover.subscribe(this._updateInvisibleHoverMode.bind(this), { + callWithLast: !0 + }), this._hideValues = s.spawn(), this._hideValues.subscribe(this + ._updateHideValuesMode.bind(this), { + callWithLast: !0 + }), this._updateStatusWidgetVisibility(this._disabled.value()), this + ._resizeObserver = new u.default(this._handlerRestrictTitleWidth.bind(this)), + null !== this._actionsParentEl && this._resizeObserver.observe(this + ._actionsParentEl), this._resizeObserver.observe(this._statusesWrapper) + } + _updateTitleMaxWidth() { + if (null === this._firstBlockWrapper) return; + const e = this._allButtonsWidth || 0, + t = (this._lastActionsWrapperWidth || 0) + (this._lastStatusesWrapperWidth || + 0); + this._isWidthButtonsMode() ? this._firstBlockWrapper.style.maxWidth = + `calc(100% - ${Math.max(e,t)}px)` : this._firstBlockWrapper.style.maxWidth = t > + 0 ? `calc(100% - ${t}px)` : "" + } + _updateAllButtonsWidth() { + this._allButtonsWidth = this._getButtonsCount() * N + 1, this._updateTitleMaxWidth() + } + _updateInvisibleHoverMode(e) { + null !== this._el && this._el.classList.toggle(y.invisibleHover, !e) + } + _updateHideValuesMode(e) { + null !== this._el && this._el.classList.toggle(y.hideValues, e) + } + _showActions() { + if (null === this._el || !this._withActions) return; + this._el.classList.add(y.withAction); + const e = null !== this._valuesParentEl && null !== this._titleParentEl && this + ._valuesParentEl.offsetTop === this._titleParentEl.offsetTop; + this._el.classList.toggle(y.withTail, e), this._updateTitleMaxWidth() + } + _hideActions() { + null !== this._el && this._withActions && !this._stayInHoveredMode && (this._el + .classList.remove(y.withAction), null !== this._valuesParentEl && this + ._valuesParentEl.classList.remove(y.withTail), this._updateTitleMaxWidth()) + } + _handlerRestrictTitleWidth(e) { + if (null === this._actionsParentEl || null === this._firstBlockWrapper) return; + let t = null, + s = null; + for (const i of e) i.target === this._statusesWrapper && (t = i.contentRect.width), + i.target === this._actionsParentEl && (s = i.contentRect.width); + t === this._lastStatusesWrapperWidth && s === this._lastActionsWrapperWidth || ( + null !== t && (this._lastStatusesWrapperWidth = t), null !== s && (this + ._lastActionsWrapperWidth = s), this._updateTitleMaxWidth()) + } + _clearDesabledTimeout() { + null !== this._disableTimeout && (clearTimeout(this._disableTimeout), this + ._disableTimeout = null) + } + _updateDisabledState() { + null !== this._el && (this._el.classList.remove("tempDisabled"), this._el.classList + .remove(y.hiddenLoading), this._clearDesabledTimeout(), this._disabled + .value() ? (this._el.classList.add(y.disabled), this + ._updateStatusWidgetVisibility(!0)) : (this._el.classList.add( + "tempDisabled"), this._el.classList.add(y.hiddenLoading), this + ._disableTimeout = setTimeout(() => { + null !== this._el && (!this._loading.value() && this._el + .classList.contains("tempDisabled") && (this._el + .classList.remove("tempDisabled"), this._el + .classList.remove(y.hiddenLoading), this._el + .classList.toggle(y.disabled, this._disabled + .value()), this._updateStatusWidgetVisibility(!1)), + this._clearDesabledTimeout()) + }, 1e3)), this._updateTitleMaxWidth()) + } + _clearDisableState() { + null !== this._el && (this._el.classList.remove(y.hiddenLoading), this._el.classList + .remove(y.disabled), this._el.classList.remove("tempDisabled"), this + ._updateStatusWidgetVisibility(this._disabled.value()), this + ._updateTitleMaxWidth()) + } + _updateDisabledOnIntervalState() { + var e; + null === (e = this._el) || void 0 === e || e.classList.toggle(y.disabledOnInterval, + this._disabledOnInterval.value()) + } + _updateSelectedState() { + null !== this._el && this._withActions && this._el.classList.toggle(y.selected, this + ._selected.value()) + } + _updateLoadingState() { + if (null === this._el) return; + this._el.classList.contains("tempDisabled") && (this._loading.value() ? this._el + .classList.add(y.hiddenLoading) : this._clearDisableState()); + const e = this._loading.value(); + this._el.classList.toggle(y.loading, e), null !== this._loader && this._loader + .toggleVisibility(e) + } + _updateShowTitles() { + null !== this._titleParentEl && (this._titleParentEl.classList.toggle(m.blockHidden, + this._isTitleHidden.value()), null !== this._actionsParentEl && this + ._actionsParentEl.classList.toggle(m.blockHidden, this._isTitleHidden + .value())) + } + _updateValues() { + this._removeValuesSpawnsSubscriptions(), this._createValuesSpawns(), null !== this + ._valuesParentEl && null !== this._valuesAdditionalWrapperEl && (this + ._valuesElements = [], this._valuesAdditionalWrapperEl.innerHTML = ""), this + ._renderValues(), this._addValuesSpawnsSubscriptions(), this._updateShowValues() + } + _updateActionVisibilities(e) { + null !== this._actionsParentEl && this._actionsParentEl.querySelectorAll("." + y + .button)[e].classList.toggle(m.blockHidden, !this._actionsSpawnArray[e] + .visible.value()) + } + _updateActionTitle(e) { + const t = this._actionsSpawnArray[e].title; + null !== this._actionsParentEl && null !== t && this._actionsParentEl + .querySelectorAll("." + y.button)[e].setAttribute("title", t.value()) + } + _updateCustomTextColor() { + const e = this._customTextColor.value() || ""; + for (const t of this._titleElements) null !== t && (t.style.color = e); + const t = Object(i.ensureNotNull)(this._valuesParentEl).querySelectorAll("." + y + .valueTitle); + for (let s = 0; s < t.length; s++) t[s].style.color = e; + Object(i.ensureNotNull)(this._el).classList.toggle(y.withCustomTextColor, Boolean( + e)) + } + _updateStatusWidgetVisibility(e) { + null !== this._statusesWrapper && this._statusesWrapper.classList.toggle(m + .blockHidden, e) + } + } + class E extends f { + constructor(e, t, s) { + super(e, t, s), this._clientHeight = null, this._flagged = this._model.flagged() + .spawn(), this._flagged.subscribe(this._updateFlaggedState.bind(this)), this + ._updateStates(), s.statusWidgetEl && this._addStatusesWidget(s.statusWidgetEl, + s.hideInvisibleHover, s.hideValues), this._selected.subscribe(this + ._updateTitleMaxWidth.bind(this)) + } + destroy() { + super.destroy(), void 0 !== this._flagged && this._flagged.destroy() + } + getHeight() { + return null === this._el ? null : (null === this._clientHeight && (this + ._clientHeight = this._el.clientHeight, 0 === this._clientHeight && ( + this._clientHeight = null)), this._clientHeight) + } + _getButtonsCount() { + return 1 === this._mode ? 1 : 3 + } + _render() { + super._render(); + const e = Object(i.ensureNotNull)(this._el); + e.classList.add(y.item, y.series), e.classList.toggle(y.onlyOneButtonCanBeStick, + this._model.isOneButtonCanBeStick()), e.dataset.name = "legend-series-item" + } + _updateStates() { + super._updateStates(), this._updateFlaggedState() + } + _renderValues() { + null === this._valuesParentEl && (this._valuesParentEl = document.createElement( + "div"), this._valuesParentEl.classList.add(y.valuesWrapper), this + ._valuesAdditionalWrapperEl = document.createElement("div"), this + ._valuesAdditionalWrapperEl.classList.add(y.valuesAdditionalWrapper), this + ._valuesParentEl.appendChild(this._valuesAdditionalWrapperEl)); + const e = Object(i.ensureNotNull)(this._valuesAdditionalWrapperEl), + t = this._values.value(); + for (const s of t) { + const t = document.createElement("div"); + t.classList.add(y.valueItem), t.classList.toggle(m.blockHidden, !s.visible + .value()); + const i = document.createElement("div"), + o = s.title.value() || ""; + i.classList.add(y.valueTitle), i.classList.toggle(m.blockHidden, 0 === o + .length), i.appendChild(document.createTextNode(o)), t.appendChild(i); + const l = document.createElement("div"); + l.classList.add(y.valueValue), l.style.color = s.color.value() || "", l + .appendChild(document.createTextNode(s.value.value())), t.appendChild(l), + this._valuesElements.push({ + title: i, + value: l + }), e.appendChild(t) + } + } + _createValuesSpawns() { + super._createValuesSpawns(), this._values.value().forEach((e, t) => { + this._valuesSpawnArray[t].title = e.title.spawn() + }) + } + _removeValuesSpawnsSubscriptions() { + for (const e of this._valuesSpawnArray) e.title.destroy(); + super._removeValuesSpawnsSubscriptions() + } + _addValuesSpawnsSubscriptions() { + super._addValuesSpawnsSubscriptions(); + for (let e = 0; e < this._valuesSpawnArray.length; e++) this._valuesSpawnArray[e] + .title.subscribe(this._updateValuesTitleHTMLElHandler.bind(this, e)) + } + _isValuesShouldBeHidden() { + return !this._valuesSpawnArray.some(e => e.value.value().length > 0 || (e.title + .value() || "").length > 0) + } + _updateValuesTitleHTMLElHandler(e, t = "") { + const s = Object(i.ensure)(this._valuesElements[e].title); + v(s, t), s.classList.toggle(m.blockHidden, 0 === t.length), this._updateShowValues() + } + _isWidthButtonsMode() { + return null !== this._el && (void 0 !== this._flagged && Boolean(this._flagged + .value()) || super._isWidthButtonsMode()) + } + _updateFlaggedState() { + if (void 0 === this._flagged) return; + Object(i.ensureNotNull)(this._el).classList.toggle(y.flagged, Boolean(this._flagged + .value())), this._updateTitleMaxWidth() + } + } + const C = w.isSafari ? "click" : "auxclick"; + class k extends f { + constructor(e, t, s) { + super(e, t, s), this._wheelClickHandler = null, this._canUpdateRowVisibility = !0, + this._globalRowVisibility = this._model.globalVisibility().spawn(), this + ._globalRowVisibility.subscribe(this._updateShowLine.bind(this), { + callWithLast: !0 + }), this._has5Buttons = this._model.isPineScriptDataSource().spawn(), this + ._has5Buttons.subscribe(this._update5ButtonsStyles.bind(this)), this + ._updateStates(!this._disabled.value()), s.statusWidgetEl && this + ._addStatusesWidget(s.statusWidgetEl, s.hideInvisibleHover, s.hideValues), this + ._selected.subscribe(this._updateTitleMaxWidth.bind(this)), s.withActions && ( + this._wheelClickHandler = this._onWheelClicked.bind(this), null !== this + ._titleParentEl && this._titleParentEl.addEventListener(C, this + ._wheelClickHandler)) + } + destroy() { + super.destroy(), this._has5Buttons.destroy(), this._globalRowVisibility && this + ._globalRowVisibility.destroy(), null !== this._wheelClickHandler && null !== + this._titleParentEl && this._titleParentEl.removeEventListener(C, this + ._wheelClickHandler) + } + _updateShowLine() { + if (null === this._el || !this._canUpdateRowVisibility) return; + const e = !this._globalRowVisibility.value(); + e ? this._el.classList.toggle(m.blockHidden, e) : super._updateShowLine() + } + _getButtonsCount() { + switch (this._mode) { + case 4: + return this._has5Buttons.value() ? 5 : 4; + case 3: + return 3; + default: + return 2 + } + } + _render() { + super._render(); + const e = Object(i.ensureNotNull)(this._el); + e.classList.add(y.item, y.study), e.dataset.name = "legend-source-item" + } + _renderValues() { + null === this._valuesParentEl && (this._valuesParentEl = document.createElement( + "div"), this._valuesParentEl.classList.add(y.valuesWrapper), this + ._valuesAdditionalWrapperEl = document.createElement("div"), this + ._valuesAdditionalWrapperEl.classList.add(y.valuesAdditionalWrapper), this + ._valuesParentEl.appendChild(this._valuesAdditionalWrapperEl)); + const e = Object(i.ensureNotNull)(this._valuesAdditionalWrapperEl), + t = this._values.value(); + for (const s of t) { + const t = document.createElement("div"); + t.classList.add(y.valueItem), t.classList.toggle(m.blockHidden, !s.visible + .value()); + const i = document.createElement("div"); + i.classList.add(y.valueValue), i.style.color = s.color.value() || "", i + .appendChild(document.createTextNode(s.value.value())), t.appendChild(i), + this._valuesElements.push({ + value: i + }), e.appendChild(t) + } + } + _update5ButtonsStyles(e) { + null !== this._el && (this._el.classList.toggle(y.has5Buttons, e), this + ._updateAllButtonsWidth()) + } + _onWheelClicked(e) { + 1 === e.button && this._model.onRemoveSource() + } + } + var V = s("JWMC"); + + function x(e) { + Object(V.trackEvent)("GUI", "Legend action", e) + } + var W = s("6dGu"), + T = s("rGGD"), + L = s("Y+EN"), + O = s("vYP1"); + const A = window.t("Hide Indicator Legend"), + D = window.t("Show Indicator Legend"), + H = window.t("Show Object Tree"); + class B { + constructor(e, t, s) { + this._el = null, this._counterEl = null, this._arrowIconEL = null, this + ._objectTreeEl = null, this._mode = 0, this._parentEl = e, this._themedColor = t + .spawn(), + this._themedColor.subscribe(this._updateThemedColor.bind(this)), this + ._sourceCount = s.visibleDataSourceCount.spawn(), this._sourceCount.subscribe( + this._updateSourceCount.bind(this)), this._isStateOpen = s + .isDataSourcesCollapsed.spawn(), this._isStateOpen.subscribe(this._updateState + .bind(this)), this._showObjectsTree = s.showObjectsTree.spawn(), this + ._showObjectsTree.subscribe(this._updateObjectTreeVisibility.bind(this)), this + ._render(), this._updateState(), this._updateThemedColor(this._themedColor + .value()), this._updateObjectTreeVisibility(this._showObjectsTree.value()), + this._toggleStateHandler = Object(p.c)(s.onCollapseDataSources), this + ._showObjectTreeHandler = Object(p.c)(s.onShowObjectsTreeDialog), null !== this + ._el && (this._el.addEventListener("touchend", this._toggleStateHandler), this + ._el.addEventListener("click", this._toggleStateHandler), this._el + .addEventListener("contextmenu", e => { + e.preventDefault(), e.stopPropagation() + })), null !== this._objectTreeEl && (this._objectTreeEl.addEventListener( + "touchend", this._showObjectTreeHandler), this._objectTreeEl + .addEventListener("click", this._showObjectTreeHandler)) + } + destroy() { + this._sourceCount.destroy(), this._isStateOpen.destroy(), null !== this + ._objectTreeEl && (this._objectTreeEl.removeEventListener("touchend", this + ._showObjectTreeHandler), this._objectTreeEl.removeEventListener( + "click", this._showObjectTreeHandler), this._objectTreeEl = null), this + ._arrowIconEL = null, this._counterEl = null, null !== this._el && (this._el + .removeEventListener("touchend", this._toggleStateHandler), this._el + .removeEventListener("click", this._toggleStateHandler), this._el + .innerHTML = "", this._el = null) + } + setMode(e) { + this._mode = e ? 1 : 0, this._updateTooltip() + } + _render() { + this._el = document.createElement("div"), this._el.className = y.toggler + + " apply-common-tooltip", this._arrowIconEL = document.createElement("div"), this + ._arrowIconEL.classList.add(y.iconArrow), this._arrowIconEL.innerHTML = h.a ? + T : W, this._el.appendChild(this._arrowIconEL), this._objectTreeEl = document + .createElement("div"), this._objectTreeEl.classList.add(y.objectTree), this + ._objectTreeEl.innerHTML = h.a ? O : L, this._el.appendChild(this + ._objectTreeEl), this._counterEl = document.createElement("div"), this + ._counterEl.classList.add(y.counter), this._counterEl.appendChild(document + .createTextNode(String(this._sourceCount.value()))), this._el.appendChild( + this._counterEl), this._parentEl.appendChild(this._el) + } + _updateThemedColor(e) { + if (null !== this._el) + if (e.length > 0) { + const [t, s, i] = Object(r.parseRgb)(e); + this._el.style.backgroundColor = Object(r.rgbaToString)([t, s, i, Object(r + .normalizeAlphaComponent)(.8)]) + } else this._el.style.removeProperty("background-color") + } + _updateSourceCount(e) { + v(Object(i.ensureNotNull)(this._counterEl), String(e)); { + const t = Object(i.ensureNotNull)(this._el), + s = e < 1; + t.classList.toggle(m.blockHidden, s); + const o = 1 === e; + t.classList.toggle(y.onlyOneSourceShown, o) + } + } + _updateCounterVisibility(e) { + if (null === this._counterEl) return; + const t = 1 === e; + this._counterEl.classList.toggle(m.blockHidden, t) + } + _updateState() { + const e = !this._isStateOpen.value(); + this._parentEl.classList.toggle(y.closed, e), this._updateTooltip(), + x((e ? "Hide" : "Show") + " not main sources") + } + _tooltip() { + return 1 === this._mode ? H : this._isStateOpen.value() ? A : D + } + _updateTooltip() { + null !== this._el && this._el.setAttribute("title", this._tooltip()) + } + _updateObjectTreeVisibility(e) { + Object(i.ensureNotNull)(this._el).classList.toggle(y.objectsTreeCanBeShown, e) + } + } + var P = s("+6II"), + z = s("R5JZ"); + + function j(e, t) { + const s = new l.a(t(e.value())); + e.subscribe(e => { + s.setValue(t(e)) + }); + return s.readonly().spawn(() => e.unsubscribe()) + } + const N = h.a ? 44 : 28, + I = d.enabled("object_tree_legend_mode"); + class R { + constructor(e, t) { + this._renderToggler = null, this._mainDataSourceRenderer = null, this + ._dataSourceRenderers = [], this._wrapText = null, this._parentEl = document + .createElement("div"), this._mainDataSourceEl = null, this._dataSourcesEl = + null, this._dataSourcesAdditionalWrapperEl = null, this + ._collapsedDataSourcesWrapperEl = null, this._collapsedDataSourcesEl = null, + this._outsideEventForCollapsedTooltip = null, this._options = e, this + ._togglerOptions = t, this._isStudiesLegendHidden = e.isStudiesLegendHidden + .spawn(), this._isStudiesLegendHidden.subscribe(this._updateLegendVisibility + .bind(this)), this._isAllLegendHidden = e.isAllLegendHidden.spawn(), this + ._isAllLegendHidden.subscribe(this._updateLegendVisibility.bind(this)), this + ._updateLegendVisibility(), this._themedColor = e.themedColor.spawn(), this + ._themedColor.subscribe(this._setCustomBg.bind(this)), this._showBackground = e + .showBackground.spawn(), this._showBackground.subscribe(this._setCustomBg.bind( + this)), this._backgroundTransparency = e.backgroundTransparency.spawn(), + this._backgroundTransparency.subscribe(this._setCustomBg.bind(this)), this + ._collapsedDataSourcesCountSpawn = e.collapsedDataSourcesCount.spawn(), this + ._collapsedDataSourcesCountSpawn.subscribe(this._updateCollapsedSourcesCount + .bind(this)), this._showCollapsedDataSourcesTooltipHandler = this + ._showCollapsedDataSourcesTooltip.bind(this), h.a || (this._wrapText = e + .wrapText.spawn(), this._wrapText.subscribe(this._updateWrapText.bind( + this)), this._updateWrapText(this._wrapText.value())), this._parentEl + .classList.add(y.legend), this._parentEl.classList.toggle(y.noActions, !this + ._options.withActions), this._parentEl.classList.toggle(y.touchMode, h.a), + this._parentEl.classList.toggle(y.newCollapser, !0), this._parentEl.dataset + .name = "legend", this._parentEl.style.setProperty( + "--legend-source-item-button-width", N + "px"), this._parentEl + .addEventListener("contextmenu", t => { + t.preventDefault(), e.showLegendWidgetContextMenu(t) + }) + } + destroy() { + if (this._isStudiesLegendHidden.destroy(), this._isAllLegendHidden.destroy(), this + ._themedColor.destroy(), this._showBackground.destroy(), this + ._backgroundTransparency.destroy(), this._collapsedDataSourcesCountSpawn + .destroy(), h.a && null !== this._collapsedDataSourcesWrapperEl && this + ._collapsedDataSourcesWrapperEl.removeEventListener("touchend", this + ._showCollapsedDataSourcesTooltipHandler), this + ._outsideEventForCollapsedTooltip && this._outsideEventForCollapsedTooltip(), + null !== this._wrapText && this._wrapText.destroy(), null !== this + ._dataSourcesAdditionalWrapperEl && (this._dataSourcesAdditionalWrapperEl + .innerHTML = "", this._dataSourcesAdditionalWrapperEl = null), + null !== this._dataSourcesEl && (this._dataSourcesEl.innerHTML = "", this + ._dataSourcesEl = null), null !== this._renderToggler && (this + ._renderToggler.destroy(), this._renderToggler = null), null !== this + ._mainDataSourceRenderer && (this._mainDataSourceRenderer.destroy(), this + ._mainDataSourceRenderer = null), 0 !== this._dataSourceRenderers.length) { + for (const e of this._dataSourceRenderers) e.destroy(); + this._dataSourceRenderers = [] + } + this._parentEl.innerHTML = "", delete this._parentEl + } + addMainDataSource(e, t) { + this._renderMainDataSourceEl(), this._mainDataSourceRenderer = new E(e, Object(i + .ensureNotNull)(this._mainDataSourceEl), { + withActions: this._options.withActions, + customTextColor: this._options.customTextColor, + statusWidgetEl: t.getElement(), + hideInvisibleHover: j(t.visibleWidgetsCount, e => Boolean(e)), + hideValues: t.errorWidgetIsShown + }), this._updateLegendVisibility(), e.onDestroy().subscribe(this, () => { + null !== this._mainDataSourceRenderer && (this._mainDataSourceRenderer + .destroy(), this._mainDataSourceRenderer = null) + }, !0) + } + addDataSources(e, t) { + this._renderDataSourcesEl(); + const s = Object(i.ensureNotNull)(this._dataSourcesAdditionalWrapperEl); + for (let i = 0; i < e.length; i++) { + const o = e[i], + l = new k(o, s, { + withActions: this._options.withActions, + customTextColor: this._options.customTextColor, + statusWidgetEl: t[i].getElement(), + hideInvisibleHover: j(t[i].visibleWidgetsCount, e => Boolean(e)), + hideValues: t[i].errorWidgetIsShown + }); + this._dataSourceRenderers.push(l), this._updateLegendVisibility(), o.onDestroy() + .subscribe(this, () => { + const e = this._dataSourceRenderers.indexOf(l); - 1 !== e && (this + ._dataSourceRenderers[e].destroy(), this + ._dataSourceRenderers.splice(e, 1)) + }, !0) + } + } + addCustomWidget(e, t) { + if (0 === t.block) { + this._renderMainDataSourceEl(); + const s = Object(i.ensureNotNull)(this._mainDataSourceEl); + 1 === t.position && e.renderTo(s, s.firstChild), 0 === t.position && e.renderTo( + s) + } + if (1 === t.block) { + this._renderDataSourcesEl(); + const s = Object(i.ensureNotNull)(this._dataSourcesAdditionalWrapperEl); + 1 === t.position && e.renderTo(s, s.firstChild), 0 === t.position && e.renderTo( + s) + } + } + firstTitle() { + return this._parentEl.firstElementChild + } + getElement() { + return this._parentEl + } + updateMode(e) { + const t = I && e < 112 ? 1 : e < 205 ? 2 : e < 222 ? 3 : 4; + null !== this._mainDataSourceRenderer && this._mainDataSourceRenderer.updateMode(t); + for (const e of this._dataSourceRenderers) e.updateMode(t); + this._parentEl.classList.toggle(y.medium, 3 === t), this._parentEl.classList.toggle( + y.minimized, 2 === t), this._parentEl.classList.toggle(y.micro, 1 === t), + null !== this._renderToggler && this._renderToggler.setMode(1 === t); + const s = h.a || e < 542; + this._parentEl.classList.toggle(y.directionColumn, s) + } + getMainSourceHeight() { + return null === this._mainDataSourceRenderer ? 0 : this._mainDataSourceRenderer + .getHeight() + } + getDataSourceHeight() { + return 0 === this._dataSourceRenderers.length ? 0 : this._dataSourceRenderers[0] + .getHeight() + } + _renderMainDataSourceEl() { + null === this._mainDataSourceEl && (this._mainDataSourceEl = document.createElement( + "div"), this._parentEl.insertBefore(this._mainDataSourceEl, this + ._dataSourcesEl)) + } + _renderDataSourcesEl() { + null === this._dataSourcesEl && (this._dataSourcesEl = document.createElement( + "div"), + this._dataSourcesEl.classList.add(y.sourcesWrapper), this._renderToggle(this + ._dataSourcesEl), this._dataSourcesAdditionalWrapperEl = document + .createElement("div"), this._dataSourcesAdditionalWrapperEl.classList.add(y + .sources), this._dataSourcesEl.appendChild(this + ._dataSourcesAdditionalWrapperEl), this._renderCollapsedCounter(this + ._dataSourcesAdditionalWrapperEl), this._parentEl.appendChild(this + ._dataSourcesEl)) + } + _renderToggle(e) { + this._options.showToggleButton && (this._renderToggler = new B(e, this._options + .themedColor, this._togglerOptions)) + } + _renderCollapsedCounter(e) { + this._collapsedDataSourcesWrapperEl = document.createElement("div"), this + ._collapsedDataSourcesWrapperEl.className = `${y.item} ${y.last}`, this + ._collapsedDataSourcesEl = document.createElement("span"), this + ._collapsedDataSourcesEl.className = y.text + " apply-common-tooltip", this + ._collapsedDataSourcesWrapperEl.append(this._collapsedDataSourcesEl), e.append( + this._collapsedDataSourcesWrapperEl), h.a && this + ._collapsedDataSourcesWrapperEl.addEventListener("touchend", this + ._showCollapsedDataSourcesTooltipHandler), this + ._updateCollapsedSourcesCount(this._collapsedDataSourcesCountSpawn.value()) + } + _showCollapsedDataSourcesTooltip() { + Object(P.c)(this._collapsedDataSourcesEl, { + text: this._options.collapsedDataSourcesTitle.value() + }), this._addOutsideEventForHideTooltip() + } + _addOutsideEventForHideTooltip() { + null !== this._outsideEventForCollapsedTooltip && this + ._outsideEventForCollapsedTooltip(), this._outsideEventForCollapsedTooltip = + Object(z.a)(new CustomEvent("timestamp").timeStamp, this + ._collapsedDataSourcesWrapperEl, () => { + null !== this._outsideEventForCollapsedTooltip && this + ._outsideEventForCollapsedTooltip(), Object(P.a)() + }, window.document, { + touchEnd: !0 + }) + } + _updateCollapsedSourcesCount(e) { + if (null === this._collapsedDataSourcesWrapperEl || null === this + ._collapsedDataSourcesEl) return; + const t = 0 === e; + this._collapsedDataSourcesWrapperEl.classList.toggle(m.blockHidden, t), t || (v(this + ._collapsedDataSourcesEl, "+" + e), this._collapsedDataSourcesEl + .setAttribute("title", this._options.collapsedDataSourcesTitle.value())) + } + _updateLegendVisibility() { + this._parentEl.classList.toggle(m.blockHidden, this._isAllLegendHidden.value()), + null !== this._dataSourcesEl && this._dataSourcesEl.classList.toggle(m + .blockHidden, this._isStudiesLegendHidden.value()) + } + _setCustomBg() { + const e = this._showBackground.value(), + t = this._themedColor.value(), + s = this._backgroundTransparency.value(); + let i = ""; + if (e) { + const [e, o, l] = Object(r.parseRgb)(t); + i = Object(r.rgbaToString)([e, o, l, Object(r.normalizeAlphaComponent)(1 - s / + 100)]) + } + this._parentEl.style.color = i + } + _updateWrapText(e) { + this._parentEl.classList.toggle(y.noWrap, !e) + } + } + var F = s("Tmoa"), + K = s("aIyQ"), + U = s.n(K), + Y = s("Ialn"), + G = s("QloM"), + Z = s("1AAW"), + X = s("CLNU"); + + function $(e) { + return void 0 !== e ? F.resetTransparency(e) : e + } + const q = window.t("Show"), + J = window.t("Hide"); + class Q { + constructor(e, t, s, i, o) { + this._values = new l.a([]), this._actions = [], this._onDestroy = new U.a, this + ._loading = new l.a(!1), this._moreActionCM = null, this._model = e, this + ._source = t, this._options = s, this._callbacks = i, this._contextMenuOptions = + o, this._disabled = new l.a(this._getDisabledState()), + this._disabledOnInterval = new l.a(this._getDisabledOnIntervalState()), this + ._selected = new l.a(!1), this._isTitleHidden = new l.a(this + ._getTitleHiddenValue()), this._isValuesHidden = new l.a(this + ._getValuesHiddenValue()), this._isRowHidden = new l.a(this + ._getRowHiddenValue()), Object(Z.a)(() => ({}), this._isTitleHidden, this + ._isValuesHidden, this._disabled).subscribe(this._updateRowVisibilities + .bind(this)), this._values.subscribe(() => { + this._isValuesHidden.setValue(this._getValuesHiddenValue()) + }) + } + destroy() {} + onDestroy() { + return this._onDestroy + } + titles() { + return this._titles.map(e => e.readonly()) + } + values() { + return this._values.readonly() + } + actions() { + return this._actions + } + disabled() { + return this._disabled.readonly() + } + disabledOnInterval() { + return this._disabledOnInterval.readonly() + } + selected() { + return this._selected.readonly() + } + loading() { + return this._loading.readonly() + } + isTitleHidden() { + return this._isTitleHidden.readonly() + } + isValuesHidden() { + return this._isValuesHidden.readonly() + } + isRowHidden() { + return this._isRowHidden.readonly() + } + update() { + this._updateTitle(), this._updateValues(), this._updateStates() + } + updateSource(e) { + this._source !== e && (this._source = e, this.update(), this._isTitleHidden + .setValue(this._getTitleHiddenValue()), this._isValuesHidden.setValue(this + ._getValuesHiddenValue())) + } + onToggleDisabled() { + const e = this._source.properties().childs().visible, + t = !e.value(); + this._model.setProperty(e, t, `${t?"Show":"Hide"} ${this._source.title()}`), x((t ? + "Show" : "Hide") + " source") + } + onShowSettings() { + this._source.userEditEnabled() && (this.setSourceSelected(), this._callbacks + .showChartPropertiesForSource(this._source, G.TabNames.style), x( + "Settings for source")) + } + onShowMoreActions(e) { + return this._options.readOnlyMode ? Promise.resolve(null) : (this._callbacks + .updateActions(), x("Show source context menu"), this._callbacks + .showContextMenuForSources([this._source], this._calcNewPosition(e), this + ._contextMenuOptions)) + } + setSourceSelected() { + this._model.selectionMacro(e => { + e.clearSelection(), e.addSourceToSelection(this._source) + }) + } + _moreActionHandler(e) { + e.preventDefault(), null !== this._moreActionCM && this._moreActionCM.isShown() ? + this._moreActionCM = null : (this.setSourceSelected(), this.onShowMoreActions(e) + .then(e => { + this._moreActionCM = e + })) + } + _updateTitle() { + const e = this._source.statusView(); + if (null === e) return; + const t = e.getSplitTitle(); + for (let e = 0; e < this._titles.length; e++) { + const s = t[e], + i = Object(X.clean)(Array.isArray(s) ? s.join(" ") : s || "", !0); + this._titles[e].setValue(i) + } + } + _updateStates() { + this._disabled.setValue(this._getDisabledState()), this._disabledOnInterval + .setValue(this._getDisabledOnIntervalState()), this._selected.setValue(this + ._model.selection().isSelected(this._source)), this._loading.setValue( + Boolean(this._source.isLoading())) + } + _hasValues() { + return this._values.value().length > 0 + } + _getEyeTitle() { + return this._disabled.value() ? q : J + } + _getDisabledState() { + return !this._source.properties().visible.value() + } + _updateRowVisibilities() { + this._isRowHidden.setValue(this._getRowHiddenValue()) + } + _getRowHiddenValue() { + return this._options.readOnlyMode && this._disabled.value() || this._isTitleHidden + .value() && (this._isValuesHidden.value() || this._disabled.value()) + } + _calcNewPosition(e) { + let t = {}; + if (e.hasOwnProperty("touches") && e.touches.length > 0) t = { + clientX: e.touches[0].clientX, + clientY: e.touches[0].clientY + }; + else if (null !== e.target) { + const s = e.target.getBoundingClientRect(); + t = { + clientX: Object(Y.isRtl)() ? s.right : s.left, + clientY: s.top + s.height + 3 + } + } else { + const s = e; + t = { + clientX: s.clientX, + clientY: s.clientY + } + } + return t + } + } + var ee = s("z4c1"), + te = s("61S9"), + se = s("vWJB"), + ie = s("wZiV"); + const oe = window.t("More"), + le = window.t("Flag Symbol"), + ne = window.t("Unflag Symbol"), + ae = d.enabled("show_hide_button_in_legend"); + class re extends Q { + constructor(e, t, s, i, o) { + super(e, t, s, i, o), this._titles = [new l.a(""), new l.a(""), new l.a(""), new l + .a("") + ], this._symbolMarker = null, this._symbolMarkerIcon = null, this._flagged = + new l.a(null), this._symbolAction = null, this._symbol = null, this + ._isOneButtonCanBeStick = !1, this._createActions(), this._updateSymbolMarker(), + this._model.model().properties().paneProperties.legendProperties.showSeriesTitle + .subscribe(this, () => { + this._isTitleHidden.setValue(this._getTitleHiddenValue()) + }); + const n = [this._model.model().properties().paneProperties.legendProperties + .showSeriesOHLC, this._model.model().properties().paneProperties + .legendProperties.showBarChange + ]; + for (const e of n) e.subscribe(this, () => { + this._isValuesHidden.setValue(this._getValuesHiddenValue()) + }); + this.update(), this._source.onStatusChanged().subscribe(this, () => { + this._loading.setValue(this._source.isLoading()) + }) + } + destroy() { + super.destroy(), this._model.model().properties().paneProperties.legendProperties + .showSeriesTitle.unsubscribeAll(this), this._model.model().properties() + .paneProperties.legendProperties.showSeriesOHLC.unsubscribeAll(this), this + ._model.model().properties().paneProperties.legendProperties.showBarChange + .unsubscribeAll(this), this._source.onStatusChanged().unsubscribeAll(this), this + ._onDestroy.fire() + } + flagged() { + return this._flagged.readonly() + } + onShowSettings() { + this._source.userEditEnabled() && this._callbacks.showGeneralChartProperties(G + .TabNames.symbol) + } + isOneButtonCanBeStick() { + return this._isOneButtonCanBeStick + } + _updateValues() { + const e = this._source.legendView(), + t = this._values.value(), + s = e.marketTitle(), + i = e.marketTitle().length > 0; + if (0 === t.length) { + const t = { + value: new l.a(""), + color: new l.a(""), + visible: new l.a(i), + title: new l.a(s) + }, + o = e.items().map(e => ({ + value: new l.a(e.value()), + color: new l.a($(e.color())), + visible: new l.a(e.visible()), + title: new l.a(e.title()) + })); + this._values.setValue([t].concat(o)) + } else { + t[0].title.setValue(s), t[0].visible.setValue(i); + const o = e.items(); + for (let e = 0; e < o.length; e++) { + const s = o[e]; + t[e + 1].value.setValue(s.value()), t[e + 1].color.setValue($(s.color())), + t[e + 1].visible.setValue(s.visible()), t[e + 1].title.setValue(s + .title()) + } + } + } + _updateStates() { + super._updateStates(), this._updateSymbolMarker() + } + _getDisabledOnIntervalState() { + return !1 + } + _getTitleHiddenValue() { + return !this._model.model().properties().paneProperties.legendProperties + .showSeriesTitle.value() + } + _getValuesHiddenValue() { + return !this._hasValues() || !this._model.model().properties().paneProperties + .legendProperties.showSeriesOHLC.value() && !this._model.model().properties() + .paneProperties.legendProperties.showBarChange.value() + } + _createActions() { + if (ae) { + const e = { + iconMap: new Map([ + ["large", te], + ["small", ee] + ]), + action: Object(p.c)(this.onToggleDisabled.bind(this)), + visible: new l.a(!0), + className: y.eye, + title: new l.a(this._getEyeTitle()), + dataset: { + name: "legend-show-hide-action" + } + }; + this._actions.push(e), this._disabled.subscribe(() => { + e.title.setValue(this._getEyeTitle()) + }) + } + this._actions.push({ + iconMap: new Map([ + ["large", ie], + ["small", se] + ]), + action: this._moreActionHandler.bind(this), + visible: new l.a(!0), + title: new l.a(oe), + dataset: { + name: "legend-more-action" + } + }) + } + _getMarkerTitle() { + return null !== this._symbolMarker ? this._symbolMarker.isMarked() ? ne : le : "" + } + _symbolActionHandler() { + null !== this._symbolMarker && (this._updateSymbolMarker(), x("Change flag state")) + } + _updateSymbolMarker() { + this._isOneButtonCanBeStick = !0 + } + } + var de = s("3ClC"), + he = s("fZEr"); + var ue = s("z61+"), + ce = s("txPx"), + _e = s("RgOa"), + pe = s("2CEX"), + me = s("D8x7"), + be = s("bNWL"), + ge = s("cKqi"), + we = s("YzC7"); + Object(ce.getLogger)("Chart.LegendWidget"); + const ve = window.t("Settings"), + ye = window.t("Source code"), + Se = window.t("Remove"), + Me = window.t("More"), + fe = (window.t("Error"), window.t("Could not get Pine source code."), d.enabled( + "study_buttons_in_legend"), d.enabled("show_hide_button_in_legend")), + Ee = d.enabled("property_pages"), + Ce = d.enabled("format_button_in_legend"), + ke = d.enabled("delete_button_in_legend"); + class Ve extends Q { + constructor(e, t, s, i, o) { + super(e, t, s, i, o), this._titles = [new l.a(""), new l.a("")], this._error = new l + .a(!1), this._isPineScriptDataSource = new l.a(!1), this._pineAction = null, + this._globalVisibility = new l.a(!0), this._createActions(); + const n = [this._model.model().properties().paneProperties.legendProperties + .showSeriesTitle, this._model.model().properties().paneProperties + .legendProperties.showStudyTitles + ]; + for (const e of n) e.subscribe(this, () => { + this._isTitleHidden.setValue(this._getTitleHiddenValue()) + }); + const a = [this._model.model().properties().paneProperties.legendProperties + .showSeriesOHLC, this._model.model().properties().paneProperties + .legendProperties.showBarChange, this._model.model().properties() + .paneProperties.legendProperties.showStudyValues + ]; + for (const e of a) e.subscribe(this, () => { + this._isValuesHidden.setValue(this._getValuesHiddenValue()) + }); + this.update() + } + destroy() { + super.destroy(); + const e = this._model.model().properties().paneProperties.legendProperties; + e.showSeriesTitle.unsubscribeAll(this), e.showStudyTitles.unsubscribeAll(this), e + .showSeriesOHLC.unsubscribeAll(this), e.showBarChange.unsubscribeAll(this), e + .showStudyValues.unsubscribeAll(this), this._onDestroy.fire() + } + error() { + return this._error.readonly() + } + isPineScriptDataSource() { + return this._isPineScriptDataSource.readonly() + } + updateSource(e) { + this._source !== e && (this._values.setValue([]), super.updateSource(e), this + ._updateAbleShowSourceCode()) + } + onRemoveSource() { + var e; + this._source.isUserDeletable() && (this._source.hasChildren() ? (e = this._model + .removeSource.bind(this._model, this._source, !1), + Object(he.showConfirm)({ + title: window.t("Confirm Remove Study Tree"), + text: window.t( + "Do you really want to delete study and all of it's children?" + ), + onConfirm: ({ + dialogClose: t + }) => { + e(), t() + } + })) : this._model.removeSource(this._source, !1), x("Remove sources")) + } + onShowSourceCode() { + 0 + } + setGlobalVisibility(e) { + this._globalVisibility.setValue(e) + } + globalVisibility() { + return this._globalVisibility.readonly() + } + getFullTitle() { + return this._titles.map(e => e.value()).join(" ") + } + _updateValues() { + const e = this._source.legendView(); + if (null === e) return; + if (0 === e.items().length) return; + const t = this._values.value(); + if (0 === t.length) { + const t = e.items().map(e => ({ + value: new l.a(e.value()), + color: new l.a($(e.color())), + visible: new l.a(e.visible()) + })); + this._values.setValue(t) + } else { + const s = e.items(); + for (let e = 0; e < s.length; e++) { + const i = t[e], + o = s[e]; + i.value.setValue(o.value()), i.color.setValue($(o.color())), i.visible + .setValue(o.visible()) + } + } + } + _updateStates() { + super._updateStates(), void 0 !== this._error && this._error.setValue(Boolean(this + ._source.isFailed())) + } + _getTitleHiddenValue() { + return this._isSymbolLikeStudy() ? !this._model.model().properties().paneProperties + .legendProperties.showSeriesTitle.value() : !this._model.model().properties() + .paneProperties.legendProperties.showStudyTitles.value() + } + _getDisabledOnIntervalState() { + return !(!Object(de.isStudy)(this._source) && !Object(de.isStudyStub)(this + ._source)) && !this._source.isActualInterval() + } + _getValuesHiddenValue() { + return !this._hasValues() || (this._isSymbolLikeStudy() ? !this._model.model() + .properties().paneProperties.legendProperties.showSeriesOHLC.value() && ! + this._model.model().properties().paneProperties.legendProperties + .showBarChange.value() : !this._model.model().properties().paneProperties + .legendProperties.showStudyValues.value()) + } + _isSymbolLikeStudy() { + return this._source instanceof ge.study_Overlay || this._source instanceof we.a + } + _updateAbleShowSourceCode() { + 0 + } + _updateVisibilityPineAction(e) { + null !== this._pineAction && (this._pineAction.visible.setValue(e), this + ._isPineScriptDataSource.setValue(e)) + } + _createActions() { + if (!this._options.readOnlyMode) { + if (this._pineAction = { + iconMap: new Map([ + ["large", pe], + ["small", pe] + ]), + action: Object(p.c)(this.onShowSourceCode.bind(this)), + visible: new l.a(!1), + title: new l.a(ye), + dataset: { + name: "legend-pine-action" + } + }, fe) { + const e = { + iconMap: new Map([ + ["large", te], + ["small", ee] + ]), + action: Object(p.c)(this.onToggleDisabled.bind(this)), + visible: new l.a(!0), + className: y.eye, + title: new l.a(this._getEyeTitle()), + dataset: { + name: "legend-show-hide-action" + } + }; + this._actions.push(e), this._disabled.subscribe(() => { + e.title.setValue(this._getEyeTitle()) + }) + } + Ee && Ce && (!Object(de.isStudy)(this._source) || new ue.a(this._source + .metaInfo()).hasUserEditableOptions()) && this._actions.push({ + iconMap: new Map([ + ["large", _e], + ["small", _e] + ]), + action: Object(p.c)(this.onShowSettings.bind(this)), + visible: new l.a(!0), + title: new l.a(ve), + dataset: { + name: "legend-settings-action" + } + }), ke && this._actions.push({ + iconMap: new Map([ + ["large", be], + ["small", me] + ]), + action: Object(p.c)(this.onRemoveSource.bind(this)), + visible: new l.a(!0), + title: new l.a(Se), + dataset: { + name: "legend-delete-action" + } + }), + this._actions.push({ + iconMap: new Map([ + ["large", ie], + ["small", se] + ]), + action: this._moreActionHandler.bind(this), + visible: new l.a(!0), + title: new l.a(Me), + dataset: { + name: "legend-more-action" + } + }) + } + } + } + var xe = s("7KDR"), + We = s("5VQP"), + Te = s("x2L+"), + Le = s("2uTr"), + Oe = s("MXV9"); + + function Ae(e, t, s) { + e.setProperty(t, !t.value(), s) + } + + function De(e, t, s, i, o, l) { + return function(e, t, s, i, o) { + const l = [], + n = i.get(0); + if (void 0 !== n) { + const e = n.get(1); + void 0 !== e && e.length > 0 && (l.push(...e), l.push(new xe.Separator)) + } + const a = e.model().properties().paneProperties.legendProperties; + l.push(new xe.Action({ + checkable: !0, + checked: a.showSeriesTitle.value(), + label: He, + statName: "Show Symbol", + onExecute: () => Ae(e, a.showSeriesTitle, + "Change Symbol Description Visibility") + })), t.showOpenMarketStatus && l.push(new xe.Action({ + checkable: !0, + checked: Te.b.value(), + label: Be, + statName: "Show Open market status", + onExecute: () => Ae(e, Te.b, "Change open market status visibility") + })); + if (l.push(new xe.Action({ + checkable: !0, + checked: a.showSeriesOHLC.value(), + label: Pe, + statName: "Show OHLC Values", + onExecute: () => Ae(e, a.showSeriesOHLC, + "Change OHLC Values Visibility") + })), l.push(new xe.Action({ + checkable: !0, + checked: a.showBarChange.value(), + label: ze, + statName: "Show Bar Change Values", + onExecute: () => Ae(e, a.showBarChange, + "Change Bar Change Visibility") + })), l.push(new xe.Separator), void 0 !== n) { + const e = n.get(0); + void 0 !== e && e.length > 0 && (l.push(...e), l.push(new xe.Separator)) + } + const r = i.get(1); + if (void 0 !== r) { + const e = r.get(1); + void 0 !== e && e.length > 0 && (l.push(...e), l.push(new xe.Separator)) + } + if (l.push(new xe.Action({ + checkable: !0, + checked: a.showStudyTitles.value(), + label: je, + statName: "Show Indicator Titles", + onExecute: () => Ae(e, a.showStudyTitles, + "Change Indicator Titles Visibility") + })), l.push(new xe.Action({ + checkable: !0, + checked: a.showStudyArguments.value(), + label: Ne, + statName: "Show Indicator Arguments", + onExecute: () => Ae(e, a.showStudyArguments, + "Change Indicator Arguments Visibility") + })), l.push(new xe.Action({ + checkable: !0, + checked: a.showStudyValues.value(), + label: Ie, + statName: "Show Indicator Values", + onExecute: () => Ae(e, a.showStudyValues, + "Change Indicator Values Visibility") + })), void 0 !== r) { + const e = r.get(0); + void 0 !== e && e.length > 0 && (l.push(...e), l.push(new xe.Separator)) + } + 0; + t.settings && (l.push(new xe.Separator), l.push(new xe.Action({ + label: Object(Le.appendEllipsis)(window.t("Settings")), + icon: Oe, + statName: "Settings...", + onExecute: () => s(G.TabNames.legend) + }))); + return We.ContextMenuManager.createMenu(l, {}, o) + }(e, t, s, i, l).then(e => (e.show(o), e)) + } + const He = window.t("Show Symbol"), + Be = window.t("Show Open market status"), + Pe = window.t("Show OHLC Values"), + ze = window.t("Show Bar Change Values"), + je = window.t("Show Indicator Titles"), + Ne = window.t("Show Indicator Arguments"), + Ie = window.t("Show Indicator Values"); + window.t("Wrap text"), w.CheckMobile.any(); + var Re = s("+DwS"), + Fe = s("Y7w9"), + Ke = s("+6ja"), + Ue = s("kcTO"), + Ye = s("4nwx"), + Ge = s("99ZO"), + Ze = s("jCNj"), + Xe = s("GOhO"), + $e = s("5mo2"); + + function qe(e) { + return e === Ge.WeekDays.SUNDAY ? Ge.WeekDays.SATURDAY : e - 1 + } + + function Je(e) { + return e === Ge.WeekDays.SATURDAY ? Ge.WeekDays.SUNDAY : e + 1 + } + + function Qe(e, t) { + const s = qe(t); + return 0 === e[s].entries.length ? Qe(e, s) : { + dayIndex: s, + entries: e[s].entries + } + } + + function et(e, t) { + const s = Je(t); + return 0 === e[s].entries.length ? et(e, s) : { + dayIndex: s, + entries: e[s].entries + } + } + + function tt(e) { + for (; e > Ze.minutesPerDay;) e -= Ze.minutesPerDay; + const t = e % 60, + s = (e - t) / 60; + return Object(Ue.numberToStringWithLeadingZero)(s, 2) + ":" + Object(Ue + .numberToStringWithLeadingZero)(t, 2) + } + const st = { + [Ge.WeekDays.MONDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.MONDAY], + isActive: !1, + entries: [] + }, + [Ge.WeekDays.TUESDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.TUESDAY], + isActive: !1, + entries: [] + }, + [Ge.WeekDays.WEDNESDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.WEDNESDAY], + isActive: !1, + entries: [] + }, + [Ge.WeekDays.THURSDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.THURSDAY], + isActive: !1, + entries: [] + }, + [Ge.WeekDays.FRIDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.FRIDAY], + isActive: !1, + entries: [] + }, + [Ge.WeekDays.SATURDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.SATURDAY], + isActive: !1, + entries: [] + }, + [Ge.WeekDays.SUNDAY]: { + title: Ye.weekDaysShortNames[Ge.WeekDays.SUNDAY], + isActive: !1, + entries: [] + } + }; + + function it(e, t) { + return e.start.value === t.start.value && e.end.value === t.end.value + } + + function ot(e, t) { + return it(e[0], t[0]) + } + + function lt(e) { + const t = e.start(), + s = e.length(), + i = e.sessionStartDayOfWeek(), + o = e.sessionEndDayOfWeek(), + l = tt(t), + n = tt(t + s); + return s > Ze.minutesPerDay ? + `${Ye.weekDaysShortNames[i]} ${l} — ${Ye.weekDaysShortNames[o]} ${n}` : `${l} — ${n}` + } + + function nt(e, t, s, i) { + return Math.abs(i - s) > 1 ? + `${Ye.weekDaysShortNames[s]} ${e.title} — ${Ye.weekDaysShortNames[i]} ${t.title}` : + `${e.title} — ${t.title}` + } + + function at(e, t, s) { + for (const i of t) { + let t = i.sessionStartDayOfWeek(); + const o = i.start(), + l = i.length(), + n = o + l, + a = []; + if (n <= Ze.minutesPerDay) a.push([o, n]); + else { + const e = Math.min(Ze.minutesPerDay - o, l); + a.push([o, o + e]), a.push([0, l - e]) + } + for (let o = 0; o < a.length; o++) { + const l = a[o], + [n, r] = l, + d = n / Ze.minutesPerDay, + h = Object(Fe.lowerbound)(e[t].entries, d, (e, t) => e.start.value < t), + u = { + start: { + value: d, + title: tt(n), + isFirstOrLastPoint: n === i.start() + }, + end: { + value: r / Ze.minutesPerDay, + title: tt(r), + isFirstOrLastPoint: a.length - 1 === o + }, + type: s, + tooltip: lt(i), + showStartForLastEntry: !1, + showEndForFirstEntry: !1 + }; + e[t].entries.splice(h, 0, u), t = Je(t) + } + } + } + class rt { + constructor(e) { + this.sessionsDays = new l.a(Object(n.clone)(st)), this.todaySession = new l.a( + Object(n.clone)({ + entries: [] + })), this._todayInExchangeTime = null; + const t = e; + this._symbolInfo = Object(Xe.b)(t.symbolInfo.bind(t), t.dataEvents() + .symbolResolved()), this._symbolInfo.subscribe(this._updateEntriesBySubSessions + .bind(this), { + callWithLast: !0 + }) + } + destroy() { + this._symbolInfo.destroy() + } + currentTimeValue() { + return null === this._todayInExchangeTime ? -1 : Ze.get_minutes_from_midnight(this + ._todayInExchangeTime) / Ze.minutesPerDay + } + timezone() { + const e = this._symbolInfo.value(); + return null === e ? "" : Object(Ke.timezoneTitle)(e.timezone) + } + _updateEntriesBySubSessions(e) { + var t; + this._updateTodayWithOffsets(e); + const s = this._createSubSessionSpecs(e), + o = (l = (null === (t = this._todayInExchangeTime) || void 0 === t ? void 0 : t + .getUTCDay()) || (new Date).getDay()) < Ge.WeekDays.SATURDAY ? l + 1 : Ge + .WeekDays.SUNDAY; + var l; + const a = Object(n.clone)(st); + a[o].isActive = !0; + for (const e of Array.from(s.keys())) { + at(a, Object(i.ensureDefined)(s.get(e)).getEntriesForWeekByCalendar(Object(i + .ensureNotNull)(this._todayInExchangeTime)), e) + } + Object.values(a).some(e => 0 !== e.entries.length) && (function(e) { + const t = tt(0), + s = tt(Ze.minutesPerDay), + o = Object(n.clone)(e); + for (const l of Object.keys(e)) { + const n = parseInt(l), + a = e[n].entries; + if (0 === a.length) { + a.push({ + start: { + value: 0, + title: t, + isFirstOrLastPoint: !0 + }, + end: { + value: 1, + title: s, + isFirstOrLastPoint: !0 + }, + type: 3, + tooltip: `${t} — ${s}`, + showStartForLastEntry: !1, + showEndForFirstEntry: !1 + }); + continue + } + const r = qe(n), + d = Je(n), + h = o[r].entries, + u = o[d].entries, + c = Qe(o, n), + _ = et(o, n), + p = a.length; + let m = 0; + for (let e = 0; e < p; e++) { + const s = a[e], + o = e > 0 ? a[e - 1] : null, + l = 0 === e; + if (0 === s.start.value || 0 === s.start.value && 1 === s.end + .value || null !== o && s.start.value === o.end.value) { + m++; + continue + } + const r = l ? c.entries[c.entries.length - 1] : Object(i + .ensureNotNull)(o), + d = { + start: { + value: l ? 0 : a[e - 1].end.value, + title: l ? t : a[e - 1].end.title, + isFirstOrLastPoint: !(l && h.length > 0) || 1 === h[ + h.length - 1].end.value + }, + end: { + value: s.start.value, + title: s.start.title, + isFirstOrLastPoint: !0 + }, + type: 3, + tooltip: nt(r.end, s.start, c.dayIndex, n), + showStartForLastEntry: !1, + showEndForFirstEntry: !1 + }; + a.splice(m, 0, d), m = e + 2 + } + const b = a[a.length - 1]; + 1 !== b.end.value && a.push({ + start: { + value: b.end.value, + title: b.end.title, + isFirstOrLastPoint: !0 + }, + end: { + value: 1, + title: tt(Ze.minutesPerDay), + isFirstOrLastPoint: !(u.length > 0) || 0 === u[0] + .start.value + }, + type: 3, + tooltip: nt(b.end, _.entries[0].start, n, _.dayIndex), + showStartForLastEntry: !1, + showEndForFirstEntry: !1 + }) + } + }(a), function(e) { + for (const i of Object.keys(e)) { + const o = parseInt(i), + l = e[o].entries; + if (1 === l.length) continue; + const n = qe(o), + a = Je(o), + r = l[0], + d = l[l.length - 1]; + r.start.isFirstOrLastPoint || (r.showStartForLastEntry = (t = l, s = + e[n].entries, it(t[t.length - 1], s[s.length - 1]))), d.end + .isFirstOrLastPoint || (d.showEndForFirstEntry = ot(l, e[a] + .entries)) + } + var t, s + }(a)), this.sessionsDays.setValue(a), this.todaySession.setValue(a[o]) + } + _createSubSessionSpecs(e) { + if (null === e) return new Map; + if (void 0 === e.subsessions) return new Map([ + [0, new $e.SessionSpec(e.timezone, e.session, e.session_holidays, e + .corrections)] + ]); + const t = ["regular", "premarket", "postmarket"], + s = new Map; + for (const i of t) { + let t = null; + switch (i) { + case "regular": + t = 0; + break; + case "premarket": + t = 1; + break; + case "postmarket": + t = 2 + } + if (null !== t) { + const o = e.subsessions.find(e => e.id === i); + void 0 !== o && s.set(t, new $e.SessionSpec(e.timezone, o[ + "session-display"] || o.session, "", o["session-correction"])) + } + } + return s + } + _updateTodayWithOffsets(e) { + if (null === e) return void(this._todayInExchangeTime = null); + const t = 1e3 * window.ChartApiInstance.serverTimeOffset(); + this._todayInExchangeTime = Ze.get_cal_from_unix_timestamp_ms(Ze.get_timezone(e + .timezone), Date.now() + t) + } + } + var dt = s("q1tI"), + ht = s.n(dt), + ut = s("TSYQ"), + ct = s("YFKU"), + _t = s("vqb8"), + pt = s("e3/o"), + mt = s("tfDh"); + const bt = new WeakMap; + + function gt(e) { + return bt.has(e) || bt.set(e, Object(pt.randomHash)()), Object(i.ensureDefined)(bt.get(e)) + } + const wt = new Map([ + [0, mt.green], + [1, mt.orange], + [2, mt.blue], + [3, mt.gray] + ]), + vt = new Map([ + [0, Object(ct.t)("Market open")], + [1, Object(ct.t)("Pre-market")], + [2, Object(ct.t)("Post-market")], + [3, Object(ct.t)("Market closed")] + ]); + + function yt(e) { + const { + segment: t, + forceStart: s, + forceEnd: i + } = e, o = t.end.value - t.start.value, l = o < .03, n = { + left: 100 * t.start.value + "%", + width: `calc(${100*o}% + ${l?2:0}px)` + }, a = ut(mt.segment, wt.get(t.type), (s || t.start.isFirstOrLastPoint) && mt.start, ( + i || t.end.isFirstOrLastPoint) && mt.end, l && mt.small, "common-tooltip-html", + "apply-common-tooltip"), r = function(e, t) { + return `
\n\t\t${vt.get(t)}\n\t\t${e}\n\t
` + }(t.tooltip, t.type); + return ht.a.createElement("div", { + className: a, + style: n, + "data-tooltip": r + }) + } + + function St(e) { + const { + sessionDay: t + } = e, s = t.entries.map((e, s) => ht.a.createElement(yt, { + key: gt(e) + "Segment", + segment: e, + forceStart: 0 === s && 3 === e.type, + forceEnd: s === t.entries.length - 1 && 3 === e.type + })), i = ut(mt.sessionDay, t.isActive && mt.active); + return ht.a.createElement("div", { + className: i + }, ht.a.createElement("div", { + className: mt.weekDay + }, t.title), ht.a.createElement("div", { + className: mt.sessionDaySegments + }, s)) + } + + function Mt(e) { + const { + sessionDays: t, + currentTimeMark: s + } = e, i = [], o = parseInt(Object.keys(t).filter(e => t[parseInt(e)].isActive)[0]), l = t[ + o], n = l.entries.filter(e => e.start.value <= s && e.end.value >= s)[0]; + !n.start.isFirstOrLastPoint && n.showStartForLastEntry ? i.push(l.entries[l.entries.length - + 1].start) : i.push(n.start); + const a = !n.end.isFirstOrLastPoint && n.showEndForFirstEntry ? l.entries[0].end : n.end; + if (i[0].value !== a.value && i.push(a), 0 === i.length) return null; + i.sort((e, t) => e.value - t.value); + const r = i.map(e => ht.a.createElement("div", { + key: gt(e), + className: mt.timeMark + }, e.title)), + d = 100 * (2 === i.length ? i[1].value - i[0].value : 0), + h = ut(d > 12 && mt.timeMarkSegmentAlignByEnds, mt.timeMarkSegment); + return ht.a.createElement("div", { + className: mt.sessionDay + }, ht.a.createElement("div", { + className: mt.weekDay + }), ht.a.createElement("div", { + className: mt.timeMarkWrapper + }, ht.a.createElement("div", { + className: h, + style: { + left: 100 * i[0].value + "%", + width: d + "%" + } + }, r))) + } + class ft { + constructor(e) { + this._fullSessionScheduleViewModel = new rt(e) + } + destroy() { + this._fullSessionScheduleViewModel.destroy() + } + renderer(e, t) { + return function(e) { + const { + key: t, + className: s, + now: i, + timezone: o + } = e, l = Object(_t.a)({ + watchedValue: e.sessionDays + }), n = Object.values(l).filter(e => e.isActive)[0], a = ut(s, mt + .wrapper); + return ht.a.createElement("div", { + key: t, + className: a + }, ht.a.createElement("div", { + className: mt.timezone + }, o), ht.a.createElement("div", { + className: mt.sessionDayWrapper + }, ht.a.createElement(St, { + sessionDay: n + }), ht.a.createElement("div", { + className: mt.nowWrapper + }, ht.a.createElement("div", { + className: mt.now, + style: { + left: 100 * i + "%" + } + }))), ht.a.createElement(Mt, { + sessionDays: l, + currentTimeMark: i + })) + }({ + key: e, + className: t, + sessionDays: this._fullSessionScheduleViewModel.sessionsDays, + now: this._fullSessionScheduleViewModel.currentTimeValue(), + timezone: this._fullSessionScheduleViewModel.timezone() + }) + } + updateSource(e) {} + } + var Et = s("HGP3"), + Ct = s("25b6"); + + function kt(e, t) { + const s = new l.a(e()), + i = {}; + t.forEach(t => t.subscribe(i, () => { + s.setValue(e()) + })); + return s.readonly().spawn(() => t.forEach(e => e.unsubscribeAll(i))) + } + var Vt = s("rh3U"); + class xt { + constructor(e) { + this.isBlinkingMode = new l.a(!1), this._status = new l.a(null), this._fullTooltip = + new l.a(null), this._iconClassNames = new l.a(null), this._visible = new l.a(! + 1), this._tooltip = new l.a(null), this._icon = new l.a(null), this._className = + new l.a(null), this._infoMaps = e, this._size = e.size || "small", this._status + .subscribe(this._updateByStatus.bind(this), { + callWithLast: !0 + }), this._className.subscribe(this._updateIconClassName.bind(this)) + } + turnOffBlinkingMode() {} + status() { + return this._status + } + tooltip() { + return this._tooltip + } + icon() { + return this._icon + } + className() { + return this._className + } + visible() { + return this._visible + } + size() { + return this._size + } + fullInfo() { + return this._fullTooltip + } + _getTooltip(e) { + var t, s; + return null !== (s = null === (t = this._infoMaps.tooltipMap) || void 0 === t ? + void 0 : t.get(e)) && void 0 !== s ? s : null + } + _getIcon(e) { + let t; + const s = this._infoMaps.iconMap.get(e); + return void 0 !== s && (t = s.get(this._size)), t || null + } + _getClassName(e) { + return this._infoMaps.classNameMap.get(e) || null + } + _getTitle(e) { + var t, s; + return null !== (s = null === (t = this._infoMaps.titleMap) || void 0 === t ? + void 0 : t.get(e)) && void 0 !== s ? s : null + } + _getTitleColor(e) { + var t, s; + return null !== (s = null === (t = this._infoMaps.titleColorMap) || void 0 === t ? + void 0 : t.get(e)) && void 0 !== s ? s : null + } + async _getHtml(e) { + var t, s, i; + return null !== (i = null === (s = null === (t = this._infoMaps.htmlMap) || + void 0 === t ? void 0 : t.get(e)) || void 0 === s ? void 0 : s.map(Ct + .b)) && void 0 !== i ? i : null + } + _getAction(e) { + var t, s; + return null !== (s = null === (t = this._infoMaps.actionMap) || void 0 === t ? + void 0 : t.get(e)) && void 0 !== s ? s : null + } + async _updateFullTooltipByStatus(e) { + const t = await this._getHtml(e); + this._status.value() === e && this._fullTooltip.setValue([{ + icon: this._icon.value(), + iconClassName: this._iconClassNames.value(), + title: this._getTitle(e), + titleColor: this._getTitleColor(e), + html: t, + size: this._size, + action: this._getAction(e) + }]) + } + _updateByStatus(e) { + if (null === e) return this._icon.setValue(null), this._tooltip.setValue(null), + void this._visible.setValue(!1); + this._icon.setValue(this._getIcon(e)), this._className.setValue(this._getClassName( + e)), this._tooltip.setValue(this._getTooltip(e)), this._visible.setValue(! + 0), this._updateFullTooltipByStatus(e) + } + _updateIconClassName(e) { + null !== e ? this._iconClassNames.setValue([Vt.statusItem, e]) : this + ._iconClassNames.setValue(null) + } + } + var Wt = s("Vdly"); + const Tt = []; + + function Lt() { + return Wt.getJSON("tv.alreadyBlinkedStatuses", Tt) + } + const Ot = new l.a(Lt()); + + function At(e) { + const t = Wt.getJSON("tv.alreadyBlinkedStatuses", Tt); + t.includes(e) || (t.push(e), Wt.setJSON("tv.alreadyBlinkedStatuses", t), Ot.setValue(Lt())) + } + Wt.onSync.subscribe(null, () => Ot.setValue(Lt())); + const Dt = Ot; + var Ht = s("Cf1E"), + Bt = s("VrrN"), + Pt = s("VrXG"), + zt = s("LIcf"), + jt = s("Uua9"), + Nt = s("9Crk"), + It = s("Tq3g"); + const Rt = Object(ce.getLogger)("Chart.LegendWidget"), + Ft = ["TFEXDelayForGuest", "MOEXDelayForGuest", "CHIXAuDelayForGuest", "NGMDelayForGuest", + "DEForGuest", "ICESGDelayForGuest" + ], + Kt = new Map([ + ["DelayToRealtime", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["DelayNoRealtime", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["TFEXDelayForGuest", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["MOEXDelayForGuest", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["CHIXAuDelayForGuest", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["NGMDelayForGuest", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["ICESGDelayForGuest", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["DEForGuest", new Map([ + ["small", Bt], + ["large", Pt] + ])], + ["EOD", new Map([ + ["small", zt], + ["large", jt] + ])], + ["TickByTick", new Map([ + ["small", Nt], + ["large", It] + ])], + ["BATSToRealtime", new Map([ + ["small", Nt], + ["large", It] + ])], + ["DelayWithoutMarketAgreement", new Map([ + ["small", Bt], + ["large", Pt] + ])] + ]), + Ut = new Map([ + ["DelayToRealtime", Vt.delay], + ["DelayNoRealtime", Vt.delay], + ["TFEXDelayForGuest", Vt.delay], + ["MOEXDelayForGuest", Vt.delay], + ["CHIXAuDelayForGuest", Vt.delay], + ["NGMDelayForGuest", Vt.delay], + ["ICESGDelayForGuest", Vt.delay], + ["DEForGuest", Vt.delay], + ["EOD", Vt.eod], + ["TickByTick", Vt.notAccurate], + ["BATSToRealtime", Vt.notAccurate], + ["DelayWithoutMarketAgreement", Vt.delay] + ]), + Yt = new Map([ + ["DelayToRealtime", Et.colorsPalette["color-delay-mode"]], + ["DelayNoRealtime", Et.colorsPalette["color-delay-mode"]], + ["TFEXDelayForGuest", Et.colorsPalette["color-delay-mode"]], + ["MOEXDelayForGuest", Et.colorsPalette["color-delay-mode"]], + ["CHIXAuDelayForGuest", Et.colorsPalette["color-delay-mode"]], + ["NGMDelayForGuest", Et.colorsPalette["color-delay-mode"]], + ["ICESGDelayForGuest", Et.colorsPalette["color-delay-mode"]], + ["DEForGuest", Et.colorsPalette["color-delay-mode"]], + ["EOD", Et.colorsPalette["color-eod-mode"]], + ["TickByTick", Et.colorsPalette["color-notaccurate-mode"]], + ["BATSToRealtime", Et.colorsPalette["color-notaccurate-mode"]], + ["DelayWithoutMarketAgreement", Et.colorsPalette["color-delay-mode"]] + ]), + Gt = window.t("Data is delayed"), + Zt = window.t("End of day data"), + Xt = window.t("One update per second"), + $t = window.t("Cboe BZX"), + qt = window.t("{exchange} by {originalExchange}"), + Jt = Object(Ct.b)(window.t("{symbolName} data is delayed by {time} minutes.")), + Qt = Object(Ct.b)(window.t( + "{listedExchange} real-time data is available for free to registered users.")), + es = Object(Ct.b)(window.t( + "To get real-time data for {description}, please buy the real-time data package.")), + ts = Object(Ct.b)(window.t( + "Real-time data for {description} is not supported right now. We may support it in the future." + )), + ss = Object(Ct.b)(window.t("Data is updated once a day.")), + is = Object(Ct.b)(window.t( + "Data on our Basic plan is updated once per second, even if there are more updates on the market." + )), + os = Object(Ct.b)(window.t( + "Data is updated once per second, even if there are more updates on the market.")), + ls = Object(Ct.b)(window.t("Paid plans feature faster data updates.")), + ns = Object(Ct.b)(window.t( + "Real-time data for {symbolName} is provided by {exchange} exchange.")), + as = Object(Ct.b)(window.t( + "This data is real-time, but it’s slightly different to its official counterpart coming from primary exchanges." + )), + rs = Object(Ct.b)(window.t( + "This data is real-time, but it’s slightly different to its official counterpart coming from {exchange}." + )), + ds = Object(Ct.b)(window.t( + "If you'd like {listedExchange} real-time data you'll need to complete an Exchange Agreement. Don't worry, it only takes a few clicks" + )); + window.t("Create a free account"), window.t("Learn more"), Object(Ct.b)(window.t( + "Fill out Exchange Agreements")); + class hs extends xt { + constructor(e, t, s) { + super({ + iconMap: Kt, + classNameMap: Ut, + titleColorMap: Yt, + size: t + }), this._dataUpdatedMode = new l.a(null).spawn(), this._options = s, this + ._model = e, this._dataModeBlinkingStatuses = Dt.spawn(), this + ._dataModeBlinkingStatuses.subscribe(this._updateBlinkingMode.bind(this)), this + .turnOffBlinkingMode = this._turnOffBlinking.bind(this), this.setModel(e) + } + destroy() { + this._dataUpdatedMode.destroy(), this._dataModeBlinkingStatuses.destroy() + } + setModel(e) { + if (this._dataUpdatedMode.destroy(), null === e) return this._model = e, void(this + ._dataUpdatedMode = new l.a(null).spawn()); + this._dataUpdatedMode = e.status().spawn(), this._dataUpdatedMode.subscribe(this + ._updateStatus.bind(this), { + callWithLast: !0 + }) + } + _getTooltip() { + const e = this._getShortTexts(); + return null === e ? null : Object.values(e).join(" · ") + } + async _updateFullTooltipByStatus() { + const e = this._dataUpdatedMode.value(); + if (null === e) return void this._fullTooltip.setValue(null); + const t = this._getShortTexts(), + s = await this._getHtmls(), + i = await this._getActions(); + if (e !== this._dataUpdatedMode.value()) return; + const o = []; + for (const l of e) o.push({ + icon: this._getIcon(l), + iconClassName: this._iconClassNames.value(), + title: t && t[l], + titleColor: this._getTitleColor(l), + html: s && s[l], + size: this._size, + action: i && i[l] + }); + this._fullTooltip.setValue(o) + } + _updateStatus(e) { + const t = null !== e ? e[0] : null; + super._updateByStatus(t), this._updateBlinkingMode() + } + async _getHtmls() { + const e = this._dataUpdatedMode.value(); + if (null === e || null === this._model) return Promise.resolve(null); + const t = {}, + s = this._model.symbolName(); + let i = null, + o = null; + try { + i = await this._model.description(), o = this._model.exchange() + } catch (e) { + Rt.logError("Can't get exchange description, reason: " + Object(Ht.a)(e)) + } + for (const l of e) + if (t[l] = [], ["DelayToRealtime", "DelayNoRealtime", + "DelayWithoutMarketAgreement", ...Ft + ].includes(l) && (t[l].push(Jt.format({ + symbolName: s, + time: this._model.time().toString() + })), this._options.subscriptionFullInfo && null !== i && + "DelayToRealtime" === l && t[l].push(es.format({ + description: `${i}` + })), null !== i && "DelayNoRealtime" === l && t[l].push(ts.format({ + description: `${i}` + })), "DelayWithoutMarketAgreement" === l && t[l].push(ds.format({ + listedExchange: this._model.listedExchange() + })), this._options.subscriptionFullInfo && Ft.includes(l) && t[l].push( + Qt.format({ + listedExchange: this._model.listedExchange() + }))), "EOD" === l && (t[l] = [ss]), "TickByTick" === l && (t[l] + .push(this._options.subscriptionFullInfo ? is : os), this._options + .subscriptionFullInfo && t[l].push(ls)), null !== o && + "BATSToRealtime" === l) { + let e = this._model.listedExchange(); + 0, t[l].push(ns.format({ + symbolName: s, + exchange: o + }), "" !== e ? rs.format({ + exchange: e + }) : as) + } return Object.keys(t).length > 0 ? t : null + } + async _getActions() { + if (null === this._dataUpdatedMode.value() || null === this._model) return null; + const e = {}; + return Object.keys(e).length > 0 ? e : null + } + _getShortTexts() { + var e; + const t = this._dataUpdatedMode.value(); + if (null === t || null === this._model) return null; + const s = {}; + for (const i of t) + if (["DelayToRealtime", "DelayNoRealtime", ...Ft, "DelayWithoutMarketAgreement"] + .includes(i) && (s[i] = Gt), "EOD" === i && (s[i] = Zt), "TickByTick" === + i && (s[i] = Xt), "BATSToRealtime" === i) { + let t = null !== (e = this._model.firstReplacedByBatsExchange()) && + void 0 !== e ? e : ""; + 0, s[i] = "" !== t ? qt.format({ + exchange: t, + originalExchange: $t + }) : $t + } return Object.keys(s).length > 0 ? s : null + } + _updateBlinkingMode() { + const e = this._dataUpdatedMode.value(); + if (null === e) return; + const t = this._dataModeBlinkingStatuses.value(); + for (const s of e) + if (!t.includes(s)) return void this.isBlinkingMode.setValue(!0); + this.isBlinkingMode.setValue(!1) + } + _turnOffBlinking() { + const e = this._dataUpdatedMode.value(); + if (null !== e) + for (const t of e) At(t) + } + } + var us = s("JmzL"), + cs = s("M3mX"); + const _s = window.t("Study Error"), + ps = new Map([ + [!0, new Map([ + ["small", us], + ["large", cs] + ])], + [!1, new Map([ + ["small", ""], + ["large", ""] + ])] + ]), + ms = new Map([ + [!0, Vt.dataProblemLow], + [!1, null] + ]), + bs = new Map([ + [!0, _s], + [!1, null] + ]), + gs = new Map([ + [!0, _s], + [!1, null] + ]), + ws = new Map([ + [!0, Et.colorsPalette["color-data-problem"]], + [!1, null] + ]); + class vs extends xt { + constructor(e, t, s, i) { + super({ + iconMap: ps, + classNameMap: ms, + tooltipMap: bs, + titleMap: gs, + titleColorMap: ws, + size: s + }), this._dataSourceErrorStatus = new l.a(null).spawn(), this._lastError = null, + this._options = i, this.setSource(e, t) + } + destroy() { + this._dataSourceErrorStatus.destroy() + } + setSource(e, t) { + this._dataSourceErrorStatus.destroy(), this._dataSourceErrorStatus = kt(() => e + .statusProvider({}).errorStatus(), t), this._dataSourceErrorStatus + .subscribe(this._updateStatus.bind(this), { + callWithLast: !0 + }) + } + _getTooltip(e) { + const t = this._dataSourceErrorStatus.value(); + if (e && null !== t) { + const e = t.title; + if (void 0 !== e) return e + } + return super._getTooltip(e) + } + _getTitle(e) { + const t = this._dataSourceErrorStatus.value(); + if (e && null !== t) { + const e = t.title; + if (void 0 !== e) return e + } + return super._getTitle(e) + } + async _getHtml(e) { + const t = this._dataSourceErrorStatus.value(); + return null !== t ? [Object(Ct.b)(t.error)] : null + } + _getAction(e) { + this._dataSourceErrorStatus.value(); + return null + } + _updateStatus(e) { + const t = this._status.value(); + null !== e ? (this._status.setValue(!0), t && this._lastError !== e.error && this + ._updateByStatus(!0), this._lastError = e.error) : (this._status.setValue( + null), this._lastError = null) + } + } + const ys = window.t("Data error"), + Ss = new Map([ + ["high", new Map([ + ["small", us], + ["large", cs] + ])], + ["low", new Map([ + ["small", us], + ["large", cs] + ])] + ]), + Ms = new Map([ + ["high", Vt.dataProblemHigh], + ["low", Vt.dataProblemLow] + ]), + fs = new Map([ + ["high", ys], + ["low", ys] + ]), + Es = new Map([ + ["high", Et.colorsPalette["color-data-problem"]], + ["low", Et.colorsPalette["color-data-problem"]] + ]); + class Cs extends xt { + constructor(e, t) { + super({ + tooltipMap: fs, + iconMap: Ss, + classNameMap: Ms, + titleMap: fs, + titleColorMap: Es, + size: t + }), this._dataProblem = new l.a(null).spawn(), this._isDataProblemCritical = + new l.a(!1), this.setModel(e) + } + destroy() { + this._dataProblem.destroy() + } + isDataProblemCritical() { + return this._isDataProblemCritical + } + setModel(e) { + this._dataProblem.destroy(), null !== e ? (this._dataProblem = e.status().spawn(), + this._dataProblem.subscribe(this._updateStatus.bind(this), { + callWithLast: !0 + })) : this._dataProblem = new l.a(null).spawn() + } + async _getHtml(e) { + const t = this._dataProblem.value(); + return null === t ? null : [Object(Ct.b)(t.text)] + } + _updateStatus(e) { + var t; + const s = null !== (t = null == e ? void 0 : e.severity) && void 0 !== t ? t : null; + this._status.setValue(s), this._isDataProblemCritical.setValue(function(e) { + return "high" === e + }(s)) + } + } + class ks extends xt { + constructor(e, t) { + super(t), this._booleanStatus = new l.a(!1).spawn(), this.updateStatus(e) + } + destroy() { + this._booleanStatus.destroy() + } + updateStatus(e) { + this._booleanStatus.destroy(), this._booleanStatus = e.spawn(), this._booleanStatus + .subscribe(this._updateStatus.bind(this), { + callWithLast: !0 + }) + } + _updateStatus(e) { + e ? this._status.setValue(!0) : this._status.setValue(null) + } + } + var Vs = s("YGQl"), + xs = s("Jjb7"); + const Ws = window.t("Invalid Symbol"), + Ts = window.t("This symbol doesn't exist, please pick another one."), + Ls = new Map([ + [!0, new Map([ + ["small", Vs], + ["large", xs] + ])], + [!1, new Map([ + ["small", ""], + ["large", ""] + ])] + ]), + Os = new Map([ + [!0, Vt.invalidSymbol], + [!1, null] + ]), + As = new Map([ + [!0, Ws], + [!1, null] + ]), + Ds = new Map([ + [!0, Ws], + [!1, null] + ]), + Hs = new Map([ + [!0, Et.colorsPalette["color-invalid-symbol"]], + [!1, null] + ]), + Bs = new Map([ + [!0, [Ts]], + [!1, null] + ]), + Ps = new Map([ + [!0, null], + [!1, null] + ]); + class zs { + constructor(e) { + this._el = document.createElement("div"), this._prevCustomClass = null, this._icon = + e.icon.spawn(), this._icon.subscribe(this._updateIcon.bind(this), { + callWithLast: !0 + }), this._className = e.className.spawn(), this._className.subscribe(this + ._updateClassName.bind(this), { + callWithLast: !0 + }), this._visible = e.visible.spawn(), this._visible.subscribe(this + ._updateVisibility.bind(this), { + callWithLast: !0 + }), this._size = e.size || "small", this._render(e.parentEl), e + .isBlinking && (this._isBlinking = e.isBlinking.spawn(), this._isBlinking + .subscribe(this._updateBlinkingMode.bind(this), { + callWithLast: !0 + }), this._turnOffBlinking = e.turnOffBlinking) + } + destroy() { + this._visible.destroy(), this._icon.destroy(), this._isBlinking && this._isBlinking + .destroy(), this._el.remove() + } + onClick() { + this._turnOffBlinking && this._turnOffBlinking() + } + visible() { + return this._visible + } + _render(e) { + this._el.classList.add(Vt.statusItem, Vt[this._size]), e.appendChild(this._el) + } + _updateVisibility(e) { + this._el.classList.toggle("js-hidden", !e) + } + _updateIcon(e) { + this._el.innerHTML = e || "" + } + _updateClassName(e) { + this._prevCustomClass !== e && (null !== this._prevCustomClass && this._el.classList + .remove(this._prevCustomClass), null !== e && this._el.classList.add(e), + this._prevCustomClass = e) + } + _updateBlinkingMode(e) { + this._el.classList.toggle(Vt.blinking, e) + } + } + class js { + constructor(e, t, s, i) { + this.element = document.createElement("div"), this._blinkingSpawns = [], this + ._iconsRenderers = []; + const o = [Vt.statuses, "apply-common-tooltip", "common-tooltip-wide"]; + h.a && o.push(Vt.touchMode), this.element.classList.add(...o, Vt[e]), this + ._visibleWidgetsCount = t.spawn(), this._visibleWidgetsCount.subscribe(this + ._updateSpecialClassAndTooltip.bind(this)), this._tooltips = s.spawn(), this + ._tooltips.subscribe(this._updateTooltip.bind(this)), this._onClickCallback = i + .onClick, this._onClickHandler = this._onClick.bind(this), this.element + .addEventListener("click", this._onClickHandler) + } + destroy() { + for (const e of this._iconsRenderers) e.destroy(); + for (const e of this._blinkingSpawns) e.destroy(); + this._visibleWidgetsCount.destroy(), this._tooltips.destroy(), this.element + .removeEventListener("click", this._onClickHandler), this.element.remove() + } + addStatusModel(e) { + this._iconsRenderers.push(new zs({ + visible: e.visible, + icon: e.model.icon(), + className: e.model.className(), + size: e.model.size(), + parentEl: this.element, + isBlinking: e.model.isBlinkingMode, + turnOffBlinking: e.model.turnOffBlinkingMode + })); + const t = e.model.isBlinkingMode.spawn(); + t.subscribe(this._updateBlinkingMode.bind(this)), this._blinkingSpawns.push(t), this + ._updateBlinkingMode() + } + _onClick(e) { + e.preventDefault(); + const t = this._iconsRenderers.filter(e => e.visible().value()); + for (const e of t) e.onClick(); + let s = 14; + t.length > 1 && (s -= 2); + const i = this.element.getBoundingClientRect(), + o = { + x: i.left - s, + y: i.bottom + 4 + }; + this._onClickCallback(o) + } + _updateTooltip() { + this.element.setAttribute("title", this._tooltips.value().join(" · ")) + } + _updateSpecialClassAndTooltip() { + const e = this._visibleWidgetsCount.value(); + this.element.classList.toggle(Vt.oneWidgetsVisible, 1 === e), this.element.classList + .toggle(Vt.twoWidgetsVisible, 2 === e), this.element.classList.toggle(Vt + .threeWidgetsVisible, 3 === e), this._updateTooltip() + } + _updateBlinkingMode() { + const e = this._blinkingSpawns.some(e => e.value()); + this.element.classList.toggle(Vt.blinking, e) + } + } + var Ns = s("9lPX"), + Is = s("MyT/"), + Rs = s("jXu8"), + Fs = s("cbig"), + Ks = s("G2LI"), + Us = s("QkND"), + Ys = s("Gp/h"), + Gs = s("S48P"); + const Zs = window.t("Market open"), + Xs = window.t("Pre-market"), + $s = window.t("Post-market"), + qs = window.t("Market closed"), + Js = window.t("Holiday"), + Qs = window.t("All's well — Market is open."), + ei = window.t("Morning. Market is open for pre-market trading."), + ti = window.t("Evening. Market is open for post-market trading."), + si = window.t("Time for a walk — this market is closed."), + ii = window.t("Market is currently on holiday. Lucky them."), + oi = new Map([ + ["market", new Map([ + ["small", Is], + ["large", Rs] + ])], + ["pre_market", new Map([ + ["small", Ys], + ["large", Gs] + ])], + ["post_market", new Map([ + ["small", Ks], + ["large", Us] + ])], + ["out_of_session", new Map([ + ["small", Ns], + ["large", Ns] + ])], + ["holiday", new Map([ + ["small", Fs], + ["large", Fs] + ])] + ]), + li = new Map([ + ["market", Vt.marketStatusOpen], + ["pre_market", Vt.marketStatusPre], + ["post_market", Vt.marketStatusPost], + ["out_of_session", Vt.marketStatusClose], + ["holiday", Vt.marketStatusHoliday] + ]), + ni = new Map([ + ["market", Zs], + ["pre_market", Xs], + ["post_market", $s], + ["out_of_session", qs], + ["holiday", Js] + ]), + ai = new Map([ + ["market", Zs], + ["pre_market", Xs], + ["post_market", $s], + ["out_of_session", qs], + ["holiday", Js] + ]), + ri = new Map([ + ["market", Et.colorsPalette["color-market-open"]], + ["pre_market", Et.colorsPalette["color-pre-market"]], + ["post_market", Et.colorsPalette["color-post-market"]], + ["out_of_session", Et.colorsPalette["color-market-closed"]], + ["holiday", Et.colorsPalette["color-market-holiday"]] + ]), + di = new Map([ + ["market", [Qs]], + ["pre_market", [ei]], + ["post_market", [ti]], + ["out_of_session", [si]], + ["holiday", [ii]] + ]), + hi = new Map([ + ["market", null], + ["pre_market", null], + ["post_market", null], + ["out_of_session", null], + ["holiday", null] + ]), + ui = window.t("You can turn this data on or off."); + class ci extends xt { + constructor(e, t, s) { + super({ + tooltipMap: ni, + iconMap: oi, + classNameMap: li, + titleMap: ai, + titleColorMap: ri, + htmlMap: di, + actionMap: hi, + size: t + }), this._marketStatus = new l.a(null).spawn(), this._options = s, this + .setModel(e) + } + destroy() { + this._marketStatus.destroy() + } + setModel(e) { + this._marketStatus.destroy(), null !== e ? (this._marketStatus = e.status().spawn(), + this._marketStatus.subscribe(this._updateStatus.bind(this), { + callWithLast: !0 + })) : this._marketStatus = new l.a(null).spawn() + } + async _getHtml(e) { + const t = await super._getHtml(e); + return null !== t && (this._options.preMarketSolution || this._options + .postMarketSolution) && ("pre_market" === e && this._options + .preMarketSolution && t.push(ui), "post_market" === e && this._options + .postMarketSolution && t.push(ui)), t + } + _getAction(e) { + return super._getAction(e) + } + _updateStatus(e) { + this._status.setValue(e) + } + } + class _i { + constructor(e, t, s) { + this.visibleWidgetsCount = new l.a(0), this.errorWidgetIsShown = new l.a(!1), this + ._size = h.a ? "large" : "small", this._tooltips = new l.a([]), this + ._visibilitySpawns = [], this._tooltipSpawns = [], this._statusWidgetInfos = [], + this._renderer = new js(this._size, this.visibleWidgetsCount, this._tooltips, { + onClick: this._handleToggleDropdown.bind(this) + }), this._symbolInvalidViewModel = null, this._dataSourceErrorStatusViewModel = + null, this._marketStatusViewModel = null, this._dataUpdatedModeViewModel = null, + this._dataProblemViewModel = null, this._sessionWidget = null, this + ._isSymbolInvalid = null, this._dataSourceHasErrorVisible = null, this + ._dataSourceErrorCanBeShown = new l.a(!1), this._marketStatusCanBeShown = new l + .a(!1), this._dataUpdatedModeCanBeShown = new l.a(!1), this + ._dataProblemCanBeShown = new l.a(!1), this._isDataProblemCritical = null, this + ._container = document.createElement("div"), this._menuOpened = !1, this + ._menuPosition = null, this._source = e, this._model = t, this._options = s, + this._recreateWidgets(), this._addSubscriptionForSymbolInvalid(), null !== this + ._dataSourceHasErrorVisible && (this._dataSourceHasErrorVisible.subscribe(this + ._updateStatusWidgetsVisibilities.bind(this)), this + ._dataSourceHasErrorVisible.subscribe(this._updateErrorWidgetIsShown.bind( + this))), this._options.dataProblemEnabled && null !== this + ._isDataProblemCritical && this._isDataProblemCritical.subscribe(this + ._updateStatusWidgetsVisibilities.bind(this)); + for (const e of this._tooltipSpawns) e.subscribe(this._updateTooltips.bind(this)); + for (const e of this._visibilitySpawns) e.subscribe(this._updateVisibleWidgetsCount + .bind(this)), e.subscribe(this._updateTooltips.bind(this)); + this._updateErrorWidgetIsShown(), this._updateStatusWidgetsVisibilities(), this + ._updateVisibleWidgetsCount(), this._updateTooltips() + } + destroy() { + var e; + this._source.properties().hasChild("symbol") && this._source.properties().symbol + .listeners().unsubscribeAll(this), this._options.sourceStatusesEnabled && + null !== this._isSymbolInvalid && this._isSymbolInvalid.destroy(), null === (e = + this._isDataProblemCritical) || void 0 === e || e.destroy(); + for (const e of this._tooltipSpawns) e.destroy(); + for (const e of this._visibilitySpawns) e.destroy(); + this.visibleWidgetsCount.unsubscribe(); + for (const e of this._statusWidgetInfos) e.model.destroy(); + this._renderer.destroy() + } + getElement() { + return this._renderer.element + } + updateSource(e) { + this._source !== e && (this._source.properties().hasChild("symbol") && this._source + .properties().symbol.listeners().unsubscribeAll(this), this._source = e, + this._recreateWidgets(), this._updateStatusWidgetsVisibilities(), this + ._updateErrorWidgetIsShown(), this._updateVisibleWidgetsCount(), this + ._updateTooltips()) + } + _updateStatusWidgetsVisibilities() { + const e = this._isForceStatusActive(); + this._dataSourceErrorCanBeShown.setValue(!e), this._marketStatusCanBeShown.setValue( + !e), this._dataUpdatedModeCanBeShown.setValue(!e), this + ._dataProblemCanBeShown.setValue(!this._isPrimaryWidgetShown()) + } + _isPrimaryWidgetShown() { + var e, t; + return null !== (t = null === (e = this._isSymbolInvalid) || void 0 === e ? void 0 : + e.value()) && void 0 !== t && t + } + _isForceStatusActive() { + var e, t; + return this._isPrimaryWidgetShown() || null !== (t = null === (e = this + ._isDataProblemCritical) || void 0 === e ? void 0 : e.value()) && void 0 !== + t && t + } + _updateVisibleWidgetsCount() { + const e = this._statusWidgetInfos.filter(e => e.visible.value()); + this.visibleWidgetsCount.setValue(e.length) + } + _updateTooltips() { + const e = []; + for (let t = 0; t < this._tooltipSpawns.length; t++) { + if (!this._visibilitySpawns[t].value()) continue; + const s = this._tooltipSpawns[t].value(); + null !== s && s.length > 0 && e.push(s) + } + this._tooltips.setValue(e) + } + _recreateWidgets() { + var e, t; + if (this._options.sourceStatusesEnabled) { + if (Object(de.isStudy)(this._source) || Object(de.isStudyStub)(this._source) || + this._source === this._model.mainSeries()) { + null === (e = this._isSymbolInvalid) || void 0 === e || e.destroy(); + const t = this._source; + if (Object(de.isStudy)(t) || Object(de.isStudyStub)(t) ? this + ._isSymbolInvalid = kt(() => t.isSymbolInvalid() && t + .isActualInterval(), [t.onStatusChanged(), t.onIsActualIntervalChange()] + ) : this._isSymbolInvalid = Object(Re.a)(() => t.isSymbolInvalid(), + t.onStatusChanged()), null === this._symbolInvalidViewModel) { + this._symbolInvalidViewModel = new ks(this._isSymbolInvalid, { + tooltipMap: As, + iconMap: Ls, + classNameMap: Os, + titleMap: Ds, + titleColorMap: Hs, + htmlMap: Bs, + actionMap: Ps, + size: this._size + }); + const e = this._symbolInvalidViewModel.visible().spawn(); + this._visibilitySpawns.push(e), this._tooltipSpawns.push(this + ._symbolInvalidViewModel.tooltip().spawn()); + const t = { + visible: e, + model: this._symbolInvalidViewModel + }; + this._statusWidgetInfos.push(t), this._renderer.addStatusModel(t) + } else this._symbolInvalidViewModel.updateStatus(this._isSymbolInvalid), + this._addSubscriptionForSymbolInvalid() + } + if (Object(de.isStudy)(this._source) || Object(de.isStudyStub)(this._source) || + this._source === this._model.mainSeries()) { + const e = this._source; + let t = []; + if (t = Object(de.isStudy)(e) || Object(de.isStudyStub)(e) ? [e + .onStatusChanged(), e.onIsActualIntervalChange() + ] : [e.onStatusChanged()], null === this + ._dataSourceErrorStatusViewModel) { + this._dataSourceErrorStatusViewModel = new vs(e, t, this._size, this + ._options.sourceStatuses), this._dataSourceHasErrorVisible = + Object(Z.a)(() => this._dataSourceErrorCanBeShown.value() && Object( + i.ensureNotNull)(this._dataSourceErrorStatusViewModel) + .visible().value(), this._dataSourceErrorCanBeShown, this + ._dataSourceErrorStatusViewModel.visible()), + this._visibilitySpawns.push(this._dataSourceHasErrorVisible), this + ._tooltipSpawns.push(this._dataSourceErrorStatusViewModel.tooltip() + .spawn()); + const s = { + visible: this._dataSourceHasErrorVisible, + model: this._dataSourceErrorStatusViewModel + }; + this._statusWidgetInfos.push(s), this._renderer.addStatusModel(s) + } else this._dataSourceErrorStatusViewModel.setSource(e, t) + } + } + if (this._options.marketStatusEnabled) { + const e = this._source.marketStatusModel(); + if (null === this._marketStatusViewModel) { + this._marketStatusViewModel = new ci(e, this._size, this._options + .marketStatus); + const t = Object(Z.a)(() => this._marketStatusCanBeShown.value() && Object(i + .ensureNotNull)(this._marketStatusViewModel).visible().value(), + this._marketStatusCanBeShown, this._marketStatusViewModel.visible()); + this._visibilitySpawns.push(t), this._tooltipSpawns.push(this + ._marketStatusViewModel.tooltip().spawn()); + const s = { + visible: t, + model: this._marketStatusViewModel + }; + null !== e && (this._sessionWidget = new ft(this._source), s + .additionalWidgets = [this._sessionWidget]), this._statusWidgetInfos + .push(s), this._renderer.addStatusModel(s) + } else this._marketStatusViewModel.setModel(e), null === (t = this + ._sessionWidget) || void 0 === t || t.updateSource(this._source) + } + if (this._options.dataUpdateModeEnabled) { + const e = this._source.dataUpdatedModeModel(); + if (null === this._dataUpdatedModeViewModel) { + this._dataUpdatedModeViewModel = new hs(e, this._size, this._options + .dataUpdateMode); + const t = Object(Z.a)(() => this._dataUpdatedModeCanBeShown.value() && + Object(i.ensureNotNull)(this._dataUpdatedModeViewModel).visible() + .value(), this._dataUpdatedModeCanBeShown, this + ._dataUpdatedModeViewModel.visible()); + this._visibilitySpawns.push(t), this._tooltipSpawns.push(this + ._dataUpdatedModeViewModel.tooltip().spawn()); + const s = { + visible: t, + model: this._dataUpdatedModeViewModel + }; + this._statusWidgetInfos.push(s), this._renderer.addStatusModel(s) + } else this._dataUpdatedModeViewModel.setModel(e) + } + if (this._options.dataProblemEnabled) { + const e = this._source.dataProblemModel(); + if (null === this._dataProblemViewModel) { + this._dataProblemViewModel = new Cs(e, this._size), this + ._isDataProblemCritical = this._dataProblemViewModel + .isDataProblemCritical().spawn(); + const t = Object(Z.a)(() => this._dataProblemCanBeShown.value() && Object(i + .ensureNotNull)(this._dataProblemViewModel).visible().value(), + this._dataProblemCanBeShown, this._dataProblemViewModel.visible()); + this._visibilitySpawns.push(t), this._tooltipSpawns.push(this + ._dataProblemViewModel.tooltip().spawn()); + const s = { + visible: t, + model: this._dataProblemViewModel + }; + this._statusWidgetInfos.push(s), this._renderer.addStatusModel(s) + } else this._dataProblemViewModel.setModel(e) + } + } + _addSubscriptionForSymbolInvalid() { + this._options.sourceStatusesEnabled && null !== this._isSymbolInvalid && (this + ._isSymbolInvalid.subscribe(this._updateStatusWidgetsVisibilities.bind( + this)), this._isSymbolInvalid.subscribe(this._updateErrorWidgetIsShown + .bind(this), { + callWithLast: !0 + })) + } + _updateErrorWidgetIsShown() { + var e, t, s, i; + const o = null !== (t = null === (e = this._isSymbolInvalid) || void 0 === e ? + void 0 : e.value()) && void 0 !== t && t, + l = null !== (i = null === (s = this._dataSourceHasErrorVisible) || void 0 === + s ? void 0 : s.value()) && void 0 !== i && i; + this.errorWidgetIsShown.setValue(o || l) + } + _handleToggleDropdown(e) { + var t; + this._menuPosition = e, this._menuOpened = !this._menuOpened, this._menuOpened && ( + this._source.properties().hasChild("symbol") && this._source.properties() + .symbol.listeners().subscribe(this, this._handleDropdownMenuClose), t = + "Open full tooltip for statuses: " + this._tooltips.value().join(", "), + Object(V.trackEvent)("GUI", "Statuses widget's action", t)), this + ._updateDropdownMenu() + } + _handleDropdownMenuClose() { + this._menuOpened = !1, this._source.properties().hasChild("symbol") && this._source + .properties().symbol.listeners().unsubscribeAll(this), this + ._updateDropdownMenu() + } + _updateDropdownMenu() { + Promise.all([s.e("react"), s.e(6), s.e(11), s.e(92), s.e(0), s.e(5), s.e( + "full-tooltips-popup")]).then(s.bind(null, "vR7+")).then(e => { + e.render(this._menuOpened, this._container, this._renderer.element, this + ._statusWidgetInfos, this._handleDropdownMenuClose.bind(this), + Object(i.ensureNotNull)(this._menuPosition)) + }) + } + } + var pi = s("AH3n"); + const mi = window.t("Replay mode"), + bi = window.t("You're in Replay mode. You're in Replay mode. You're in Replay mode."); + new Map([ + [!0, new Map([ + ["small", pi], + ["large", pi] + ])], + [!1, new Map([ + ["small", ""], + ["large", ""] + ])] + ]), new Map([ + [!0, Vt.replayMode], + [!1, null] + ]), new Map([ + [!0, mi], + [!1, null] + ]), new Map([ + [!0, mi], + [!1, null] + ]), new Map([ + [!0, Et.colorsPalette["color-replay-mode"]], + [!1, null] + ]), new Map([ + [!0, [bi]], + [!1, null] + ]), new Map([ + [!0, null], + [!1, null] + ]); + class gi extends _i { + constructor(e, t, s) { + super(e, t, s), this._isInReplay = new l.a(!1).readonly().spawn(), this + ._isInReplayCanBeShown = null, this._inited = !1 + } + destroy() { + super.destroy() + } + _updateStatusWidgetsVisibilities() { + super._updateStatusWidgetsVisibilities() + } + _isPrimaryWidgetShown() { + var e, t; + return super._isPrimaryWidgetShown() || null !== (t = null === (e = this + ._isInReplay) || void 0 === e ? void 0 : e.value()) && void 0 !== t && t + } + } + var wi = s("EsvI"), + vi = s("UXvI"); + s.d(t, "LegendWidget", (function() { + return Ei + })); + const yi = { + readOnlyMode: !1, + contextMenu: { + settings: !0, + mainSeries: !0, + studies: !0, + showOpenMarketStatus: !1 + }, + symbolMarkerEnabled: !1, + showToggleButton: !0, + canShowSourceCode: !1, + statusesWidgets: { + sourceStatusesEnabled: !1, + sourceStatuses: { + errorSolution: !0 + }, + marketStatusEnabled: !1, + marketStatus: { + preMarketSolution: !0, + postMarketSolution: !0 + }, + dataUpdateModeEnabled: !1, + dataUpdateMode: { + subscriptionFullInfo: !0 + }, + dataProblemEnabled: !1 + } + }, + Si = (d.enabled("hide_legend_by_default"), d.enabled("fundamental_widget")), + Mi = d.enabled("legend_context_menu"), + fi = 2 * parseInt(y.marginlegendhoriz); + class Ei { + constructor(e, t, s, i, o, a, r) { + this._mainSeriesViewModel = null, this._dataSourceViewModels = [], this + ._visibleDataSourceCount = new l.a(0), this._themedColor = new l.a(""), this + ._mainSeriesRowHidden = null, this._dataSourceRowsHidden = [], this + ._customWidgetsVisibilities = [], this._allLegendHidden = new l.a(!1), this + ._studiesLegendHidden = new l.a(!1), this._customWidgetsHeights = [], this + ._onLegendVisibilityToggled = null, this._availableHeight = 0, + this._collapsedDataSourcesCount = new l.a(0), this._collapsedDataSourcesTitle = + new l.a(""), this._mainSeriesStatusWidget = null, this + ._dataSourcesStatusesWidgets = [], this._size = null, this + ._customLegendWidgetsFactoriesMap = new Map, this._customLegendWidgetsMap = + new Map, this._margin = 0, this._model = e, this._paneWidget = t, this + ._options = Object(n.merge)(Object(n.clone)(yi), a), this._callbacks = r, this + ._mainSeriesViewModelsOptions = { + readOnlyMode: this._options.readOnlyMode, + symbolMarkerEnabled: this._options.symbolMarkerEnabled + }, this._dataSourceViewModelsOptions = { + ...this._mainSeriesViewModelsOptions, + canShowSourceCode: this._options.canShowSourceCode + }, this._backgroundThemeName = s; + const d = this._showLegendCalculatedProperty(); + this._isDataSourcesCollapsed = new l.a(d.value()), d.subscribe(this, () => { + this._isDataSourcesCollapsed.setValue(d.value()) + }); + const h = new l.a(this._getCustomTextColorValue()); + this._model.model().properties().scalesProperties.textColor.subscribe(this, () => { + h.setValue(this._getCustomTextColorValue()) + }); + const u = this._model.model().properties().paneProperties.legendProperties + .showBackground, + c = new l.a(u.value()); + u.subscribe(this, () => { + c.setValue(u.value()) + }); + const _ = this._model.model().properties().paneProperties.legendProperties + .backgroundTransparency, + p = new l.a(_.value()); + _.subscribe(this, () => { + p.setValue(_.value()) + }), this._wrapText = new l.a(!1), this._hideNotMainSources = i.spawn(), this + ._hideNotMainSources.subscribe(this._updateLegendVisibilities.bind(this)), this + ._hideWholeLegend = o.spawn(), this._hideWholeLegend.subscribe(this + ._updateLegendVisibilities.bind(this)), this._isPaneMain = new l.a(this + ._getIsPaneMainValue()), this._updateCollapsedSourcesModeThrottle = Object( + vi.default)(this._updateCollapsedSourcesMode.bind(this), 100), this + ._renderer = new R({ + withActions: !this._options.readOnlyMode, + showToggleButton: this._options.showToggleButton, + isStudiesLegendHidden: this._studiesLegendHidden.readonly(), + isAllLegendHidden: this._allLegendHidden.readonly(), + customTextColor: h.readonly(), + themedColor: this._themedColor.readonly(), + showBackground: c.readonly(), + backgroundTransparency: p.readonly(), + wrapText: this._wrapText.readonly(), + collapsedDataSourcesCount: this._collapsedDataSourcesCount.readonly(), + collapsedDataSourcesTitle: this._collapsedDataSourcesTitle.readonly(), + showLegendWidgetContextMenu: this.onShowLegendWidgetContextMenu.bind( + this) + }, { + visibleDataSourceCount: this._visibleDataSourceCount.readonly(), + isDataSourcesCollapsed: this._isDataSourcesCollapsed.readonly(), + showObjectsTree: this._isPaneMain.readonly(), + onCollapseDataSources: this.onCollapseDataSources.bind(this), + onShowObjectsTreeDialog: this._callbacks.showObjectsTreeDialog + }) + } + destroy() { + this._hideNotMainSources.destroy(), this._hideWholeLegend.destroy(), null !== this + ._mainSeriesViewModel && this._destroyMainDataSource(); + for (const e of this._dataSourceViewModels) e.destroy(); + for (const e of this._dataSourcesStatusesWidgets) e.destroy(); + this._clearSubscriptions(); + for (const e of Array.from(this._customLegendWidgetsMap.keys())) this + ._destroyCustomWidgetFromLayerBlock(e); + this._customLegendWidgetsMap.clear(), this._renderer.destroy(), + delete this._renderer, this._showLegendCalculatedProperty().unsubscribeAll( + this), this._showLegendOriginalProperty().unsubscribeAll(this), this._model + .model().properties().scalesProperties.textColor.unsubscribeAll(this), this + ._model.model().properties().paneProperties.legendProperties.showBackground + .unsubscribeAll(this), this._model.model().properties().paneProperties + .legendProperties.backgroundTransparency.unsubscribeAll(this) + } + addCustomWidgetToLegend(e, t) { + const s = this._customLegendWidgetsFactoriesMap.get(t.block) || new Map, + i = s.get(t.position) || []; + i.push(e), s.set(t.position, i), this._customLegendWidgetsFactoriesMap.set(t.block, + s), this.updateLayout(), this._updateCustomWidgetModeBySize() + } + onShowLegendWidgetContextMenu(e, t) { + if (this._options.readOnlyMode || !Mi) return Promise.resolve(null); + x("Show legend context menu"); + const s = new Map; + for (const e of Array.from(this._customLegendWidgetsMap.keys())) { + const t = Object(i.ensureDefined)(this._customLegendWidgetsMap.get(e)), + o = new Map; + for (const e of Array.from(t.keys())) { + const s = Object(i.ensureDefined)(t.get(e)), + l = o.get(e) || []; + for (const e of s) l.push(...e.contextMenuActions()); + o.set(e, l) + } + s.set(e, o) + } + return De(this._model, this._options.contextMenu, this._callbacks + .showGeneralChartProperties, s, e, t) + } + onCollapseDataSources() { + const e = this._showLegendOriginalProperty(); + e.setValue(!e.value()) + } + updateLayout() { + const e = this._paneWidget.state().sourcesByGroup().all().filter(e => null !== e + .statusView()); + if (0 === e.length) return; + const t = this._model.mainSeries(), + s = e.indexOf(t); + s > -1 ? (e.splice(s, 1), Si || null !== this._mainSeriesViewModel || (this + ._mainSeriesViewModel = new re(this._model, t, this + ._mainSeriesViewModelsOptions, this._callbacks, this._options + .contextMenu), this._mainSeriesStatusWidget = new gi(t, this._model + .model(), this._options.statusesWidgets), this._renderer + .addMainDataSource(this._mainSeriesViewModel, this + ._mainSeriesStatusWidget)), this._addCustomWidgetForLayerBlock(0)) : + null !== this._mainSeriesViewModel && (this._destroyMainDataSource(), this + ._destroyCustomWidgetFromLayerBlock(0)); + const o = [], + l = [], + n = this._dataSourceViewModels.length; + if (0 === n) + for (let t = e.length - 1; t >= 0; t--) o.push(new Ve(this._model, e[t], this + ._dataSourceViewModelsOptions, this._callbacks, this._options + .contextMenu)), l.push(new _i(e[t], this._model.model(), this._options + .statusesWidgets)); + else { + let t = 0; + for (let s = e.length - 1; s >= 0; s--) this._dataSourceViewModels[t] ? (this + ._dataSourceViewModels[t].updateSource(e[s]), this + ._dataSourcesStatusesWidgets[t].updateSource(e[s])) : (o.push(new Ve( + this._model, e[s], this._dataSourceViewModelsOptions, this + ._callbacks, this._options.contextMenu)), l.push(new _i(e[s], this + ._model.model(), this._options.statusesWidgets))), t++; + for (; this._dataSourceViewModels.length > t;) Object(i.ensureDefined)(this + ._dataSourceViewModels.pop()).destroy(); + for (; this._dataSourcesStatusesWidgets.length > t;) Object(i.ensureDefined)( + this._dataSourcesStatusesWidgets.pop()).destroy() + } + 0 !== o.length && (this._renderer.addDataSources(o, l), this._dataSourceViewModels + .push(...o), this._dataSourcesStatusesWidgets.push(...l)), + n !== this._dataSourceViewModels.length && this._updateCollapsedSourcesMode(), + this._dataSourceViewModels.length > 0 ? this._addCustomWidgetForLayerBlock(1) : + this._destroyCustomWidgetFromLayerBlock(1), this._recreateSubscriptions(), this + ._isPaneMain.setValue(this._getIsPaneMainValue()), this.update(), this + ._updateWidgetModeByWidth() + } + update() { + null !== this._mainSeriesViewModel && this._mainSeriesViewModel.update(); + for (const e of this._dataSourceViewModels) e.update() + } + updateThemedColors(e) { + null === e && (e = Object(wi.getStdThemedValue)( + "chartProperties.paneProperties.background", this._backgroundThemeName + .value())), this._themedColor.setValue(e || "") + } + firstTitle() { + return this._renderer.firstTitle() + } + getElement() { + return this._renderer.getElement() + } + addMargin(e) { + if (this._margin === e) return; + this._margin = e; + this._renderer.getElement().style.maxWidth = 0 === this._margin ? "" : + `calc(100% - ${this._margin+fi}px)`, this._updateWidgetModeBySize() + } + updateWidgetModeBySize(e) { + this._size = e, this._updateWidgetModeBySize() + } + _updateWidgetModeBySize() { + this._updateWidgetModeByWidth(), this._updateWidgetModeByHeight(), this + ._updateCustomWidgetModeBySize() + } + _updateWidgetModeByWidth() { + null !== this._size && this._renderer.updateMode(this._availableWidth()) + } + _updateWidgetModeByHeight() { + null !== this._size && (this._availableHeight = .8 * this._size.h, this + ._updateCollapsedSourcesModeThrottle()) + } + _updateCustomWidgetModeBySize() { + if (null === this._size) return; + const e = new a.Size(this._availableWidth(), this._size.h); + for (const t of Array.from(this._customLegendWidgetsMap.values())) + for (const s of Array.from(t.values())) + for (const t of s) t.updateWidgetModeBySize(e) + } + _destroyMainDataSource() { + Object(i.ensureNotNull)(this._mainSeriesStatusWidget).destroy(), this + ._mainSeriesStatusWidget = null, Object(i.ensureNotNull)(this + ._mainSeriesViewModel).destroy(), this._mainSeriesViewModel = null + } + _updateCollapsedSourcesMode() { + const e = this._dataSourceViewModels.length; + if (!this._wrapText.value() && this._availableHeight > 0 && e > 2) { + const t = this._renderer.getMainSourceHeight(), + s = this._renderer.getDataSourceHeight(), + i = this._getCustomWidgetsHeight(); + if (null !== t && null !== s) { + const o = Math.floor((this._availableHeight - t - i) / s), + l = Math.max(o, 2) - 1; + if (e > l + 1) { + let t = ""; + for (let s = 0; s < e; s++) { + const e = s < l; + this._dataSourceViewModels[s].setGlobalVisibility(e), e || (t += + `${0===t.length?"":", "}${this._dataSourceViewModels[s].getFullTitle()}` + ) + } + return this._collapsedDataSourcesTitle.setValue(t), void this + ._collapsedDataSourcesCount.setValue(e - l) + } + } + } + for (const e of this._dataSourceViewModels) e.setGlobalVisibility(!0); + this._collapsedDataSourcesCount.setValue(0), this._collapsedDataSourcesTitle + .setValue("") + } + _getCustomWidgetsHeight() { + let e = 0; + for (const t of Array.from(this._customLegendWidgetsMap.values())) + for (const s of Array.from(t.values())) + for (const t of s) e += t.height().value(); + return e + } + _getCustomTextColorValue() { + const e = this._model.model().properties().scalesProperties.textColor.value(); + return Object(wi.isStdThemedDefaultValue)( + "chartProperties.scalesProperties.textColor", e, Object(wi.getCurrentTheme) + ().name) ? null : e + } + _clearSubscriptions() { + null !== this._mainSeriesRowHidden && (this._mainSeriesRowHidden.destroy(), this + ._mainSeriesRowHidden = null); + for (const e of this._dataSourceRowsHidden) e.destroy(); + this._dataSourceRowsHidden = []; + for (const e of this._customWidgetsVisibilities) e.destroy(); + this._customWidgetsVisibilities = []; + for (const e of this._customWidgetsHeights) e.destroy(); + this._customWidgetsHeights = [] + } + _recreateSubscriptions() { + this._clearSubscriptions(), null !== this._mainSeriesViewModel && (this + ._mainSeriesRowHidden = this._mainSeriesViewModel.isRowHidden().spawn(), + this._mainSeriesRowHidden.subscribe(this._updateLegendVisibilities.bind( + this))); + for (const e of this._dataSourceViewModels) { + const t = e.isRowHidden().spawn(); + this._dataSourceRowsHidden.push(t), t.subscribe(this + ._updateVisibleDataSourceCount.bind(this)), t.subscribe(this + ._updateLegendVisibilities.bind(this)) + } + for (const e of Array.from(this._customLegendWidgetsMap.values())) + for (const t of Array.from(e.values())) + for (const e of t) { + const t = e.visibility().spawn(); + this._customWidgetsVisibilities.push(t), t.subscribe(this + ._updateLegendVisibilities.bind(this)); + const s = e.height().spawn(); + this._customWidgetsHeights.push(s), s.subscribe(this + ._updateCollapsedSourcesMode.bind(this)) + } + this._updateVisibleDataSourceCount(), this._updateLegendVisibilities() + } + _updateLegendVisibilities() { + if (this._hideWholeLegend.value()) return void this._allLegendHidden.setValue(!0); + const e = this._dataSourceRowsHidden.every(e => e.value()), + t = this._hideNotMainSources.value() || e; + this._studiesLegendHidden.setValue(t); + const s = null === this._mainSeriesRowHidden || this._mainSeriesRowHidden.value(), + i = this._customWidgetsVisibilities.some(e => e.value()); + this._allLegendHidden.setValue(e && s && !i) + } + _updateVisibleDataSourceCount() { + const e = this._dataSourceRowsHidden.filter(e => !e.value()).length; + this._visibleDataSourceCount.setValue(e) + } + _setLegendVisibilityToggled() { + 0 + } + _getIsPaneMainValue() { + return this._paneWidget.containsMainSeries() + } + _showLegendCalculatedProperty() { + return this._model.model().showLegend() + } + _showLegendOriginalProperty() { + return this._model.model().properties().paneProperties.legendProperties.showLegend + } + _addCustomWidgetForLayerBlock(e) { + const t = this._customLegendWidgetsFactoriesMap.get(e); + if (void 0 === t) return; + const s = this._customLegendWidgetsMap.get(e) || new Map; + let i = !1; + for (const o of Array.from(t.keys())) { + const l = s.get(o) || [], + n = t.get(o) || []; + for (let t = l.length; t < n.length; t++) { + const s = n[t](this._model.model(), this._backgroundThemeName); + 0 === e && 0 === o && s.setGlobalVisibility(this._hideNotMainSources + .opposite()), l.push(s), this._renderer.addCustomWidget(s, { + block: e, + position: o + }), i = !0 + } + i && s.set(o, l) + } + i && this._customLegendWidgetsMap.set(e, s) + } + _destroyCustomWidgetFromLayerBlock(e) { + const t = this._customLegendWidgetsMap.get(e); + if (void 0 !== t) { + for (const e of Array.from(t.values())) + for (const t of e) t.destroy(); + t.clear(), this._customLegendWidgetsMap.delete(e) + } + } + _availableWidth() { + return null === this._size ? 0 : this._size.w - this._margin - fi + } + } + }, + tfDh: function(e, t, s) { + e.exports = { + wrapper: "wrapper-2-RXze0M", + timezone: "timezone-2-RXze0M", + sessionDayWrapper: "sessionDayWrapper-2-RXze0M", + nowWrapper: "nowWrapper-2-RXze0M", + now: "now-2-RXze0M", + sessionDay: "sessionDay-2-RXze0M", + weekDay: "weekDay-2-RXze0M", + sessionDaySegments: "sessionDaySegments-2-RXze0M", + timeMarkWrapper: "timeMarkWrapper-2-RXze0M", + timeMarkSegment: "timeMarkSegment-2-RXze0M", + timeMark: "timeMark-2-RXze0M", + timeMarkSegmentAlignByEnds: "timeMarkSegmentAlignByEnds-2-RXze0M", + segment: "segment-2-RXze0M", + small: "small-2-RXze0M", + start: "start-2-RXze0M", + end: "end-2-RXze0M", + active: "active-2-RXze0M", + green: "green-2-RXze0M", + orange: "orange-2-RXze0M", + blue: "blue-2-RXze0M", + gray: "gray-2-RXze0M", + tooltip: "tooltip-2-RXze0M", + time: "time-2-RXze0M" + } + }, + vWJB: function(e, t) { + e.exports = + '' + }, + vYP1: function(e, t) { + e.exports = + '' + }, + vg09: function(e, t) { + e.exports = + '' + }, + vqb8: function(e, t, s) { + "use strict"; + s.d(t, "a", (function() { + return o + })); + var i = s("q1tI"); + const o = e => { + const t = "watchedValue" in e ? e.watchedValue : void 0, + s = "defaultValue" in e ? e.defaultValue : e.watchedValue.value(), + [o, l] = Object(i.useState)(t ? t.value() : s); + return Object(i.useEffect)(() => { + if (t) { + l(t.value()); + const e = e => l(e); + return t.subscribe(e), () => t.unsubscribe(e) + } + return () => {} + }, [t]), o + } + }, + wZiV: function(e, t) { + e.exports = + '' + }, + z4c1: function(e, t) { + e.exports = + '' + } + } +]); diff --git a/static/charting_library/bundles/compare-model.0e6bbdc5f5942c9a716e.js b/static/charting_library/bundles/compare-model.0e6bbdc5f5942c9a716e.js new file mode 100644 index 0000000..e009679 --- /dev/null +++ b/static/charting_library/bundles/compare-model.0e6bbdc5f5942c9a716e.js @@ -0,0 +1,5 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["compare-model"],{"1pWb":function(e,t,s){"use strict";function o(e){return!1}s.d(t,"b",(function(){return o})),s.d(t,"a",(function(){return"###"}))},TgrR:function(e,t,s){"use strict";function o(e){if(e.fullName)return e.fullName;let t;return t=e.prefix||e.exchange?(e.prefix||e.exchange)+":"+e.name:e.name,t.replace(/<\/?[^>]+(>|$)/g,"")}function n(e){return""===e.value}function i(){const e=a();return e.find(n)||e[0]||null}function r(){return a()}function a(){return window.ChartApiInstance.supportedExchangesList().map(e=>({...e,country:"",providerId:"",flag:""}))}function c(){return window.ChartApiInstance.supportedSymbolsTypes()}function l(){return""}function d(){return!1}s.d(t,"f",(function(){return o})),s.d(t,"g",(function(){return n})),s.d(t,"e",(function(){return i})),s.d(t,"c",(function(){return r})),s.d(t,"d",(function(){return c})),s.d(t,"b",(function(){return l})),s.d(t,"a",(function(){return d}))},cK0E:function(e,t,s){"use strict";s.r(t);var o=s("Eyy1"),n=s("Kxc7"),i=s("jy4L"),r=s("5fI3"),a=s("hY0g"),c=s.n(a),l=s("xlAh"),d=s("cKqi"),h=s("YzC7"),u=s("qC62"),m=s("TgrR");new Set(["short_name","description","exchange","type","country_code","provider_id"]);const b=Object(m.c)(),y={};for(const e of b)y[e.value]={country:e.country,providerId:e.providerId};function S(e){return e instanceof d.study_Overlay||e instanceof h.a}function _(e){if(!e)return;const[t,s]=e.split(":");return s&&t&&y[t]?y[t]:void 0}function f(e,t,s){const o=u.a.fromSymbolInfo(e),n=_(o);return{id:(null==s?void 0:s.id())||o,symbol:o,checked:t,title:e.name,description:e.description,exchangeName:e.exchange,country:null==n?void 0:n.country,providerId:null==n?void 0:n.providerId,marketType:e.type,study:s}}function p(e,t,s,o){return{id:void 0!==s?s.id():e,symbol:e,checked:t,title:e,study:s,description:o}}var g=s("Vdly"),v=s("IWXC"),I=s("1pWb");const w=new Map;class k{constructor(e,t,s="watchlist"){this._symbolDataHandlers=new Map,this._fastSymbols=new Set,this._subscribedSymbols=new Set,this._subscriptionSet=new Set,this._cancelSubscriptionSet=new Set,this._resolvedSymbolsSet=new Set,this._quoteSessionDataHandler=e=>{const t=Object(o.ensureDefined)(e.symbolname),{filtered:s,keepSubscription:n}=this._applyDataFilters(e);n||this._unsubscribeSymbols([t]),this._setSymbolDataCache(t,s);const i=this._symbolDataHandlers.get(t);i&&i(s)},this._clientId=e,this._quoteSession=Object(v.getQuoteSessionInstance)(s),this._lastSymbolData=t||new Map}destroy(){const e=Array.from(this._subscribedSymbols);this._unsubscribeSymbols(e)}addFastSymbol(e){this._fastSymbols.has(e)||!this._subscribedSymbols.has(e)||Object(I.b)(e)||(this._fastSymbols.add(e),this._quoteSession.setFastSymbols(this._clientId,Array.from(this._fastSymbols)))}removeFastSymbol(e){this._fastSymbols.has(e)&&(this._fastSymbols.delete(e),this._quoteSession.setFastSymbols(this._clientId,Array.from(this._fastSymbols)))}addSymbolDataHandler(e,t){Object(I.b)(e)||this._symbolDataHandlers.set(e,t)}removeSymbolDataHandler(e){this._symbolDataHandlers.delete(e)} +addToSubscriptionSet(e){e.forEach(e=>{Object(I.b)(e)||this._subscriptionSet.add(e)})}clearSubscriptionSet(){this._subscriptionSet.clear()}addToCancelSubscriptionSet(e){e.forEach(e=>{Object(I.b)(e)||this._cancelSubscriptionSet.add(e)})}commitSubscriptionChanges(){Array.from(this._subscriptionSet).forEach(e=>{this._cancelSubscriptionSet.has(e)&&(this._subscriptionSet.delete(e),this._cancelSubscriptionSet.delete(e))}),this._subscribeSymbols(Array.from(this._subscriptionSet)),this._subscriptionSet.clear(),this._unsubscribeSymbols(Array.from(this._cancelSubscriptionSet)),this._cancelSubscriptionSet.clear(),this._quoteSession.setFastSymbols(this._clientId,Array.from(this._fastSymbols))}getLastSymbolData(e){return this._lastSymbolData.get(e)}getSymbolSnapshotForAll(e,t,s=guid()){const o=e.map(e=>this.getSymbolSnapshot(e,t,s));return Promise.all(o)}getSymbolSnapshot(e,t,s=guid()){if(Object(I.b)(e))return Promise.resolve(void 0);const o=this._lastSymbolData.get(e);if(o&&"ok"===o.status){const s=this._resolvedSymbolsSet.has(e)&&o.complete;if(C(o,t)||s)return this._resolvedSymbolsSet.add(e),Promise.resolve(o)}return new Promise(o=>{const n=this._clientId+"_snapshot_"+s,i=s=>{const{filtered:r,keepSubscription:a}=this._applyDataFilters(s);r&&"error"!==r.status&&this._setSymbolDataCache(e,r),(!a||C(r,t)||"error"===r.status||r.complete)&&(this._quoteSession.unsubscribe(n,e,i),o(r))};this._quoteSession.subscribe(n,e,i)})}getSymbolFullName(e){if(Object(I.b)(e))return Promise.resolve(e);if(w.has(e))return Object(o.ensureDefined)(w.get(e));const t=new Promise(t=>{const s=this._clientId+"_SymbolFullName",o=n=>{const i=n=>{this._quoteSession.unsubscribe(s,e,o),t(n)};n&&"ok"===n.status?n.values&&i(n.values.pro_name||e):i(e)};this._quoteSession.subscribe(s,e,o)});return w.set(e,t),t}getSymbolsFullNames(e){return Promise.all(e.map(e=>this.getSymbolFullName(e)))}getUniqueSymbolsFullNames(e){return this.getSymbolsFullNames(e).then(e=>Array.from(new Set(e)))}_subscribeSymbols(e){this._quoteSession.subscribe(this._clientId,e,this._quoteSessionDataHandler),e.forEach(e=>this._subscribedSymbols.add(e))}_unsubscribeSymbols(e){this._quoteSession.unsubscribe(this._clientId,e,this._quoteSessionDataHandler),e.forEach(e=>{this._subscribedSymbols.delete(e)})}_setSymbolDataCache(e,t){var s;const o=(null===(s=this._lastSymbolData.get(e))||void 0===s?void 0:s.values)||{};this._resolvedSymbolsSet.add(e),this._lastSymbolData.set(e,{...t,values:{...o,...t.values}})}_applyDataFilters(e){return{filtered:e,keepSubscription:!0}}}const D=new class{constructor(){this._adaptersMap=new Map,this._lastSymbolData=new Map}destroy(){this._adaptersMap.forEach(e=>{e.forEach(e=>e.destroy())}),this._lastSymbolData.clear()}get(e,t="watchlist"){let s;const o=this._adaptersMap.get(e);if(o){const n=o.get(t);n?s=n:(s=new k(e,this._lastSymbolData,t),o.set(t,s))}else{s=new k(e,this._lastSymbolData,t);const o=new Map;o.set(t,s),this._adaptersMap.set(e,o)}return s}};function C(e,t){for(const s of Array.from(t))if(!e.values.hasOwnProperty(s))return!1;return!0} +s.d(t,"CompareModel",(function(){return O}));class O{constructor(e){this._contentItemList=new c.a([]),this._checkedSymbols=new Map,this._recentLength=10,this._adapter=D.get("compare-dialog-adapter"),this._isDataReady=new c.a(!1),this._highlightedSymbol=new c.a(null),this._defaultSymbolsDescriptions=new Map,this._idToStudyMap=new Map,this._chartSession=null,this._recentSymbolsEnabled=n.enabled("compare_recent_symbols_enabled"),this._preventHandleSourcesChange=!0,this.removeStudy=e=>{const{symbol:t,study:s}=e;if(!s)return;this._chartWidget.model().removeSource(s,!1);const o=this._checkedSymbols.get(t);o&&o.length>1?this._removeStudyIdFromCheckedSymbols(t,s.id()):this._checkedSymbols.delete(t),this._updateContentItemList(this._contentItemList.value(),!0)},this._getResolveSymbolPromise=(e,t=Object(i.makeNextSymbolId)())=>{const s=Object(r.encodeExtendedSymbolOrGetSimpleSymbolString)({symbol:e});return new Promise(e=>{Object(o.ensureNotNull)(this._chartSession).resolveSymbol(t,s,t=>{e(t)})})},this._chartWidget=e.activeChartWidget.value(),this._chartSession=this._chartWidget.model().model().chartApi();const t=new Set(this._loadRecent().reverse()),s=new Set,a=new Set,l=this._chartWidget.model().model().dataSources().filter(S),d=l.map(e=>{const t=e.symbolInfo();if(t)return Promise.resolve(u.a.fromSymbolInfo(t));const s=e.symbol();return Object(u.b)(s)});Promise.all(d).then(e=>{const o=e.map((e,t)=>void 0!==e?l[t]:void 0).filter(A);e.filter(A).forEach((e,n)=>{const i=o[n],r=i.id();this._addStudyIdToCheckedSymbols(e,r),this._idToStudyMap.set(r,i),t.has(e)?s.add(e):a.add(e)});const n=Array.from(t).filter(e=>this._checkedSymbols.has(e)).reduce((e,t)=>(s.has(t)&&e.push(t),e),[]).concat(Array.from(a)),r=Array.from(t);if(r.length{e.push(Object(u.b)(t.symbol)),this._defaultSymbolsDescriptions.set(t.symbol,t.title)});const t=[...r,...e];n.push(...t)}else n.push(...r);const c=Array.from(new Set(n));{const e=new Map,t=c.map(t=>{const s=Object(i.makeNextSymbolId)();return e.set(t,s),this._getResolveSymbolPromise(t,s)});Promise.all(t).then(t=>this._handleInitProcess(n,s=>{const o=e.get(s);return t.find(e=>e.params[0]===o)},(e,t)=>u.a.fromSymbolMessage(t,e),(e,t,s,o)=>"symbol_resolved"===e.method?f(e.params[1],s,o):p(t,s,o,this._getSymbolDescription(t))))}})}chartModel(){return this._chartWidget.model().model()}handleSourcesChange(){if(this._preventHandleSourcesChange)return;const e=this.chartModel().dataSources().filter(S),t=new Set(e.map(e=>e.id()));Array.from(t).forEach(e=>{if(!this._checkedStudiesIds().has(e)){const t=this.chartModel().dataSourceForId(e)||null;if(null!==t&&S(t)){const t=this._getContentItemByStudyId(e);if(!t)return;this._addStudyIdToCheckedSymbols(t.symbol,e),this._saveRecent(t.symbol),this._updateContentItemList(this._contentItemList.value(),!0)}}});Array.from(this._checkedStudiesIds()).forEach(e=>{if(!t.has(e)){const t=this._getContentItemByStudyId(e);if(!t)return +;const s=this._checkedSymbols.get(t.symbol);s&&s.length>1?this._removeStudyIdFromCheckedSymbols(t.symbol,e):this._checkedSymbols.delete(t.symbol),this._updateContentItemList(this._contentItemList.value(),!0)}})}studies(){return this._contentItemList.readonly()}isDataReady(){return this._isDataReady.readonly()}highlightedSymbol(){return this._highlightedSymbol.readonly()}applyStudy(e,t,s){const o=this._chartWidget;if(!o)return;if(Object(I.b)(e))return;let n;switch(t){case l.a.SameScale:n=o.addCompareAsOverlay(e,s);break;case l.a.NewPriceScale:n=o.addOverlayStudy(e,!0,s);break;case l.a.NewPane:n=o.addOverlayStudy(e,!1,s)}Promise.all([this._getResolveSymbolPromise(e),n]).then(t=>this._handleApplyProcess(t,t=>u.a.fromSymbolMessage(e,t),(e,t,s)=>"symbol_resolved"===e.method?f(e.params[1],!0,s):p(t,!0,s)))}_handleApplyProcess(e,t,s){const[o,n]=e;if(!o||null===n)return;const i=n.id(),r=t(o),a=s(o,r,n);this._saveRecent(r),this._addStudyIdToCheckedSymbols(r,i),this._showNewItem(a,r,i)}_handleInitProcess(e,t,s,o){const n=[];for(const i of e){const e=t(i);if(!e)continue;const r=s(e,i),a=this._checkedSymbols.get(r),c=-1!==n.findIndex(e=>e.symbol===r);if(void 0===a||c)this._recentSymbolsEnabled&&n.push(o(e,r,!1));else for(const t of a)n.push(o(e,r,!0,this._idToStudyMap.get(t)))}this._updateContentItemList(n),this._isDataReady.setValue(!0)}_showNewItem(e,t,s){const o=this._contentItemList.value().map(this._updateChecked,this);o.unshift(e),this._recentSymbolsEnabled&&o.unshift({...e,id:t,study:void 0,checked:!1}),this._updateContentItemList(o),this._highlightedSymbol.setValue(s),setTimeout(()=>this._highlightedSymbol.setValue(null),500)}_addStudyIdToCheckedSymbols(e,t){const s=this._checkedSymbols.get(e)||[];this._checkedSymbols.set(e,[...s,t])}_removeStudyIdFromCheckedSymbols(e,t){const s=this._checkedSymbols.get(e);if(s){const o=s.indexOf(t);s.splice(o,1),this._checkedSymbols.set(e,s)}}_updateChecked(e){var t;const s=this._checkedSymbols.get(e.symbol),o=null===(t=e.study)||void 0===t?void 0:t.id();return o?{...e,checked:Boolean(s&&s.includes(o))}:e}_updateContentItemList(e,t){const s=t?e.map(this._updateChecked,this):e,o=s.filter(e=>e.checked);if(this._recentSymbolsEnabled){const e=new Set,t=s.reduce((t,s)=>(s.checked||e.has(s.symbol)||(t.push(s),e.add(s.symbol)),t),[]).slice(0,this._recentLength);this._contentItemList.setValue(o.concat(t))}else this._contentItemList.setValue(o)}_checkedStudiesIds(){const e=[].concat(...Array.from(this._checkedSymbols.values()));return new Set(e)}_getContentItemByStudyId(e){const t=this._contentItemList.value(),s=t.findIndex(t=>t.study&&t.study.id()===e);return t[s]}_loadRecent(){return this._recentSymbolsEnabled?g.getJSON("CompareDialog.recent",[]):[]}_saveRecent(e){if(!this._recentSymbolsEnabled)return;const t=new Set(this._loadRecent());t.has(e)&&t.delete(e),t.add(e),g.setJSON("CompareDialog.recent",Array.from(t).slice(-this._recentLength))}_getSymbolDescription(e){var t;return this._defaultSymbolsDescriptions.size&&null!==(t=this._defaultSymbolsDescriptions.get(e))&&void 0!==t?t:""}} +function A(e){return void 0!==e}},qC62:function(e,t,s){"use strict";s.d(t,"b",(function(){return r})),s.d(t,"a",(function(){return o}));var o,n=s("Eyy1"),i=s("Kxc7");s("TgrR");function r(e){return e}!function(e){function t(e){return e.pro_name}function s(e){{const t=i.enabled("pay_attention_to_ticker_not_symbol")?e.ticker:e.full_name;return Object(n.ensureDefined)(t)}}e.fromQuotesResponse=function(e){const{values:s,symbolname:o,status:n}=e;return"error"===n&&o?o:t(s)},e.fromQuotes=t,e.fromSymbolSearchResult=function(e,t){{const{ticker:s,full_name:o}=null!=t?t:e;return i.enabled("pay_attention_to_ticker_not_symbol")?Object(n.ensureDefined)(null!=s?s:o):Object(n.ensureDefined)(o)}},e.fromSymbolInfo=s,e.fromSymbolMessage=function(e,t){return"symbol_resolved"===t.method?s(t.params[1]):e}}(o||(o={}))},xlAh:function(e,t,s){"use strict";var o;s.d(t,"a",(function(){return o})),function(e){e[e.SameScale=0]="SameScale",e[e.NewPriceScale=1]="NewPriceScale",e[e.NewPane=2]="NewPane"}(o||(o={}))}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/context-menu-renderer.7f6f59270ef0f3afa2ed.js b/static/charting_library/bundles/context-menu-renderer.7f6f59270ef0f3afa2ed.js new file mode 100644 index 0000000..91bd0cc --- /dev/null +++ b/static/charting_library/bundles/context-menu-renderer.7f6f59270ef0f3afa2ed.js @@ -0,0 +1,4 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["context-menu-renderer"],{F0Qt:function(e){e.exports=JSON.parse('{"wrapper":"wrapper-21v50zE8","input":"input-24iGIobO","box":"box-3574HVnv","icon":"icon-2jsUbtec","noOutline":"noOutline-3VoWuntz","intent-danger":"intent-danger-1Sr9dowC","check":"check-382c8Fu1","dot":"dot-3gRd-7Qt"}')},"P4l+":function(e,t,n){},R5JZ:function(e,t,n){"use strict";function o(e,t,n,o,r){function i(r){if(e>r.timeStamp)return;const i=r.target;void 0!==n&&null!==t&&null!==i&&i.ownerDocument===o&&(t.contains(i)||n(r))}return r.click&&o.addEventListener("click",i,!1),r.mouseDown&&o.addEventListener("mousedown",i,!1),r.touchEnd&&o.addEventListener("touchend",i,!1),r.touchStart&&o.addEventListener("touchstart",i,!1),()=>{o.removeEventListener("click",i,!1),o.removeEventListener("mousedown",i,!1),o.removeEventListener("touchend",i,!1),o.removeEventListener("touchstart",i,!1)}}n.d(t,"a",(function(){return o}))},Sn4D:function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));var o=n("q1tI"),r=n.n(o),i=n("Eyy1"),s=n("TSYQ"),c=n("x0D+"),a=n("0YpW"),l=n("AiMB"),u=n("mkWe"),d=n("qFKp"),h=n("X0gx"),v=n("sHQ4");function m(e){const{position:t="Bottom",onClose:n,children:m,className:f,theme:p=v}=e,w=Object(i.ensureNotNull)(Object(o.useContext)(u.a)),[g,b]=Object(o.useState)(0),E=Object(o.useRef)(null),y=Object(o.useContext)(h.a);return Object(o.useEffect)(()=>{const e=Object(i.ensureNotNull)(E.current);return e.focus({preventScroll:!0}),y.subscribe(w,n),Object(a.a)(!0),d.CheckMobile.iOS()&&Object(c.disableBodyScroll)(e),b(w.addDrawer()),()=>{y.unsubscribe(w,n);const t=w.removeDrawer();d.CheckMobile.iOS()&&Object(c.enableBodyScroll)(e),0===t&&Object(a.a)(!1)}},[]),r.a.createElement(l.a,null,r.a.createElement("div",{className:s(v.wrap,v["position"+t])},g===w.currentDrawer&&r.a.createElement("div",{className:v.backdrop,onClick:n}),r.a.createElement("div",{className:s(v.drawer,p.drawer,v["position"+t],f),ref:E,tabIndex:-1,"data-name":e["data-name"]},m)))}},XfUw:function(e,t){e.exports=''},cbq4:function(e,t,n){"use strict";n.r(t),n.d(t,"ContextMenuRenderer",(function(){return a}));var o=n("q1tI"),r=n("i8i4"),i=n("xRqE"),s=n("Ialn"),c=n("+EG+");class a{constructor(e,t,n,r){this._root=document.createElement("div"),this._isShown=!1,this._manager=null,this._props={isOpened:!1,items:e,position:{x:0,y:0},menuStatName:t.statName,mode:t.mode,"data-name":t["data-name"]},this._onDestroy=n,this._onShow=r,this._activeElement=document.activeElement,this._returnFocus=t.returnFocus,this._takeFocus=t.takeFocus,this._menuElementRef=o.createRef(),t.manager&&(this._manager=t.manager)}show(e,t,n){this._onShow&&this._onShow(),this._isShown=!0,this._render({...this._props,position:(t,o)=>{ +"function"==typeof e&&(e=e(t,o)),e.touches&&e.touches.length>0&&(e={clientX:e.touches[0].clientX,clientY:e.touches[0].clientY});return{x:!n&&Object(s.isRtl)()?e.clientX-t:e.clientX,y:e.clientY,overrideHeight:e.overrideHeight}},isOpened:!0,onClose:()=>{this.hide(),this.destroy()},doNotCloseOn:t,takeFocus:this._takeFocus,menuElementReference:this._menuElementRef})}hide(){this._isShown=!1,this._render({...this._props,isOpened:!1})}isShown(){return this._isShown}destroy(){this._isShown=!1,r.unmountComponentAtNode(this._root),this._onDestroy&&this._onDestroy(),this._returnFocus&&this._activeElement instanceof HTMLElement&&this._activeElement.focus({preventScroll:!0})}_render(e){r.render(o.createElement(c.b.Provider,{value:this._manager},o.createElement(i.b,{...e})),this._root)}}},fEjm:function(e,t,n){e.exports={favorite:"favorite-I_fAY9V2",disabled:"disabled-I_fAY9V2",active:"active-I_fAY9V2",checked:"checked-I_fAY9V2"}},hn2c:function(e,t){e.exports=''},mkWe:function(e,t,n){"use strict";n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return s}));var o=n("q1tI"),r=n.n(o);class i extends r.a.PureComponent{constructor(e){super(e),this._addDrawer=()=>{const e=this.state.currentDrawer+1;return this.setState({currentDrawer:e}),e},this._removeDrawer=()=>{const e=this.state.currentDrawer-1;return this.setState({currentDrawer:e}),e},this.state={currentDrawer:0}}render(){return r.a.createElement(s.Provider,{value:{addDrawer:this._addDrawer,removeDrawer:this._removeDrawer,currentDrawer:this.state.currentDrawer}},this.props.children)}}const s=r.a.createContext(null)},pr86:function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));n("YFKU");var o=n("q1tI"),r=n("TSYQ"),i=n("Iivm"),s=n("sg5d"),c=n("XfUw"),a=n("fEjm");const l={add:window.t("Add to favorites"),remove:window.t("Remove from favorites")};function u(e){const{className:t,isFilled:n,isActive:u,onClick:d,...h}=e;return o.createElement(i.a,{...h,className:r(a.favorite,"apply-common-tooltip",n&&a.checked,u&&a.active,t),icon:n?s:c,onClick:d,title:n?l.remove:l.add})}},sHQ4:function(e,t,n){e.exports={wrap:"wrap-164vy-kj",positionBottom:"positionBottom-164vy-kj",backdrop:"backdrop-164vy-kj",drawer:"drawer-164vy-kj",positionLeft:"positionLeft-164vy-kj"}},sg5d:function(e,t){e.exports=''},tUxN:function(e,t){e.exports=''},vCF3:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var o=n("q1tI"),r=n("TSYQ"),i=n("Iivm"),s=n("tUxN"),c=n("F0Qt");n("P4l+");function a(e){const t=r(c.box,c["intent-"+e.intent],{[c.check]:!Boolean(e.indeterminate), +[c.dot]:Boolean(e.indeterminate),[c.noOutline]:-1===e.tabIndex}),n=r(c.wrapper,e.className);return o.createElement("span",{className:n,title:e.title},o.createElement("input",{id:e.id,tabIndex:e.tabIndex,className:c.input,type:"checkbox",name:e.name,checked:e.checked,disabled:e.disabled,value:e.value,autoFocus:e.autoFocus,role:e.role,onChange:function(){e.onChange&&e.onChange(e.value)},ref:e.reference}),o.createElement("span",{className:t},o.createElement(i.a,{icon:s,className:c.icon})))}},"x0D+":function(e,t,n){var o,r,i;r=[t],void 0===(i="function"==typeof(o=function(e){"use strict";function t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t'},"8bbt":function(e,t,n){e.exports={action:"action-DhEzLCdX",hovered:"hovered-DhEzLCdX",active:"active-DhEzLCdX",label:"label-DhEzLCdX",description:"description-DhEzLCdX",small:"small-DhEzLCdX",smallPadding:"smallPadding-DhEzLCdX",centerAlign:"centerAlign-DhEzLCdX",highlighted:"highlighted-DhEzLCdX"}},"9agd":function(e,t,n){"use strict";n.r(t);var o=n("q1tI"),i=n.n(o),a=n("i8i4"),c=n.n(a),r=n("/KDZ"),s=n("uhCe"),l=n("Iksw"),u=n("YFKU"),d=n("Iivm"),m=n("9dlw"),h=n("DTHj"),f=n("nPPD"),p=n("H9Gg"),g=n("KKsp"),v=n("cwLw");function C(e,t,n){const o=e.reduce((e,t)=>[...e,...t.actions],[]);return Object(p.c)({data:o,rules:n,queryString:t,primaryKey:"label",secondaryKey:"description"})}var E=n("TSYQ"),b=n.n(E),A=n("1LIl"),O=n("8bbt");function w(e){const{label:t,rules:n,search:a,description:c,onClick:r,onClose:s,isActive:l,isSmallSize:u}=e,d=Object(o.useCallback)(()=>{r(),s&&s()},[r,s]);return i.a.createElement("div",{className:b()(O.action,l&&O.active,u&&O.small,!Boolean(c)&&O.smallPadding),onClick:d},i.a.createElement("div",{className:b()(O.label,u&&O.small,!Boolean(c)&&!u&&O.centerAlign)},m(t)),void 0!==c&&i.a.createElement("div",{className:b()(O.description,u&&O.small)},m(c)));function m(e){return i.a.createElement(A.a,{text:e,rules:n,queryString:a,className:b()(l&&O.highlighted,l&&O.active)})}}var y=n("9e/V"),S=n("20PO"),j=n("Znkj"),T=n("1sXn");const N=Object(f.a)(h.a,T);function x(e){const{title:t,sections:n,onClose:a,...c}=e,[r,s]=Object(o.useState)(""),[l,h]=Object(o.useState)(()=>n.reduce((e,t,n)=>(t.name&&(e[t.id]=!0),e),{})),f=Object(o.useMemo)(()=>Object(p.a)(r),[r]),E=Object(o.useRef)(null);return i.a.createElement(m.a,{...c,onClose:a,className:j.menu,theme:N,maxHeight:233,noMomentumBasedScroll:!0,isOpened:!0,onOpen:function(){var e;null===(e=E.current)||void 0===e||e.focus()}},i.a.createElement("div",{className:j.header},i.a.createElement("div",{className:j.title},t),i.a.createElement("div",{className:j.container},i.a.createElement(d.a,{icon:y,className:j.icon}),i.a.createElement("input",{size:1,type:"text",className:j.input,placeholder:Object(u.t)("Search"),autoComplete:"off","data-role":"search",onChange:function(e){s(e.target.value)},value:r,ref:E}),Boolean(r)&&i.a.createElement(d.a,{icon:S,className:j.clear,onClick:function(){s("")}}))),r?C(n,r,f).map(b):n.map((e,t)=>i.a.createElement(i.a.Fragment,{key:e.id},Boolean(t)&&i.a.createElement(g.a,null),e.name?i.a.createElement(v.a,{summary:e.name,className:j.section,open:l[e.id],onStateChange:t=>h({...l,[e.id]:t})},e.actions.map(b)):e.actions.map(b))));function b(e){const{id:t,...n}=e;return i.a.createElement(w,{key:t, +rules:f,search:r,onClose:a,isSmallSize:!0,...n})}}var D=n("g89m"),L=n("QHWU"),B=n("sYiF");function _(e){const{title:t,onClose:n,sections:a}=e,[c,r]=Object(o.useState)(""),s=Object(o.useMemo)(()=>Object(p.a)(c),[c]);return i.a.createElement(D.a,{title:t,onClose:n,render:function(){return i.a.createElement(i.a.Fragment,null,i.a.createElement(L.a,{placeholder:Object(u.t)("Search"),onChange:l}),i.a.createElement("div",{className:B.container},c?C(a,c,s).map(e=>{const{id:t,isActive:o,...a}=e;return i.a.createElement(w,{key:t,isActive:o,onClose:n,rules:s,search:c,...a})}):a.map((e,t)=>i.a.createElement(i.a.Fragment,{key:e.id},e.name&&i.a.createElement("div",{className:B.section},e.name),e.actions.map((o,r)=>{const{id:l,...u}=o,d=r===e.actions.length-1,m=t===a.length-1;return i.a.createElement(i.a.Fragment,{key:l},i.a.createElement(w,{rules:s,search:c,onClose:n,...u}),!m&&d&&i.a.createElement("div",{className:B.separator}))})))))},dataName:"unit-conversion-dialog",draggable:!1,fullScreen:!0,isOpened:!0});function l(e){r(e.target.value)}}function z(e){const{element:t,...n}=e;return i.a.createElement(r.a,{rule:s.a.TabletSmall},e=>e?i.a.createElement(_,{...n}):i.a.createElement(x,{...n,position:Object(l.e)(t,{}),doNotCloseOn:t}))}function k(e,t,n){let o=document.createElement("div");const a=()=>{null!==o&&(c.a.unmountComponentAtNode(o),o=null)},r={title:e,sections:n,element:t,onClose:a};return c.a.render(i.a.createElement(z,{...r}),o),{close:a,isOpened:()=>null!==o}}n.d(t,"showUnitConversion",(function(){return k}))},"9dlw":function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var o=n("q1tI"),i=n.n(o),a=n("i8i4"),c=n.n(a),r=n("AiMB"),s=n("DTHj"),l=n("X0gx"),u=n("8Rai");function d(e){const{controller:t,children:n,isOpened:a,closeOnClickOutside:d=!0,doNotCloseOn:m,onClickOutside:h,onClose:f,...p}=e,g=Object(o.useContext)(l.a),v=Object(u.a)({handler:function(e){h&&h(e);if(!d)return;if(m&&e.target instanceof Node){const t=c.a.findDOMNode(m);if(t instanceof Node&&t.contains(e.target))return}f()},mouseDown:!0,touchStart:!0});return a?i.a.createElement(r.a,{top:"0",left:"0",right:"0",bottom:"0",pointerEvents:"none"},i.a.createElement("span",{ref:v,style:{pointerEvents:"auto"}},i.a.createElement(s.b,{...p,onClose:f,onScroll:function(t){const{onScroll:n}=e;n&&n(t)},customCloseDelegate:g,ref:t},n))):null}},"9e/V":function(e,t){e.exports=''},Iksw:function(e,t,n){"use strict";n.d(t,"c",(function(){return o})),n.d(t,"a",(function(){return i})),n.d(t,"d",(function(){return a})),n.d(t,"b",(function(){return c})),n.d(t,"e",(function(){return l}));var o,i,a,c,r=n("Eyy1");!function(e){e[e.Top=0]="Top",e[e.Bottom=1]="Bottom"}(o||(o={})),function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(i||(i={})),function(e){e[e.FromTopToBottom=0]="FromTopToBottom",e[e.FromBottomToTop=1]="FromBottomToTop"}(a||(a={})),function(e){ +e[e.FromLeftToRight=0]="FromLeftToRight",e[e.FromRightToLeft=1]="FromRightToLeft"}(c||(c={}));const s={verticalAttachEdge:o.Bottom,horizontalAttachEdge:i.Left,verticalDropDirection:a.FromTopToBottom,horizontalDropDirection:c.FromLeftToRight,verticalMargin:0,horizontalMargin:0,matchButtonAndListboxWidths:!1};function l(e,t){return(n,l)=>{const u=Object(r.ensureNotNull)(e).getBoundingClientRect(),{verticalAttachEdge:d=s.verticalAttachEdge,verticalDropDirection:m=s.verticalDropDirection,horizontalAttachEdge:h=s.horizontalAttachEdge,horizontalDropDirection:f=s.horizontalDropDirection,horizontalMargin:p=s.horizontalMargin,verticalMargin:g=s.verticalMargin,matchButtonAndListboxWidths:v=s.matchButtonAndListboxWidths}=t,C=d===o.Top?-1*g:g,E=h===i.Right?u.right:u.left,b=d===o.Top?u.top:u.bottom,A={x:E-(f===c.FromRightToLeft?n:0)+p,y:b-(m===a.FromBottomToTop?l:0)+C};return v&&(A.overrideWidth=u.width),A}}},KKsp:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var o=n("q1tI"),i=n("TSYQ"),a=n.n(i),c=n("NOPy");function r(e){const{size:t="normal",className:n}=e;return o.createElement("div",{className:a()(c.separator,"small"===t&&c.small,"normal"===t&&c.normal,"large"===t&&c.large,n)})}},"ML8+":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var o=n("q1tI"),i=n("TSYQ"),a=n("Iivm"),c=n("cvzQ"),r=n("R4+T");function s(e){const{dropped:t,className:n}=e;return o.createElement(a.a,{className:i(n,c.icon,{[c.dropped]:t}),icon:r})}},NOPy:function(e,t,n){e.exports={separator:"separator-eqcGT_ow",small:"small-eqcGT_ow",normal:"normal-eqcGT_ow",large:"large-eqcGT_ow"}},"R4+T":function(e,t){e.exports=''},Znkj:function(e,t,n){e.exports={menu:"menu-__tSsAAY",header:"header-__tSsAAY",title:"title-__tSsAAY",container:"container-__tSsAAY",icon:"icon-__tSsAAY",clear:"clear-__tSsAAY",input:"input-__tSsAAY",highlighted:"highlighted-__tSsAAY",active:"active-__tSsAAY",section:"section-__tSsAAY"}},aWqZ:function(e,t,n){"use strict";n.r(t),n.d(t,"currencyActions",(function(){return a}));var o=n("Eyy1"),i=n("YFKU");function a(e,t,n){if(null===t||t.readOnly)return[];const a=[],c=(e,t,n,o)=>({id:e,label:t,isActive:n,onClick:o}),r=t=>{e.setPriceScaleCurrency(n,t)},s=t.selectedCurrency,l=t.originalCurrencies,u=t.baseCurrencies,d=t.displayedValues,m={id:"first_section",actions:[]};if(l.size>1){const e=c("Mixed",Object(i.t)("Mixed"),null===t.selectedCurrency,()=>r(null));m.actions.push(e)}const h=e.model().availableCurrencies();if(null!==s){const e=c(s,Object(o.ensureDefined)(d.get(s)),!0,()=>{});m.actions.push(e)}const f=h.filterConvertible(u,e=>e!==s&&l.has(e));for(const e of f)m.actions.push(c(e.id,e.code,t.selectedCurrency===e.id,()=>r(e.id)));m.actions.length>0&&a.push(m);const p=h.filterConvertible(u,e=>e!==s&&!l.has(e)),g={id:"second_section",actions:[]} +;for(const e of p)g.actions.push(c(e.id,e.code,t.selectedCurrency===e.id,()=>r(e.id)));return g.actions.length>0&&a.push(g),a}},cvzQ:function(e,t,n){e.exports={icon:"icon-19OjtB6A",dropped:"dropped-19OjtB6A"}},cwLw:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var o=n("q1tI"),i=n.n(o),a=n("TSYQ"),c=n.n(a),r=n("ML8+"),s=n("fioS");function l(e){return i.a.createElement(i.a.Fragment,null,i.a.createElement("div",{className:c()(e.className,s.summary),onClick:function(){e.onStateChange&&e.onStateChange(!e.open)},"data-open":e.open},e.summary,i.a.createElement(r.a,{className:s.caret,dropped:Boolean(e.open)})),e.open&&e.children)}},fioS:function(e,t,n){e.exports={summary:"summary-3UYGeClB",hovered:"hovered-3UYGeClB",caret:"caret-3UYGeClB"}},hpdS:function(e,t,n){"use strict";n.r(t),n.d(t,"unitActions",(function(){return a}));var o=n("Eyy1"),i=n("YFKU");function a(e,t,n){if(null===t||0===t.availableGroups.size)return[];const a=[],c=(e,t,n,o,i)=>({id:e,label:t,isActive:o,onClick:i,description:n}),r=t=>{e.setPriceScaleUnit(n,t)},s=t.selectedUnit,l=t.originalUnits,u=t.names,d=t.descriptions,m={actions:[],id:"first_section"};if(l.size>1){const e=c("Mixed",Object(i.t)("Mixed"),void 0,null===t.selectedUnit,()=>r(null));m.actions.push(e)}const h=e.model().availableUnits();if(null!==s){const e=c(s,Object(o.ensureDefined)(u.get(s)),Object(o.ensureDefined)(d.get(s)),!0,()=>{});m.actions.push(e)}const f=h.unitsByGroups(t.availableGroups);for(const e of f)for(const t of e.units)t.id!==s&&l.has(t.id)&&m.actions.push(c(t.id,t.name,t.description,!1,()=>r(t.id)));m.actions.length>0&&a.push(m);const p=s&&h.unitGroupById(s);if(null!==p)for(const e of f){if(e.name!==p)continue;const t={id:e.name,actions:[],name:e.name};for(const n of e.units)n.id===s||l.has(n.id)||t.actions.push(c(n.id,n.name,n.description,!1,()=>r(n.id)));t.actions.length>0&&a.push(t)}for(const e of f){if(e.name===p)continue;const t={id:e.name,actions:[],name:e.name};for(const n of e.units)n.id===s||l.has(n.id)||t.actions.push(c(n.id,n.name,n.description,!1,()=>r(n.id)));t.actions.length>0&&a.push(t)}return a}},nPPD:function(e,t,n){"use strict";function o(e,t,n={}){const o=Object.assign({},t);for(const i of Object.keys(t)){const a=n[i]||i;a in e&&(o[i]=[e[a],t[i]].join(" "))}return o}function i(e,t,n={}){return Object.assign({},e,o(e,t,n))}n.d(t,"b",(function(){return o})),n.d(t,"a",(function(){return i}))},sYiF:function(e,t,n){e.exports={container:"container-9xiUj6X_",separator:"separator-9xiUj6X_",section:"section-9xiUj6X_"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/custom-intervals-add-dialog.bb64431fb1c6d852f9f1.js b/static/charting_library/bundles/custom-intervals-add-dialog.bb64431fb1c6d852f9f1.js new file mode 100644 index 0000000..857fc03 --- /dev/null +++ b/static/charting_library/bundles/custom-intervals-add-dialog.bb64431fb1c6d852f9f1.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["custom-intervals-add-dialog"],{"+l/S":function(e,t,n){},"02pg":function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n("q1tI"),r=n("TSYQ"),o=n("XiJV");function s(e){return a.createElement("div",{className:r(o.separator,e.className)})}},"2A9e":function(e){e.exports=JSON.parse('{"button":"button-1iktpaT1","content":"content-2PGssb8d","noOutline":"noOutline-d9Yp4qvi","grouped":"grouped-2NxOpIxM","adjust-position":"adjust-position-2zd-ooQC","first-row":"first-row-11wXF7aC","first-col":"first-col-pbJu53tK","no-corner-top-left":"no-corner-top-left-3ZsS65Fk","no-corner-top-right":"no-corner-top-right-3MYQOwk_","no-corner-bottom-right":"no-corner-bottom-right-3II18BAU","no-corner-bottom-left":"no-corner-bottom-left-3KZuX8tv","appearance-default":"appearance-default-dMjF_2Hu","intent-primary":"intent-primary-1-IOYcbg","intent-success":"intent-success-25a4XZXM","intent-default":"intent-default-2ZbSqQDs","intent-warning":"intent-warning-24j5HMi0","intent-danger":"intent-danger-1EETHCla","appearance-stroke":"appearance-stroke-12lxiUSM","appearance-text":"appearance-text-DqKJVT3U","appearance-inverse":"appearance-inverse-r1Y2JQg_","size-s":"size-s-3mait84m","size-m":"size-m-2G7L7Qat","size-l":"size-l-2NEs9_xt","full-width":"full-width-1wU8ljjC","with-icon":"with-icon-yumghDr-","icon":"icon-1grlgNdV"}')},ItnF:function(e,t,n){e.exports={dialog:"dialog-2cMrvu9r",wrapper:"wrapper-2cMrvu9r",separator:"separator-2cMrvu9r"}},Qhte:function(e,t,n){e.exports={scrollable:"scrollable-FNPZI_Xo",content:"content-FNPZI_Xo",row:"row-FNPZI_Xo",title:"title-FNPZI_Xo",control:"control-FNPZI_Xo"}},XiJV:function(e,t,n){e.exports={separator:"separator-3No0pWrk"}},g89m:function(e,t,n){"use strict";var a=n("q1tI"),r=n.n(a),o=n("Eyy1"),s=n("TSYQ"),i=n.n(s),l=n("/3z9"),c=n("d700"),d=n("WXjp"),u=n("02pg"),p=n("uhCe"),m=n("/KDZ"),h=n("pafz"),f=n("ZjKI"),b=n("FQhm"),g=n("Iivm");const v=r.a.createContext({setHideClose:()=>{}});var w=n("zztK"),N=n("px1m");function C(e){const{title:t,subtitle:n,showCloseIcon:o=!0,onClose:s,renderBefore:l,renderAfter:c,draggable:d,className:u,unsetAlign:p}=e,[m,h]=Object(a.useState)(!1);return r.a.createElement(v.Provider,{value:{setHideClose:h}},r.a.createElement("div",{className:i()(N.container,u,(n||p)&&N.unsetAlign)},l,r.a.createElement("div",{"data-dragg-area":d,className:N.title},r.a.createElement("div",{className:N.ellipsis},t),n&&r.a.createElement("div",{className:i()(N.ellipsis,N.subtitle)},n)),c,o&&!m&&r.a.createElement(g.a,{className:N.close,icon:w,onClick:s,"data-name":"close","data-role":"button"})))}var _=n("ItnF");n.d(t,"a",(function(){return A}));const E={vertical:20},O={vertical:0};class A extends r.a.PureComponent{constructor(){super(...arguments),this._controller=null,this._reference=null,this._renderChildren=(e,t)=>(this._controller=e,this.props.render({requestResize:this._requestResize,centerAndFit:this._centerAndFit,isSmallWidth:t})),this._handleReference=e=>this._reference=e,this._handleClose=()=>{this.props.onClose()}, +this._handleKeyDown=e=>{var t;if(!e.defaultPrevented)switch(this.props.onKeyDown&&this.props.onKeyDown(e),Object(l.hashFromEvent)(e)){case 27:if(e.defaultPrevented)return;if(this.props.forceCloseOnEsc&&this.props.forceCloseOnEsc())return void this._handleClose();const{activeElement:n}=document,a=Object(o.ensureNotNull)(this._reference);if(null!==n){if(e.preventDefault(),"true"===(t=n).getAttribute("data-haspopup")&&"true"!==t.getAttribute("data-expanded"))return void this._handleClose();if(Object(c.b)(n))return void a.focus();if(a.contains(n))return void this._handleClose()}}},this._requestResize=()=>{null!==this._controller&&this._controller.recalculateBounds()},this._centerAndFit=()=>{null!==this._controller&&this._controller.centerAndFit()}}componentDidMount(){b.subscribe(f.CLOSE_POPUPS_AND_DIALOGS_COMMAND,this._handleClose,null)}componentWillUnmount(){b.unsubscribe(f.CLOSE_POPUPS_AND_DIALOGS_COMMAND,this._handleClose,null)}focus(){Object(o.ensureNotNull)(this._reference).focus()}getElement(){return this._reference}contains(e){var t,n;return null!==(n=null===(t=this._reference)||void 0===t?void 0:t.contains(e))&&void 0!==n&&n}render(){const{className:e,headerClassName:t,isOpened:n,title:a,dataName:o,onClickOutside:s,additionalElementPos:l,additionalHeaderElement:c,backdrop:f,shouldForceFocus:b=!0,showSeparator:g,subtitle:v,draggable:w=!0,fullScreen:N=!1,showCloseIcon:A=!0,rounded:S=!0,isAnimationEnabled:P,growPoint:x,dialogTooltip:I,unsetHeaderAlign:j}=this.props,F="after"!==l?c:void 0,y="after"===l?c:void 0;return r.a.createElement(m.a,{rule:p.a.SmallHeight},l=>r.a.createElement(m.a,{rule:p.a.TabletSmall},c=>r.a.createElement(d.a,{rounded:!(c||N)&&S,className:i()(_.dialog,e),isOpened:n,reference:this._handleReference,onKeyDown:this._handleKeyDown,onClickOutside:s,onClickBackdrop:s,fullscreen:c||N,guard:l?O:E,boundByScreen:c||N,shouldForceFocus:b,backdrop:f,draggable:w,isAnimationEnabled:P,growPoint:x,name:this.props.dataName,dialogTooltip:I},r.a.createElement("div",{className:_.wrapper,"data-name":o,"data-dialog-name":"string"==typeof a?a:""},void 0!==a&&r.a.createElement(C,{draggable:w&&!(c||N),onClose:this._handleClose,renderAfter:y,renderBefore:F,subtitle:v,title:a,showCloseIcon:A,className:t,unsetAlign:j}),g&&r.a.createElement(u.a,{className:_.separator}),r.a.createElement(h.a.Consumer,null,e=>this._renderChildren(e,c||N))))))}}},mwqF:function(e,t,n){"use strict";var a=n("q1tI"),r=n.n(a),o=n("TSYQ"),s=n("wwkJ"),i=n("ZWNO");function l(e,t){const{intent:n="primary",size:a="m",appearance:r="default",useFullWidth:s=!1,tabIndex:l=0,icon:c,className:d,isGrouped:u,cellState:p,disablePositionAdjustment:m=!1}=t,h=function(e,t){let n="";return 0!==e&&(1&e&&(n=o(n,t["no-corner-top-left"])),2&e&&(n=o(n,t["no-corner-top-right"])),4&e&&(n=o(n,t["no-corner-bottom-right"])),8&e&&(n=o(n,t["no-corner-bottom-left"]))),n}(Object(i.a)(p),e) +;return o(d,e.button,e["size-"+a],e["intent-"+n],e["appearance-"+r],s&&e["full-width"],-1===l&&e.noOutline,c&&"s"!==a&&e["with-icon"],h,u&&e.grouped,!m&&e["adjust-position"],p.isTop&&e["first-row"],p.isLeft&&e["first-col"])}var c=n("2A9e");n("+l/S");function d(e){const{className:t,intent:n,size:i,appearance:d,disabled:u,useFullWidth:p,reference:m,icon:h,children:f,tabIndex:b,...g}=e,{isGrouped:v,cellState:w,disablePositionAdjustment:N}=Object(a.useContext)(s.a),C=l(c,{intent:n,size:i,appearance:d,disabled:u,useFullWidth:p,tabIndex:b,icon:h,isGrouped:v,cellState:w,disablePositionAdjustment:N});return r.a.createElement("button",{className:o(C,t),disabled:u,ref:m,tabIndex:b,...g},h&&"s"!==i&&r.a.createElement("span",{className:c.icon},h),r.a.createElement("span",{className:c.content},f))}n.d(t,"a",(function(){return d}))},px1m:function(e,t,n){e.exports={"small-height-breakpoint":"screen and (max-height: 360px)",container:"container-2sL5JydP",unsetAlign:"unsetAlign-2sL5JydP",title:"title-2sL5JydP",subtitle:"subtitle-2sL5JydP",ellipsis:"ellipsis-2sL5JydP",close:"close-2sL5JydP"}},w9vS:function(e,t,n){"use strict";n.r(t),n.d(t,"ToolWidgetIntervalsAddDialog",(function(){return h}));var a=n("q1tI"),r=n.n(a),o=n("YFKU"),s=n("ycFu"),i=n("PECq"),l=n("wHCJ"),c=n("tWVy"),d=n("tmL0"),u=n("cSDC"),p=n("Qhte");const m=u.a.map(e=>({value:e.name,content:e.label}));function h(e){const{onAdd:t,onClose:n,onUnmount:h}=e,[f,b]=Object(a.useState)(u.a[0].name),[g,v]=Object(a.useState)("1");return Object(a.useEffect)(()=>()=>{h&&h()},[]),r.a.createElement(s.a,{dataName:"add-custom-interval-dialog",title:Object(o.t)("Add custom time interval"),isOpened:!0,onSubmit:function(){t(g,f),n()},onCancel:n,onClickOutside:n,onClose:n,render:()=>r.a.createElement(d.a,{className:p.scrollable,onScroll:N},r.a.createElement("div",{className:p.content},r.a.createElement("div",{className:p.row},r.a.createElement("div",{className:p.title},Object(o.t)("Type")),r.a.createElement(i.a,{id:"metric-items",className:p.control,value:f,items:m,onChange:C})),r.a.createElement("div",{className:p.row},r.a.createElement("div",{className:p.title},Object(o.t)("Interval")),r.a.createElement(l.a,{className:p.control,inputMode:"numeric",maxLength:6,value:g,onChange:w})))),defaultActionOnClose:"none",submitButtonText:Object(o.t)("Add"),submitOnEnterKey:!1,fullScreen:!0});function w(e){const{value:t}=e.currentTarget;/^[0-9]*$/.test(t)&&v(t)}function N(){c.a.fire()}function C(e){b(e)}}},zztK:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/drawing-toolbar.8cc497633535648562e7.js b/static/charting_library/bundles/drawing-toolbar.8cc497633535648562e7.js new file mode 100644 index 0000000..332b17c --- /dev/null +++ b/static/charting_library/bundles/drawing-toolbar.8cc497633535648562e7.js @@ -0,0 +1,13 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["drawing-toolbar"],{"5f7t":function(e,t,o){"use strict";o.r(t);var i=o("q1tI"),n=o.n(i),s=o("i8i4"),a=o("Eyy1"),l=o("YFKU"),r=o("TSYQ"),c=o.n(r),d=o("8+VR"),h=o("Vdly"),u=o("Kxc7"),m=o("mMWL"),p=o("zL3Q"),b=o("FQhm"),g=o("aIyQ"),v=o.n(g),_=o("qFKp"),w=(o("mNbo"),o("MP+M"));class T{constructor(e){this._drawingsAccess=e||{tools:[],type:"black"}}isToolEnabled(e){const t=this._findTool(e);return!(!t||!t.grayed)||("black"===this._drawingsAccess.type?!t:!!t)}isToolGrayed(e){const t=this._findTool(e);return Boolean(t&&t.grayed)}_findTool(e){return this._drawingsAccess.tools.find(t=>t.name===e)}}var C=o("/3z9"),f=o("+GxX");const S=[{id:"linetool-group-cursors",title:window.t("Cursors"),items:[{name:"cursor"},{name:"dot"},{name:"arrow"},{name:"eraser"}]},{id:"linetool-group-trend-line",title:window.t("Trend Line Tools"),items:[{name:"LineToolTrendLine",hotkeyHash:C.Modifiers.Alt+84},{name:"LineToolArrow"},{name:"LineToolRay"},{name:"LineToolInfoLine"},{name:"LineToolExtended"},{name:"LineToolTrendAngle"},{name:"LineToolHorzLine",hotkeyHash:C.Modifiers.Alt+72},{name:"LineToolHorzRay"},{name:"LineToolVertLine",hotkeyHash:C.Modifiers.Alt+86},{name:"LineToolCrossLine",hotkeyHash:C.Modifiers.Alt+67},{name:"LineToolParallelChannel"},{name:"LineToolRegressionTrend"},{name:"LineToolFlatBottom"},{name:"LineToolDisjointAngle"},null].filter(Boolean)},{id:"linetool-group-gann-and-fibonacci",title:window.t("Gann and Fibonacci Tools"),items:[{name:"LineToolFibRetracement",hotkeyHash:C.Modifiers.Alt+70},{name:"LineToolTrendBasedFibExtension"},{name:"LineToolPitchfork"},{name:"LineToolSchiffPitchfork2"},{name:"LineToolSchiffPitchfork"},{name:"LineToolInsidePitchfork"},{name:"LineToolFibChannel"},{name:"LineToolFibTimeZone"},{name:"LineToolGannSquare"},{name:"LineToolGannFixed"},{name:"LineToolGannComplex"},{name:"LineToolGannFan"},{name:"LineToolFibSpeedResistanceFan"},{name:"LineToolTrendBasedFibTime"},{name:"LineToolFibCircles"},{name:"LineToolPitchfan"},{name:"LineToolFibSpiral"},{name:"LineToolFibSpeedResistanceArcs"},{name:"LineToolFibWedge"}]},{id:"linetool-group-geometric-shapes",title:window.t("Geometric Shapes"),items:[{name:"LineToolBrush"},{name:"LineToolHighlighter"},{name:"LineToolRectangle"},{name:"LineToolEllipse"},{name:"LineToolPath"},{name:"LineToolBezierQuadro"},{name:"LineToolPolyline"},{name:"LineToolTriangle"},{name:"LineToolRotatedRectangle"},{name:"LineToolArc"},{name:"LineToolBezierCubic"}]},{id:"linetool-group-annotation",title:window.t("Annotation Tools"),items:[{name:"LineToolText"},{name:"LineToolTextAbsolute"},{name:"LineToolNote"},{name:"LineToolNoteAbsolute"},{name:"LineToolSignpost"},null,{name:"LineToolCallout"},{name:"LineToolBalloon"},{name:"LineToolPriceLabel"},{name:"LineToolPriceNote"},{name:"LineToolArrowMarker"},{name:"LineToolArrowMarkLeft"},{name:"LineToolArrowMarkRight"},{name:"LineToolArrowMarkUp"},{name:"LineToolArrowMarkDown"},{name:"LineToolFlagMark"}].filter(Boolean)},{id:"linetool-group-patterns",title:window.t("Patterns"),items:[{ +name:"LineTool5PointsPattern"},{name:"LineToolCypherPattern"},{name:"LineToolABCD"},{name:"LineToolTrianglePattern"},{name:"LineToolThreeDrivers"},{name:"LineToolHeadAndShoulders"},{name:"LineToolElliottImpulse"},{name:"LineToolElliottTriangle"},{name:"LineToolElliottTripleCombo"},{name:"LineToolElliottCorrection"},{name:"LineToolElliottDoubleCombo"},{name:"LineToolCircleLines"},{name:"LineToolTimeCycles"},{name:"LineToolSineLine"}]},{id:"linetool-group-prediction-and-measurement",title:window.t("Prediction and Measurement Tools"),items:[{name:"LineToolRiskRewardLong"},{name:"LineToolRiskRewardShort"},{name:"LineToolPrediction"},{name:"LineToolDateRange"},{name:"LineToolPriceRange"},{name:"LineToolDateAndPriceRange"},{name:"LineToolBarsPattern"},Object(f.isFeatureEnabled)("remove-line-tool-ghost-feed")?null:{name:"LineToolGhostFeed"},{name:"LineToolProjection"},{name:"LineToolFixedRangeVolumeProfile"}].filter(Boolean)}];var y=o("OiSa"),k=o("cvc5"),E=o("Iivm"),D=o("//lZ"),L=o("9uLv"),O=o("uJ8n"),M=o("Vike");class N extends n.a.PureComponent{constructor(e){super(e),this._scroll=null,this._handleScrollTop=()=>{this.animateTo(Math.max(0,this.currentPosition()-(this.state.heightWrap-50)))},this._handleScrollBot=()=>{this.animateTo(Math.min((this.state.heightContent||0)-(this.state.heightWrap||0),this.currentPosition()+(this.state.heightWrap-50)))},this._handleResizeWrap=({height:e})=>{this.setState({heightWrap:e})},this._handleResizeContent=({height:e})=>{this.setState({heightContent:e})},this._handleScroll=()=>{const{onScroll:e}=this.props;e&&e(this.currentPosition(),this.isAtTop(),this.isAtBot()),this._checkButtonsVisibility()},this._checkButtonsVisibility=()=>{const{isVisibleTopButton:e,isVisibleBotButton:t}=this.state,o=this.isAtTop(),i=this.isAtBot();o||e?o&&e&&this.setState({isVisibleTopButton:!1}):this.setState({isVisibleTopButton:!0}),i||t?i&&t&&this.setState({isVisibleBotButton:!1}):this.setState({isVisibleBotButton:!0})},this.state={heightContent:0,heightWrap:0,isVisibleBotButton:!1,isVisibleTopButton:!1}}componentDidMount(){this._checkButtonsVisibility()}componentDidUpdate(e,t){t.heightWrap===this.state.heightWrap&&t.heightContent===this.state.heightContent||this._handleScroll()}currentPosition(){return this._scroll?this._scroll.scrollTop:0}isAtTop(){return this.currentPosition()<=1}isAtBot(){return this.currentPosition()+this.state.heightWrap>=this.state.heightContent-1}animateTo(e,t=L.b){const o=this._scroll;o&&Object(D.doAnimate)({onStep(e,t){o.scrollTop=t},from:o.scrollTop,to:Math.round(e),easing:L.c.easeInOutCubic,duration:t})}render(){const{children:e,isVisibleScrollbar:t,isVisibleFade:o,isVisibleButtons:i,onMouseOver:s,onMouseOut:a}=this.props,{heightContent:l,heightWrap:r,isVisibleBotButton:d,isVisibleTopButton:h}=this.state;return n.a.createElement(k,{whitelist:["height"],onMeasure:this._handleResizeWrap},n.a.createElement("div",{className:O.wrap,onMouseOver:s,onMouseOut:a},n.a.createElement("div",{className:c()(O.scrollWrap,{[O.noScrollBar]:!t}),onScroll:this._handleScroll,ref:e=>this._scroll=e +},n.a.createElement(k,{onMeasure:this._handleResizeContent,whitelist:["height"]},n.a.createElement("div",{className:O.content},e))),o&&n.a.createElement("div",{className:c()(O.fadeTop,{[O.isVisible]:h&&l>r})}),o&&n.a.createElement("div",{className:c()(O.fadeBot,{[O.isVisible]:d&&l>r})}),i&&n.a.createElement("div",{className:c()(O.scrollTop,{[O.isVisible]:h&&l>r}),onClick:this._handleScrollTop},n.a.createElement("div",{className:O.iconWrap},n.a.createElement(E.a,{icon:M,className:O.icon}))),i&&n.a.createElement("div",{className:c()(O.scrollBot,{[O.isVisible]:d&&l>r}),onClick:this._handleScrollBot},n.a.createElement("div",{className:O.iconWrap},n.a.createElement(E.a,{icon:M,className:O.icon})))))}}N.defaultProps={isVisibleScrollbar:!0};var A=o("lxNp"),B=o("tWVy"),j=o("4rU7");function V(e){const{id:t,action:o,isActive:n,isHidden:s,isTransparent:a,toolName:l}=e;return i.createElement(j.a,{id:t,icon:w.a[l].icon,isActive:n,isHidden:s,isTransparent:a,onClick:o,title:w.a[l].localizedName,"data-name":l})}var W=o("wZIs");const P=[61536,61537,61538,61539,61725,61726,61575,61576,61796,61797,61779,61780,61781,61782,61783,61784,61785,61786,61440,61441,61442,61444,61445,61446,61447,61448,61452,61453,61454,61456,61457,61458,61459,61460,61461,61463,61464,61466,61467,61469,61470,61473,61475,61476,61488,61502,61504,61505,61507,61510,61523,61524,61525,61526,61527,61528,61529,61530,61531,61532,61533,61534,61540,61541,61542,61543,61544,61545,61546,61547,61548,61550,61552,61553,61554,61555,61557,61558,61559,61560,61565,61566,61568,61572,61574,61578,61588,61597,61601,61602,61603,61604,61605,61606,61607,61608,61609,61610,61611,61616,61617,61635,61648,61649,61654,61655,61656,61657,61658,61659,61666,61667,61669,61670,61671,61672,61673,61675,61681,61682,61683,61684,61696,61697,61698,61699,61700,61701,61702,61703,61704,61705,61706,61707,61708,61712,61713,61714,61715,61720,61721,61722,61731,61732,61736,61737,61738,61746,61747,61748,61749,61751,61752,61753,61754,61757,61758,61760,61764,61768,61769,61770,61771,61772,61773,61774,61776,61777,61778,61799,61811,61812,61813,61814,61815,61816,61817,61818,61819,61820,61821,61826,61827,61828,61829,61830,61831,61832,61836,61838,61840,61842,61845];var F=o("9dlw"),x=o("ijHL"),U=o("Sn4D"),I=o("hn2c"),R=o("KmEK");class z extends i.PureComponent{constructor(e){super(e),this._toggleDropdown=e=>{this.setState({isOpened:void 0!==e?e:!this.state.isOpened})},this._handleClose=()=>{this._toggleDropdown(!1)},this._getDropdownPosition=()=>{if(!this._control)return{x:0,y:0};const e=this._control.getBoundingClientRect();return{x:e.left+e.width+1,y:e.top-6}},this._handleClickArrow=()=>{this._toggleDropdown()},this._handleTouchStart=()=>{this.props.onClickButton&&this.props.onClickButton(),this._toggleDropdown()},this._handlePressStart=()=>{if(d.mobiletouch&&!this.props.checkable)!this._longPressDelay&&this.props.onClickButton&&this.props.onClickButton();else{if(this._doubleClickDelay)return clearTimeout(this._doubleClickDelay),delete this._doubleClickDelay,void this._toggleDropdown(!0) +;this._doubleClickDelay=setTimeout(()=>{delete this._doubleClickDelay,!this._longPressDelay&&this.props.onClickButton&&this.props.onClickButton()},175)}this._longPressDelay=setTimeout(()=>{delete this._longPressDelay,this._toggleDropdown(!0)},300)},this._cancelAllTimeouts=()=>{clearTimeout(this._longPressDelay),delete this._longPressDelay,clearTimeout(this._doubleClickDelay),delete this._doubleClickDelay},this._handleTouchPressEnd=e=>{e.cancelable&&e.preventDefault(),this._handlePressEnd()},this._handlePressEnd=()=>{this._longPressDelay&&(clearTimeout(this._longPressDelay),delete this._longPressDelay,this.state.isOpened?this._toggleDropdown(!1):this.props.checkable||this.state.isOpened||!this.props.isActive||d.mobiletouch?!this._doubleClickDelay&&this.props.onClickButton&&this.props.onClickButton():this._toggleDropdown(!0))},this.state={isOpened:!1}}render(){const{buttonActiveClass:e,buttonClass:t,buttonIcon:o,buttonTitle:n,buttonHotKey:s,dropdownTooltip:a,children:l,isActive:c,isGrayed:h,onClickWhenGrayed:u,checkable:m,isSmallTablet:p}=this.props,{isOpened:b}=this.state,g=Object(x.b)(this.props);return i.createElement("div",{className:r(R.dropdown,{[R.isGrayed]:h,[R.isActive]:c,[R.isOpened]:b}),onClick:h?u:void 0},i.createElement("div",{...g,ref:e=>this._control=e,className:R.control},i.createElement("div",{...this._getButtonHandlers(),className:r(R.buttonWrap,{"apply-common-tooltip common-tooltip-vertical":Boolean(n||s)}),"data-tooltip-hotkey":s,"data-tooltip-delay":1500,"data-role":"button",title:n},i.createElement(j.a,{activeClass:e,className:t,icon:o,isActive:c,isGrayed:h,isTransparent:!m})),!h&&!d.mobiletouch&&i.createElement("div",{className:r(R.arrow,a&&"apply-common-tooltip common-tooltip-vertical"),title:a,onClick:this._handleClickArrow,"data-role":"menu-handle"},i.createElement(E.a,{className:R.arrowIcon,icon:I}))),!h&&(p?b&&i.createElement(U.a,{onClose:this._handleClose,position:"Bottom"},l):i.createElement(F.a,{doNotCloseOn:this,isOpened:b,onClose:this._handleClose,position:this._getDropdownPosition},l)))}_getButtonHandlers(){const{isGrayed:e,checkable:t}=this.props;return e?{}:d.mobiletouch?t?{onTouchStart:this._handlePressStart,onTouchEnd:this._handleTouchPressEnd,onTouchMove:this._cancelAllTimeouts}:{onClick:this._handleTouchStart}:{onMouseDown:this._handlePressStart,onMouseUp:this._handlePressEnd}}}var G=o("KKsp"),H=o("EA32");const K={icon:window.t("Icon"),dropdownTooltip:window.t("Icons")};class q extends i.Component{constructor(e){super(e),this._renderItem=(e,t)=>{const{isSmallTablet:o}=this.props,n=c()(H.item,o&&H.smallTablet,t&&o&&this.state.isActive&&e===this.state.current&&H.active);return i.createElement("div",{className:n,key:e,onClick:()=>{this._handleSelect(e),Object(B.b)()}},String.fromCharCode(e))},this._onChangeDrawingState=()=>{this.setState({isActive:this._isActive()})},this._handleSelect=e=>{Object(W.saveDefaults)("linetoolicon",{...Object(W.defaults)("linetoolicon"),icon:e}),m.iconTool.setValue(e),m.tool.setValue("LineToolIcon");let{recents:t}=this.state;const o=t.indexOf(e) +;-1!==o&&t.splice(o,1),t=[e,...t.slice(0,9)],Object(h.setJSON)("linetoolicon.recenticons",t),this.setState({current:e,recents:t})},this.state={current:Object(W.defaults)("linetoolicon").icon,recents:Object(h.getJSON)("linetoolicon.recenticons")||[]}}componentDidMount(){m.tool.subscribe(this._onChangeDrawingState),h.onSync.subscribe(this,this._onSyncSettings)}componentWillUnmount(){m.tool.unsubscribe(this._onChangeDrawingState),h.onSync.unsubscribe(this,this._onSyncSettings)}render(){const{isGrayed:e,toolName:t,isSmallTablet:o}=this.props,{current:n,isActive:s,recents:a}=this.state,l=Object(x.b)(this.props),r=c()(H.wrap,o&&H.smallTablet);return i.createElement(z,{buttonClass:H.button,buttonIcon:i.createElement("div",{className:H.buttonIcon},String.fromCharCode(n||P[0])),buttonTitle:K.icon,dropdownTooltip:K.dropdownTooltip,isActive:s,isGrayed:e,isSmallTablet:o,onClickButton:()=>this._handleSelect(n||P[0]),onClickWhenGrayed:()=>Object(b.emit)("onGrayedObjectClicked",{type:"drawing",name:w.a[t].localizedName}),...l},a&&i.createElement(i.Fragment,null,o&&i.createElement("div",{className:H.title},window.t("Recently used")),i.createElement("div",{className:r},a.map(e=>this._renderItem(e,!0))),i.createElement(G.a,{className:c()(o&&H.separator)})),i.createElement("div",{key:"all",className:r},P.map(e=>this._renderItem(e))))}_isActive(){return m.tool.value()===this.props.toolName}_onSyncSettings(){this.setState({recents:Object(h.getJSON)("linetoolicon.recenticons")})}}var J=o("Ocx9");class Y extends i.PureComponent{constructor(e){super(e),this._handleClick=()=>{this.props.saveDefaultOnChange&&Object(J.saveDefaultProperties)(!0);const e=!this.props.property.value();this.props.property.setValue(e),this.props.saveDefaultOnChange&&Object(J.saveDefaultProperties)(!1),this.props.onClick&&this.props.onClick(e)},this.state={isActive:this.props.property.value()}}componentDidMount(){this.props.property.subscribe(this,this._onChange)}componentWillUnmount(){this.props.property.unsubscribe(this,this._onChange)}render(){const{toolName:e}=this.props,{isActive:t}=this.state,o=w.a[e];return i.createElement(j.a,{icon:t&&o.iconActive?o.iconActive:o.icon,isActive:t,onClick:this._handleClick,title:o.localizedName,buttonHotKey:o.hotKey,"data-name":e})}_onChange(e){this.setState({isActive:e.value()})}}class Q extends i.PureComponent{constructor(e){super(e),this._handleClick=()=>{m.tool.setValue(this.props.toolName)},this._onChange=()=>{this.setState({isActive:m.tool.value()===this.props.toolName})},this.state={isActive:m.tool.value()===this.props.toolName}}componentDidMount(){m.tool.subscribe(this._onChange)}componentWillUnmount(){m.tool.unsubscribe(this._onChange)}render(){const{toolName:e}=this.props,{isActive:t}=this.state,o=w.a[e];return i.createElement(j.a,{icon:w.a[e].icon,isActive:t,isTransparent:!0,onClick:this._handleClick,title:o.localizedName,buttonHotKey:o.hotKey,"data-name":e})}}class Z extends i.PureComponent{constructor(e){super(e),this._boundUndoModel=null,this._handleClick=()=>{const e=this._activeChartWidget() +;e.hasModel()&&e.model().zoomFromViewport()},this._syncUnzoomButton=()=>{const e=this._activeChartWidget();let t=!1;if(e.hasModel()){const o=e.model();this._boundUndoModel!==o&&(this._boundUndoModel&&this._boundUndoModel.zoomStack().onChange().unsubscribe(null,this._syncUnzoomButton),o.zoomStack().onChange().subscribe(null,this._syncUnzoomButton),this._boundUndoModel=o),t=!o.zoomStack().isEmpty()}else e.withModel(null,this._syncUnzoomButton);this.setState({isVisible:t})},this.state={isVisible:!1}}componentDidMount(){this.props.chartWidgetCollection.activeChartWidget.subscribe(this._syncUnzoomButton,{callWithLast:!0})}componentWillUnmount(){this.props.chartWidgetCollection.activeChartWidget.unsubscribe(this._syncUnzoomButton)}render(){return this.state.isVisible?i.createElement(V,{action:this._handleClick,isTransparent:!0,toolName:"zoom-out"}):i.createElement("div",null)}_activeChartWidget(){return this.props.chartWidgetCollection.activeChartWidget.value()}}var X=o("b2d7"),$=o("pr86"),ee=o("N5tr"),te=o("dhVi");class oe extends i.PureComponent{constructor(e){super(e),this._onChangeDrawingState=()=>{const e=this._getActiveToolIndex();this.setState({current:-1!==e?e:this.state.current,isActive:-1!==e})},this._handleClickButton=()=>{if(_.CheckMobile.any())return;const e=this._getCurrentToolName();this._selectTool(e)},this._handleClickItem=e=>{this._selectTool(e)},this._handleGrayedClick=e=>{Object(b.emit)("onGrayedObjectClicked",{type:"drawing",name:w.a[e].localizedName})},this._handleClickFavorite=e=>{this.state.favState&&this.state.favState[e]?X.a.removeFavorite(e):X.a.addFavorite(e)},this._onAddFavorite=e=>{this.setState({favState:{...this.state.favState,[e]:!0}})},this._onRemoveFavorite=e=>{this.setState({favState:{...this.state.favState,[e]:!1}})},this._onSyncFavorites=()=>{this.setState({favState:this._composeFavState()})};const t=this._getActiveToolIndex();this.state={current:-1===t?this._firstNonGrayedTool():t,favState:this._composeFavState(),isActive:-1!==t}}componentDidMount(){m.tool.subscribe(this._onChangeDrawingState),X.a.favoriteAdded.subscribe(null,this._onAddFavorite),X.a.favoriteRemoved.subscribe(null,this._onRemoveFavorite),X.a.favoritesSynced.subscribe(null,this._onSyncFavorites)}componentWillUnmount(){m.tool.unsubscribe(this._onChangeDrawingState),X.a.favoriteAdded.unsubscribe(null,this._onAddFavorite),X.a.favoriteRemoved.unsubscribe(null,this._onRemoveFavorite),X.a.favoritesSynced.unsubscribe(null,this._onSyncFavorites)}componentDidUpdate(e,t){e.lineTools!==this.props.lineTools&&this.setState({favState:this._composeFavState()})}render(){const{favoriting:e,grayedTools:t,lineTools:o,dropdownTooltip:n,isSmallTablet:s}=this.props,{current:a,favState:l,isActive:r}=this.state,c=this._getCurrentToolName(),d=w.a[c],h=this._showShortcuts(),u=Object(x.b)(this.props);return i.createElement("span",null,i.createElement(z,{buttonIcon:d.icon,buttonTitle:d.localizedName,buttonHotKey:d.hotKey,dropdownTooltip:n,isActive:r,onClickButton:this._handleClickButton,isSmallTablet:s,...u},o.map((o,n)=>{ +const c=o.name,d=w.a[c],u=t[c];return i.createElement(ee.b,{key:c,"data-name":o.name,theme:s?te.a:void 0,dontClosePopup:u,forceShowShortcuts:h,shortcut:!s&&o.hotkeyHash?Object(C.humanReadableHash)(o.hotkeyHash):void 0,icon:d.icon,isActive:r&&a===n,appearAsDisabled:u,label:d.localizedName,onClick:u?this._handleGrayedClick:this._handleClickItem,onClickArg:c,showToolboxOnHover:!l[c],toolbox:e&&!u?i.createElement($.a,{isActive:r&&a===n,isFilled:l[c],onClick:()=>this._handleClickFavorite(c)}):void 0})})))}_getCurrentToolName(){const{current:e}=this.state,{lineTools:t}=this.props;return t[e||0].name}_firstNonGrayedTool(){const{grayedTools:e,lineTools:t}=this.props;return t.findIndex(t=>!e[t.name])}_getActiveToolIndex(){return this.props.lineTools.findIndex(e=>e.name===m.tool.value())}_showShortcuts(){return this.props.lineTools.some(e=>"shortcut"in e)}_selectTool(e){m.tool.setValue(e)}_composeFavState(){const e={};return this.props.lineTools.forEach(t=>{e[t.name]=X.a.isFavorite(t.name)}),e}}var ie=o("JWMC"),ne=o("nPPD"),se=o("FTBN");const ae=Object(ne.a)(ee.a,se),le={all:window.t("Remove Drawings & Indicators"),drawings:window.t("Remove Drawings"),studies:window.t("Remove Indicators")};class re extends i.PureComponent{constructor(){super(...arguments),this._handleRemoveToolClick=()=>{d.mobiletouch||this._handleRemoveDrawings()},this._handleRemoveDrawings=()=>{Object(ie.trackEvent)("GUI","Chart Left Toolbar","remove drawing"),this.props.chartWidgetCollection.activeChartWidget.value().removeAllDrawingTools()},this._handleRemoveStudies=()=>{Object(ie.trackEvent)("GUI","Chart Left Toolbar","remove indicator"),this.props.chartWidgetCollection.activeChartWidget.value().removeAllStudies()},this._handleRemoveAll=()=>{Object(ie.trackEvent)("GUI","Chart Left Toolbar","remove all"),this.props.chartWidgetCollection.activeChartWidget.value().removeAllStudiesDrawingTools()}}render(){const e=this.props.isSmallTablet?ae:void 0;return i.createElement(z,{buttonIcon:w.a[this.props.toolName].icon,buttonTitle:le.drawings,onClickButton:this._handleRemoveToolClick,isSmallTablet:this.props.isSmallTablet,"data-name":this.props.toolName},i.createElement(ee.b,{"data-name":"remove-drawing-tools",label:le.drawings,onClick:this._handleRemoveDrawings,theme:e}),i.createElement(ee.b,{"data-name":"remove-studies",label:le.studies,onClick:this._handleRemoveStudies,theme:e}),i.createElement(ee.b,{"data-name":"remove-all",label:le.all,onClick:this._handleRemoveAll,theme:e}))}}var ce=o("Ijvb");function de(e){const{hideDrawingsProperty:t,hideIndicatorsProperty:o,isSmallTablet:s}=e,[a,r]=Object(i.useState)(()=>h.getValue("ChartToolsHideMode","drawings")),[c,d]=Object(i.useState)(()=>t.value()),[u,m]=Object(i.useState)(()=>o.value());Object(i.useEffect)(()=>{const e=v("drawings",d),i=v("indicators",m);return t.subscribe(null,e),o.subscribe(null,i),()=>{t.unsubscribe(null,e),o.unsubscribe(null,i)}},[]);const p=w.a.hideAllDrawings,b=c||u,g=s?ae:void 0;return n.a.createElement(z,{buttonIcon:function(){switch(a){case"drawings": +return c?ce.a.hideAllDrawingToolsActive:ce.a.hideAllDrawingTools;case"indicators":return u?ce.a.hideAllIndicatorsActive:ce.a.hideAllIndicators;default:return c&&u?ce.a.hideAllDrawingsActive:ce.a.hideAllDrawings}}(),buttonTitle:function(){switch(a){case"drawings":return b?Object(l.t)("Show all drawings"):Object(l.t)("Hide all drawings");case"indicators":return b?Object(l.t)("Show all indicators"):Object(l.t)("Hide all indicators");default:return b?Object(l.t)("Show all drawings and indicators"):Object(l.t)("Hide all drawings and indicators")}}(),buttonHotKey:p.hotKey,onClickButton:function(){switch(a){case"drawings":he(t);break;case"indicators":he(o);break;default:he(t),he(o)}},isSmallTablet:s,isActive:b,checkable:!0,"data-name":"hide-all","data-type":{drawings:"hide-drawing-tools",indicators:"hide-indicators",all:"hide-drawings-and-indicators"}[a]},n.a.createElement(ee.b,{label:Object(l.t)("Hide drawings"),isActive:c&&!u,onClick:function(){const e="all"===a||!c;o.setValue(!1),t.setValue(e),_("drawings"),ue("hide drawings",e)},"data-name":"hide-drawing-tools",theme:g}),n.a.createElement(ee.b,{label:Object(l.t)("Hide indicators"),isActive:!c&&u,onClick:function(){const e="all"===a||!u;t.setValue(!1),o.setValue(e),_("indicators"),ue("hide indicators",e)},"data-name":"hide-indicators",theme:g}),n.a.createElement(ee.b,{label:Object(l.t)("Hide drawings & indicators"),isActive:c&&u,onClick:function(){const e=!(c&&u);t.setValue(e),o.setValue(e),_("all"),ue("hide drawings and indicators",e)},"data-name":"hide-drawings-and-indicators",theme:g}));function v(e,t){return e=>t(e.value())}function _(e){r(e),h.setValue("ChartToolsHideMode",e)}}function he(e){e.setValue(!e.value())}function ue(e,t){Object(ie.trackEvent)("GUI","Chart Left Toolbar",`${e} ${t?"on":"off"}`)}var me=o("g5Qf"),pe=o("85c9");const be=window.t("Show Favorite Drawing Tools Toolbar");class ge extends i.PureComponent{constructor(){super(...arguments),this._instance=null,this._promise=null,this._bindedForceUpdate=()=>this.forceUpdate(),this._handleClick=()=>{null!==this._instance&&(this._instance.isVisible()?this._instance.hide():this._instance.show())}}componentDidMount(){const e=this._promise=Object(a.ensureNotNull)(Object(me.getFavoriteDrawingToolbarPromise)());e.then(t=>{this._promise===e&&(this._instance=t,this._instance.canBeShown().subscribe(this._bindedForceUpdate),this._instance.visibility().subscribe(this._bindedForceUpdate),this.forceUpdate())})}componentWillUnmount(){this._promise=null,null!==this._instance&&(this._instance.canBeShown().unsubscribe(this._bindedForceUpdate),this._instance.visibility().unsubscribe(this._bindedForceUpdate),this._instance=null)}render(){return null!==this._instance&&this._instance.canBeShown().value()?i.createElement(j.a,{id:this.props.id,icon:pe,isActive:this._instance.isVisible(),onClick:this._handleClick,title:be}):null}}var ve,_e=o("4o++");!function(e){e.Screenshot="drawing-toolbar-screenshot",e.FavoriteDrawings="drawing-toolbar-favorite-drawings",e.ObjectTree="drawing-toolbar-object-tree"}(ve||(ve={})) +;var we=o("8d0Q"),Te=o("XAms"),Ce=o("7RN7"),fe=o("X0gx"),Se=o("Wz44");const ye=Se,ke="http://www.w3.org/2000/svg";function Ee(e){const{direction:t,theme:o=Se}=e;return i.createElement("svg",{xmlns:ke,width:"9",height:"27",viewBox:"0 0 9 27",className:r(o.container,"right"===t?o.mirror:null),onContextMenu:Te.a},i.createElement("g",{fill:"none",fillRule:"evenodd"},i.createElement("path",{className:o.background,d:"M4.5.5a4 4 0 0 1 4 4v18a4 4 0 1 1-8 0v-18a4 4 0 0 1 4-4z"}),i.createElement("path",{className:o.arrow,d:"M5.5 10l-2 3.5 2 3.5"})))}var De=o("ybOa");const Le=Object(ne.a)(ye,De),Oe={hide:window.t("Hide Drawings Toolbar"),show:window.t("Show Drawings Toolbar")};class Me extends i.PureComponent{constructor(){super(...arguments),this._toggleVisibility=()=>{y.isDrawingToolbarVisible.setValue(!y.isDrawingToolbarVisible.value())}}render(){const{toolbarVisible:e,"data-name":t}=this.props;return i.createElement("div",{className:r(Le.toggleButton,"apply-common-tooltip common-tooltip-vertical",!e&&Le.collapsed),onClick:this._toggleVisibility,title:e?Oe.hide:Oe.show,"data-name":t,"data-value":e?"visible":"collapsed"},i.createElement(Ee,{direction:e?"left":"right",theme:e?void 0:Le}))}}var Ne=o("mkWe"),Ae=o("uhCe"),Be=o("/KDZ");const je={chartWidgetCollection:o("17x9").any.isRequired};var Ve=o("1TxM"),We=o("JQKp");const Pe={weakMagnet:window.t("Weak Magnet"),strongMagnet:window.t("Strong Magnet")},Fe=Object(_.onWidget)(),xe=new v.a,Ue=ie.trackEvent.bind(null,"GUI","Chart Left Toolbar"),Ie=(e,t)=>Ue(`${e} ${t?"on":"off"}`);function Re(){const e=!m.properties().childs().magnet.value();Ie("magnet mode",e),Object(J.saveDefaultProperties)(!0),m.properties().childs().magnet.setValue(e),Object(J.saveDefaultProperties)(!1)}function ze(){Object(ie.trackEvent)("GUI","Magnet mode","Weak"),Object(J.saveDefaultProperties)(!0),m.properties().childs().magnetMode.setValue(_e.MagnetMode.WeakMagnet),m.properties().childs().magnet.setValue(!0),Object(J.saveDefaultProperties)(!1)}function Ge(){Object(ie.trackEvent)("GUI","Magnet mode","Strong"),Object(J.saveDefaultProperties)(!0),m.properties().childs().magnetMode.setValue(_e.MagnetMode.StrongMagnet),m.properties().childs().magnet.setValue(!0),Object(J.saveDefaultProperties)(!1)}class He extends i.PureComponent{constructor(e){var t;super(e),this._grayedTools={},this._handleDrawingClick=e=>{Ie("drawing mode",e)},this._handleLockClick=e=>{Ie("lock all drawing",e)},this._handleSyncClick=e=>{Ie("sync",e)},this._handleMouseOver=e=>{Object(we.a)(e)&&this.setState({isHovered:!0})},this._handleMouseOut=e=>{Object(we.a)(e)&&this.setState({isHovered:!1})},this._handleChangeVisibility=e=>{this.setState({isVisible:e})},this._handleEsc=()=>{m.resetToCursor(!0)},this._updateMagnetEnabled=()=>{const e={magnet:Object(p.a)().value()};this.setState(e)},this._updateMagnetMode=()=>{const e={magnetMode:Object(p.b)().value()};this.setState(e)},this._handleWidgetbarSettled=e=>{var t;this.setState({isWidgetbarVisible:null===(t=window.widgetbar)||void 0===t?void 0:t.visible().value(),widgetbarSettled:e})}, +this._handleWidgetbarVisible=e=>{this.setState({isWidgetbarVisible:e})},m.init(),this._toolsFilter=new T(this.props.drawingsAccess),this._filteredLineTools=S.map(e=>({id:e.id,title:e.title,items:e.items.filter(e=>this._toolsFilter.isToolEnabled(w.a[e.name].localizedName))})).filter(e=>0!==e.items.length),this._filteredLineTools.forEach(e=>e.items.forEach(e=>{this._grayedTools[e.name]=this._toolsFilter.isToolGrayed(w.a[e.name].localizedName)})),this.state={isHovered:!1,isVisible:y.isDrawingToolbarVisible.value(),isWidgetbarVisible:Boolean(null===(t=window.widgetbar)||void 0===t?void 0:t.visible().value()),widgetbarSettled:void 0!==window.widgetbar,magnet:m.properties().childs().magnet.value(),magnetMode:m.properties().childs().magnetMode.value()},this._features={favoriting:!Fe&&u.enabled("items_favoriting"),multicharts:u.enabled("support_multicharts"),tools:!Fe||u.enabled("charting_library_base")},this._registry={chartWidgetCollection:this.props.chartWidgetCollection},this._negotiateResizer()}componentDidMount(){var e;y.isDrawingToolbarVisible.subscribe(this._handleChangeVisibility),B.a.subscribe(this,this._handleGlobalClose),Object(p.a)().subscribe(this._updateMagnetEnabled),Object(p.b)().subscribe(this._updateMagnetMode),this._tool=m.tool.spawn(),this._tool.subscribe(this._updateHotkeys.bind(this)),this._initHotkeys(),this.props.widgetbarSettled&&(this.props.widgetbarSettled.subscribe(this,this._handleWidgetbarSettled),_.CheckMobile.any()&&(null===(e=window.widgetbar)||void 0===e||e.visible().subscribe(this._handleWidgetbarVisible)))}componentWillUnmount(){var e;null===(e=window.widgetbar)||void 0===e||e.visible().unsubscribe(this._handleWidgetbarVisible),y.isDrawingToolbarVisible.unsubscribe(this._handleChangeVisibility),B.a.unsubscribe(this,this._handleGlobalClose),Object(p.a)().unsubscribe(this._updateMagnetEnabled),Object(p.b)().unsubscribe(this._updateMagnetMode),this._tool.destroy(),this._hotkeys.destroy()}componentDidUpdate(e,t){var o;const{isVisible:i,widgetbarSettled:n}=this.state;i!==t.isVisible&&(b.emit("toggle_sidebar",!i),h.setValue("ChartDrawingToolbarWidget.visible",i),this._negotiateResizer()),t.widgetbarSettled!==n&&n&&_.CheckMobile.any()&&(null===(o=window.widgetbar)||void 0===o||o.visible().subscribe(this._handleWidgetbarVisible))}render(){const{bgColor:e,chartWidgetCollection:t,readOnly:o}=this.props,{isHovered:n,isVisible:s,magnet:a,magnetMode:l}=this.state,c={backgroundColor:e&&"#"+e};let h;h=i.createElement(Me,{toolbarVisible:s,"data-name":"toolbar-drawing-toggle-button"});const p=()=>!!this._features.tools&&!!u.enabled("show_object_tree");return i.createElement(Ve.a,{validation:je,value:this._registry},i.createElement(fe.a.Provider,{value:xe},i.createElement(Ne.b,null,i.createElement(Be.a,{rule:Ae.a.TabletSmall},e=>i.createElement("div",{id:"drawing-toolbar",className:r(We.drawingToolbar,{[We.isHidden]:!s}),style:c,onClick:this.props.onClick,onContextMenu:Te.b},i.createElement(N,{onScroll:this._handleGlobalClose,isVisibleFade:d.mobiletouch,isVisibleButtons:!d.mobiletouch&&n, +isVisibleScrollbar:!1,onMouseOver:this._handleMouseOver,onMouseOut:this._handleMouseOut},i.createElement("div",{className:We.inner},!o&&i.createElement("div",{className:We.group,style:c},this._filteredLineTools.map((o,n)=>i.createElement(oe,{"data-name":o.id,chartWidgetCollection:t,favoriting:this._features.favoriting,grayedTools:this._grayedTools,key:n,dropdownTooltip:o.title,lineTools:o.items,isSmallTablet:e})),this._toolsFilter.isToolEnabled("Font Icons")&&i.createElement(q,{"data-name":"linetool-group-font-icons",isGrayed:this._grayedTools["Font Icons"],toolName:"LineToolIcon",isSmallTablet:e})),!o&&i.createElement("div",{className:We.group,style:c},i.createElement(Q,{toolName:"measure"}),i.createElement(Q,{toolName:"zoom"}),i.createElement(Z,{chartWidgetCollection:t})),!o&&i.createElement("div",{className:We.group,style:c},i.createElement(z,{"data-name":"magnet-button",buttonIcon:l===_e.MagnetMode.StrongMagnet?ce.a.strongMagnet:ce.a.magnet,buttonTitle:w.a.magnet.localizedName,isActive:a,onClickButton:Re,buttonHotKey:w.a.magnet.hotKey,checkable:!0,isSmallTablet:e},i.createElement(ee.b,{key:"weakMagnet",className:e?We.popupMenuItem:void 0,"data-name":"weakMagnet",icon:ce.a.magnet,isActive:a&&l!==_e.MagnetMode.StrongMagnet,label:Pe.weakMagnet,onClick:ze}),i.createElement(ee.b,{key:"strongMagnet",className:e?We.popupMenuItem:void 0,"data-name":"strongMagnet",icon:ce.a.strongMagnet,isActive:a&&l===_e.MagnetMode.StrongMagnet,label:Pe.strongMagnet,onClick:Ge})),this._features.tools&&i.createElement(Y,{property:m.properties().childs().stayInDrawingMode,saveDefaultOnChange:!0,toolName:"drawginmode",onClick:this._handleDrawingClick}),this._features.tools&&i.createElement(Y,{property:m.lockDrawings(),toolName:"lockAllDrawings",onClick:this._handleLockClick}),this._features.tools&&i.createElement(de,{isSmallTablet:e,hideDrawingsProperty:m.hideAllDrawings(),hideIndicatorsProperty:m.hideAllIndicators()}),!1),!o&&this._features.tools&&i.createElement("div",{className:We.group,style:c},i.createElement(re,{chartWidgetCollection:t,isSmallTablet:e,toolName:"removeAllDrawingTools"})),i.createElement("div",{className:We.fill,style:c}),!o&&(this._features.tools||!1)&&i.createElement("div",{className:r(We.group,We.lastGroup),style:c},!1,this._features.tools&&this._features.favoriting&&i.createElement(ge,{id:ve.FavoriteDrawings}),p()&&i.createElement(V,{id:ve.ObjectTree,action:()=>this._activeChartWidget().showObjectsTreeDialog(),toolName:"showObjectsTree"})))),h)))))}_activeChartWidget(){return this.props.chartWidgetCollection.activeChartWidget.value()}_negotiateResizer(){const e=Ce.a;this.props.resizerBridge.negotiateWidth(this.state.isVisible?Ce.b:e)}_handleGlobalClose(){xe.fire()}_updateHotkeys(){this._hotkeys.promote()}_initHotkeys(){this._hotkeys=A.createGroup({desc:"Drawing Toolbar"}),this._hotkeys.add({desc:"Reset",hotkey:27,handler:()=>this._handleEsc(),isDisabled:()=>m.toolIsCursor(m.tool.value())})}}o.d(t,"DrawingToolbarRenderer",(function(){return Ke}));class Ke{constructor(e,t){this._component=null,this._handleRef=e=>{ +this._component=e},this._container=e,s.render(i.createElement(He,{...t,ref:this._handleRef}),this._container)}destroy(){s.unmountComponentAtNode(this._container)}getComponent(){return Object(a.ensureNotNull)(this._component)}}},"85c9":function(e,t){e.exports=''},EA32:function(e,t,o){e.exports={wrap:"wrap-2qy9YC6D",smallTablet:"smallTablet-2qy9YC6D",buttonIcon:"buttonIcon-2qy9YC6D",item:"item-2qy9YC6D",hovered:"hovered-2qy9YC6D",active:"active-2qy9YC6D",title:"title-2qy9YC6D",separator:"separator-2qy9YC6D",button:"button-2qy9YC6D"}},FTBN:function(e,t,o){e.exports={item:"item-3NgvBqLJ",label:"label-3NgvBqLJ"}},JQKp:function(e,t,o){e.exports={drawingToolbar:"drawingToolbar-2_so5thS",isHidden:"isHidden-2_so5thS",inner:"inner-2_so5thS",popupMenuItem:"popupMenuItem-2_so5thS",group:"group-2_so5thS",noGroupPadding:"noGroupPadding-2_so5thS",lastGroup:"lastGroup-2_so5thS",fill:"fill-2_so5thS",separator:"separator-2_so5thS"}},KmEK:function(e,t,o){e.exports={dropdown:"dropdown-191zO2Od",buttonWrap:"buttonWrap-191zO2Od",control:"control-191zO2Od",arrow:"arrow-191zO2Od",arrowIcon:"arrowIcon-191zO2Od",isOpened:"isOpened-191zO2Od",hover:"hover-191zO2Od",isGrayed:"isGrayed-191zO2Od"}},R5JZ:function(e,t,o){"use strict";function i(e,t,o,i,n){function s(n){if(e>n.timeStamp)return;const s=n.target;void 0!==o&&null!==t&&null!==s&&s.ownerDocument===i&&(t.contains(s)||o(n))}return n.click&&i.addEventListener("click",s,!1),n.mouseDown&&i.addEventListener("mousedown",s,!1),n.touchEnd&&i.addEventListener("touchend",s,!1),n.touchStart&&i.addEventListener("touchstart",s,!1),()=>{i.removeEventListener("click",s,!1),i.removeEventListener("mousedown",s,!1),i.removeEventListener("touchend",s,!1),i.removeEventListener("touchstart",s,!1)}}o.d(t,"a",(function(){return i}))},Sn4D:function(e,t,o){"use strict";o.d(t,"a",(function(){return p}));var i=o("q1tI"),n=o.n(i),s=o("Eyy1"),a=o("TSYQ"),l=o("x0D+"),r=o("0YpW"),c=o("AiMB"),d=o("mkWe"),h=o("qFKp"),u=o("X0gx"),m=o("sHQ4");function p(e){const{position:t="Bottom",onClose:o,children:p,className:b,theme:g=m}=e,v=Object(s.ensureNotNull)(Object(i.useContext)(d.a)),[_,w]=Object(i.useState)(0),T=Object(i.useRef)(null),C=Object(i.useContext)(u.a);return Object(i.useEffect)(()=>{const e=Object(s.ensureNotNull)(T.current);return e.focus({preventScroll:!0}),C.subscribe(v,o),Object(r.a)(!0),h.CheckMobile.iOS()&&Object(l.disableBodyScroll)(e),w(v.addDrawer()),()=>{C.unsubscribe(v,o);const t=v.removeDrawer();h.CheckMobile.iOS()&&Object(l.enableBodyScroll)(e),0===t&&Object(r.a)(!1)}},[]),n.a.createElement(c.a,null,n.a.createElement("div",{ +className:a(m.wrap,m["position"+t])},_===v.currentDrawer&&n.a.createElement("div",{className:m.backdrop,onClick:o}),n.a.createElement("div",{className:a(m.drawer,g.drawer,m["position"+t],b),ref:T,tabIndex:-1,"data-name":e["data-name"]},p)))}},Vike:function(e,t){e.exports=''},Wz44:function(e,t,o){e.exports={container:"container-3CL4Geq2",mirror:"mirror-3CL4Geq2",background:"background-3CL4Geq2",arrow:"arrow-3CL4Geq2"}},ijHL:function(e,t,o){"use strict";function i(e){return s(e,a)}function n(e){return s(e,l)}function s(e,t){const o=Object.entries(e).filter(t),i={};for(const[e,t]of o)i[e]=t;return i}function a(e){const[t,o]=e;return 0===t.indexOf("data-")&&"string"==typeof o}function l(e){return 0===e[0].indexOf("aria-")}o.d(t,"b",(function(){return i})),o.d(t,"a",(function(){return n})),o.d(t,"c",(function(){return s})),o.d(t,"e",(function(){return a})),o.d(t,"d",(function(){return l}))},mkWe:function(e,t,o){"use strict";o.d(t,"b",(function(){return s})),o.d(t,"a",(function(){return a}));var i=o("q1tI"),n=o.n(i);class s extends n.a.PureComponent{constructor(e){super(e),this._addDrawer=()=>{const e=this.state.currentDrawer+1;return this.setState({currentDrawer:e}),e},this._removeDrawer=()=>{const e=this.state.currentDrawer-1;return this.setState({currentDrawer:e}),e},this.state={currentDrawer:0}}render(){return n.a.createElement(a.Provider,{value:{addDrawer:this._addDrawer,removeDrawer:this._removeDrawer,currentDrawer:this.state.currentDrawer}},this.props.children)}}const a=n.a.createContext(null)},sHQ4:function(e,t,o){e.exports={wrap:"wrap-164vy-kj",positionBottom:"positionBottom-164vy-kj",backdrop:"backdrop-164vy-kj",drawer:"drawer-164vy-kj",positionLeft:"positionLeft-164vy-kj"}},uJ8n:function(e,t,o){e.exports={wrap:"wrap-379NmUSU",scrollWrap:"scrollWrap-379NmUSU",noScrollBar:"noScrollBar-379NmUSU",content:"content-379NmUSU",icon:"icon-379NmUSU",scrollBot:"scrollBot-379NmUSU",scrollTop:"scrollTop-379NmUSU",isVisible:"isVisible-379NmUSU",iconWrap:"iconWrap-379NmUSU",fadeBot:"fadeBot-379NmUSU",fadeTop:"fadeTop-379NmUSU"}},ybOa:function(e,t,o){e.exports={toggleButton:"toggleButton-3zv4iS2j",collapsed:"collapsed-3zv4iS2j",background:"background-3zv4iS2j",arrow:"arrow-3zv4iS2j"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/ed68e83c16f77203e73dbc4c3a7c7fa1.cur b/static/charting_library/bundles/ed68e83c16f77203e73dbc4c3a7c7fa1.cur new file mode 100644 index 0000000..8b12138 Binary files /dev/null and b/static/charting_library/bundles/ed68e83c16f77203e73dbc4c3a7c7fa1.cur differ diff --git a/static/charting_library/bundles/export-data.c819cfa996e2815ff11d.js b/static/charting_library/bundles/export-data.c819cfa996e2815ff11d.js new file mode 100644 index 0000000..582854d --- /dev/null +++ b/static/charting_library/bundles/export-data.c819cfa996e2815ff11d.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["export-data"],{SIoL:function(e,t,s){"use strict";s.r(t),s.d(t,"exportData",(function(){return r}));s("YFKU");var i=s("Eyy1"),l=s("ZJKN"),n=s("k9/m"),o=s("23IT"),a=s("cKqi"),c=s("xCUR");const d={includeTime:!0,includeUserTime:!1,includeSeries:!0,includeDisplayedValues:!1,includedStudies:"all"};function r(e,t={}){const s=Object.assign({},d,t),o={schema:[],data:[],displayedData:[]},r=e.timeScale().points(),f=e.mainSeries(),m=function(e,t){const s=e.allStudies().filter(e=>e.showInObjectTree());if("all"===t)return s;return s.filter(e=>t.includes(e.id()))}(e,s.includedStudies),T=m.filter(e=>e instanceof a.study_Overlay).map(e=>e.data());(s.includeSeries||0===T.length)&&T.push(f.bars());const y=function(e,t,s,o){const a=Object(i.ensureNotNull)(void 0!==s?e.indexOf(s,!0):e.firstIndex()),c=Object(i.ensureNotNull)(void 0!==o?e.indexOf(o,!0):e.lastIndex());let d=c,r=a;for(const e of t){const t=e.search(a,n.PlotRowSearchMode.NearestRight);null!==t&&t.indexr&&(r=s.index)}return Object(i.assert)(d<=r,"Range must contain at least 1 time point"),new l.BarsRange(d,r)}(r,T,s.from,s.to),w=y.firstBar(),O=y.lastBar();s.includeTime&&o.schema.push({type:"time"});const b=o.schema.length;s.includeUserTime&&o.schema.push({type:"userTime"});const g=o.schema.length;if(s.includeSeries){const e=f.statusProvider({hideResolution:!0}).getSplitTitle().filter(e=>""!==e).join(", ");o.schema.push(h("open",e)),o.schema.push(h("high",e)),o.schema.push(h("low",e)),o.schema.push(h("close",e))}let j=o.schema.length;const P=[];for(const e of m){const t=u(e);P.push(t),o.schema.push(...t.fields)}const x=o.schema.length;if(0===x)return o;for(let e=w;e<=O;++e){const e=new Float64Array(x);e.fill(NaN),o.data.push(e),s.includeDisplayedValues&&o.displayedData.push(new Array(x).fill(""))}if(s.includeTime||s.includeUserTime){const t=e.timeScale(),l=e.dateTimeFormatter();for(let e=w;e<=O;++e){s.includeTime&&(o.data[e-w][0]=Object(i.ensureNotNull)(r.valueAt(e)));const n=Object(i.ensureNotNull)(t.indexToUserTime(e));if(s.includeUserTime&&(o.data[e-w][b]=n.getTime()/1e3),s.includeDisplayedValues){const t=l.format(n);s.includeTime&&(o.displayedData[e-w][0]=t),s.includeUserTime&&(o.displayedData[e-w][b]=t)}}}if(s.includeSeries){const e=f.bars().range(w,O),t=Object(c.a)(f);e.each((e,i)=>{const l=o.data[e-w],n=p(i[1]),a=p(i[2]),c=p(i[3]),d=p(i[4]);if(l[g]=n,l[g+1]=a,l[g+2]=c,l[g+3]=d,s.includeDisplayedValues){const s=o.displayedData[e-w];s[g]=t(n),s[g+1]=t(a),s[g+2]=t(c),s[g+3]=t(d)}return!1})}for(let e=0;e{const i=o.data[e-c],n=p(t[a]);return i[r]=n,s.includeDisplayedValues&&(o.displayedData[e-c][r]=l(n)),!1})}j+=i.fields.length}return o}function u(e){const t=e.metaInfo(),s={fieldToPlotIndex:[],fieldPlotOffsets:[],fields:[] +},l=e.id(),n=e.title(!1,void 0,!1);for(let a=0;a' + }, + "0ZwQ": function(t, e, i) { + "use strict"; + var o = i("8+VR"), + n = i("9uLv"), + s = i("Vdly"), + r = i("aIyQ"), + a = i.n(r), + l = i("hY0g"), + c = i.n(l), + d = i("cZRT"); + class h extends d.a { + _startLoading() { + return i.e("hammerjs").then(i.bind(null, "be1f")).then(t => t.HammerJS) + } + } + var u = i("VVxS"); + i("Eyy1"); + + function p(t, e = !1) { + const i = getComputedStyle(t), + o = [i.height]; + return "border-box" !== i.boxSizing && o.push(i.paddingTop, i.paddingBottom, i + .borderTopWidth, i.borderBottomWidth), e && o.push(i.marginTop, i.marginBottom), o + .reduce((t, e) => t + (parseFloat(e) || 0), 0) + } + + function g(t, e = !1) { + const i = getComputedStyle(t), + o = [i.width]; + return "border-box" !== i.boxSizing && o.push(i.paddingLeft, i.paddingRight, i + .borderLeftWidth, i.borderRightWidth), e && o.push(i.marginLeft, i.marginRight), o + .reduce((t, e) => t + (parseFloat(e) || 0), 0) + } + var _ = i("qFKp"); + class m { + constructor(t) { + var e, i; + this._helper = null, this._handleDragStart = t => { + var e; + if (null !== this._helper) return; + if (!(t.target instanceof Element && this._handle.contains(t.target))) + return; + const i = this._source; + i.classList.add("ui-draggable-dragging"); + const o = this._getEventTarget(); + o.addEventListener("pointermove", this._handleDragMove), o.addEventListener( + "pointerup", this._handleDragStop), o.addEventListener( + "pointercancel", this._handleDragStop), o.setPointerCapture(t + .pointerId); + const [n, s] = [g(i), p(i)]; + this._helper = { + pointer: t.pointerId, + startX: t.clientX, + startY: t.clientY, + startTop: parseFloat(i.style.top) || 0, + startLeft: parseFloat(i.style.left) || 0, + nextTop: null, + nextLeft: null, + raf: null, + size: [n, s], + containment: this._containment instanceof HTMLElement ? [parseInt( + getComputedStyle(this._containment).borderLeftWidth) + + parseInt(getComputedStyle(this._containment).paddingLeft), + parseInt(getComputedStyle(this._containment) + .borderTopWidth) + parseInt(getComputedStyle(this + ._containment).paddingTop), this._containment + .offsetWidth - parseInt(getComputedStyle(this._containment) + .borderRightWidth) - parseInt(getComputedStyle(this + ._containment).paddingRight) - parseInt( + getComputedStyle(i).marginLeft) - parseInt( + getComputedStyle(i).marginRight) - n, this._containment + .offsetHeight - parseInt(getComputedStyle(this._containment) + .borderBottomWidth) - parseInt(getComputedStyle(this + ._containment).paddingBottom) - parseInt( + getComputedStyle(i).marginTop) - parseInt( + getComputedStyle(i).marginBottom) - s + ] : "window" === this._containment ? [window.scrollX, window + .scrollY, window.scrollX + document.documentElement + .offsetWidth - n, window.scrollY + document.documentElement + .offsetHeight - s + ] : null + }, null === (e = this._start) || void 0 === e || e.call(this) + }, this._handleDragMove = t => { + var e; + if (null === this._helper || this._helper.pointer !== t.pointerId) return; + const i = this._source, + o = this._helper.nextTop, + n = this._helper.nextLeft, + s = "y" === this._axis || !1 === this._axis || 0 !== t.movementY; + if (s) { + const e = this._helper.startTop; + isFinite(e) && (this._helper.nextTop = t.clientY - this._helper.startY + + e) + } + const r = "x" === this._axis || !1 === this._axis || 0 !== t.movementX; + if (r) { + const e = this._helper.startLeft; + isFinite(e) && (this._helper.nextLeft = t.clientX - this._helper + .startX + e) + } + if (null !== this._helper.containment) { + const [t, e, i, o] = this._helper.containment; + s && this._helper.nextTop && (this._helper.nextTop = Math.min(this + ._helper.nextTop, o), this._helper.nextTop = Math.max(this + ._helper.nextTop, e)), r && this._helper.nextLeft && (this + ._helper.nextLeft = Math.min(this._helper.nextLeft, i), this + ._helper.nextLeft = Math.max(this._helper.nextLeft, t)) + } + null !== this._helper.raf || o === this._helper.nextTop && n === this + ._helper.nextLeft || (this._helper.raf = requestAnimationFrame(() => { + null !== this._helper && (null !== this._helper.nextTop && ( + i.style.top = this._helper.nextTop + "px", this + ._helper.nextTop = null), null !== this._helper + .nextLeft && (i.style.left = this._helper.nextLeft + + "px", this._helper.nextLeft = null), this + ._helper.raf = null) + })), null === (e = this._drag) || void 0 === e || e.call(this) + }, this._handleDragStop = t => { + var e; + if (null === this._helper || this._helper.pointer !== t.pointerId) return; + this._source.classList.remove("ui-draggable-dragging"); + const i = this._getEventTarget(); + i.removeEventListener("pointermove", this._handleDragMove), i + .removeEventListener("pointerup", this._handleDragStop), i + .removeEventListener("pointercancel", this._handleDragStop), i + .releasePointerCapture(this._helper.pointer), this._helper = null, + null === (e = this._stop) || void 0 === e || e.call(this) + }; + const o = this._source = t.source; + o.classList.add("ui-draggable"); + const n = this._handle = null !== (e = t.handle ? o.querySelector(t.handle) : + null) && void 0 !== e ? e : o; + n.style.touchAction = "none", n.classList.add("ui-draggable-handle"); + this._getEventTarget().addEventListener("pointerdown", this._handleDragStart), this + ._start = t.start, this._stop = t.stop, this._drag = t.drag, this._axis = + null !== (i = t.axis) && void 0 !== i && i, this._containment = t.containment + } + destroy() { + const t = this._source; + t.classList.remove("ui-draggable"), t.classList.remove("ui-draggable-dragging"); + this._handle.style.touchAction = ""; + const e = this._getEventTarget(); + e.removeEventListener("pointerdown", this._handleDragStart), e.removeEventListener( + "pointermove", this._handleDragMove), e.removeEventListener("pointerup", + this._handleDragStop), e.removeEventListener("pointercancel", this + ._handleDragStop), null !== this._helper && (this._helper.raf && + cancelAnimationFrame(this._helper.raf), e.releasePointerCapture(this._helper + .pointer), this._helper = null) + } + _getEventTarget() { + return _.CheckMobile.iOS() || Object(_.isMac)() && o.touch ? window.document + .documentElement : this._handle + } + } + var b = i("gWrr"), + v = i("JWMC"), + w = i("qAO1"); + i("PwLo"); + i.d(e, "a", (function() { + return f + })), i.d(e, "b", (function() { + return C + })); + const f = "floating-toolbar-react-widgets", + y = + `
${w}
`; + class C { + constructor(t) { + this._widget = document.createElement("div"), this._isVertical = !1, + this._hiddingTimeoutId = null, this._visibility = new c.a(!1), this + ._windowResizeListener = this._onWindowResize.bind(this), this + ._reorderedDelegate = new a.a, this._responsiveResizeFunction = null, this + ._showTimeStamp = null, this._draggable = null, this + ._preventClickUntilAnimation = t => { + null !== this._showTimeStamp && performance.now() - this._showTimeStamp < + this.hideDuration() && t.stopPropagation() + }, C._toolbars.push(this), this._options = t, this._widget = Object(b.b)(y), + this._content = this._widget.getElementsByClassName("js-content").item(0), this + ._reactWidgetsContainer = this._widget.getElementsByClassName(f).item(0), this + ._setZIndex(C._startZIndex + C._toolbars.length - 1), this._options.addClass && + (this._widget.className += " " + this._options.addClass), this._options[ + "data-name"] && (this._widget.dataset.name = this._options["data-name"]), + this._options.layout && "auto" !== this._options.layout && (this._isVertical = + "vertical" === this._options.layout, this._updateLayoutType(), this + ._updateAxisOption()), this._widget.addEventListener("click", this + ._preventClickUntilAnimation, !0) + } + destroy() { + this.hide(!0), C._toolbars.splice(C._toolbars.indexOf(this), 1), this._widget + .removeEventListener("click", this._preventClickUntilAnimation, !0), document + .body.contains(this._widget) && document.body.removeChild(this._widget), + null !== this._draggable && this._draggable.destroy(), this._widget.innerHTML = + "", this._responsiveResizeFunction = null + } + setResponsiveResizeFunc(t) { + this._responsiveResizeFunction = t + } + isVisible() { + return this._visibility.value() + } + visibility() { + return this._visibility.readonly() + } + isVertical() { + return this._isVertical + } + show() { + this.isVisible() || (document.body.contains(this._widget) || (this._init(), document + .body.appendChild(this._widget)), this._setHiddingTimeout(null), window + .addEventListener("resize", this._windowResizeListener), this.raise(), this + ._visibility.setValue(!0), this._showTimeStamp = performance.now(), this + ._widget.classList.contains("i-hidden") ? (this._widget.classList.remove( + "i-hidden"), setTimeout(() => { + this.isVisible() && this._widget.classList.remove("i-closed") + })) : this._widget.classList.remove("i-closed"), this._onWindowResize()) + } + hide(t = !1) { + if (!this.isVisible()) return; + const e = this._widget.classList.contains("i-closed"); + if (this._widget.classList.add("i-closed"), this._visibility.setValue(!1), t || e) + this._setHiddingTimeout(null), this._widget.classList.add("i-hidden"); + else { + const t = setTimeout(() => { + this._setHiddingTimeout(null), this._widget.classList.add( + "i-hidden") + }, this.hideDuration()); + this._setHiddingTimeout(t) + } + window.removeEventListener("resize", this._windowResizeListener) + } + raise() { + C._toolbars.length + C._startZIndex !== this._zIndex() && (C._toolbars.splice(C + ._toolbars.indexOf(this), 1), C._toolbars.push(this), C + ._updateAllZIndexes()) + } + hideDuration() { + return .75 * n.b + } + addWidget(t, e = {}) { + const i = this.widgetsCount(); + if (void 0 === e.index && (e.index = i), e.index < 0 || e.index > i) + throw new Error(`Index must be in [0, ${i}]`); + const o = document.createElement("div"); + o.className = "tv-floating-toolbar__widget js-widget", o.appendChild(t); + const n = e.index === i ? null : this._content.childNodes.item(e.index); + this._content.insertBefore(o, n), + this._onWindowResize() + } + getReactWidgetContainer() { + return this._reactWidgetsContainer + } + removeWidget(t) { + const e = this._findWrapperForWidget(t); + e && (this._content.removeChild(e), this._onWindowResize()) + } + widgetsCount() { + return this._content.childNodes.length + } + showWidget(t) { + const e = this._findWrapperForWidget(t); + e && e.classList.remove("i-hidden") + } + hideWidget(t) { + const e = this._findWrapperForWidget(t); + e && e.classList.add("i-hidden") + } + removeWidgets() { + for (; this._content.firstChild;) this._content.removeChild(this._content + .firstChild); + this._onWindowResize() + } + onWidgetsReordered() { + return this._reorderedDelegate + } + onContextMenu(t) { + if (o.mobiletouch) { + (new h).load().then(e => { + const i = new e(this._widget); + i.get("press").set({ + time: 500 + }), i.on("press", e => { + this._preventWidgetTouchEndEvent(), t(e.srcEvent) + }) + }) + } else this._widget.addEventListener("contextmenu", t) + } + checkPosition() { + const t = this._getCorrectedWidgetRect(), + e = { + left: t.left, + top: t.top + }; + this._correctPosition(e), t.left === e.left && t.top === e.top || (this._widget + .style.left = e.left + "px", this._widget.style.top = e.top + "px") + } + _determineCurrentLayoutVertical(t) { + const e = this._isVertical ? t.height : t.width; + return window.innerWidth < e && window.innerWidth < window.innerHeight + } + _getWidget() { + return this._widget + } + _findWrapperForWidget(t) { + const e = this._content.getElementsByClassName("js-widget"); + for (let i = 0; i < e.length; ++i) { + const o = e.item(i); + if (o.contains(t)) return o + } + return null + } + _onVerticalChanged(t, e) {} + _setHiddingTimeout(t) { + null !== this._hiddingTimeoutId && clearTimeout(this._hiddingTimeoutId), this + ._hiddingTimeoutId = t + } + _preventWidgetTouchEndEvent() { + const t = e => { + e.preventDefault(), this._widget.removeEventListener("touchend", t) + }; + this._widget.addEventListener("touchend", t) + } + _updateLayoutType() { + this._widget.classList.toggle("i-vertical", this._isVertical) + } + _updateAxisOption() { + 0 + } + _onWindowResize() { + if ("auto" === (this._options.layout || "auto")) { + const t = this._isVertical, + e = this._getCorrectedWidgetRect(); + this._isVertical = this._determineCurrentLayoutVertical(e), this + ._updateLayoutType(), t !== this._isVertical && (this._onVerticalChanged( + this._isVertical, t), this._updateAxisOption()) + } + this.checkPosition(), this._resizeResponsive() + } + _resizeResponsive() { + if (null === this._responsiveResizeFunction) return; + let t = this._options.layout || "auto"; + "auto" === t && (t = this._isVertical ? "vertical" : "horizontal"); + const e = "vertical" === t ? this._widget.clientHeight : this._widget.clientWidth, + i = ("vertical" === t ? window.innerHeight : window.innerWidth) - e; + this._responsiveResizeFunction(e, i, t) + } + _correctPosition(t) { + const e = this._getCorrectedWidgetRect(); + t.left + e.width > window.innerWidth && (t.left = Math.max(0, window.innerWidth - e + .width)), t.top + e.height > window.innerHeight && (t.top = Math.max(0, + window.innerHeight - e.height)), t.left = Math.max(0, t.left), t.top = Math + .max(0, t.top) + } + _setZIndex(t) { + this._widget.style.zIndex = String(t) + } + _zIndex() { + return Number(this._widget.style.zIndex) + } + _loadPosition() { + let t; + if ("device" === this._options.positionStorageType) { + const e = u.TVLocalStorage.getItem(this._options.positionSettingsKey); + t = null !== e ? JSON.parse(e) : this._options.defaultPosition + } else t = Object(s.getJSON)(this._options.positionSettingsKey, this._options + .defaultPosition); + this._widget.style.left = Math.round(t.left) + "px", this._widget.style.top = Math + .round(t.top) + "px", this._onWindowResize() + } + _savePosition() { + const t = this._widget.getBoundingClientRect(); + if ("device" === this._options.positionStorageType) try { + u.TVLocalStorage.setItem(this._options.positionSettingsKey, JSON.stringify({ + left: t.left, + top: t.top + })) + } catch (t) {} else Object(s.setJSON)(this._options.positionSettingsKey, { + left: t.left, + top: t.top + }) + } + _init() { + this._loadPosition(), this._draggable = new m({ + source: this._widget, + containment: "window", + handle: ".js-drag", + stop: this._savePosition.bind(this) + }), this._widget.addEventListener("pointerdown", this.raise.bind(this)) + } + _initSortable() { + let t = -1; + lazyJqueryUI(this._content).sortable({ + start: (e, i) => { + t = i.item.index() + }, + stop: (e, i) => { + const o = i.item.index(); + t !== o && (Object(v.trackEvent)("Floating Toolbar", + "User Sort"), this._reorderedDelegate.fire(t, o)) + }, + tolerance: "pointer", + distance: 5, + containment: !!this._options.dragOnlyInsideToolbar && "parent", + scroll: !1, + placeholder: "sortable-placeholder", + forcePlaceholderSize: !0 + }), this._updateAxisOption() + } + _getCorrectedWidgetRect() { + const t = this._widget.getBoundingClientRect(); + if (this._widget.classList.contains("i-closed")) { + const e = 1 / .925 - 1, + i = t.width * e, + o = t.height * e; + return { + bottom: t.bottom + o / 2, + height: t.height + o, + left: t.left - i / 2, + right: t.right + i / 2, + top: t.top - o / 2, + width: t.width + i + } + } + return t + } + static _updateAllZIndexes() { + C._toolbars.forEach((t, e) => { + t._setZIndex(C._startZIndex + e) + }) + } + } + C._startZIndex = 20, C._toolbars = [] + }, + "0fuu": function(t, e) { + t.exports = + '' + }, + "2F1E": function(t, e) { + t.exports = + '' + }, + "4QAy": function(t, e, i) {}, + "5hRh": function(t, e, i) { + "use strict"; + i.d(e, "a", (function() { + return n + })); + var o = i("q1tI"); + const n = t => { + const [e, i] = Object(o.useState)(t.value()); + return Object(o.useEffect)(() => { + const e = t => { + i(t.value()) + }; + e(t); + const o = {}; + return t.subscribe(o, e), () => t.unsubscribe(o, e) + }, [t]), e + } + }, + ADFN: function(t, e, i) {}, + EvtC: function(t, e, i) { + t.exports = { + button: "button-2YcRd2gv" + } + }, + HWhk: function(t, e) { + t.exports = + '' + }, + IhRv: function(t, e, i) { + "use strict"; + i.r(e), + i.d(e, "ColorPickerButton", (function() { + return b + })); + var o = i("q1tI"), + n = i.n(o), + s = i("TSYQ"), + r = i.n(s), + a = i("Eyy1"), + l = i("Iivm"), + c = i("eJTA"), + d = i("Tmoa"), + h = i("V3OP"), + u = i("htM8"), + p = i("wLjq"), + g = i("82wv"), + _ = i("5hRh"), + m = i("X1vi"); + + function b(t) { + const { + property: e, + icon: i, + model: s, + title: b, + className: v + } = t, w = Object(_.a)(e), f = Object(o.useRef)(null), y = w ? Object(c.parseRgba)(w)[3] : + void 0, C = "" === w, x = String(T()).toLowerCase() === p.c, [W, P, S] = Object(h.a)(); + return n.a.createElement(g.a, { + className: v, + content: n.a.createElement("div", { + className: m.wrap + }, n.a.createElement(l.a, { + className: m.icon, + icon: i + }), n.a.createElement("div", { + className: m.colorBg + }, n.a.createElement("div", { + className: r()(m.color, C && m.multicolor, x && m.white), + style: C ? void 0 : { + backgroundColor: w + } + }))), + arrow: !1, + title: b, + ref: f, + "data-name": t["data-name"], + menuDataName: t["data-name"] + "-menu" + }, n.a.createElement(u.a, { + color: T(), + opacity: y, + onColorChange: function(t, e) { + const i = w ? Object(d.alphaToTransparency)(Object(c.parseRgba)(w)[ + 3]) : 0; + L(Object(d["generateColor"])(String(t), i, true)), e || Object(a + .ensureNotNull)(f.current).close() + }, + onOpacityChange: function(t) { + L(Object(d.generateColor)(w, Object(d.alphaToTransparency)(t), !0)) + }, + selectOpacity: void 0 !== y, + selectCustom: !0, + customColors: W, + onAddColor: function(t) { + P(t), Object(a.ensureNotNull)(f.current).close() + }, + onRemoveCustomColor: S + })); + + function T() { + return w ? Object(c.rgbToHexString)(Object(c.parseRgb)(w)) : null + } + + function L(t) { + s.setProperty(e, t, b) + } + } + }, + Lnv9: function(t, e) { + t.exports = + '' + }, + O5Oz: function(t, e) { + t.exports = + '' + }, + PwLo: function(t, e, i) {}, + SAe1: function(t, e, i) { + "use strict"; + i.d(e, "a", (function() { + return r + })); + var o = i("q1tI"), + n = i("rzV7"), + s = i.n(n); + class r extends o.Component { + constructor(t) { + super(t), this._handleMediaChange = () => { + const t = l(this.state.queries, (t, e) => e.matches); + let e = !1; + for (const i in t) + if (t.hasOwnProperty(i) && this.state.matches[i] !== t[i]) { + e = !0; + break + } e && this.setState({ + matches: t + }) + }; + const { + rules: e + } = this.props; + this.state = a(e) + } + shouldComponentUpdate(t, e) { + return !s()(t, this.props) || (!s()(e.rules, this.state.rules) || !s()(e + .matches, this.state.matches)) + } + componentDidMount() { + this._migrate(null, this.state.queries) + } + componentDidUpdate(t, e) { + s()(t.rules, this.props.rules) || this._migrate(e.queries, this.state.queries) + } + componentWillUnmount() { + this._migrate(this.state.queries, null) + } + render() { + return this.props.children(this.state.matches) + } + static getDerivedStateFromProps(t, e) { + if (s()(t.rules, e.rules)) return null; + const { + rules: i + } = t; + return a(i) + } + _migrate(t, e) { + null !== t && l(t, (t, e) => { + e.removeListener(this._handleMediaChange) + }), null !== e && l(e, (t, e) => { + e.addListener(this._handleMediaChange) + }) + } + } + + function a(t) { + const e = l(t, (t, e) => window.matchMedia(e)); + return { + queries: e, + matches: l(e, (t, e) => e.matches), + rules: { + ...t + } + } + } + + function l(t, e) { + const i = {}; + for (const o in t) t.hasOwnProperty(o) && (i[o] = e(o, t[o])); + return i + } + }, + UXdH: function(t, e) { + t.exports = + '' + }, + Ve4Q: function(t, e, i) { + "use strict"; + i.r(e); + var o = i("q1tI"), + n = i.n(o), + s = i("i8i4"), + r = i.n(s), + a = i("YFKU"), + l = i("Kxc7"), + c = i("hY0g"), + d = i.n(c), + h = i("ogJP"), + u = i("CW80"), + p = i("mMWL"), + g = i("j3hX"), + _ = i("Eyy1"), + m = i("tc+8"), + b = i.n(m); + class v extends b.a { + constructor(t, e, i) { + super(), this._listenersMappers = [], this._isProcess = !1, this._baseProperty = + t, this._undoModel = e, this._undoText = i + } + destroy() { + this._baseProperty.destroy() + } + value() { + return this._baseProperty.value() + } + setValue(t) { + this._isProcess = !0, this._baseProperty.setValue(t, void 0, { + applyValue: (t, e) => this._undoModel.setProperty(t, e, this + ._undoText) + }), this._isProcess = !1, this._listenersMappers.forEach(t => { + t.method.call(t.obj, this) + }) + } + subscribe(t, e) { + const i = i => { + this._isProcess || e.call(t, this) + }, + o = { + obj: t, + method: e, + callback: i + }; + this._listenersMappers.push(o), this._baseProperty.subscribe(t, i) + } + unsubscribe(t, e) { + var i; + const o = Object(_.ensureDefined)(null === (i = this._listenersMappers.find(i => + i.obj === t && i.method === e)) || void 0 === i ? void 0 : i + .callback); + this._baseProperty.unsubscribe(t, o) + } + unsubscribeAll(t) { + this._baseProperty.unsubscribeAll(t) + } + } + var w = i("turx"), + f = i("SAe1"), + y = i("0ZwQ"), + C = i("uhCe"); + const x = y.a + "__button"; + + function W(t) { + const { + templateButton: e, + propertyButtons: i, + commonButtons: o, + isDrawingFinished: s, + activeChartWidget: r + } = t, a = r.hasModel() && r.model().selection().dataSources(); + return a && a.length ? n.a.createElement(f.a, { + rules: { + isSmallWidth: C.a.TabletSmall, + isSmallHeight: "screen and (max-height: 428px)" + } + }, ({ + isSmallWidth: t, + isSmallHeight: e + }) => n.a.createElement(n.a.Fragment, null, l(), s && n.a.createElement(n.a + .Fragment, null, Boolean(i.length) && i.map((i, o) => n.a.createElement(i + .component, { + ...i.props, + key: `${i.props.title}_${o}`, + className: x, + isSmallScreen: t || e + })), Boolean(o.length) && o.map((i, o) => { + const s = t || e; + return s ? i.showForSmallScreen ? n.a.createElement(i.component, { + ...i.props, + isSmallScreen: s, + key: `${i.props.title}_${o}`, + className: x + }) : null : n.a.createElement(i.component, { + ...i.props, + key: `${i.props.title}_${o}`, + className: x + }) + })))) : l(); + + function l() { + return null === e ? null : n.a.createElement(e.component, { + ...e.props, + isDrawingFinished: s, + className: x + }) + } + } + var P = i("JWMC"), + S = i("p0W+"), + T = i("Xxuz"); + + function L(t) { + const { + title: e, + activeChartWidget: i, + className: o + } = t; + return n.a.createElement(S.a, { + className: o, + icon: T, + title: e, + onClick: function() { + Object(P.trackEvent)("GUI", "Context action on drawings", "Settings"), i + .showChartPropertiesForSource(i.model().selection() + .lineDataSources()[0], void 0, { + onWidget: i.onWidget() + }) + }, + "data-name": "settings" + }) + } + var E = i("5hRh"), + B = i("TSYQ"), + k = i("4rU7"), + O = i("ucyy"); + + function V(t) { + const { + className: e, + ...i + } = t; + return n.a.createElement(k.a, { + className: B(e, O.button), + tooltipPosition: "horizontal", + ...i + }) + } + var I = i("43BO"), + M = i("Uh5y"); + + function R(t) { + const { + activeChartWidget: e, + className: i + } = t, o = e.model().selection().lineDataSources()[0].properties().frozen, s = Object(E.a)( + o), r = s ? { + title: Object(a.t)("Unlock"), + icon: I + } : { + title: Object(a.t)("Lock"), + icon: M + }; + return n.a.createElement(V, { + className: i, + isActive: Boolean(s), + onClick: function() { + Object(P.trackEvent)("GUI", "Context action on drawings", "Lock"), e + .toggleLockSelectedObject() + }, + "data-name": Boolean(s) ? "unlock" : "lock", + ...r + }) + } + var N = i("aVjL"); + + function j(t) { + const { + title: e, + activeChartWidget: i, + className: o + } = t; + return n.a.createElement(S.a, { + className: o, + icon: N, + title: e, + "data-name": "remove", + onClick: function() { + Object(P.trackEvent)("GUI", "Context action on drawings", "Remove"), i + .removeSelectedSources() + } + }) + } + var F = i("Iivm"), + A = i("8+VR"), + D = i("/3z9"), + z = i("lxNp"), + H = i("82wv"), + U = i("IAAr"), + G = i("7KDR"), + Q = i("ycI/"), + q = i("5VQP"), + K = i("HZKX"), + Y = i("HWhk"), + Z = i("9dnG"), + $ = i("dmHa"); + + function X(t) { + const { + title: e, + activeChartWidget: s, + isSmallScreen: r, + className: l + } = t, c = s.model(), d = c.selection().lineDataSources(), [h, u] = Object(o.useState)([]), + p = Object(o.useRef)(null), g = Object(o.useMemo)(() => new K.ActionsProvider(s), [s]); + return n.a.createElement(n.a.Fragment, null, n.a.createElement(Q.a, { + keyCode: 27, + eventType: "keyup", + handler: function() { + Object(_.ensureNotNull)(p.current).close() + } + }), n.a.createElement(H.a, { + className: l, + ref: p, + arrow: !1, + onOpen: r ? void 0 : function() { + const t = [new G.Action({ + label: Object(a.t)("Visual order"), + icon: Z, + subItems: m(), + name: "visual-order" + })], + e = function() { + const t = [], + e = D.isMacKeyboard ? " +" : "", + o = d.filter(t => t.cloneable()); + o.length > 0 && t.push(new G.Action({ + name: "clone", + icon: i("+KIV"), + shortcutHint: D.humanReadableModifiers(z + .Modifiers.Mod) + e + " Drag", + label: Object(a.t)("Clone"), + onExecute: () => { + c.cloneLineTools(o, !1), Object(P + .trackEvent)("GUI", + "Context action on drawings", + "Clone") + } + })); + const n = d.filter(t => t.copiable()); + if (n.length > 0) { + const i = { + name: "copy", + label: Object(a.t)("Copy"), + shortcutHint: D.humanReadableModifiers(z + .Modifiers.Mod) + e + " C", + onExecute: () => { + s.chartWidgetCollection().clipboard + .uiRequestCopy(n) + } + }; + t.push(new G.Action(i, "Copy")) + } + if (! function() { + if (!(null == s ? void 0 : s.isMultipleLayout())) + return !1; + return d.some(t => t.isSynchronizable()) + }()) return t; + d.filter(t => !!t.linkKey().value()).length ? t.push(new G + .Action({ + name: "stop-sync", + label: Object(a.t)("Stop syncing"), + onExecute: () => { + c.unlinkLines && c.unlinkLines(d) + } + })) : t.push(new G.Action({ + name: "sync", + label: Object(a.t)("Sync to all charts"), + onExecute: () => { + c.copyToOtherCharts(d) + } + })); + return t + }(); + e.length && t.push(new G.Separator, ...e); + t.push(new G.Separator, new G.Action({ + label: Object(a.t)("Hide"), + icon: $, + onExecute: () => { + s.hideSelectedObject() + }, + name: "hide" + })), u(J(t)) + }, + onClick: r ? function(t) { + g.contextMenuActionsForSources(d).then(e => { + window.matchMedia(C.a.TabletSmall).matches ? q + .ContextMenuManager.createMenu(J(e), { + mode: "drawer", + "data-name": "more-menu" + }).then(e => e.show(t)) : u(J(e)) + }) + } : void 0, + title: e, + content: n.a.createElement(F.a, { + icon: Y + }), + "data-name": "more", + menuDataName: "more-menu" + }, n.a.createElement(U.a, { + parentIsOpened: !0, + items: h + }))); + + function m() { + const t = [], + e = c.availableZOrderOperations(d), + i = new G.Action({ + name: "bring-to-front", + label: Object(a.t)("Bring to Front"), + onExecute: () => { + c.bringToFront(d) + }, + disabled: 1 === d.length && !e.bringToFrontEnabled + }), + o = new G.Action({ + name: "send-to-back", + label: Object(a.t)("Send to Back"), + onExecute: () => { + c.sendToBack(d) + }, + disabled: 1 === d.length && !e.sendToBackEnabled + }), + n = new G.Action({ + name: "bring-forward", + label: Object(a.t)("Bring Forward"), + onExecute: () => { + c.bringForward(d) + }, + disabled: 1 === d.length && !e.bringForwardEnabled + }), + s = new G.Action({ + name: "send-backward", + label: Object(a.t)("Send Backward"), + onExecute: () => { + c.sendBackward(d) + }, + disabled: 1 === d.length && !e.sendBackwardEnabled + }); + return t.push(i, o, n, s), t + } + } + + function J(t) { + return A.touch && !window.matchMedia("(pointer:fine)").matches ? t.filter(t => "Copy" !== t + .id) : t + } + var tt = i("972a"), + et = i("bQEj"), + it = i("UXdH"), + ot = i("ZSM+"); + + function nt(t) { + const { + property: e, + model: i, + title: s, + className: r + } = t, l = Object(E.a)(e), c = Object(o.useMemo)(() => [new G.Action({ + icon: et, + label: Object(a.t)("Line"), + active: tt.b.Solid === l, + onExecute: () => i.setProperty(e, tt.b.Solid, s) + }), new G.Action({ + icon: it, + label: Object(a.t)("Dashed line"), + active: tt.b.Dashed === l, + onExecute: () => i.setProperty(e, tt.b.Dashed, s) + }), new G.Action({ + icon: ot, + label: Object(a.t)("Dotted line"), + active: tt.b.Dotted === l, + onExecute: () => i.setProperty(e, tt.b.Dotted, s) + })], [i, e, l]); + return n.a.createElement(H.a, { + className: r, + arrow: !1, + content: n.a.createElement(F.a, { + icon: st(l) + }), + title: s, + "data-name": t["data-name"], + menuDataName: t["data-name"] + "-menu" + }, n.a.createElement(U.a, { + items: c + })) + } + + function st(t) { + switch (t) { + case tt.b.Solid: + return et; + case tt.b.Dashed: + return it; + case tt.b.Dotted: + return ot; + default: + return "" + } + } + const rt = [10, 11, 12, 14, 16, 20, 24, 28, 32, 40]; + + function at(t) { + const { + property: e, + model: i, + title: o, + className: s + } = t, r = Object(E.a)(e), a = rt.map(t => new G.Action({ + label: t.toString(), + onExecute: () => i.setProperty(e, t, o), + active: t === r + })); + return n.a.createElement(H.a, { + arrow: !1, + content: r, + className: s, + title: o, + "data-name": t["data-name"], + menuDataName: t["data-name"] + "-menu" + }, n.a.createElement(U.a, { + items: a + })) + } + var lt = i("aIyQ"), + ct = i.n(lt); + i("m/4m"), i("ADFN"); + class dt extends y.b { + constructor(t) { + super(dt._prepareOptions(t)), this._onWidgetStateChangedDelegate = new ct.a, + this._statedWidgets = [], this._currentPopup = null, this + ._onWindowClickedListener = this._onWindowClicked.bind(this) + } + show() { + super.show(), document.addEventListener("mousedown", this + ._onWindowClickedListener) + } + hide(t) { + super.hide(t), document.removeEventListener("mousedown", this + ._onWindowClickedListener) + } + destroy() { + this._closePopup(), super.destroy() + } + addGroupedWidget(t, e = {}) { + Object(_.assert)(t.states.length > 0 && -1 !== dt._getStateIndexById(t, t + .currentStateId), + `Argument is invalid (count: ${t.states.length}, state: ${t.currentStateId})` + ); + const i = document.createElement("div"); + i.className = + "tv-grouped-floating-toolbar__widget-wrapper apply-common-tooltip", t + .widgetAddClass && i.classList.add(t.widgetAddClass), i.setAttribute( + "title", t.tooltip); + const o = { + isEnabled: !0, + statedWidget: t, + toolbarWidget: i + }, + n = this._onWidgetClicked.bind(this, o); + o.clickListener = n, i.addEventListener("click", n), this._updateWidgetPreview( + o), this.addWidget(i, e), this._statedWidgets.push(o) + } + findGroupedWidget(t) { + const e = this._statedWidgets.length; + for (let i = 0; i < e; ++i) { + if (this._statedWidgets[i].statedWidget.id === t) return i + } + return -1 + } + removeGroupedWidget(t) { + const e = this._statedWidgets.length; + for (let i = 0; i < e; ++i) { + const e = this._statedWidgets[i]; + if (e.statedWidget.id === t) return this._isPopupCreatedForWidget(t) && this + ._closePopup(), void 0 !== e.clickListener && e.toolbarWidget + .removeEventListener("click", e.clickListener), this.removeWidget(e + .toolbarWidget), this._statedWidgets.splice(i, 1), void this + ._updatePopupPosition() + } + Object(_.assert)(!1, `Unknown groupId(${t})`) + } + updateGroupedWidget(t, e) { + this._closePopup(); + const i = this._ensuredGetWidgetDataForId(t); + i.statedWidget.currentStateId = e.currentStateId, i.statedWidget.states = e + .states, this._updateWidgetPreview(i) + } + setGroupedWidgetEnabled(t, e) { + const i = this._ensuredGetWidgetDataForId(t); + i.isEnabled = e, i.toolbarWidget.classList.toggle("i-disabled", !e) + } + setGroupedWidgetState(t, e) { + const i = this._ensuredGetWidgetDataForId(t); + Object(_.assert)(-1 !== dt._getStateIndexById(i.statedWidget, e), + `Unknown stateId (${e})`), i.statedWidget.currentStateId = e, this + ._updateSubWidgetsState(i.statedWidget), this._updateWidgetPreview(i) + } + onWidgetStateChanged() { + return this._onWidgetStateChangedDelegate + } + _onVerticalChanged(t, e) { + this._updatePopupPosition() + } + _ensuredGetWidgetDataForId(t) { + for (const e of this._statedWidgets) + if (e.statedWidget.id === t) return e; + throw new Error(`Unknown groupId(${t})`) + } + _onWidgetClicked(t, e) { + const i = this._currentPopup && this._isPopupCreatedForWidget(t.statedWidget + .id); + this._closePopup(), !i && t.isEnabled && this._createPopup(t) + } + _createPopup(t) { + const e = { + createdFor: t.toolbarWidget, + element: document.createElement("div"), + stateWidgetId: t.statedWidget.id, + widgets: [] + }; + e.element.className += "tv-grouped-floating-toolbar__popup js-popup"; + const i = t.statedWidget.states.length; + t.statedWidget.states.forEach((o, n) => { + const s = this._createSubWidget(t, o), + r = this._onSubWidgetClicked.bind(this, t, o.id); + s.addEventListener("click", r), e.widgets.push({ + clickListener: r, + stateWidget: o, + widget: s + }), s.classList.add( + "tv-grouped-floating-toolbar__sub-widget--slide-right-" + n + ), s.classList.add( + "tv-grouped-floating-toolbar__sub-widget--slide-left-" + ( + i - n + 1)), o.readonly || e.element.appendChild(s) + }), this._currentPopup = e, this._updateSubWidgetsState(t.statedWidget), t + .toolbarWidget.classList.add("i-dropped"), this._getWidget().appendChild( + this._currentPopup.element), Promise.resolve().then(() => { + this._currentPopup && this._currentPopup.element.classList.add( + "i-opened") + }), this._updatePopupPosition() + } + _closePopup() { + if (this._statedWidgets.forEach(t => { + t.toolbarWidget.classList.remove("i-dropped") + }), !this._currentPopup) return; + const t = this._currentPopup.widgets, + e = this._currentPopup.element; + this._currentPopup = null, t.forEach(t => { + t.widget.removeEventListener("click", t.clickListener) + }), e.classList.remove("i-opened"), e.addEventListener("transitionend", + t => { + t.target === e && this._getWidget().removeChild(e) + }) + } + _updateWidgetPreview(t) { + const e = dt._getStateIndexById(t.statedWidget, t.statedWidget.currentStateId); + Object(_.assert)(-1 !== e, "Unknown state id: " + t.statedWidget + .currentStateId); + const i = t.statedWidget.states[e].widget.cloneNode(!0); + t.toolbarWidget.firstChild ? t.toolbarWidget.replaceChild(i, t.toolbarWidget + .firstChild) : (t.toolbarWidget.appendChild(i), t.toolbarWidget + .appendChild(dt._createCaret())) + } + _updateSubWidgetsState(t) { + this._currentPopup && this._isPopupCreatedForWidget(t.id) && this._currentPopup + .widgets.forEach(e => { + e.widget.classList.toggle(dt._activeSubWidgetClass, e.stateWidget + .id === t.currentStateId) + }) + } + _updatePopupPosition() { + if (!this._currentPopup) return; + const t = this._currentPopup.createdFor, + e = this._getWidget().getBoundingClientRect(), + i = this._findWrapperForWidget(t); + if (!i || !this._currentPopup) throw new Error( + "Toolbar has no wrapper for preview's widget or there is no popup"); + const o = i.getBoundingClientRect(), + n = this._currentPopup.element.getBoundingClientRect(), + s = this._currentPopup.element; + if (this.isVertical()) s.classList.remove( + "tv-grouped-floating-toolbar__popup--at-top"), s.style.top = o.top - e + .top + 1 + "px", s.style.left = "", e.left > window.innerWidth - e.right ? s + .classList.add("tv-grouped-floating-toolbar__popup--at-left") : s.classList + .remove("tv-grouped-floating-toolbar__popup--at-left"); + else { + s.classList.remove("tv-grouped-floating-toolbar__popup--at-left"); + let t = 0; + o.left + n.width > window.innerWidth ? e.left + n.width > window + .innerWidth && (t = e.width - n.width) : t = o.left - e.left + 1, s + .style.left = t + "px", e.bottom + n.height > window.innerHeight ? s + .classList.add("tv-grouped-floating-toolbar__popup--at-top") : (s + .classList.remove("tv-grouped-floating-toolbar__popup--at-top"), s + .style.top = "") + } + } + _isPopupCreatedForWidget(t) { + return Boolean(this._currentPopup && this._currentPopup.stateWidgetId === t) + } + _createSubWidget(t, e) { + const i = document.createElement("div"); + return i.className += "tv-grouped-floating-toolbar__sub-widget", t.statedWidget + .stateWidgetAddClass && i.classList.add(t.statedWidget.stateWidgetAddClass), + i.appendChild(e.widget), i + } + _onSubWidgetClicked(t, e) { + this._closePopup(), t.statedWidget.currentStateId !== e && (this + .setGroupedWidgetState(t.statedWidget.id, e), this + ._onWidgetStateChangedDelegate.fire(t.statedWidget.id, e)) + } + _onWindowClicked(t) { + if (this.isVisible() && this._currentPopup && !dt._isEventInElement(t, this + ._currentPopup.element)) { + for (let e = 0; e < this._statedWidgets.length; ++e) + if (dt._isEventInElement(t, this._statedWidgets[e].toolbarWidget)) + return; + this._closePopup() + } + } + static _getStateIndexById(t, e) { + for (let i = 0; i < t.states.length; ++i) + if (t.states[i].id === e) return i; + return -1 + } + static _createCaret() { + const t = document.createElement("div"); + return t.className = + "tv-caret tv-caret--small tv-caret--colored tv-grouped-floating-toolbar__caret", + t + } + static _prepareOptions(t) { + return t.addClass ? t.addClass += " tv-grouped-floating-toolbar" : t.addClass = + " tv-grouped-floating-toolbar", t + } + static _isEventInElement(t, e) { + return t.target === e || e.contains(t.target) + } + } + dt._activeSubWidgetClass = "tv-grouped-floating-toolbar__sub-widget--current"; + var ht = i("yMne"), + ut = i("GxN8"); + i.d(e, "LineToolPropertiesWidgetBase", (function() { + return pt + })); + class pt { + constructor(t) { + this._isDrawingFinished = new d.a(!0), this._currentTool = null, this + ._updateVisibilityTimeout = null, this._lineWidthsProperty = null, this + ._lineColorsProperty = null, + this._currentProperties = null, this._container = null, this + ._toolbarRendered = !1, this._templatesButton = null, this + ._propertyButtons = [], this._commonButtons = [], this._handleSourceEdit = t => { + p.isDirectionalMovementActive.value() || (t ? this._floatingToolbar.hide(! + 0) : this._toolbarRendered && this._floatingToolbar.show()) + }, this._chartWidgetCollection = t, this._floatingToolbar = new dt({ + defaultPosition: { + top: ht.b + 15, + left: window.innerWidth / 2 + }, + positionSettingsKey: "properties_toolbar.position", + positionStorageType: "device", + layout: "horizontal", + "data-name": "drawing-toolbar" + }), this._container = this._floatingToolbar.getReactWidgetContainer(), p + .isToolMovingNow.subscribe(this._handleSourceEdit), p.isToolEditingNow + .subscribe(this._handleSourceEdit) + } + activeChartWidget() { + return this._chartWidgetCollection.activeChartWidget.value() + } + selectedSources() { + return this._chartWidgetCollection.selectedSources.value() + } + hide() { + this._updateVisibilityTimeout && clearTimeout(this._updateVisibilityTimeout), this + ._updateVisibilityTimeout = setTimeout(() => { + Object(u.unsetNewToolProperties)(), this._floatingToolbar.hide(!0), this + ._isToolbarRendered() && this._unmountToolbar(), this + ._clearProperties(), this._clearCommonButtons() + }, 0) + } + _clearProperties() { + this._clearPropertyButtons(), this._lineWidthsProperty && (this._lineWidthsProperty + .destroy(), this._lineWidthsProperty = null), this._lineColorsProperty && ( + this._lineColorsProperty.destroy(), this._lineColorsProperty = null), this + ._currentProperties && (this._currentProperties = null) + } + _show() { + this._updateVisibilityTimeout && clearTimeout(this._updateVisibilityTimeout), this + ._updateVisibilityTimeout = setTimeout(() => { + this._renderToolbar(), this._floatingToolbar.show(), this + ._floatingToolbar.checkPosition() + }, 0) + } + _addPropertyButton(t) { + this._propertyButtons.push(t), this._renderToolbar() + } + _addCommonButton(t) { + this._commonButtons.push(t), this._renderToolbar() + } + _addTemplatesButton(t) { + this._templatesButton = t + } + _renderToolbar() { + null !== this._container && this.activeChartWidget() && this.activeChartWidget() + .hasModel() && (r.a.render(n.a.createElement(W, { + templateButton: this._templatesButton, + propertyButtons: this._propertyButtons, + commonButtons: this._commonButtons, + isDrawingFinished: this._isDrawingFinished.value(), + activeChartWidget: this.activeChartWidget() + }), this._container), this._toolbarRendered = !0) + } + _unmountToolbar() { + null !== this._container && (r.a.unmountComponentAtNode(this._container), this + ._toolbarRendered = !1) + } + _clearTemplatesButton() { + this._templatesButton = null + } + _clearPropertyButtons() { + this._propertyButtons = [] + } + _clearCommonButtons() { + this._commonButtons = [] + } + _isToolbarRendered() { + return this._toolbarRendered + } + _createSettingsButton() { + if (this.selectedSources().length > 1) return; + const t = { + component: L, + props: { + title: Object(a.t)("Settings"), + activeChartWidget: this.activeChartWidget() + } + }; + this._addCommonButton(t) + } + _createLockButton() { + const t = { + component: R, + props: { + title: "Lock", + activeChartWidget: this.activeChartWidget() + } + }; + this._addCommonButton(t) + } + _createRemoveButton() { + const t = { + component: j, + props: { + title: Object(a.t)("Remove"), + activeChartWidget: this.activeChartWidget() + }, + showForSmallScreen: !0 + }; + this._addCommonButton(t) + } + _createDotsButton() { + this._addCommonButton({ + component: X, + props: { + title: Object(a.t)("More"), + activeChartWidget: this.activeChartWidget() + }, + showForSmallScreen: !0 + }) + } + _createAlertButton() {} + _createSourceActions() { + this._createLockButton() + } + _createLineStyleButton(t) { + const e = this.selectedSources(); + if (0 === e.length) return !1; + const i = e[0]; + if (!Object(ut.a)(i)) return !1; + const o = { + component: nt, + props: { + property: i.properties().linestyle || t, + title: Object(a.t)("Style"), + model: this.activeChartWidget().model(), + "data-name": "style" + } + }; + return this._addPropertyButton(o), !0 + } + _createFontSizeButton(t) { + const e = this.selectedSources(); + if (0 === e.length) return !1; + const i = e[0]; + if (!Object(ut.a)(i)) return !1; + const o = { + component: at, + props: { + property: i.properties().fontsize || t, + title: Object(a.t)("Font Size"), + model: this.activeChartWidget().model(), + "data-name": "font-size" + } + }; + return this._addPropertyButton(o), !0 + } + _createCommonButtons() { + this._commonButtons.length && this._clearCommonButtons(), l.enabled( + "property_pages") && this._createSettingsButton(), this + ._createSourceActions(), this._createRemoveButton(), this._createDotsButton() + } + _prepareProperties(t) { + const e = this.selectedSources().filter(e => Object(u.isLineTool)(e) && e + .properties()[t]); + if (!(e.filter(e => e.properties()[t].visible()).length < 1)) return e.map(e => e + .properties()[t]).filter(h.notNull) + } + _createProperty(t, e, i, o) { + if (e) { + const t = this._prepareProperties(i); + if (!t) return; + const e = this.activeChartWidget().model(); + return this._isWidthProperty(t[0]) ? new v(new g.MultipleLineWidthsProperty(t), + e, o) : new w.b(new g.MultipleLineColorsProperty(t), e, o) + } + if (t && t.visible()) return this._isWidthProperty(t) ? new g + .MultipleLineWidthsProperty([t]) : new w.a(new g.MultipleLineColorsProperty( + [t])) + } + _shouldShowBackgroundProperty(t, e) { + return !e || !e.fillBackground || !!e.fillBackground.value() + } + _isDrawingToolExcludingTweet(t) { + return Boolean(null == t ? void 0 : t.toLowerCase().includes("linetool")) && + "LineToolTweet" !== t + } + _isWidthProperty(t) { + return t instanceof g.LineToolWidthsProperty + } + } + }, + "W0/v": function(t, e) { + t.exports = + '' + }, + X1vi: function(t, e, i) { + t.exports = { + wrap: "wrap-2EG6_6QR", + icon: "icon-2EG6_6QR", + colorBg: "colorBg-2EG6_6QR", + color: "color-2EG6_6QR", + multicolor: "multicolor-2EG6_6QR", + white: "white-2EG6_6QR" + } + }, + Xxuz: function(t, e) { + t.exports = + '' + }, + "ZSM+": function(t, e) { + t.exports = + '' + }, + ZWNO: function(t, e, i) { + "use strict"; + + function o(t) { + let e = 0; + return t.isTop && t.isLeft || (e += 1), t.isTop && t.isRight || (e += 2), t.isBottom && t + .isLeft || (e += 8), t.isBottom && t.isRight || (e += 4), e + } + i.d(e, "a", (function() { + return o + })) + }, + bQEj: function(t, e) { + t.exports = + '' + }, + dRg2: function(t, e, i) { + t.exports = { + item: "item-3Te2Sp8a", + withIcon: "withIcon-3Te2Sp8a", + icon: "icon-3Te2Sp8a", + labelRow: "labelRow-3Te2Sp8a", + multiWidth: "multiWidth-3Te2Sp8a", + buttonWrap: "buttonWrap-3Te2Sp8a", + buttonLabel: "buttonLabel-3Te2Sp8a" + } + }, + gmn6: function(t, e, i) { + "use strict"; + i.r(e), i.d(e, "FavoriteDrawingToolbar", (function() { + return g + })); + i("YFKU"); + var o = i("0ZwQ"), + n = i("b2d7"), + s = i("8+VR"), + r = i("gWrr"), + a = i("7KDR"), + l = i("5VQP"), + c = i("mMWL"), + d = i("MP+M"), + h = i("Vdly"), + u = i("hY0g"), + p = i.n(u); + i("4QAy"); + class g extends o.b { + constructor(t) { + super({ + allowSortable: !s.mobiletouch, + dragOnlyInsideToolbar: !0, + defaultPosition: t, + positionSettingsKey: "chart.favoriteDrawingsPosition", + positionStorageType: "device" + }), + this._linetoolsWidgets = {}, this._canBeShownValue = new p.a(!1), this + ._attachHandlers(), this._loadVisibilityState(), this._hideAction = this + ._createHideToolbarAction() + } + show() { + this._canBeShownValue.value() && (h.setValue( + "ChartFavoriteDrawingToolbarWidget.visible", !0), this + .isVisible() || this._renderAllLinetools(), super.show()) + } + hide() { + h.setValue("ChartFavoriteDrawingToolbarWidget.visible", !1), super.hide() + } + canBeShown() { + return this._canBeShownValue.readonly() + } + _onFavoriteAdded(t) { + this._canBeShownValue.setValue(!0), this.addWidget(this._createLinetoolWidget( + t)), this.show() + } + _onFavoriteRemoved(t) { + this.removeWidget(this._linetoolsWidgets[t]), delete this._linetoolsWidgets[t], + 0 === n.a.favoritesCount() && (this._canBeShownValue.setValue(!1), this + .hide()) + } + _onFavoriteMoved() { + this._renderAllLinetools() + } + _onSelectedLinetoolChanged(t) { + Object.keys(this._linetoolsWidgets).forEach(e => { + this._linetoolsWidgets[e].classList.toggle("i-active", t === e) + }) + } + _createLinetoolWidget(t) { + const e = + `${d.a[t].icon}`, + i = Object(r.b)(e); + return i.addEventListener("click", e => { + e.preventDefault(), c.tool.value() !== t && c.tool.setValue(t) + }), this._linetoolsWidgets[t] = i, i + } + _renderAllLinetools() { + this._linetoolsWidgets = {}, this.removeWidgets(), n.a.favorites().filter(t => d + .a[t]).forEach(t => { + this.addWidget(this._createLinetoolWidget(t)) + }) + } + _attachHandlers() { + n.a.favoriteAdded.subscribe(this, this._onFavoriteAdded), n.a.favoriteRemoved + .subscribe(this, this._onFavoriteRemoved), n.a.favoriteMoved.subscribe(this, + this._onFavoriteMoved), n.a.favoritesSynced.subscribe(null, () => { + this._loadVisibilityState(), this._renderAllLinetools() + }), this.onWidgetsReordered().subscribe(this, (t, e) => { + if (n.a.favoriteMoved.unsubscribe(this, this._onFavoriteMoved), !n.a + .moveFavorite(n.a.favorite(t), e)) throw new Error( + "Something went wrong"); + n.a.favoriteMoved.subscribe(this, this._onFavoriteMoved) + }), this.onContextMenu(t => { + t.preventDefault(), l.ContextMenuManager.createMenu([this + ._hideAction + ]).then(e => { + e.show(t) + }) + }), c.tool.subscribe(this._onSelectedLinetoolChanged.bind(this)) + } + _createHideToolbarAction() { + return new a.Action({ + label: window.t("Hide Favorite Drawing Tools Toolbar"), + onExecute: () => { + this.hide() + } + }) + } + _loadVisibilityState() { + const t = n.a.favoritesCount() > 0; + this._canBeShownValue.setValue(t); + h.getBool("ChartFavoriteDrawingToolbarWidget.visible", !0) && t ? this.show() : + this.hide() + } + } + }, + "m/4m": function(t, e, i) {}, + mQbF: function(t, e) { + t.exports = + '' + }, + myiL: function(t, e, i) { + "use strict"; + i.r(e), i.d(e, "LineWidthButton", (function() { + return f + })); + var o = i("q1tI"), + n = i.n(o), + s = i("TSYQ"), + r = i("Eyy1"), + a = i("Iivm"), + l = i("82wv"), + c = i("5hRh"), + d = i("N5tr"), + h = i("nPPD"), + u = i("O5Oz"), + p = i("xnr+"), + g = i("n3oB"), + _ = i("2F1E"), + m = i("Lnv9"), + b = i("dRg2"); + const v = Object(h.a)(d.a, b), + w = [{ + value: 1, + icon: u + }, { + value: 2, + icon: p + }, { + value: 3, + icon: g + }, { + value: 4, + icon: _ + }]; + + function f(t) { + const { + multipleProperty: e, + title: i, + model: o, + className: h, + isSmallScreen: u + } = t, p = Object(c.a)(Object(r.ensureDefined)(e)), g = "mixed" === p || !p, _ = function( + t) { + const e = w.find(e => e.value === t); + if (!e) return m; + return e.icon + }(p); + return n.a.createElement(l.a, { + className: h, + arrow: !1, + title: i, + "data-name": t["data-name"], + menuDataName: t["data-name"] + "-menu", + content: n.a.createElement("div", null, g ? n.a.createElement("div", { + className: b.multiWidth + }, n.a.createElement(a.a, { + icon: m + })) : n.a.createElement("div", { + className: b.buttonWrap + }, !u && n.a.createElement(a.a, { + icon: _ + }), n.a.createElement("div", { + className: s(!u && b.buttonLabel) + }, p + "px"))) + }, w.map(({ + value: t, + icon: e + }) => n.a.createElement(d.b, { + key: t, + theme: v, + label: t + "px", + icon: e, + isActive: t === p, + onClick: f, + onClickArg: t + }))); + + function f(t) { + t && e && (o.beginUndoMacro(i), e.setValue(t, void 0, { + applyValue: (t, e) => { + o.setProperty(t, e, i) + } + }), o.endUndoMacro()) + } + } + }, + n3oB: function(t, e) { + t.exports = + '' + }, + "p0W+": function(t, e, i) { + "use strict"; + i.d(e, "a", (function() { + return a + })); + var o = i("q1tI"), + n = i("TSYQ"), + s = i("tU7i"), + r = i("EvtC"); + const a = o.forwardRef((t, e) => { + const { + className: i, + ...a + } = t; + return o.createElement(s.b, { + ...a, + ref: e, + className: n(i, r.button) + }) + }) + }, + qAO1: function(t, e) { + t.exports = + '' + }, + rzV7: function(t, e, i) { + "use strict"; + var o = Object.prototype.hasOwnProperty; + + function n(t, e) { + return t === e ? 0 !== t || 0 !== e || 1 / t == 1 / e : t != t && e != e + } + t.exports = function(t, e) { + if (n(t, e)) return !0; + if ("object" != typeof t || null === t || "object" != typeof e || null === e) return !1; + var i = Object.keys(t), + s = Object.keys(e); + if (i.length !== s.length) return !1; + for (var r = 0; r < i.length; r++) + if (!o.call(e, i[r]) || !n(t[i[r]], e[i[r]])) return !1; + return !0 + } + }, + tPkB: function(t, e, i) { + "use strict"; + var o = i("YFKU").t, + n = i("mMWL"), + s = i("Ve4Q").LineToolPropertiesWidgetBase, + r = i("e92V").isLineDrawnWithPressedButton, + a = i("CW80").isLineTool; + const l = i("IhRv").ColorPickerButton, + c = i("myiL").LineWidthButton; + i("CW80").setNewToolProperties; + var d = i("W0/v"), + h = i("0fuu"), + u = i("mQbF"), + p = window.t("Color"); + class g extends s { + constructor(t) { + super(t), this._hasAlertWathcedValue = null, this._templatesButton = null, this + .attachHandlers() + } + attachHandlers() { + n.tool.subscribe(this.onToolChanged.bind(this), { + callWithLast: !0 + }), n.iconTool.subscribe(this.onIconToolChanged.bind(this)), this + ._chartWidgetCollection.selectedSources.subscribe(this.onSourceChanged.bind( + this)) + } + onIconToolChanged() { + this.onToolChanged(n.tool.value()) + } + onToolChanged(t, e) { + this._currentTool = t; + const i = this.selectedSources(); + this._isDrawingToolExcludingTweet(t) ? (this._isDrawingFinished.setValue(!1), this + ._updateVisibility()) : i && i.length ? (i.length > 1 && this + ._isDrawingFinished.setValue(!0), + this.onSourceChanged(this.selectedSources())) : this.hide() + } + findSourceOnWidget(t) { + for (var e = 0; e < this.activeChartWidget().model().panes().length; e++) + for (var i = this.activeChartWidget().model().panes()[e].sourcesByGroup().all(), + o = 0; o < i.length; o++) + if (i[o] === t) return i[o] + } + onSourceChanged(t) { + if (this._hasAlertWathcedValue && (this._hasAlertWathcedValue.destroy(), this + ._hasAlertWathcedValue = null), t && t.length && (1 !== t.length || a(t[ + 0]))) + if (this._createCommonButtons(), 1 === t.length) { + var e = t[0]; + e.isAvailableInFloatingWidget() && this.findSourceOnWidget(e) ? (!e + .userEditEnabled() || !r(e.toolname) && this.activeChartWidget() + .model().lineBeingCreated() || (this._isDrawingFinished.setValue(! + 0), e.canHasAlert() && (this._hasAlertWathcedValue = e.hasAlert + .spawn())), this.showPropertiesOf(e.toolname, e + .properties(), !0), this.showTemplatesOf({ + source: e + }), this._toolbarVisible = !0, this._updateVisibility()) : this + .hide() + } else this._clearProperties(), this._templatesButton && (this + ._clearTemplatesButton(), this._templatesButton = null), this + ._updateVisibility(), this._createWidthsButton(void 0, !0), this + ._createColorsButton(void 0, !0), this._createBackgroundsButton(void 0, !0), + this._createTextColorsButton(void 0, !0); + else this.hide() + } + _createWidthsButton(t, e) { + if (this._lineWidthsProperty && (this._lineWidthsProperty.destroy(), this + ._lineWidthsProperty = null), this._lineWidthsProperty = this + ._createProperty(t, e, "linesWidths", "Set Line tool(s) line width"), !this + ._lineWidthsProperty) return !0; + var i = window.t("Line tool width"); + e && (1 !== this.selectedSources().filter((function(t) { + return a(t) && t.properties().linesWidths + })).length && (i = window.t("Line tool widths"))); + return this._addPropertyButton({ + component: c, + props: { + title: i, + multipleProperty: this._lineWidthsProperty, + model: this.activeChartWidget().model(), + "data-name": "line-tool-width" + } + }), !0 + } + _createColorsButton(t, e) { + return this._lineColorsProperty && (this._lineColorsProperty.destroy(), this + ._lineColorsProperty = null), this._lineColorsProperty = this + ._createProperty(t, e, "linesColors", "Set Line tool(s) color"), !this + ._lineColorsProperty || (this._addPropertyButton({ + component: l, + props: { + icon: d, + title: window.t("Line tool colors"), + property: this._lineColorsProperty, + model: this.activeChartWidget().model(), + "data-name": "line-tool-color" + } + }), !0) + } + _createBackgroundsButton(t, e) { + return this._backgroundsProperty && (this._backgroundsProperty.destroy(), this + ._backgroundsProperty = null), this._backgroundsProperty = this + ._createProperty(t, e, "backgroundsColors", "Set Line background(s) color"), ! + this._backgroundsProperty || (this._addPropertyButton({ + component: l, + props: { + icon: h, + title: window.t("Line tool backgrounds"), + property: this._backgroundsProperty, + model: this.activeChartWidget().model(), + "data-name": "background-color" + } + }), !0) + } + _createTextColorsButton(t, e) { + return this._textColorsProperty && (this._textColorsProperty.destroy(), this + ._textColorsProperty = null), this._textColorsProperty = this + ._createProperty(t, e, "textsColors", "Set Line tool(s) text color"), !this + ._textColorsProperty || (this._addPropertyButton({ + component: l, + props: { + icon: u, + title: window.t("Line tool text colors"), + property: this._textColorsProperty, + model: this.activeChartWidget().model(), + "data-name": "text-color" + } + }), !0) + } + showTemplatesOf(t) {} + templatesList() { + return this._templatesList + } + _getPossibleProperty(t) { + for (var e = [], i = this._defaultToolProperties(), o = 0; o < i.length; o++) { + var n = i[o]; + n.name in t && e.push(n) + } + return e + } + showPropertiesOf(t, e, i) { + this._toolExceptionCases || (this._toolExceptionCases = this + ._createToolExceptionCases()); + var o = this._toolExceptionCases[t] || this._getPossibleProperty(e); + if (this._clearProperties(), this._propertiesVisible = !1, o.length) { + for (var n = {}, s = 0; s < o.length; s++) { + for (var r = o[s], a = e, c = r.name.split("."), d = 0; d < c.length; ++d) + a = a && a[c[d]]; + var h = r.showIf; + if ("function" != typeof h || h(a, e)) { + var u = r.factory; + if (u && u.call(this, a, i)) continue; + if (!a) continue; + if (this._propertiesVisible = !0, "combobox" !== r.inputType) { + const t = { + component: l, + props: { + icon: r.iconSvgCode, + title: r.title, + "data-name": r.dataName, + property: a, + model: this.activeChartWidget().model() + } + }; + this._addPropertyButton(t); + continue + } + n[r.name] = a + } + } + this._currentProperties = n + } + } + _updateVisibility() { + this._isDrawingFinished.value() && (this._toolbarVisible || this + ._propertiesVisible) ? this._show() : this.hide() + } + refresh() { + this.onSourceChanged(this.selectedSources()) + } + _defaultToolProperties() { + return [{ + name: "linesColors", + inputType: "colorPicker", + iconSvgCode: d, + title: p, + factory: g.prototype._createColorsButton, + dataName: "line-tool-color" + }, { + name: "backgroundsColors", + inputType: "colorPicker", + iconSvgCode: h, + title: o("Background Color"), + factory: g.prototype._createBackgroundsButton, + dataName: "background-color", + showIf: this._shouldShowBackgroundProperty + }, { + name: "textsColors", + title: o("Text color"), + inputType: "colorPicker", + iconSvgCode: u, + factory: g.prototype._createTextColorsButton, + dataName: "text-color" + }, { + name: "linesWidths", + inputType: "combobox", + factory: g.prototype._createWidthsButton + }, { + name: "linestyle", + title: o("Style"), + inputType: "combobox", + factory: g.prototype._createLineStyleButton + }] + } + _riskPropertiesExceptionCases() { + return [{ + name: "textcolor", + title: o("Text color"), + inputType: "colorPicker", + iconSvgCode: u, + dataName: "text-color" + }, { + name: "profitBackground", + title: o("Profit Background Color"), + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color" + }, { + name: "stopBackground", + title: o("Stop Background Color"), + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color" + }] + } + _rangeExceptionCases() { + return [{ + name: "linecolor", + inputType: "colorPicker", + iconSvgCode: d, + title: p, + dataName: "line-tool-color" + }, { + name: "backgroundColor", + inputType: "colorPicker", + iconSvgCode: h, + title: o("Background Color"), + dataName: "background-color", + showIf: this._shouldShowBackgroundProperty + }, { + name: "linesWidths", + inputType: "combobox", + factory: g.prototype._createWidthsButton + }] + } + _brushPropertiesExceptionCase() { + return [{ + name: "linesColors", + inputType: "colorPicker", + iconSvgCode: d, + title: o("Color"), + factory: g.prototype._createColorsButton, + dataName: "line-tool-color" + }, { + name: "backgroundsColors", + inputType: "colorPicker", + iconSvgCode: h, + title: o("Background Color"), + dataName: "background-color", + factory: g.prototype._createBackgroundsButton + }, { + name: "linesWidths", + inputType: "combobox", + factory: g.prototype._createWidthsButton + }] + } + _bezierPropertiesExceptionCases() { + return [{ + name: "linesColors", + inputType: "colorPicker", + iconSvgCode: d, + title: o("Color"), + factory: g.prototype._createColorsButton, + dataName: "line-tool-color" + }, { + name: "backgroundsColors", + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color", + title: o("Background Color"), + factory: g.prototype._createBackgroundsButton, + showIf: this._shouldShowBackgroundProperty + }, { + name: "linesWidths", + inputType: "combobox", + factory: g.prototype._createWidthsButton + }, { + name: "linestyle", + title: o("Style"), + inputType: "combobox", + factory: g.prototype._createLineStyleButton + }] + } + _textPropertiesExceptionCases() { + return [{ + name: "color", + title: o("Text color"), + inputType: "colorPicker", + iconSvgCode: u, + dataName: "text-color" + }, { + name: "backgroundColor", + title: o("Background Color"), + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color", + showIf: this._shouldShowBackgroundProperty + }, { + name: "fontsize", + title: o("Font Size"), + inputType: "combobox", + factory: g.prototype._createFontSizeButton + }] + } + _notePropertiesExceptionCases() { + return [{ + name: "markerColor", + title: o("Marker Color"), + inputType: "colorPicker", + iconSvgCode: d, + dataName: "line-tool-color" + }, { + name: "textColor", + title: o("Text color"), + inputType: "colorPicker", + iconSvgCode: u, + dataName: "text-color" + }, { + name: "fontSize", + title: o("Font Size"), + inputType: "combobox", + factory: g.prototype._createFontSizeButton + }] + } + _createToolExceptionCases() { + return { + LineToolRegressionTrend: [], + LineToolBrush: g.prototype._brushPropertiesExceptionCase(), + LineToolBezierQuadro: g.prototype._bezierPropertiesExceptionCases(), + LineToolBezierCubic: g.prototype._bezierPropertiesExceptionCases(), + LineToolText: g.prototype._textPropertiesExceptionCases(), + LineToolTextAbsolute: g.prototype._textPropertiesExceptionCases(), + LineToolBalloon: g.prototype._textPropertiesExceptionCases(), + LineToolCallout: g.prototype._textPropertiesExceptionCases(), + LineToolPriceLabel: g.prototype._textPropertiesExceptionCases(), + LineToolDateRange: g.prototype._rangeExceptionCases(), + LineToolPriceRange: g.prototype._rangeExceptionCases(), + LineToolDateAndPriceRange: g.prototype._rangeExceptionCases(), + LineToolNote: g.prototype._notePropertiesExceptionCases(), + LineToolNoteAbsolute: g.prototype._notePropertiesExceptionCases(), + LineToolRiskRewardLong: g.prototype._riskPropertiesExceptionCases(), + LineToolRiskRewardShort: g.prototype._riskPropertiesExceptionCases(), + LineToolBarsPattern: [{ + name: "color", + title: p, + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color" + }], + LineToolProjection: [{ + name: "color1", + title: o("Background color 1"), + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color" + }, { + name: "color2", + title: o("Background color 2"), + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color" + }, { + name: "linesWidths", + inputType: "combobox", + factory: g.prototype._createWidthsButton + }], + LineToolSignpost: [{ + name: "fontSize", + title: o("Font Size"), + inputType: "combobox" + }, { + name: "linesColors", + inputType: "colorPicker", + iconSvgCode: h, + dataName: "background-color", + title: p, + factory: g.prototype._createBackgroundsButton, + showIf: function(t, e) { + return e && e.showImage.value() + } + }] + } + } + } + t.exports = g + }, + turx: function(t, e, i) { + "use strict"; + i.d(e, "b", (function() { + return a + })), i.d(e, "a", (function() { + return l + })); + var o = i("Eyy1"), + n = i("tc+8"), + s = i.n(n); + class r extends s.a { + constructor(t) { + super(), this._listenersMappers = [], this._isProcess = !1, this._baseProperty = + t + } + destroy() { + this._baseProperty.destroy() + } + value() { + const t = this._baseProperty.value(); + return "mixed" === t ? "" : t + } + visible() { + return this._baseProperty.visible() + } + setValue(t) { + this._isProcess = !0, this._baseProperty.setValue("" === t ? "mixed" : t, + void 0, { + applyValue: this._applyValue.bind(this) + }), this._isProcess = !1, this._listenersMappers.forEach(t => { + t.method.call(t.obj, this) + }) + } + subscribe(t, e) { + const i = i => { + this._isProcess || e.call(t, this) + }, + o = { + obj: t, + method: e, + callback: i + }; + this._listenersMappers.push(o), this._baseProperty.subscribe(t, i) + } + unsubscribe(t, e) { + var i; + const n = Object(o.ensureDefined)(null === (i = this._listenersMappers.find(i => + i.obj === t && i.method === e)) || void 0 === i ? void 0 : i + .callback); + this._baseProperty.unsubscribe(t, n) + } + unsubscribeAll(t) { + this._baseProperty.unsubscribeAll(t) + } + } + class a extends r { + constructor(t, e, i) { + super(t), this._undoModel = e, this._undoText = i + } + _applyValue(t, e) { + this._undoModel.setProperty(t, e, this._undoText) + } + } + class l extends r { + _applyValue(t, e) { + t.setValue(e) + } + } + }, + ucyy: function(t, e, i) { + t.exports = { + button: "button-1gEXpG61" + } + }, + wwkJ: function(t, e, i) { + "use strict"; + i.d(e, "a", (function() { + return n + })); + var o = i("q1tI"); + const n = i.n(o).a.createContext({ + isGrouped: !1, + cellState: { + isTop: !0, + isRight: !0, + isBottom: !0, + isLeft: !0 + } + }) + }, + "xnr+": function(t, e) { + t.exports = + '' + } + } +]); diff --git a/static/charting_library/bundles/full-tooltips-popup.96fc751e06523b742440.js b/static/charting_library/bundles/full-tooltips-popup.96fc751e06523b742440.js new file mode 100644 index 0000000..00f302c --- /dev/null +++ b/static/charting_library/bundles/full-tooltips-popup.96fc751e06523b742440.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["full-tooltips-popup"],{"9dlw":function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var o=n("q1tI"),r=n.n(o),a=n("i8i4"),i=n.n(a),l=n("AiMB"),s=n("DTHj"),c=n("X0gx"),u=n("8Rai");function d(e){const{controller:t,children:n,isOpened:a,closeOnClickOutside:d=!0,doNotCloseOn:m,onClickOutside:p,onClose:v,...f}=e,h=Object(o.useContext)(c.a),g=Object(u.a)({handler:function(e){p&&p(e);if(!d)return;if(m&&e.target instanceof Node){const t=i.a.findDOMNode(m);if(t instanceof Node&&t.contains(e.target))return}v()},mouseDown:!0,touchStart:!0});return a?r.a.createElement(l.a,{top:"0",left:"0",right:"0",bottom:"0",pointerEvents:"none"},r.a.createElement("span",{ref:g,style:{pointerEvents:"auto"}},r.a.createElement(s.b,{...f,onClose:v,onScroll:function(t){const{onScroll:n}=e;n&&n(t)},customCloseDelegate:h,ref:t},n))):null}},Sn4D:function(e,t,n){"use strict";n.d(t,"a",(function(){return v}));var o=n("q1tI"),r=n.n(o),a=n("Eyy1"),i=n("TSYQ"),l=n("x0D+"),s=n("0YpW"),c=n("AiMB"),u=n("mkWe"),d=n("qFKp"),m=n("X0gx"),p=n("sHQ4");function v(e){const{position:t="Bottom",onClose:n,children:v,className:f,theme:h=p}=e,g=Object(a.ensureNotNull)(Object(o.useContext)(u.a)),[b,w]=Object(o.useState)(0),y=Object(o.useRef)(null),E=Object(o.useContext)(m.a);return Object(o.useEffect)(()=>{const e=Object(a.ensureNotNull)(y.current);return e.focus({preventScroll:!0}),E.subscribe(g,n),Object(s.a)(!0),d.CheckMobile.iOS()&&Object(l.disableBodyScroll)(e),w(g.addDrawer()),()=>{E.unsubscribe(g,n);const t=g.removeDrawer();d.CheckMobile.iOS()&&Object(l.enableBodyScroll)(e),0===t&&Object(s.a)(!1)}},[]),r.a.createElement(c.a,null,r.a.createElement("div",{className:i(p.wrap,p["position"+t])},b===g.currentDrawer&&r.a.createElement("div",{className:p.backdrop,onClick:n}),r.a.createElement("div",{className:i(p.drawer,h.drawer,p["position"+t],f),ref:y,tabIndex:-1,"data-name":e["data-name"]},v)))}},mkWe:function(e,t,n){"use strict";n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return i}));var o=n("q1tI"),r=n.n(o);class a extends r.a.PureComponent{constructor(e){super(e),this._addDrawer=()=>{const e=this.state.currentDrawer+1;return this.setState({currentDrawer:e}),e},this._removeDrawer=()=>{const e=this.state.currentDrawer-1;return this.setState({currentDrawer:e}),e},this.state={currentDrawer:0}}render(){return r.a.createElement(i.Provider,{value:{addDrawer:this._addDrawer,removeDrawer:this._removeDrawer,currentDrawer:this.state.currentDrawer}},this.props.children)}}const i=r.a.createContext(null)},my4O:function(e,t,n){e.exports={"css-value-small-size":"18px","css-value-border-radius-small-size":"9px","css-value-large-size":"22px","css-value-border-radius-large-size":"11px",popupWidget:"popupWidget-1LnizAbt",desc:"desc-1LnizAbt",icon:"icon-1LnizAbt",small:"small-1LnizAbt",large:"large-1LnizAbt",title:"title-1LnizAbt",text:"text-1LnizAbt",action:"action-1LnizAbt",additionalWidget:"additionalWidget-1LnizAbt"}},sHQ4:function(e,t,n){e.exports={wrap:"wrap-164vy-kj",positionBottom:"positionBottom-164vy-kj", +backdrop:"backdrop-164vy-kj",drawer:"drawer-164vy-kj",positionLeft:"positionLeft-164vy-kj"}},"vR7+":function(e,t,n){"use strict";n.r(t);var o=n("q1tI"),r=n.n(o),a=n("i8i4"),i=(n("YFKU"),n("9dlw")),l=n("/KDZ"),s=n("Sn4D"),c=n("mkWe"),u=n("e3/o"),d=n("TSYQ"),m=n("Eyy1"),p=n("Iivm"),v=n("vqb8"),f=n("my4O");const h=new WeakMap,g=new WeakMap;function b(e){const t=Object(v.a)({watchedValue:e.info});if(null===t)return null;const n=t.map(t=>{const{title:n,titleColor:o,icon:a,iconClassName:i,html:l,action:s,size:c}=t;h.has(t)||h.set(t,Object(u.randomHash)());let v=[];return void 0!==e.additionalWidgets&&(v=e.additionalWidgets.map(e=>(g.has(e)||g.set(e,Object(u.randomHash)()),e.renderer(Object(m.ensureDefined)(g.get(e)),f.additionalWidget)))),r.a.createElement("div",{key:h.get(t),className:f.popupWidget},r.a.createElement(p.a,{className:d(f.icon,i,f[c]),icon:a||void 0}),r.a.createElement("div",{className:f.desc},r.a.createElement("span",{style:{color:o||void 0},className:d(f.title,f[c])},n),l&&r.a.createElement("p",{className:d(f.text,f[c]),dangerouslySetInnerHTML:{__html:l.join(" ")}}),s&&r.a.createElement("span",{className:d(s.tooltip&&"apply-common-tooltip",f.action,f[c]),onClick:()=>{e.onClose(),null==s||s.onClick()},title:s.tooltip},s.text),v))});return r.a.createElement(r.a.Fragment,null,n)}const w=new WeakMap;function y(e){const{statusWidgetInfos:t}=e,n=t.filter(e=>e.visible.value()).map(t=>(w.has(t)||w.set(t,Object(u.randomHash)()),r.a.createElement(b,{key:w.get(t),info:t.model.fullInfo(),onClose:e.onClose,additionalWidgets:t.additionalWidgets})));return r.a.createElement(c.b,null,r.a.createElement(l.a,{rule:"screen and (max-width: 428px)"},t=>t?r.a.createElement(s.a,{onClose:e.onClose,position:"Bottom"},n):r.a.createElement(i.a,{isOpened:!0,onClose:e.onClose,position:e.position,doNotCloseOn:e.rendererButton},n)))}function E(e,t,n,r,i,l){const s={rendererButton:n,position:l,statusWidgetInfos:r,onClose:i};e?a.render(o.createElement(y,{...s}),t):a.unmountComponentAtNode(t)}n.d(t,"render",(function(){return E}))},"x0D+":function(e,t,n){var o,r,a;r=[t],void 0===(a="function"==typeof(o=function(e){"use strict";function t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t'},"2x13":function(e,t,n){e.exports={wrapper:"wrapper-DggvOZTm",container:"container-DggvOZTm",tab:"tab-DggvOZTm",active:"active-DggvOZTm",title:"title-DggvOZTm",icon:"icon-DggvOZTm",titleText:"titleText-DggvOZTm",nested:"nested-DggvOZTm",isTablet:"isTablet-DggvOZTm",isMobile:"isMobile-DggvOZTm"}},An2S:function(e,t,n){"use strict";n.d(t,"a",(function(){return h})),n.d(t,"c",(function(){return d})),n.d(t,"b",(function(){return p}));var i=n("q1tI"),l=n.n(i),a=n("TSYQ"),o=n.n(a),s=n("Iivm"),r=n("++0f"),c=n("2x13");function m(e){return{isMobile:"mobile"===e,isTablet:"tablet"===e}}function h(e){const{mode:t,className:n,...i}=e,{isMobile:a,isTablet:s}=m(t),r=o()(c.container,s&&c.isTablet,a&&c.isMobile,n);return l.a.createElement("div",{...i,className:r,"data-role":"dialog-sidebar"})}function d(e){return l.a.createElement("div",{className:c.wrapper,...e})}function p(e){const{mode:t,title:n,icon:i,isActive:a,onClick:h,...d}=e,{isMobile:p,isTablet:u}=m(t);return l.a.createElement("div",{...d,className:o()(c.tab,u&&c.isTablet,p&&c.isMobile,a&&c.active),onClick:h},l.a.createElement(s.a,{className:c.icon,icon:i}),!u&&l.a.createElement("span",{className:c.title},l.a.createElement("span",{className:c.titleText},n),p&&l.a.createElement(s.a,{className:c.nested,icon:r})))}},KKsp:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var i=n("q1tI"),l=n("TSYQ"),a=n.n(l),o=n("NOPy");function s(e){const{size:t="normal",className:n}=e;return i.createElement("div",{className:a()(o.separator,"small"===t&&o.small,"normal"===t&&o.normal,"large"===t&&o.large,n)})}},NOPy:function(e,t,n){e.exports={separator:"separator-eqcGT_ow",small:"small-eqcGT_ow",normal:"normal-eqcGT_ow",large:"large-eqcGT_ow"}},PI1I:function(e,t,n){"use strict";n.r(t);n("YFKU");var i=n("q1tI"),l=n("i8i4"),a=n("mwqF"),o=n("bvfV"),s=n("ycFu"),r=n("ybVX"),c=n("Q+1u"),m=n("Vdly"),h=n.n(m),d=n("VNzU"),p=n("/KDZ"),u=(n("bSeV"),n("K+KL")),b=n("N5tr"),g=n("KKsp"),y=n("Iivm"),T=n("EsvI"),_=(n("HbRj"),n("fZEr"));const C=window.t("Do you really want to delete Color Theme '{name}' ?");var v=n("+EG+"),S=n("2uTr"),f=n("i/MG"),k=n("JWMC"),A=n("8d0Q"),w=n("8+VR"),E=n("utEQ");function P(e){const{themeName:t,chartWidgetCollection:n,onRemove:l,manager:a}=e,[o,s]=Object(A.c)(),r=i.useCallback(()=>function(e,t,n){window.is_authenticated&&Object(_.showConfirm)({text:C.format({name:e}),onConfirm:({dialogClose:n})=>{Object(T.removeTheme)(e),t&&t(e),n()}},n)}(t,l,a),[t,l,a]),c=i.useCallback(()=>{Object(T.loadTheme)(t,!1,!1,n).then(()=>{window.saver.saveChartSilently(),Object(k.trackEvent)("GUI","Switch to custom theme")})},[t,n]);return i.createElement("div",{...s},i.createElement(b.b,{className:E.defaultsButtonItem,isActive:!1,label:t,onClick:c,toolbox:i.createElement(f.a,{hidden:!w.mobiletouch&&!o, +onClick:r})}))}var x=n("HWhk");const B=window.t("Template"),I=window.t("Apply Defaults"),N=(Object(S.appendEllipsis)(window.t("Save As")),window.t("Apply to all"));class M extends i.PureComponent{constructor(e){super(e),this._manager=null,this._handleApplyDefaults=()=>{const{model:e,chartWidgetCollection:t}=this.props;e.restorePreferences();const n=Object(T.getCurrentTheme)().name;Object(T.loadTheme)(n,!0,!0,t,void 0,void 0,!0)},this._handleSaveAs=()=>{0},this._handleRemoveTheme=e=>{this.setState({themes:this.state.themes.filter(t=>t!==e)})},this._syncThemeList=()=>{0},this.state={themes:[]},this._syncThemeList()}render(){return i.createElement(v.b.Consumer,null,e=>(this._manager=e,i.createElement(p.a,{rule:"screen and (max-width: 768px)"},e=>i.createElement(u.a,{id:"series-theme-manager",className:!e&&E.themesButtonText,hideArrowButton:e,"data-name":"theme-select",buttonChildren:this._getPlaceHolderItem(e)},this._getThemeItems(e)))))}_getPlaceHolderItem(e){return e?i.createElement(y.a,{className:E.themesButtonIcon,icon:x}):B}_getThemeItems(e){const{isApplyToAllVisible:t,chartWidgetCollection:n,applyToAllCallback:l}=this.props,{themes:a}=this.state;return i.createElement(i.Fragment,null,e&&t&&i.createElement(b.b,{className:E.defaultsButtonItem,isActive:!1,label:N,onClick:l}),i.createElement(b.b,{className:E.defaultsButtonItem,isActive:!1,label:I,onClick:this._handleApplyDefaults}),!1,a.length>0&&i.createElement(i.Fragment,null,i.createElement(g.a,{key:"separator"}),a.map(e=>i.createElement(P,{key:e,themeName:e,onRemove:this._handleRemoveTheme,chartWidgetCollection:n,manager:this._manager}))))}}var D=n("tWVy"),O=n("yqnI"),W=n("uhCe"),z=n("An2S"),V=n("tmL0");const L={areaSymbolMinTick:"normal",areaSymbolTimezone:"normal",barSymbolMinTick:"normal",barSymbolTimezone:"normal",baselineSymbolMinTick:"normal",baselineSymbolTimezone:"normal",candleSymbolMinTick:"normal",candleSymbolTimezone:"normal",dateFormat:"normal",haSymbolMinTick:"normal",haSymbolTimezone:"normal",hiloSymbolMinTick:"normal",hiloSymbolTimezone:"normal",hollowCandleSymbolMinTick:"normal",hollowCandleSymbolTimezone:"normal",kagiAtrLength:"normal",kagiReversalAmount:"normal",kagiStyle:"normal",kagiSymbolMinTick:"normal",kagiSymbolTimezone:"normal",lineSymbolMinTick:"normal",lineSymbolTimezone:"normal",sessionId:"normal",lockScale:"normal",mainSeriesSymbolAreaPriceSource:"normal",mainSeriesSymbolBaseLevelPercentage:"normal",mainSeriesSymbolBaseLinePriceSource:"normal",mainSeriesSymbolLinePriceSource:"normal",mainSeriesSymbolStyleType:"normal",navButtons:"big",paneButtons:"big",pbLb:"normal",pbSymbolMinTick:"normal",pbSymbolTimezone:"normal",pnfAtrLength:"normal",pnfBoxSize:"normal",pnfReversalAmount:"normal",pnfSources:"normal",pnfStyle:"normal",pnfSymbolMinTick:"normal",pnfSymbolTimezone:"normal",rangeSymbolMinTick:"normal",rangeSymbolTimezone:"normal",renkoAtrLength:"normal",renkoBoxSize:"normal",renkoStyle:"normal",renkoSymbolMinTick:"normal",renkoSymbolTimezone:"normal",scalesPlacement:"normal",symbolLastValueLabel:"big",symbolTextSource:"normal"} +;var R=n("yMyk"),q=n("U0JK");function K(e){return i.createElement(y.a,{className:R.backButton,icon:q,onClick:e.onClick})}var Z=n("sXZi");class j extends i.PureComponent{constructor(e){super(e),this._renderChildren=({requestResize:e,isSmallWidth:t})=>(this._requestResize=e,i.createElement("div",{className:Z.content},this._renderTabs(t),this._renderTabContent(t))),this._renderApplyToAllButton=()=>i.createElement(p.a,{rule:W.a.TabletNormal},e=>this._renderApplyToAll(e)),this._renderFooterLeft=()=>{const{model:e,chartWidgetCollection:t}=this.props,{isApplyToAllVisible:n}=this.state;return i.createElement(M,{model:e,isApplyToAllVisible:n,applyToAllCallback:this._handleApplyToAll,chartWidgetCollection:t})},this._createTabClickHandler=e=>()=>this._selectPage(e),this._selectPage=e=>{const{activePage:t}=this.state;e!==t&&(t&&t.definitions.unsubscribe(this._onChangeActivePageDefinitions),h.a.setValue("properties_dialog.last_page_id",e.id),e.definitions.subscribe(this._onChangeActivePageDefinitions),this.setState({activePage:e,tableKey:Date.now()},()=>{this._requestResize&&this._requestResize()}))},this._onChangeActivePageDefinitions=()=>{O.a.logNormal("Definition collection was updated"),this.setState({tableKey:Date.now()},()=>{this._requestResize&&this._requestResize()})},this._handleCancel=()=>{this.props.onCancel(),this.props.onClose()},this._handleSubmit=()=>{this.props.onSubmit(),this.props.onClose()},this._handleScroll=()=>{D.a.fire()},this._handleApplyToAll=()=>{const{chartWidgetCollection:e,model:t}=this.props,{isApplyToAllVisible:n}=this.state;n&&e.applyPreferencesToAllCharts(t)},this._syncApplyToAllVisibility=()=>{const{chartWidgetCollection:e}=this.props;this.setState({isApplyToAllVisible:Object(d.isMultipleLayout)(e.layout.value())})},this._handleBackClick=()=>{const{activePage:e}=this.state;e&&e.definitions.unsubscribe(this._onChangeActivePageDefinitions),this.setState({activePage:null})};const{pages:t,activePageId:n}=e;let l=t.find(e=>e.id===n);if(!l){const e=h.a.getValue("properties_dialog.last_page_id"),n=t.find(t=>t.id===e);l=n||t[0]}this.state={activePage:l,isApplyToAllVisible:Object(d.isMultipleLayout)(e.chartWidgetCollection.layout.value()),tableKey:Date.now()}}componentDidMount(){const{chartWidgetCollection:e}=this.props,{activePage:t}=this.state;e.layout.subscribe(this._syncApplyToAllVisibility),t&&t.definitions.subscribe(this._onChangeActivePageDefinitions)}componentWillUnmount(){const{chartWidgetCollection:e}=this.props,{activePage:t}=this.state;t&&t.definitions.unsubscribe(this._onChangeActivePageDefinitions),e.layout.unsubscribe(this._syncApplyToAllVisibility)}render(){const{isOpened:e,onClose:t}=this.props,{activePage:n}=this.state;return i.createElement(p.a,{rule:W.a.TabletSmall},l=>i.createElement(s.a,{className:Z.withSidebar,dataName:"series-properties-dialog",onClose:t,isOpened:e,title:null!==n&&l?n.title:window.t("Chart settings"),footerLeftRenderer:this._renderFooterLeft,additionalButtons:this._renderApplyToAllButton(),additionalHeaderElement:null!==n&&l?i.createElement(K,{ +onClick:this._handleBackClick}):void 0,onSubmit:this._handleSubmit,onCancel:this._handleCancel,render:this._renderChildren,submitOnEnterKey:!1}))}_renderTabContent(e){const{pages:t}=this.props,n=this._getCurrentPage(e);if(n){const e=t.find(e=>e.id===n.id),l=e?e.definitions.value():[];return i.createElement(V.a,{className:Z.tabContent,onScroll:this._handleScroll},i.createElement(r.b.Provider,{value:L},i.createElement(c.a,{key:this.state.tableKey},l.map(e=>i.createElement(o.a,{key:e.id,definition:e})))))}return null}_renderTabs(e){const{pages:t}=this.props,{activePage:n}=this.state;if(n&&e)return null;const l=this._getCurrentPage(e);return i.createElement(p.a,{rule:W.a.TabletNormal},e=>i.createElement(p.a,{rule:W.a.TabletSmall},n=>{const a=n?"mobile":e?"tablet":void 0;return i.createElement(z.a,{mode:a,onScroll:this._handleScroll},t.map(e=>i.createElement(z.b,{key:e.id,mode:a,"data-name":e.id,title:e.title,icon:e.icon,onClick:this._createTabClickHandler(e),isActive:l?e.id===l.id:void 0})))}))}_renderApplyToAll(e){const{isApplyToAllVisible:t}=this.state;return!e&&t&&i.createElement("span",{className:Z.applyToAllButton},i.createElement(a.a,{appearance:"stroke",onClick:this._handleApplyToAll},window.t("Apply to all")))}_getCurrentPage(e){const{pages:t}=this.props,{activePage:n}=this.state;let i=null;return n?i=n:!e&&t.length&&(i=t[0]),i}}var U=n("FQhm"),F=n("sQaR");n.d(t,"GeneralChartPropertiesDialogRenderer",(function(){return Q}));const G=window.t("Chart settings");class Q extends F.a{constructor(e){super(),this._handleClose=()=>{l.unmountComponentAtNode(this._container),this._setVisibility(!1),this._onClose&&this._onClose()},this._handleSubmit=()=>{},this._handleCancel=()=>{this._model.undoToCheckpoint(this._checkpoint)},this._propertyPages=e.propertyPages,this._model=e.model,this._activePageId=e.activePageId,this._onClose=e.onClose,this._chartWidgetCollection=e.chartWidgetCollection,this._checkpoint=this._ensureCheckpoint(e.undoCheckPoint)}hide(e){e?this._handleCancel():this._handleSubmit(),this._handleClose()}isVisible(){return this.visible().value()}show(){l.render(i.createElement(j,{title:G,isOpened:!0,onSubmit:this._handleSubmit,onClose:this._handleClose,onCancel:this._handleCancel,pages:this._propertyPages,model:this._model,activePageId:this._activePageId,chartWidgetCollection:this._chartWidgetCollection}),this._container),this._setVisibility(!0),U.emit("edit_object_dialog",{objectType:"mainSeries",scriptTitle:this._model.mainSeries().title()})}_ensureCheckpoint(e){return void 0===e&&(e=this._model.createUndoCheckpoint()),e}}},sXZi:function(e,t,n){e.exports={"tablet-normal-breakpoint":"screen and (max-width: 768px)","tablet-small-breakpoint":"screen and (max-width: 428px)",withSidebar:"withSidebar-1e-cIUlp",content:"content-1e-cIUlp",tabContent:"tabContent-1e-cIUlp",applyToAllButton:"applyToAllButton-1e-cIUlp"}},utEQ:function(e,t,n){e.exports={themesButtonText:"themesButtonText-3vn5WLwC",themesButtonIcon:"themesButtonIcon-3vn5WLwC",defaultsButtonText:"defaultsButtonText-3vn5WLwC", +defaultsButtonItem:"defaultsButtonItem-3vn5WLwC"}},yMyk:function(e,t,n){e.exports={backButton:"backButton-ukxmTk5_"}}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/general-property-page.32bdfdbafbd81d9e83c6.js b/static/charting_library/bundles/general-property-page.32bdfdbafbd81d9e83c6.js new file mode 100644 index 0000000..c053c23 --- /dev/null +++ b/static/charting_library/bundles/general-property-page.32bdfdbafbd81d9e83c6.js @@ -0,0 +1,6 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["general-property-page"],{"34BO":function(e,t){e.exports=''},"5lPo":function(e,t,i){"use strict";i.r(t);var s=i("Eyy1"),r=i("Kxc7"),o=(i("N22A"),i("hY0g")),a=i.n(o),n=i("HSjo"),l=i("1yQO"),c=i("1ANp"),h=i("RspR"),d=i("MWAT"),p=i("zqjM"),b=i("x2L+");const u=window.t("Show Buy/Sell Buttons");var g=i("qFKp");const w=window.t("Symbol"),y=window.t("OHLC Values"),P=window.t("Bar Change Values"),O=window.t("Indicator Titles"),m=window.t("Indicator Arguments"),v=window.t("Indicator Values"),j=window.t("Background"),C=(window.t("Wrap text"),window.t("Show Open market status"));g.CheckMobile.any();function S(e,t,i,s,o){const l=[],c=[],h=Object(n.k)({checked:Object(n.b)(e,t.showSeriesTitle,"Change Symbol Description Visibility"),option:Object(n.b)(e,i.property,"Change Symbol Legend Format")},{id:"symbolTextSource",title:w,options:new a.a(i.values)});if(c.push(h),null!==s){const t=Object(n.c)({checked:Object(n.b)(e,s,"Change show open market status")},{id:"showOpenMarketStatus",title:C});c.push(t)}const d=Object(n.c)({checked:Object(n.b)(e,t.showSeriesOHLC,"Change OHLC Values Visibility")},{id:"ohlcTitle",title:y});c.push(d);const p=Object(n.c)({checked:Object(n.b)(e,t.showBarChange,"Change Bar Change Visibility")},{id:"barChange",title:P});c.push(p),l.push(Object(n.l)(c,"seriesLegendVisibilityGroup"));const b=function(e,t){return null!==t&&r.enabled("buy_sell_buttons")?Object(n.c)({checked:Object(n.a)(e,t.showSellBuyButtons,"Change buy/sell buttons visibility")},{id:"tradingSellBuyPanel",title:u}):null}(e,o);null!==b&&l.push(Object(n.l)([b],"sellBuyButtonsLegendVisibilityGroup"));const g=[],S=Object(n.c)({checked:Object(n.b)(e,t.showStudyArguments,"Change Indicator Arguments Visibility")},{id:"studyArguments",title:m}),_=Object(n.d)({checked:Object(n.b)(e,t.showStudyTitles,"Change Indicator Titles Visibility")},{id:"studyTitles",title:O},[S]);g.push(_);const f=Object(n.c)({checked:Object(n.b)(e,t.showStudyValues,"Change Indicator Values Visibility")},{id:"studyValues",title:v});g.push(f),l.push(Object(n.l)(g,"studiesLegendVisibilityGroup"));const L=[];const k=Object(n.r)({checked:Object(n.b)(e,t.showBackground,"Change Legend Background Visibility"),transparency:Object(n.b)(e,t.backgroundTransparency,"Change Legend Background Transparency")},{id:"legendBgTransparency",title:j});return L.push(k),l.push(Object(n.l)(L,"generalLegendGroup")),l}var _=i("oXaB"),f=i("Z5lT"),L=i("GDWD");const k=window.t("Symbol Name Label"),V=window.t("Symbol Last Price Label"),M=(window.t("Symbol Previous Day Close Price Label (Intraday Only)"),window.t("Indicator Name Label")),x=window.t("Indicator Last Value Label"),B=(window.t("Financials Name Label"),window.t("Financials Last Value Label"),window.t("Bid and Ask Labels"), +window.t("Pre/Post Market Price Label"),window.t("High and low price labels")),z=window.t("Average close price label"),D=window.t("Countdown To Bar Close"),T=window.t("Currency"),A=window.t("Unit"),H=window.t("Plus Button"),G=window.t("Scales Placement"),R=window.t("Date Format"),E=window.t("Lock Price to Bar Ratio"),N=window.t("No Overlapping Labels"),W=[{value:_.PriceAxisLastValueMode.LastPriceAndPercentageValue,title:window.t("Price and Percentage Value")},{value:_.PriceAxisLastValueMode.LastValueAccordingToScale,title:window.t("Value according to Scale")}];const F=window.t("Background"),I=window.t("Vert Grid Lines"),U=window.t("Horz Grid Lines"),q=window.t("Session Breaks"),K=window.t("Scales text"),Q=window.t("Scales lines"),J=window.t("Crosshair"),Z=window.t("Watermark"),X=window.t("Top Margin"),Y=window.t("Navigation Buttons"),$=window.t("Pane Buttons"),ee=window.t("Bottom Margin"),te=window.t("Right Margin"),ie=window.t("bars",{context:"unit"});var se=i("e1ZQ"),re=i("3t3b"),oe=i("gQ5K"),ae=i("+6ja");const ne={symbol:i("34BO"),legend:i("ggCF"),scales:i("Iilx"),appearance:i("DyO1"),events:i("iUxq"),trading:i("WS5G")};i.d(t,"ChartPropertyDefinitionsViewModel",(function(){return ge}));const le=window.t("Symbol"),ce=window.t("Status line"),he=window.t("Scales"),de=window.t("Appearance");window.t("Events"),window.t("Trading");let pe=null;function be(){const e=new Date(Date.UTC(1997,8,29));return se.a.map(t=>({value:t,title:new oe.DateFormatter(t).format(e)}))}const ue=[{id:"symbol-text-source-description",value:"description",title:window.t("Description")},{id:"symbol-text-source-ticker",value:"ticker",title:window.t("Ticker")},{id:"symbol-text-source-ticker-and-description",value:"ticker-and-description",title:window.t("Ticker and description")}];class ge{constructor(e,t,i){this._propertyPages=null,this._maxRightOffsetPropertyObject=null,this._isDestroyed=!1,this._undoModel=e,this._model=this._undoModel.model(),this._series=this._model.mainSeries(),this._chartWidgetProperties=t,this._options=i,this._seriesPropertyDefinitionViewModel=this._createSeriesViewModel(),this._legendPropertyPage=this._createLegendPropertyPage(),this._scalesPropertyPage=this._createScalesPropertyPage(),this._appearancePropertyPage=this._createAppearancePropertyPage(),this._tradingPropertyPage=this._createTradingPropertyPage(),this._eventsPropertyPage=this._createEventsPropertyPage(),this._series.onStyleChanged().subscribe(this,this._updateDefinitions),this._series.priceScaleChanged().subscribe(this,this._updateDefinitions)}destroy(){null!==this._propertyPages&&this._propertyPages.filter((e,t)=>0!==t).forEach(e=>{Object(n.u)(e.definitions.value())}),this._seriesPropertyDefinitionViewModel.destroy(),this._series.onStyleChanged().unsubscribe(this,this._updateDefinitions),this._series.priceScaleChanged().unsubscribe(this,this._updateDefinitions);Object(s.ensureNotNull)(this._model.timeScale()).maxRightOffsetChanged().unsubscribeAll(this),this._isDestroyed=!0}propertyPages(){ +return null===this._propertyPages?this._seriesPropertyDefinitionViewModel.propertyPages().then(e=>{if(this._isDestroyed)throw new Error("ChartPropertyDefinitionsViewModel already destroyed");return null===this._propertyPages&&(this._propertyPages=[...e],this._propertyPages.push(this._legendPropertyPage,this._scalesPropertyPage,this._appearancePropertyPage),null!==this._tradingPropertyPage&&this._propertyPages.push(this._tradingPropertyPage),null!==this._eventsPropertyPage&&this._propertyPages.push(this._eventsPropertyPage)),this._propertyPages}):Promise.resolve(this._propertyPages)}_updateDefinitions(){Object(n.u)(this._scalesPropertyPage.definitions.value());const e=this._createScalesDefinitions();this._scalesPropertyPage.definitions.setValue(e)}_createSeriesViewModel(){const e={property:this._model.properties().timezone,values:ae.availableTimezones.map(e=>({value:e.id,title:e.title}))};return new p.a(this._series,this._undoModel,"symbol",le,ne.symbol,e)}_createLegendPropertyPage(){const e=this._chartWidgetProperties.childs().paneProperties.childs().legendProperties.childs(),t={property:this._series.properties().childs().statusViewStyle.childs().symbolTextSource,values:ue},i=S(this._undoModel,e,t,this._options.marketStatusWidgetEnabled?b.b:null,pe);return Object(l.a)(i,"legend",ce,ne.legend)}_createScalesPropertyPage(){const e=this._createScalesDefinitions();return Object(l.a)(e,"scales",he,ne.scales)}_createScalesDefinitions(){const e=this._chartWidgetProperties.childs().scalesProperties.childs(),t={property:this._model.properties().priceScaleSelectionStrategyName,values:Object(d.allPriceScaleSelectionStrategyInfo)().map(e=>({value:e.name,title:e.title}))},i={property:re.dateFormatProperty,values:be()},s=this._model.mainSeriesScaleRatioProperty();return function(e,t,i,s){const o=s.seriesPriceScale.properties().childs(),l=[],c=[];if(s.seriesHasClosePrice){const t=Object(n.c)({checked:Object(n.b)(e,i.showSymbolLabels,"Show Symbol Labels")},{id:"symbolNameLabel",title:k}),s=Object(n.k)({checked:Object(n.b)(e,i.showSeriesLastValue,"Change Symbol Last Value Visibility"),option:Object(n.b)(e,i.seriesLastValueMode,"Change Symbol Last Value Mode")},{id:"symbolLastValueLabel",title:V,options:new a.a(W)});c.push(t,s)}const h=t.highLowAvgPrice,d=Object(n.c)({checked:Object(n.b)(e,h.childs().highLowPriceLabelsVisible,"Change high/low price labels visibility")},{id:"highLowPriceLabels",title:B}),p=Object(n.c)({checked:Object(n.b)(e,h.childs().averageClosePriceLabelVisible,"Change average close price label visibility")},{id:"averageClosePriceLabels",title:z});c.push(d,p);const b=Object(n.c)({checked:Object(n.b)(e,i.showStudyPlotLabels,"Show Study Plots Labels")},{id:"studyNameLabel",title:M}),u=Object(n.c)({checked:Object(n.b)(e,i.showStudyLastValue,"Change Indicator Last Value Visibility")},{id:"studyLastValueLabel",title:x});c.push(b,u);const g=Object(n.c)({checked:Object(n.b)(e,o.alignLabels,"Change No Overlapping Labels")},{id:"noOverlappingLabels",title:N});if(c.push(g),s.countdownEnabled){const i=Object(n.c)({ +checked:Object(n.b)(e,t.showCountdown,"Change Show Countdown")},{id:"countdown",title:D});c.push(i)}if(s.currencyConversionEnabled){const t=Object(n.c)({checked:Object(n.b)(e,i.showCurrency,"Change Currency Label Visibility")},{id:"scalesCurrency",title:T});c.push(t)}if(s.unitConversionEnabled){const t=Object(n.c)({checked:Object(n.b)(e,i.showUnit,"Change Unit Label Visibility")},{id:"scalesUnit",title:A});c.push(t)}if(e.crossHairSource().isMenuEnabled()){const t=Object(n.c)({checked:Object(n.b)(e,L.addPlusButtonProperty,"Plus Button")},{id:"addPlusButton",title:H});c.push(t)}l.push(Object(n.l)(c,"generalScalesLabelsGroup"));const w=Object(n.j)({checked:Object(n.w)(e,o.lockScale,s.seriesPriceScale,"Change lock scale"),value:Object(n.y)(e,s.mainSeriesScaleRatioProperty,"Change Price to Bar Ratio",[Object(f.c)(7),e=>e])},{id:"lockScale",title:E,min:new a.a(s.mainSeriesScaleRatioProperty.getMinValue()),max:new a.a(s.mainSeriesScaleRatioProperty.getMaxValue()),step:new a.a(s.mainSeriesScaleRatioProperty.getStepChangeValue())}),y=Object(n.k)({option:Object(n.x)(e,s.scalesPlacementPropertyObj.property)},{id:"scalesPlacement",title:G,options:new a.a(s.scalesPlacementPropertyObj.values)});if(l.push(w,y),r.enabled("scales_date_format")){const t=Object(n.k)({option:Object(n.b)(e,s.dateFormatPropertyObj.property,"Change Date Format")},{id:"dateFormat",title:R,options:new a.a(s.dateFormatPropertyObj.values)});l.push(t)}return l}(this._undoModel,this._series.properties().childs(),e,{disableSeriesPrevCloseValueProperty:this._series.isDWMProperty(),seriesHasClosePrice:this._series.hasClosePrice(),seriesPriceScale:this._series.priceScale(),mainSeriesScaleRatioProperty:s,scalesPlacementPropertyObj:t,dateFormatPropertyObj:i,currencyConversionEnabled:this._options.currencyConversionEnabled,unitConversionEnabled:this._options.unitConversionEnabled,countdownEnabled:this._options.countdownEnabled})}_createMaxOffsetPropertyObject(){const e=Object(s.ensureNotNull)(this._model.timeScale()),t=new a.a(Math.floor(e.maxRightOffset()));e.maxRightOffsetChanged().subscribe(this,e=>{t.setValue(Math.floor(e))}),this._maxRightOffsetPropertyObject={property:e.defaultRightOffsetProperty(),min:new a.a(0),max:t}}_createAppearancePropertyPage(){const e=this._chartWidgetProperties.childs(),t=e.paneProperties.childs(),i=e.scalesProperties.childs(),o=this._model.watermarkSource();let d=null;null!==o&&(d=o.properties().childs());const p={property:c.property(),values:c.availableValues()},b={property:h.property(),values:h.availableValues()},u=this._model.sessions().properties().childs().graphics.childs().vertlines.childs().sessBreaks.childs();null===this._maxRightOffsetPropertyObject&&this._createMaxOffsetPropertyObject();const g=Object(s.ensureNotNull)(this._maxRightOffsetPropertyObject),w=function(e,t,i,s,o,l,c,h,d){const p=[],b=Object(n.e)({color:Object(n.v)(e,t.background,null,"Change Chart Background Color"),gradientColor1:Object(n.v)(e,t.backgroundGradientStartColor,null,"Change Chart Background Color"), +gradientColor2:Object(n.v)(e,t.backgroundGradientEndColor,null,"Change Chart Background Color"),type:Object(n.b)(e,t.backgroundType,"Change Chart Background Type")},{id:"chartBackground",title:F,noAlpha:!0}),u=t.vertGridProperties.childs(),g=Object(n.i)({color:Object(n.v)(e,u.color,null,"Change Vert Grid Lines Color"),style:Object(n.b)(e,u.style,"Change Vert Grid Lines Style")},{id:"vertGridLine",title:I}),w=t.horzGridProperties.childs(),y=Object(n.i)({color:Object(n.v)(e,w.color,null,"Change Horz Grid Lines Color"),style:Object(n.b)(e,w.style,"Change Horz Grid Lines Style")},{id:"horizGridLine",title:U}),P=Object(n.i)({disabled:Object(n.b)(e,l,"Change Intraday Interval Property"),checked:Object(n.b)(e,o.visible,"Change Sessions Breaks Visibility"),color:Object(n.v)(e,o.color,null,"Change Sessions Breaks Color"),width:Object(n.b)(e,o.width,"Change Sessions Breaks Width"),style:Object(n.b)(e,o.style,"Change Sessions Breaks Style")},{id:"sessionBeaks",title:q}),O=Object(n.q)({color:Object(n.v)(e,s.textColor,null,"Change Scales Text Color"),size:Object(n.b)(e,s.fontSize,"Change Scales Font Size")},{id:"scalesText",title:K}),m=Object(n.i)({color:Object(n.v)(e,s.lineColor,null,"Change Scales Lines Color")},{id:"scalesLine",title:Q}),v=t.crossHairProperties.childs(),j=Object(n.i)({color:Object(n.v)(e,v.color,v.transparency,"Change Crosshair Color"),width:Object(n.b)(e,v.width,"Change Crosshair Width"),style:Object(n.b)(e,v.style,"Change Crosshair Style")},{id:"crossHair",title:J});if(p.push(b,g,y,P,O,m,j),null!==i){const t=Object(n.e)({checked:Object(n.b)(e,i.visibility,"Change Symbol Watermark Visibility"),color:Object(n.v)(e,i.color,null,"Change Symbol Watermark Color")},{id:"watermark",title:Z});p.push(t)}const C=Object(n.k)({option:Object(n.b)(e,h.property,"Change Navigation Buttons Visibility")},{id:"navButtons",title:Y,options:new a.a(h.values)});p.push(C);const S=Object(n.k)({option:Object(n.b)(e,d.property,"Change Pane Buttons Visibility")},{id:"paneButtons",title:$,options:new a.a(d.values)});p.push(S);const _=Object(n.j)({value:Object(n.b)(e,t.topMargin,"Change Top Margin",[f.b])},{type:0,id:"paneTopMargin",title:X,min:new a.a(0),max:new a.a(25),step:new a.a(1),unit:new a.a("%")}),L=Object(n.j)({value:Object(n.b)(e,t.bottomMargin,"Change Bottom Margin",[f.b])},{type:0,id:"paneBottomMargin",title:ee,min:new a.a(0),max:new a.a(25),step:new a.a(1),unit:new a.a("%")}),k=Object(n.j)({value:Object(n.b)(e,c.property,"Change Right Margin",[f.b])},{type:0,id:"paneRightMargin",title:te,min:c.min,max:c.max,step:new a.a(1),unit:new a.a(ie)}),V=[Object(n.l)(p,"generalAppearanceGroup"),_,L];return r.enabled("chart_property_page_right_margin_editor")&&V.push(k),V}(this._undoModel,t,d,i,u,this._series.isDWMProperty(),g,p,b);return Object(l.a)(w,"appearance",de,ne.appearance)}_createTradingPropertyPage(){return null}_createEventsPropertyPage(){return null}}},DyO1:function(e,t){ +e.exports=''},Iilx:function(e,t){e.exports=''},WS5G:function(e,t){e.exports=''},ggCF:function(e,t){e.exports=''},iUxq:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/go-to-date-dialog-impl.3481c4fcfde2f4d46426.js b/static/charting_library/bundles/go-to-date-dialog-impl.3481c4fcfde2f4d46426.js new file mode 100644 index 0000000..96fe19f --- /dev/null +++ b/static/charting_library/bundles/go-to-date-dialog-impl.3481c4fcfde2f4d46426.js @@ -0,0 +1,14 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["go-to-date-dialog-impl"],{"++0f":function(e,t){e.exports=''},"+l/S":function(e,t,n){},"/Wph":function(e,t){e.exports=''},"02pg":function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var s=n("q1tI"),o=n("TSYQ"),a=n("XiJV");function r(e){return s.createElement("div",{className:o(a.separator,e.className)})}},"2A9e":function(e){e.exports=JSON.parse('{"button":"button-1iktpaT1","content":"content-2PGssb8d","noOutline":"noOutline-d9Yp4qvi","grouped":"grouped-2NxOpIxM","adjust-position":"adjust-position-2zd-ooQC","first-row":"first-row-11wXF7aC","first-col":"first-col-pbJu53tK","no-corner-top-left":"no-corner-top-left-3ZsS65Fk","no-corner-top-right":"no-corner-top-right-3MYQOwk_","no-corner-bottom-right":"no-corner-bottom-right-3II18BAU","no-corner-bottom-left":"no-corner-bottom-left-3KZuX8tv","appearance-default":"appearance-default-dMjF_2Hu","intent-primary":"intent-primary-1-IOYcbg","intent-success":"intent-success-25a4XZXM","intent-default":"intent-default-2ZbSqQDs","intent-warning":"intent-warning-24j5HMi0","intent-danger":"intent-danger-1EETHCla","appearance-stroke":"appearance-stroke-12lxiUSM","appearance-text":"appearance-text-DqKJVT3U","appearance-inverse":"appearance-inverse-r1Y2JQg_","size-s":"size-s-3mait84m","size-m":"size-m-2G7L7Qat","size-l":"size-l-2NEs9_xt","full-width":"full-width-1wU8ljjC","with-icon":"with-icon-yumghDr-","icon":"icon-1grlgNdV"}')},"2sPR":function(e,t,n){e.exports={calendar:"calendar-3r0qUNSu",popupStyle:"popupStyle-3r0qUNSu",header:"header-3r0qUNSu",title:"title-3r0qUNSu",switchBtn:"switchBtn-3r0qUNSu",prev:"prev-3r0qUNSu",month:"month-3r0qUNSu",weekdays:"weekdays-3r0qUNSu",weeks:"weeks-3r0qUNSu",week:"week-3r0qUNSu",day:"day-3r0qUNSu",disabled:"disabled-3r0qUNSu",selected:"selected-3r0qUNSu",currentDay:"currentDay-3r0qUNSu",isOnHighlightedEdge:"isOnHighlightedEdge-3r0qUNSu",withinSelectedRange:"withinSelectedRange-3r0qUNSu"}},"5VK0":function(e,t,n){e.exports={scrollWrap:"scrollWrap-1KEqJy8_",tabsWrap:"tabsWrap-1KEqJy8_",tabs:"tabs-1KEqJy8_",withoutBorder:"withoutBorder-1KEqJy8_",tab:"tab-1KEqJy8_",withHover:"withHover-1KEqJy8_",headerBottomSeparator:"headerBottomSeparator-1KEqJy8_",fadeWithoutSlider:"fadeWithoutSlider-1KEqJy8_"}},"5o6O":function(e,t,n){e.exports={tabs:"tabs-3I2ohC86",tab:"tab-3I2ohC86",noBorder:"noBorder-3I2ohC86",disabled:"disabled-3I2ohC86", +active:"active-3I2ohC86",defaultCursor:"defaultCursor-3I2ohC86",slider:"slider-3I2ohC86",content:"content-3I2ohC86"}},"77yN":function(e,t){e.exports=''},"8JZL":function(e,t,n){e.exports={tooltip:"tooltip-3y8LFwiB"}},"8NUT":function(e,t,n){e.exports={"small-height-breakpoint":"screen and (max-height: 360px)",footer:"footer-KW8170fm",submitButton:"submitButton-KW8170fm",buttons:"buttons-KW8170fm"}},"9dlw":function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var s=n("q1tI"),o=n.n(s),a=n("i8i4"),r=n.n(a),i=n("AiMB"),c=n("DTHj"),l=n("X0gx"),u=n("8Rai");function d(e){const{controller:t,children:n,isOpened:a,closeOnClickOutside:d=!0,doNotCloseOn:h,onClickOutside:p,onClose:m,...f}=e,b=Object(s.useContext)(l.a),v=Object(u.a)({handler:function(e){p&&p(e);if(!d)return;if(h&&e.target instanceof Node){const t=r.a.findDOMNode(h);if(t instanceof Node&&t.contains(e.target))return}m()},mouseDown:!0,touchStart:!0});return a?o.a.createElement(i.a,{top:"0",left:"0",right:"0",bottom:"0",pointerEvents:"none"},o.a.createElement("span",{ref:v,style:{pointerEvents:"auto"}},o.a.createElement(c.b,{...f,onClose:m,onScroll:function(t){const{onScroll:n}=e;n&&n(t)},customCloseDelegate:b,ref:t},n))):null}},ASyk:function(e,t,n){e.exports={"tablet-normal-breakpoint":"screen and (max-width: 768px)","small-height-breakpoint":"screen and (max-height: 360px)","tablet-small-breakpoint":"screen and (max-width: 428px)"}},F6Wo:function(e,t,n){e.exports={container:"container-3tk-77P6",icon:"icon-3tk-77P6",tooltip:"tooltip-3tk-77P6",date:"date-3tk-77P6",time:"time-3tk-77P6"}},FT3R:function(e,t,n){e.exports={dialogWrapper:"dialogWrapper-C-Wab_3K",dialogWrapperSmall:"dialogWrapperSmall-C-Wab_3K",tabs:"tabs-C-Wab_3K",content:"content-C-Wab_3K",contentMobile:"contentMobile-C-Wab_3K",bodyWrapper:"bodyWrapper-C-Wab_3K"}},Gtzb:function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return o}));class s{constructor(){this._storage=new Map}setAsOpened(e,t){this._storage.set(e,t)}setAsClosed(e){this._storage.delete(e)}isOpened(e){return this._storage.has(e)}getDialogPayload(e){return this._storage.get(e)}}const o=new s},Hrlb:function(e,t,n){e.exports={pickerInput:"pickerInput-2oRut0q-",icon:"icon-2oRut0q-",disabled:"disabled-2oRut0q-",picker:"picker-2oRut0q-",fixed:"fixed-2oRut0q-",absolute:"absolute-2oRut0q-",nativePicker:"nativePicker-2oRut0q-"}},ItnF:function(e,t,n){e.exports={dialog:"dialog-2cMrvu9r",wrapper:"wrapper-2cMrvu9r",separator:"separator-2cMrvu9r"}},K3s3:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return l}));var s=n("q1tI"),o=n("TSYQ"),a=n("Eyy1"),r=n("5o6O");const i=r;function c(e){const t=o(e.className,r.tab,{ +[r.active]:e.isActive,[r.disabled]:e.isDisabled,[r.defaultCursor]:!!e.shouldUseDefaultCursor,[r.noBorder]:!!e.noBorder});return s.createElement("div",{className:t,onClick:e.onClick,ref:e.reference,"data-type":"tab-item","data-value":e.value,"data-name":"tab-item-"+e.value.toString().toLowerCase()},e.children)}function l(e){return class extends s.PureComponent{constructor(){super(...arguments),this.activeTab={current:null}}componentDidUpdate(){Object(a.ensureNotNull)(this._slider).style.transition="transform 350ms",this._componentDidUpdate()}componentDidMount(){this._componentDidUpdate()}render(){const{className:t}=this.props,n=this._generateTabs();return s.createElement("div",{className:o(t,r.tabs),"data-name":this.props["data-name"]},n,s.createElement(e,{reference:e=>{this._slider=e}}))}_generateTabs(){return this.activeTab.current=null,s.Children.map(this.props.children,e=>{const t=e,n=Boolean(t.props.isActive),o={reference:e=>{n&&(this.activeTab.current=e),t.props.reference&&t.props.reference(e)}};return s.cloneElement(t,o)})}_componentDidUpdate(){const e=Object(a.ensureNotNull)(this._slider).style;if(this.activeTab.current){const t=this.activeTab.current.offsetWidth,n=this.activeTab.current.offsetLeft;e.transform=`translateX(${n}px)`,e.width=t+"px",e.opacity="1"}else e.opacity="0"}}}l((function(e){return s.createElement("div",{className:r.slider,ref:e.reference})}))},N5tr:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return p}));var s=n("q1tI"),o=n.n(s),a=n("TSYQ"),r=n("tWVy"),i=n("JWMC"),c=n("ijHL"),l=n("v1bN");const u=l;function d(e){const{reference:t,...n}=e,s={...n,ref:t};return o.a.createElement(e.href?"a":"div",s)}function h(e){e.stopPropagation()}function p(e){const{id:t,role:n,"aria-selected":u,className:p,title:m,labelRowClassName:f,labelClassName:b,shortcut:v,forceShowShortcuts:g,icon:w,isActive:C,isDisabled:D,isHovered:_,appearAsDisabled:E,label:N,link:S,showToolboxOnHover:O,target:y,rel:k,toolbox:x,reference:I,onMouseOut:j,onMouseOver:T,suppressToolboxClick:P=!0,theme:F=l}=e,R=Object(c.b)(e),M=Object(s.useRef)(null);return o.a.createElement(d,{...R,id:t,role:n,"aria-selected":u,className:a(p,F.item,w&&F.withIcon,{[F.isActive]:C,[F.isDisabled]:D||E,[F.hovered]:_}),title:m,href:S,target:y,rel:k,reference:function(e){M.current=e,"function"==typeof I&&I(e);"object"==typeof I&&(I.current=e)},onClick:function(t){const{dontClosePopup:n,onClick:s,onClickArg:o,trackEventObject:a}=e;if(D)return;a&&Object(i.trackEvent)(a.category,a.event,a.label);s&&s(o,t);n||Object(r.b)()},onContextMenu:function(t){const{trackEventObject:n,trackRightClick:s}=e;n&&s&&Object(i.trackEvent)(n.category,n.event,n.label+"_rightClick")},onMouseUp:function(t){const{trackEventObject:n,trackMouseWheelClick:s}=e;if(1===t.button&&S&&n){let e=n.label;s&&(e+="_mouseWheelClick"),Object(i.trackEvent)(n.category,n.event,e)}},onMouseOver:T,onMouseOut:j},void 0!==w&&o.a.createElement("div",{className:F.icon,dangerouslySetInnerHTML:{__html:w}}),o.a.createElement("div",{className:a(F.labelRow,f) +},o.a.createElement("div",{className:a(F.label,b)},N)),(void 0!==v||g)&&o.a.createElement("div",{className:F.shortcut},(A=v)&&A.split("+").join(" + ")),void 0!==x&&o.a.createElement("div",{onClick:P?h:void 0,className:a(F.toolbox,{[F.showOnHover]:O})},x));var A}},R5JZ:function(e,t,n){"use strict";function s(e,t,n,s,o){function a(o){if(e>o.timeStamp)return;const a=o.target;void 0!==n&&null!==t&&null!==a&&a.ownerDocument===s&&(t.contains(a)||n(o))}return o.click&&s.addEventListener("click",a,!1),o.mouseDown&&s.addEventListener("mousedown",a,!1),o.touchEnd&&s.addEventListener("touchend",a,!1),o.touchStart&&s.addEventListener("touchstart",a,!1),()=>{s.removeEventListener("click",a,!1),s.removeEventListener("mousedown",a,!1),s.removeEventListener("touchend",a,!1),s.removeEventListener("touchstart",a,!1)}}n.d(t,"a",(function(){return s}))},XiJV:function(e,t,n){e.exports={separator:"separator-3No0pWrk"}},aDg1:function(e,t,n){"use strict";var s=n("q1tI"),o=n("TSYQ"),a=n("K3s3"),r=n("nPPD"),i=n("dMmr");const c=Object(r.a)(a.a,i);var l=n("4Cm8"),u=n("8+VR"),d=n("5VK0");n.d(t,"a",(function(){return m}));const h=d,p=Object(a.c)((function(e){return s.createElement("div",{className:c.slider,ref:e.reference},s.createElement("div",{className:c.inner}))}));class m extends s.PureComponent{constructor(){super(...arguments),this._createClickHandler=e=>()=>{this.props.onSelect(e)}}render(){const{theme:e=h,hiddenBottomBorders:t,fadedSlider:n=!0,ScrollComponent:a=l.a}=this.props,r=this._generateDialogTabs();return s.createElement("div",{className:o(e.scrollWrap)},!t&&s.createElement("div",{className:e.headerBottomSeparator}),s.createElement(a,{isVisibleFade:u.mobiletouch,isVisibleButtons:!u.mobiletouch,isVisibleScrollbar:!1,fadeClassName:o({[e.fadeWithoutSlider]:!n})},s.createElement("div",{className:e.tabsWrap},s.createElement(p,{className:o(e.tabs,t&&e.withoutBorder)},r))))}_generateDialogTabs(){const{activeTabId:e,tabs:t,theme:n=h}=this.props;return t.allIds.map(r=>{const i=e===r;return s.createElement(a.b,{key:r,value:r,className:o(n.tab,!i&&n.withHover),isActive:i,onClick:this._createClickHandler(r)},t.byId[r].title)})}}},dMmr:function(e,t,n){e.exports={slider:"slider-3RfwXbxu",inner:"inner-3RfwXbxu"}},g89m:function(e,t,n){"use strict";var s=n("q1tI"),o=n.n(s),a=n("Eyy1"),r=n("TSYQ"),i=n.n(r),c=n("/3z9"),l=n("d700"),u=n("WXjp"),d=n("02pg"),h=n("uhCe"),p=n("/KDZ"),m=n("pafz"),f=n("ZjKI"),b=n("FQhm"),v=n("Iivm");const g=o.a.createContext({setHideClose:()=>{}});var w=n("zztK"),C=n("px1m");function D(e){const{title:t,subtitle:n,showCloseIcon:a=!0,onClose:r,renderBefore:c,renderAfter:l,draggable:u,className:d,unsetAlign:h}=e,[p,m]=Object(s.useState)(!1);return o.a.createElement(g.Provider,{value:{setHideClose:m}},o.a.createElement("div",{className:i()(C.container,d,(n||h)&&C.unsetAlign)},c,o.a.createElement("div",{"data-dragg-area":u,className:C.title},o.a.createElement("div",{className:C.ellipsis},t),n&&o.a.createElement("div",{className:i()(C.ellipsis,C.subtitle)},n)),l,a&&!p&&o.a.createElement(v.a,{className:C.close,icon:w,onClick:r, +"data-name":"close","data-role":"button"})))}var _=n("ItnF");n.d(t,"a",(function(){return S}));const E={vertical:20},N={vertical:0};class S extends o.a.PureComponent{constructor(){super(...arguments),this._controller=null,this._reference=null,this._renderChildren=(e,t)=>(this._controller=e,this.props.render({requestResize:this._requestResize,centerAndFit:this._centerAndFit,isSmallWidth:t})),this._handleReference=e=>this._reference=e,this._handleClose=()=>{this.props.onClose()},this._handleKeyDown=e=>{var t;if(!e.defaultPrevented)switch(this.props.onKeyDown&&this.props.onKeyDown(e),Object(c.hashFromEvent)(e)){case 27:if(e.defaultPrevented)return;if(this.props.forceCloseOnEsc&&this.props.forceCloseOnEsc())return void this._handleClose();const{activeElement:n}=document,s=Object(a.ensureNotNull)(this._reference);if(null!==n){if(e.preventDefault(),"true"===(t=n).getAttribute("data-haspopup")&&"true"!==t.getAttribute("data-expanded"))return void this._handleClose();if(Object(l.b)(n))return void s.focus();if(s.contains(n))return void this._handleClose()}}},this._requestResize=()=>{null!==this._controller&&this._controller.recalculateBounds()},this._centerAndFit=()=>{null!==this._controller&&this._controller.centerAndFit()}}componentDidMount(){b.subscribe(f.CLOSE_POPUPS_AND_DIALOGS_COMMAND,this._handleClose,null)}componentWillUnmount(){b.unsubscribe(f.CLOSE_POPUPS_AND_DIALOGS_COMMAND,this._handleClose,null)}focus(){Object(a.ensureNotNull)(this._reference).focus()}getElement(){return this._reference}contains(e){var t,n;return null!==(n=null===(t=this._reference)||void 0===t?void 0:t.contains(e))&&void 0!==n&&n}render(){const{className:e,headerClassName:t,isOpened:n,title:s,dataName:a,onClickOutside:r,additionalElementPos:c,additionalHeaderElement:l,backdrop:f,shouldForceFocus:b=!0,showSeparator:v,subtitle:g,draggable:w=!0,fullScreen:C=!1,showCloseIcon:S=!0,rounded:O=!0,isAnimationEnabled:y,growPoint:k,dialogTooltip:x,unsetHeaderAlign:I}=this.props,j="after"!==c?l:void 0,T="after"===c?l:void 0;return o.a.createElement(p.a,{rule:h.a.SmallHeight},c=>o.a.createElement(p.a,{rule:h.a.TabletSmall},l=>o.a.createElement(u.a,{rounded:!(l||C)&&O,className:i()(_.dialog,e),isOpened:n,reference:this._handleReference,onKeyDown:this._handleKeyDown,onClickOutside:r,onClickBackdrop:r,fullscreen:l||C,guard:c?N:E,boundByScreen:l||C,shouldForceFocus:b,backdrop:f,draggable:w,isAnimationEnabled:y,growPoint:k,name:this.props.dataName,dialogTooltip:x},o.a.createElement("div",{className:_.wrapper,"data-name":a,"data-dialog-name":"string"==typeof s?s:""},void 0!==s&&o.a.createElement(D,{draggable:w&&!(l||C),onClose:this._handleClose,renderAfter:T,renderBefore:j,subtitle:g,title:s,showCloseIcon:S,className:t,unsetAlign:I}),v&&o.a.createElement(d.a,{className:_.separator}),o.a.createElement(m.a.Consumer,null,e=>this._renderChildren(e,l||C))))))}}},ijHL:function(e,t,n){"use strict";function s(e){return a(e,r)}function o(e){return a(e,i)}function a(e,t){const n=Object.entries(e).filter(t),s={};for(const[e,t]of n)s[e]=t;return s}function r(e){const[t,n]=e +;return 0===t.indexOf("data-")&&"string"==typeof n}function i(e){return 0===e[0].indexOf("aria-")}n.d(t,"b",(function(){return s})),n.d(t,"a",(function(){return o})),n.d(t,"c",(function(){return a})),n.d(t,"e",(function(){return r})),n.d(t,"d",(function(){return i}))},mwqF:function(e,t,n){"use strict";var s=n("q1tI"),o=n.n(s),a=n("TSYQ"),r=n("wwkJ"),i=n("ZWNO");function c(e,t){const{intent:n="primary",size:s="m",appearance:o="default",useFullWidth:r=!1,tabIndex:c=0,icon:l,className:u,isGrouped:d,cellState:h,disablePositionAdjustment:p=!1}=t,m=function(e,t){let n="";return 0!==e&&(1&e&&(n=a(n,t["no-corner-top-left"])),2&e&&(n=a(n,t["no-corner-top-right"])),4&e&&(n=a(n,t["no-corner-bottom-right"])),8&e&&(n=a(n,t["no-corner-bottom-left"]))),n}(Object(i.a)(h),e);return a(u,e.button,e["size-"+s],e["intent-"+n],e["appearance-"+o],r&&e["full-width"],-1===c&&e.noOutline,l&&"s"!==s&&e["with-icon"],m,d&&e.grouped,!p&&e["adjust-position"],h.isTop&&e["first-row"],h.isLeft&&e["first-col"])}var l=n("2A9e");n("+l/S");function u(e){const{className:t,intent:n,size:i,appearance:u,disabled:d,useFullWidth:h,reference:p,icon:m,children:f,tabIndex:b,...v}=e,{isGrouped:g,cellState:w,disablePositionAdjustment:C}=Object(s.useContext)(r.a),D=c(l,{intent:n,size:i,appearance:u,disabled:d,useFullWidth:h,tabIndex:b,icon:m,isGrouped:g,cellState:w,disablePositionAdjustment:C});return o.a.createElement("button",{className:a(D,t),disabled:d,ref:p,tabIndex:b,...v},m&&"s"!==i&&o.a.createElement("span",{className:l.icon},m),o.a.createElement("span",{className:l.content},f))}n.d(t,"a",(function(){return u}))},nPPD:function(e,t,n){"use strict";function s(e,t,n={}){const s=Object.assign({},t);for(const o of Object.keys(t)){const a=n[o]||o;a in e&&(s[o]=[e[a],t[o]].join(" "))}return s}function o(e,t,n={}){return Object.assign({},e,s(e,t,n))}n.d(t,"b",(function(){return s})),n.d(t,"a",(function(){return o}))},px1m:function(e,t,n){e.exports={"small-height-breakpoint":"screen and (max-height: 360px)",container:"container-2sL5JydP",unsetAlign:"unsetAlign-2sL5JydP",title:"title-2sL5JydP",subtitle:"subtitle-2sL5JydP",ellipsis:"ellipsis-2sL5JydP",close:"close-2sL5JydP"}},sw0u:function(e,t,n){e.exports={row:"row-PABCY1cG",mobileRow:"mobileRow-PABCY1cG"}},"uUY/":function(e,t,n){"use strict";n.r(t);var s=n("q1tI"),o=n.n(s),a=n("i8i4"),r=n.n(a),i=n("Eyy1"),c=n("PT1i");function l(e){return("0"+e).slice(-2)}function u(e){const t=new Date(e);return t.setMilliseconds(0),t.setSeconds(0),t.setMinutes(0),t.setHours(0),t}function d(e,t=!1){const n=u(e),s=t?function(e){if(e>6)throw new Error("Invalid day is provided");return 0===e?6:e-1}(n.getDay()):n.getDay();return n.setDate(n.getDate()-s),n}function h(e){const t=u(e);return t.setDate(1),t}function p(e,t){return Number(u(e))===Number(u(t))}function m(e){const t=new Date(e);return t.setDate(t.getDate()+7),t}function f(e,t,n){const s=!t||Number(u(t))-Number(u(e))<=0;return(!n||Number(u(n))-Number(u(e))>=0)&&s}function b(e){return new Date(e).getTimezoneOffset()/60}function v(e){const t=new Date(e) +;return t.setHours(t.getHours()+b(t)),t}function g(e){const t=new Date(e);return t.setHours(t.getHours()-b(t)),t}var w=n("Gtzb"),C=n("jCNj"),D=n.n(C);const _=o.a.createContext(null);function E(e){const{initialGoToDate:t,children:n}=e,[a,r]=Object(s.useState)(t),i=a.valueOf()<=function(e){const t=new Date(e);return t.setMilliseconds(999),t.setSeconds(59),t.setMinutes(59),t.setHours(23),t}(new Date).valueOf(),c=Object(s.useMemo)(()=>({date:a,setDate:r,isValid:i}),[a,i]);return o.a.createElement(_.Provider,{value:c},n)}const N=o.a.createContext(null);function S(e){const{initialRanges:t,children:n}=e,[a,r]=Object(s.useState)(t.from),[i,c]=Object(s.useState)(t.to),l=a.valueOf()<=i.valueOf(),u=Object(s.useMemo)(()=>({dateFrom:a,dateTo:i,setDateFrom:r,setDateTo:c,isValid:l}),[a,i,l]);return o.a.createElement(N.Provider,{value:u},n)}var O=n("YFKU"),y=n("TSYQ"),k=n.n(y),x=n("FQhm"),I=n("Vdly"),j=n.n(I),T=n("ZjKI"),P=n("uhCe"),F=n("ycFu"),R=n("sw0u");function M(e){const{children:t}=e;return o.a.createElement("div",{className:k()(R.row,_e&&R.mobileRow)},t)}var A=n("8+VR"),B=n("gQ5K"),z=n("Iivm"),W=n("2sPR");class K extends s.PureComponent{constructor(){super(...arguments),this._dateFormatter=new B.DateFormatter,this._onClick=()=>{this.props.onClick&&!this.props.isDisabled&&this.props.onClick(new Date(this.props.day))}}render(){const e=y(W.day,{[W.selected]:this.props.isSelected,[W.disabled]:this.props.isDisabled,[W.withinSelectedRange]:this._withinSelectedRange(),[W.isOnHighlightedEdge]:this._isOnHighlightedEdge(),[W.currentDay]:this._isCurrentDay()});return s.createElement("span",{className:e,onClick:this._onClick,"data-day":this._dateFormatter.formatLocal(this.props.day)},this.props.day.getDate())}_isOnHighlightedEdge(){const{day:e,highlightedFrom:t,highlightedTo:n}=this.props;return!(!t||!n)&&(p(e,t)||p(e,n))}_withinSelectedRange(){const{day:e,highlightedFrom:t,highlightedTo:n}=this.props;return!(!t||!n)&&this._isBetweenByDay(t,e,n)}_isCurrentDay(){return p(new Date,this.props.day)}_isBetweenByDay(e,t,n){const s=u(e),o=u(t),a=u(n);return sH.map(e=>s.createElement("span",{key:e},e))}render(){return s.createElement("div",{className:W.month},s.createElement("div",{className:W.weekdays},this._renderWeekdays()),s.createElement("div",{className:W.weeks},this._renderWeeks()))}_renderWeeks(){const e=[];let t=d(h(this.props.viewDate),!0);for(let n=0;n<6;n++)e.push(this._renderWeek(t)),t=new Date(m(t));return e}_renderWeek(e){const t=[];for(let a=0;a<7;a++){const r=new Date(e);r.setDate(r.getDate()+a),(n=r,o=this.props.viewDate,Number(h(n))===Number(h(o)))&&t.push(s.createElement(K,{key:a,day:r,isDisabled:this._isDayDisabled(r), +isSelected:p(r,this.props.selectedDate),onClick:this.props.onClickDay,highlightedFrom:this.props.highlightedFrom,highlightedTo:this.props.highlightedTo}))}var n,o;if(0===t.length)return null;const a=function(e){const t=new Date(e.getFullYear(),0,1),n=(Number(e)-Number(t))/864e5;return Math.ceil((n+t.getDay()+1)/7)}(e);return s.createElement("div",{className:W.week,key:a},t)}_isDayDisabled(e){if(!f(e,this.props.minDate,this.props.maxDate))return!0;const t=[6,0].includes(e.getDay());return!!this.props.disableWeekends&&t}}var L=n("++0f");const U=[Object(O.t)("January"),Object(O.t)("February"),Object(O.t)("March"),Object(O.t)("April"),Object(O.t)("May"),Object(O.t)("June"),Object(O.t)("July"),Object(O.t)("August"),Object(O.t)("September"),Object(O.t)("October"),Object(O.t)("November"),Object(O.t)("December")];class V extends s.PureComponent{constructor(e){super(e),this._prevMonth=()=>{const e=new Date(this.state.viewDate);e.setMonth(e.getMonth()-1),this.setState({viewDate:e}),this.props.onMonthSwitch&&this.props.onMonthSwitch()},this._nextMonth=()=>{const e=new Date(this.state.viewDate);e.setMonth(e.getMonth()+1),this.setState({viewDate:e}),this.props.onMonthSwitch&&this.props.onMonthSwitch()},this._onClickDay=e=>{this.setState({viewDate:new Date(e)}),this.props.onSelect&&this.props.onSelect(new Date(e))},this.state={viewDate:e.selectedDate}}render(){return s.createElement("div",{className:y(W.calendar,this.props.popupStyle&&W.popupStyle,this.props.className),tabIndex:-1},s.createElement("div",{className:W.header},s.createElement(z.a,{icon:L,onClick:this._prevMonth,className:y(W.switchBtn,W.prev)}),s.createElement("div",{className:W.title},`${U[this.state.viewDate.getMonth()]} ${this.state.viewDate.getFullYear()}`),s.createElement(z.a,{icon:L,onClick:this._nextMonth,className:y(W.switchBtn,W.next)})),s.createElement(q,{viewDate:this.state.viewDate,selectedDate:this.props.selectedDate,maxDate:this.props.maxDate,minDate:this.props.minDate,onClickDay:this._onClickDay,disableWeekends:this.props.disableWeekends,highlightedFrom:this.props.highlightedFrom,highlightedTo:this.props.highlightedTo}))}}V.defaultProps={popupStyle:!0};var G=n("dKnb"),J=n("jh7f"),Y=n("xADF"),Q=n("RgaO"),Z=n("Hrlb");class X extends s.PureComponent{constructor(e){super(e),this._input=null,this._handleFocus=()=>{this.props.showOnFocus&&this.props.onShowPicker()},this._handleInputRef=e=>{this._input=e,this.props.inputReference&&this.props.inputReference(this._input)},this._onShowPicker=e=>{if(e){const t=e.getBoundingClientRect();t.width&&t.right>window.innerWidth?e.style.right="0":e.style.right="auto"}},this._onChange=()=>{const e=Object(i.ensureNotNull)(this._input).value;this.setState({value:e}),this.props.onType(e)},this._onKeyDown=e=>{this.props.onHidePicker()},this._onKeyPress=e=>{if(e.charCode){const t=String.fromCharCode(e.charCode);this.props.inputRegex.test(t)||e.preventDefault()}},this._onKeyUp=e=>{if(8!==e.keyCode){const e=Object(i.ensureNotNull)(this._input).value,t=this.props.fixValue(e);t!==e&&this.setState({value:t})}},this.state={ +value:e.value}}UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){const{position:e="fixed",className:t,size:n,disabled:o,readonly:a,errors:r,icon:i,InputComponent:c=G.a}=this.props;return s.createElement("div",{className:Z.pickerInput},s.createElement(c,{value:this.state.value,onBlur:this.props.onBlur,onKeyDown:this._onKeyDown,onKeyPress:this._onKeyPress,onKeyUp:this._onKeyUp,onChange:this._onChange,onFocus:this._handleFocus,onClick:this.props.onShowPicker,reference:this._handleInputRef,className:t,size:n,disabled:o,errors:r,messagesPosition:J.a.Attached,hasErrors:this.props.showErrorMessages&&r&&r.length>0,name:this.props.name,readonly:a,endSlot:r&&r.length?void 0:s.createElement(Y.b,null,s.createElement(z.a,{icon:i,className:y(Z.icon,o&&Z.disabled),onClick:o||a?void 0:this.props.onShowPicker})),"data-name":this.props.name}),this.props.showPicker&&!a?s.createElement(Q.a,{mouseDown:!0,handler:this.props.onHidePicker},t=>s.createElement("span",{ref:t},s.createElement("div",{className:y(Z.picker,Z[e]),key:"0",ref:this._onShowPicker},this.props.children))):null)}}X.defaultProps={showOnFocus:!0};class $ extends s.PureComponent{constructor(e){super(e),this._input=null,this._nativeInputRef=s.createRef(),this._handleInputRef=e=>{this._input=e,this.props.inputReference&&this.props.inputReference(this._input)},this._onFocus=()=>{this.setState({isFocused:!0})},this._onBlur=()=>{this._nativeInputRef.current&&(this._nativeInputRef.current.defaultValue=this.state.value),this.setState({isFocused:!1})},this._onChange=e=>{const{value:t}=e.target;t&&(this.setState({value:t}),this.props.onChange(t))},this.state={value:e.value,isFocused:!1}}componentDidMount(){this._nativeInputRef.current&&(this._nativeInputRef.current.defaultValue=this.props.value)}render(){const{className:e,disabled:t,errors:n,InputComponent:o=G.a}=this.props,a=!this.props.readonly&&!t,r=this.props.showErrorMessages&&n&&n.length>0;return s.createElement("div",{className:Z.pickerInput},s.createElement(o,{value:this.state.value,readonly:!0,noReadonlyStyles:!0,endSlot:n&&n.length?void 0:s.createElement(Y.b,null,s.createElement(z.a,{icon:this.props.icon,className:y(Z.icon,t&&Z.disabled)})),className:e,inputClassName:Z.textInput,size:this.props.size,disabled:t,hasErrors:r,errors:n,alwaysShowAttachedErrors:!0,messagesPosition:J.a.Attached,name:a?void 0:this.props.name,reference:this._handleInputRef,highlight:this.state.isFocused,intent:!r&&this.state.isFocused?"primary":void 0}),a&&s.createElement("input",{ref:this._nativeInputRef,type:this.props.type,className:Z.nativePicker,onChange:this._onChange,onInput:this._onChange,min:this.props.min,max:this.props.max,name:this.props.name,onFocus:this._onFocus,onBlur:this._onBlur}))}}var ee=n("ldG2"),te=n("77yN");class ne extends o.a.PureComponent{constructor(e){super(e),this._pickerInputContainerRef=o.a.createRef(),this._dateFormatter=new B.DateFormatter,this._fixValue=e=>(e=(e=e.substr(0,10)).replace(/-+/g,"-"),(/^\d{4}$/.test(e)||/^\d{4}-\d{2}$/.test(e))&&(e+="-"),e), +this._isValid=e=>{if(/^[0-9]{4}(-[0-9]{2}){2}/.test(e)){const t=new Date(e.concat("T00:00"));return!function(e){return Number.isNaN(Number(e))}(t)&&(!!this.props.noRangeValidation||f(t,this.props.minDate,this.props.maxDate))}return!1},this._onBlur=e=>{var t;if(!this.props.revertInvalidData||(null===(t=this._pickerInputContainerRef.current)||void 0===t?void 0:t.contains(e.relatedTarget)))return;const{value:n}=e.target;if(!this._isValid(n)){const t=new Date(this.state.date);this.setState({pickerInputKey:e.timeStamp,date:t,isInvalid:!1}),this.props.onPick(t)}},this._onType=e=>{const t=this._isValid(e)?new Date(e.concat("T00:00")):null;t?this.setState({date:t,isInvalid:!1}):this.setState({isInvalid:!0}),this.props.onPick(t)},this._onSelect=e=>{this.setState({date:e,showCalendar:!1,isInvalid:!1}),this.props.onPick(e)},this._showCalendar=()=>{this.setState({showCalendar:!0})},this._hideCalendar=()=>{this.setState({showCalendar:!1})},this._getErrors=()=>{const e=this.props.errors?[...this.props.errors]:[];return this.state.isInvalid&&e.push(window.t("Please enter the right date format yyyy-mm-dd")),e},this.state={pickerInputKey:0,date:e.initial,showCalendar:!1,isInvalid:!this._isValid(this._dateFormatter.formatLocal(e.initial))}}render(){return A.mobiletouch?o.a.createElement($,{value:this._dateFormatter.formatLocal(this.state.date),type:"date",onChange:this._onType,icon:te,disabled:this.props.disabled,size:this.props.size,min:this.props.minDate&&this._dateFormatter.formatLocal(this.props.minDate),max:this.props.maxDate&&this._dateFormatter.formatLocal(this.props.maxDate),errors:this._getErrors(),showErrorMessages:this.props.showErrorMessages,name:this.props.name,readonly:this.props.readonly,className:y(this._getFontSizeClassName(this.props.size),this.props.className),inputReference:this.props.inputReference,InputComponent:this.props.InputComponent}):o.a.createElement("div",{ref:this._pickerInputContainerRef},o.a.createElement(X,{key:this.state.pickerInputKey,value:this._dateFormatter.formatLocal(this.state.date),inputRegex:/[0-9.]/,fixValue:this._fixValue,onType:this._onType,onBlur:this._onBlur,onShowPicker:this._showCalendar,onHidePicker:this._hideCalendar,showPicker:this.state.showCalendar&&this.props.withCalendar,showOnFocus:this.props.showOnFocus,icon:te,disabled:this.props.disabled,size:this.props.size,errors:this._getErrors(),showErrorMessages:this.props.showErrorMessages,name:this.props.name,readonly:this.props.readonly,position:this.props.position,className:y(this._getFontSizeClassName(this.props.size),this.props.className),inputReference:this.props.inputReference,InputComponent:this.props.InputComponent},o.a.createElement(V,{selectedDate:this.state.date,maxDate:this.props.maxDate,minDate:this.props.minDate,onSelect:this._onSelect})))}UNSAFE_componentWillReceiveProps(e){this.props.initial!==e.initial&&this.setState({date:e.initial})}_getFontSizeClassName(e){return e?"large"===e?ee.b.FontSizeLarge:ee.b.FontSizeMedium:void 0}}ne.defaultProps={position:"fixed",withCalendar:!0};var se=n("8JZL");function oe(e){ +const{className:t,text:n}=e;return o.a.createElement("span",{className:k()(se.tooltip,t)},n)}var ae=n("/Wph"),re=n("F6Wo");function ie(e){const{hasErrors:t,onClick:n,errors:s,...a}=e;return o.a.createElement("div",{className:re.container,onClick:n},o.a.createElement(G.a,{...a,className:re.date,hasErrors:t,errors:[],endSlot:!t&&o.a.createElement(Y.b,{icon:!0,interactive:!1},o.a.createElement(z.a,{icon:ae,className:re.icon}))}),t&&o.a.createElement(oe,{text:Object(O.t)("Please enter the right date"),className:re.tooltip}))}const ce=o.a.createContext({isActive:!1,isFocused:!1});function le(e){const{value:t,reference:n,isActive:a,onPick:r,onFocus:i}=e,[c,l]=Object(s.useState)(!1);return o.a.createElement(ce.Provider,{value:{isActive:a,isFocused:c}},o.a.createElement("div",{onFocus:function(){l(!0),i&&i()},onBlur:function(){l(!1)}},o.a.createElement(ne,{initial:t,inputReference:n,InputComponent:ue,withCalendar:!1,onPick:function(e){if(!e)return;r(new Date(e))},revertInvalidData:!0,name:e.name})))}function ue(e){const{isActive:t,isFocused:n}=Object(s.useContext)(ce);return o.a.createElement(ie,{...e,highlight:t||n})}var de=n("qZIh");function he(e){const{value:t,isDisabled:n,onPick:s}=e;return o.a.createElement(de.a,{value:(a=t,l(a.getHours())+":"+l(a.getMinutes())),onChange:s,disabled:n});var a}var pe=n("vx8J");function me(e){return o.a.createElement(V,{...e,className:pe.calendar,popupStyle:!1})}function fe(e,t){const n=new Date(t);return n.setFullYear(e.getFullYear()),n.setMonth(e.getMonth()),n.setDate(e.getDate()),n}function be(e,t){const n=new Date(t);return n.setHours(e.getHours()),n.setMinutes(e.getMinutes()),n}function ve(e){const{dateOnly:t,onCalendarMonthSwitch:n}=e,{date:a,setDate:r}=Object(i.ensureNotNull)(Object(s.useContext)(_)),c=Object(s.useRef)(null),l=Object(s.useRef)(null);return Object(s.useEffect)(()=>{_e||null===l.current||l.current.focus()},[]),o.a.createElement("div",{ref:c,tabIndex:-1},o.a.createElement(M,null,o.a.createElement(le,{reference:function(e){l.current=e},value:new Date(a),onPick:function(e){const t=fe(e,a);r(t)},isActive:!_e}),o.a.createElement(he,{value:new Date(a),isDisabled:t,onPick:function(e){var t;const[n,s]=e.split(":"),o=new Date;o.setHours(Number(n)),o.setMinutes(Number(s));const i=be(o,a);r(i),_e||null===(t=c.current)||void 0===t||t.focus({preventScroll:!0})}})),!_e&&o.a.createElement(me,{key:`${a.getFullYear()}-${a.getMonth()}-${a.getDate()}`,selectedDate:new Date(a),onSelect:function(e){var t;const n=fe(e,a);r(n),null===(t=c.current)||void 0===t||t.focus({preventScroll:!0})},onMonthSwitch:n,maxDate:new Date}))}function ge(e){const{dateOnly:t,onCalendarMonthSwitch:n,onDateInputFocus:a}=e,{dateFrom:r,dateTo:c,setDateFrom:l,setDateTo:u}=Object(i.ensureNotNull)(Object(s.useContext)(N)),[d,h]=Object(s.useState)("from"),p=Object(s.useRef)(null),m=Object(s.useRef)(null),f=Object(s.useRef)(null),b=Object(s.useMemo)(()=>"from"===d?new Date(r):new Date(c),[d,c,r]);return Object(s.useEffect)(()=>{_e||null===m.current||m.current.focus()},[]),o.a.createElement("div",{ref:p,tabIndex:-1 +},o.a.createElement(M,null,o.a.createElement(le,{value:r,reference:function(e){m.current=e},isActive:!_e&&"from"===d,onPick:function(e){const t=fe(e,r);l(t)},onFocus:function(){h("from"),a()},name:"start-date-range"}),o.a.createElement(he,{value:r,isDisabled:t,onPick:function(e){v(e,r,l)}})),o.a.createElement(M,null,o.a.createElement(le,{value:c,reference:function(e){f.current=e},isActive:!_e&&"to"===d,onPick:function(e){const t=fe(e,c);u(t)},onFocus:function(){h("to"),a()},name:"end-date-range"}),o.a.createElement(he,{value:c,isDisabled:t,onPick:function(e){v(e,c,u)}})),!_e&&o.a.createElement(me,{key:`${b.getFullYear()}-${b.getMonth()}-${b.getDate()}`,selectedDate:new Date(b),onSelect:function(e){const t=fe(e,"from"===d?r:c);({from:()=>{var e;l(t),null===(e=f.current)||void 0===e||e.focus({preventScroll:!0})},to:()=>{var e;u(t),null===(e=p.current)||void 0===e||e.focus({preventScroll:!0})}})[d]()},onMonthSwitch:n,highlightedFrom:new Date(r),highlightedTo:new Date(c),maxDate:"from"===d?new Date(c):void 0,minDate:"to"===d?new Date(r):void 0}));function v(e,t,n){var s;const[o,a]=e.split(":"),r=new Date;r.setHours(Number(o)),r.setMinutes(Number(a));n(be(r,t)),_e||null===(s=p.current)||void 0===s||s.focus({preventScroll:!0})}}var we=n("aDg1"),Ce=n("/KDZ"),De=n("FT3R");const _e=A.mobiletouch,Ee=()=>!0,Ne={byId:{Date:{title:Object(O.t)("Date")},CustomRange:{title:Object(O.t)("Custom range")}},allIds:["Date","CustomRange"]};function Se(e){const{dateOnly:t,onClose:n,onGoToDate:a,onGoToRange:r}=e,c=Object(s.useRef)(null),[l,u]=Object(s.useState)(j.a.getValue("GoToDialog.activeTab","Date")),[d,h]=Object(s.useState)(0),{date:p,isValid:m}=Object(i.ensureNotNull)(Object(s.useContext)(_)),{dateFrom:f,dateTo:b,isValid:v}=Object(i.ensureNotNull)(Object(s.useContext)(N));return Object(s.useEffect)(()=>(x.subscribe(T.CLOSE_POPUPS_AND_DIALOGS_COMMAND,D,null),()=>{x.unsubscribe(T.CLOSE_POPUPS_AND_DIALOGS_COMMAND,D,null)}),[n]),Object(s.useEffect)(()=>{null!==c.current&&c.current()},[d,l,p,f,b]),o.a.createElement(Ce.a,{rule:P.a.TabletSmall},e=>o.a.createElement(F.a,{className:k()(De.dialogWrapper,e&&De.dialogWrapperSmall),title:Object(O.t)("Go to"),dataName:"go-to-date-dialog",render:g,defaultActionOnClose:"cancel",onClose:D,onClickOutside:D,onCancel:D,onSubmit:C,submitButtonDisabled:w(),submitButtonText:Object(O.t)("Go to"),forceCloseOnEsc:Ee,shouldForceFocus:!1,fullScreen:e,isOpened:!0}));function g({requestResize:e}){return c.current=e,o.a.createElement(o.a.Fragment,null,o.a.createElement("div",{className:De.tabs},o.a.createElement(we.a,{activeTabId:l,tabs:Ne,onSelect:E})),o.a.createElement("div",{className:k()(De.content,_e&&De.contentMobile)},o.a.createElement("div",{className:De.bodyWrapper},o.a.createElement(Oe,{onCalendarMonthSwitch:S,onDateInputFocus:S,activeTab:l,dateOnly:t}))))}function w(){return{CustomRange:!v,Date:!m}[l]}function C(){switch(l){case"Date":a(p);break;case"CustomRange":r(f,b)}}function D(){n()}function E(e){u(e),j.a.setValue("GoToDialog.activeTab",e)}function S(){h(d+1)}}function Oe(e){ +const{activeTab:t,dateOnly:n,onCalendarMonthSwitch:s,onDateInputFocus:a}=e;switch(t){case"Date":return o.a.createElement(ve,{dateOnly:n,onCalendarMonthSwitch:s});case"CustomRange":return o.a.createElement(ge,{dateOnly:n,onCalendarMonthSwitch:s,onDateInputFocus:a})}}function ye(e){const{dateOnly:t,onClose:n,onGoToDate:s,onGoToRange:a,initialGoToDate:r,initialRanges:i}=e;return o.a.createElement(E,{initialGoToDate:r},o.a.createElement(S,{initialRanges:i},o.a.createElement(Se,{dateOnly:t,onClose:n,onGoToDate:s,onGoToRange:a})))}var ke=n("pPtI"),xe=n("k9/m");const Ie=new class{constructor(){this._hasError=!1}getItemOrDefault(e,t){return!sessionStorage||this._hasError?t:sessionStorage.getItem(e)}setItem(e,t="true"){try{sessionStorage.setItem(e,t),this._hasError=!1}catch(e){this._hasError=!0}}};n.d(t,"showGoToDateDialog",(function(){return Te}));const je=new w.a;function Te(e){if(je.isOpened("goTo"))return;if(!e.hasModel())return;const t=e.model(),n=document.createElement("div"),s=o.a.createElement(ye,{onClose:a,dateOnly:t.model().mainSeries().isDWM(),initialGoToDate:Pe(),initialRanges:Fe(e),onGoToDate:e=>{!function(e,t){Ie.setItem("goToDateTabLastPickedDate",String(t.valueOf()));if(void 0===e.model().timeScale().tickMarks().minIndex)return;const n=g(t).valueOf();e.model().gotoTime(n).then(t=>{const n=e.model().mainSeries();void 0===t?n.clearGotoDateResult():n.setGotoDateResult(t)})}(t,e),a()},onGoToRange:(t,n)=>{!function(e,t,n){const s=function(e){const t=e.timezone();if("exchange"!==t)return t;const n=e.mainSeries().symbolInfo();return null==n?void 0:n.timezone}(e.model().model());if(!s)return;const o=c.linking.interval.value(),a=o&&Object(ke.normalizeIntervalString)(o),r=D.a.get_timezone(s),i=e=>Object(C.cal_to_utc)(r,new Date(e)),l=g(t).valueOf(),u=g(n).valueOf(),d={val:{type:"time-range",from:i(l)/1e3,to:i(u)/1e3},res:a};e.chartWidgetCollection().setTimeFrame(d)}(e,t,n),a()}});function a(){r.a.unmountComponentAtNode(n),je.setAsClosed("goTo")}r.a.render(s,n),je.setAsOpened("goTo")}function Pe(){const e=Ie.getItemOrDefault("goToDateTabLastPickedDate",null);return null===e?u(new Date):new Date(Number(e))}function Fe(e){const t=function(e){const t=e.model().timeScale(),n=t.visibleBarsStrictRange();if(null===n)return;const s=e.model().mainSeries(),o=s.nearestIndex(n.firstBar(),xe.PlotRowSearchMode.NearestRight),a=s.nearestIndex(n.lastBar(),xe.PlotRowSearchMode.NearestLeft);if(void 0===o||void 0===a)return;return{from:Object(i.ensureNotNull)(t.indexToUserTime(o)),to:Object(i.ensureNotNull)(t.indexToUserTime(a))}}(e);return t?{from:v(t.from),to:v(t.to)}:{from:v(new Date),to:v(new Date)}}},uhCe:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var s=n("ASyk");const o={SmallHeight:s["small-height-breakpoint"],TabletSmall:s["tablet-small-breakpoint"],TabletNormal:s["tablet-normal-breakpoint"]}},v1bN:function(e,t,n){e.exports={"tablet-small-breakpoint":"screen and (max-width: 428px)",item:"item-2IihgTnv",hovered:"hovered-2IihgTnv",isDisabled:"isDisabled-2IihgTnv",isActive:"isActive-2IihgTnv", +shortcut:"shortcut-2IihgTnv",toolbox:"toolbox-2IihgTnv",withIcon:"withIcon-2IihgTnv",icon:"icon-2IihgTnv",labelRow:"labelRow-2IihgTnv",label:"label-2IihgTnv",showOnHover:"showOnHover-2IihgTnv"}},vx8J:function(e,t,n){e.exports={calendar:"calendar-1NjzAl_S"}},ycFu:function(e,t,n){"use strict";n.d(t,"a",(function(){return h}));var s=n("q1tI"),o=n.n(s),a=n("TSYQ"),r=n.n(a),i=n("mwqF"),c=n("Eyy1"),l=(n("YFKU"),n("/3z9")),u=n("g89m"),d=n("8NUT");class h extends o.a.PureComponent{constructor(){super(...arguments),this._dialogRef=o.a.createRef(),this._handleClose=()=>{const{defaultActionOnClose:e,onSubmit:t,onCancel:n,onClose:s}=this.props;switch(e){case"submit":t();break;case"cancel":n()}s()},this._handleCancel=()=>{this.props.onCancel(),this.props.onClose()},this._handleKeyDown=e=>{const{onSubmit:t,submitButtonDisabled:n,submitOnEnterKey:s}=this.props;switch(Object(l.hashFromEvent)(e)){case 13:!n&&s&&(e.preventDefault(),t())}}}render(){const{render:e,onClose:t,onSubmit:n,onCancel:s,footerLeftRenderer:a,submitButtonText:r,submitButtonDisabled:i,defaultActionOnClose:c,submitOnEnterKey:l,...d}=this.props;return o.a.createElement(u.a,{...d,ref:this._dialogRef,onKeyDown:this._handleKeyDown,render:this._renderChildren(),onClose:this._handleClose})}focus(){Object(c.ensureNotNull)(this._dialogRef.current).focus()}_renderChildren(){return e=>{const{render:t,footerLeftRenderer:n,additionalButtons:s,submitButtonText:a,submitButtonDisabled:c,onSubmit:l,cancelButtonText:u,showCancelButton:h=!0,submitButtonClassName:p,cancelButtonClassName:m,buttonsWrapperClassName:f}=this.props;return o.a.createElement(o.a.Fragment,null,t(e),o.a.createElement("div",{className:d.footer},n&&n(e.isSmallWidth),o.a.createElement("div",{className:r()(d.buttons,f)},s,h&&o.a.createElement(i.a,{className:m,name:"cancel",appearance:"stroke",onClick:this._handleCancel},null!=u?u:window.t("Cancel")),o.a.createElement("span",{className:d.submitButton},o.a.createElement(i.a,{className:p,disabled:c,name:"submit",onClick:l,"data-name":"submit-button"},null!=a?a:window.t("Ok"))))))}}}h.defaultProps={defaultActionOnClose:"submit",submitOnEnterKey:!0}},zztK:function(e,t){e.exports=''}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/hammerjs.e5489031ed611f47bf09.js b/static/charting_library/bundles/hammerjs.e5489031ed611f47bf09.js new file mode 100644 index 0000000..deb7172 --- /dev/null +++ b/static/charting_library/bundles/hammerjs.e5489031ed611f47bf09.js @@ -0,0 +1,7 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["hammerjs"],{be1f:function(t,e,n){"use strict";n.r(e);var i=n("yLV6"),r=n.n(i);n.d(e,"HammerJS",(function(){return r.a}))},yLV6:function(t,e,n){var i;!function(r,s,o,a){"use strict";var h,u=["","webkit","Moz","MS","ms","o"],c=s.createElement("div"),l=Math.round,p=Math.abs,f=Date.now;function v(t,e,n){return setTimeout(I(t,n),e)}function d(t,e,n){return!!Array.isArray(t)&&(m(t,n[e],n),!0)}function m(t,e,n){var i;if(t)if(t.forEach)t.forEach(e,n);else if(void 0!==t.length)for(i=0;i\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=r.console&&(r.console.warn||r.console.log);return s&&s.call(r.console,i,n),t.apply(this,arguments)}}h="function"!=typeof Object.assign?function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n-1}function P(t){return t.trim().split(/\s+/g)}function x(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;in[e]})):i.sort()),i}function R(t,e){for(var n,i,r=e[0].toUpperCase()+e.slice(1),s=0;s1&&!n.firstMultiple?n.firstMultiple=L(e):1===r&&(n.firstMultiple=!1);var s=n.firstInput,o=n.firstMultiple,a=o?o.center:s.center,h=e.center=H(i);e.timeStamp=f(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=G(a,h),e.distance=j(a,h),function(t,e){var n=e.center,i=t.offsetDelta||{},r=t.prevDelta||{},s=t.prevInput||{};1!==e.eventType&&4!==s.eventType||(r=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y});e.deltaX=r.x+(n.x-i.x),e.deltaY=r.y+(n.y-i.y)}(n,e),e.offsetDirection=U(e.deltaX,e.deltaY);var u=V(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=u.x,e.overallVelocityY=u.y,e.overallVelocity=p(u.x)>p(u.y)?u.x:u.y,e.scale=o?(c=o.pointers,l=i,j(l[0],l[1],W)/j(c[0],c[1],W)):1,e.rotation=o?function(t,e){return G(e[1],e[0],W)+G(t[1],t[0],W)}(o.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,function(t,e){var n,i,r,s,o=t.lastInterval||e,a=e.timeStamp-o.timeStamp;if(8!=e.eventType&&(a>25||void 0===o.velocity)){var h=e.deltaX-o.deltaX,u=e.deltaY-o.deltaY,c=V(a,h,u);i=c.x,r=c.y,n=p(c.x)>p(c.y)?c.x:c.y,s=U(h,u),t.lastInterval=e}else n=o.velocity,i=o.velocityX,r=o.velocityY,s=o.direction;e.velocity=n,e.velocityX=i,e.velocityY=r,e.direction=s}(n,e);var c,l;var v=t.element;C(e.srcEvent.target,v)&&(v=e.srcEvent.target);e.target=v}(t,n),t.emit("hammer.input",n),t.recognize(n),t.session.prevInput=n}function L(t){for(var e=[],n=0;n=p(e)?t<0?2:4:e<0?8:16}function j(t,e,n){n||(n=F);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return Math.sqrt(i*i+r*r)}function G(t,e,n){n||(n=F);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return 180*Math.atan2(r,i)/Math.PI}k.prototype={handler:function(){},init:function(){this.evEl&&S(this.element,this.evEl,this.domHandler),this.evTarget&&S(this.target,this.evTarget,this.domHandler),this.evWin&&S(z(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&_(this.element,this.evEl,this.domHandler),this.evTarget&&_(this.target,this.evTarget,this.domHandler),this.evWin&&_(z(this.element),this.evWin,this.domHandler)}};var J={mousedown:1,mousemove:2,mouseup:4};function Z(){this.evEl="mousedown",this.evWin="mousemove mouseup",this.pressed=!1,k.apply(this,arguments)}E(Z,k,{handler:function(t){var e=J[t.type];1&e&&0===t.button&&(this.pressed=!0),2&e&&1!==t.which&&(e=4),this.pressed&&(4&e&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t], +changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var B={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},$={2:"touch",3:"pen",4:"mouse",5:"kinect"},K="pointerdown",Q="pointermove pointerup pointercancel";function tt(){this.evEl=K,this.evWin=Q,k.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}r.MSPointerEvent&&!r.PointerEvent&&(K="MSPointerDown",Q="MSPointerMove MSPointerUp MSPointerCancel"),E(tt,k,{handler:function(t){var e=this.store,n=!1,i=t.type.toLowerCase().replace("ms",""),r=B[i],s=$[t.pointerType]||t.pointerType,o="touch"==s,a=x(e,t.pointerId,"pointerId");1&r&&(0===t.button||o)?a<0&&(e.push(t),a=e.length-1):12&r&&(n=!0),a<0||(e[a]=t,this.callback(this.manager,r,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),n&&e.splice(a,1))}});var et={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function nt(){this.evTarget="touchstart",this.evWin="touchstart touchmove touchend touchcancel",this.started=!1,k.apply(this,arguments)}function it(t,e){var n=D(t.touches),i=D(t.changedTouches);return 12&e&&(n=O(n.concat(i),"identifier",!0)),[n,i]}E(nt,k,{handler:function(t){var e=et[t.type];if(1===e&&(this.started=!0),this.started){var n=it.call(this,t,e);12&e&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:t})}}});var rt={touchstart:1,touchmove:2,touchend:4,touchcancel:8};function st(){this.evTarget="touchstart touchmove touchend touchcancel",this.targetIds={},k.apply(this,arguments)}function ot(t,e){var n=D(t.touches),i=this.targetIds;if(3&e&&1===n.length)return i[n[0].identifier]=!0,[n,n];var r,s,o=D(t.changedTouches),a=[],h=this.target;if(s=n.filter((function(t){return C(t.target,h)})),1===e)for(r=0;r-1&&i.splice(t,1)}),2500)}}function ct(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,i=0;i-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){ +return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){var e=this,n=this.state;function i(n){e.manager.emit(n,t)}n<8&&i(e.options.event+mt(n)),i(e.options.event),t.additionalEvent&&i(t.additionalEvent),n>=8&&i(e.options.event+mt(n))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;te.threshold&&r&e.direction},attrTest:function(t){return Tt.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=gt(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),E(It,Tt,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||2&this.state)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),E(At,dt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return["auto"]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distancee.time;if(this._input=t,!i||!n||12&t.eventType&&!r)this.reset();else if(1&t.eventType)this.reset(),this._timer=v((function(){this.state=8,this.tryEmit()}),e.time,this);else if(4&t.eventType)return 8;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){8===this.state&&(t&&4&t.eventType?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=f(),this.manager.emit(this.options.event,this._input)))}}),E(bt,Tt,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return["none"]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||2&this.state)}}),E(St,Tt,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1}, +getTouchAction:function(){return Et.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return 30&n?e=t.overallVelocity:6&n?e=t.overallVelocityX:24&n&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&p(e)>this.options.velocity&&4&t.eventType},emit:function(t){var e=gt(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),E(_t,dt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return["manipulation"]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance'},"8d0Q":function(e,t,a){"use strict";var s=a("q1tI");function n(){const[e,t]=Object(s.useState)(!1);return[e,{onMouseOver:function(e){i(e)&&t(!0)},onMouseOut:function(e){i(e)&&t(!1)}}]}function i(e){return!e.currentTarget.contains(e.relatedTarget)}function r(e){const[t,a]=Object(s.useState)(!1);return Object(s.useEffect)(()=>{const t=t=>{if(null===e.current)return;const s=e.current.contains(t.target);a(s)};return document.addEventListener("mouseover",t),()=>document.removeEventListener("mouseover",t)},[]),t}a.d(t,"c",(function(){return n})),a.d(t,"a",(function(){return i})),a.d(t,"b",(function(){return r}))},Iivm:function(e,t,a){"use strict";var s=a("q1tI");const n=s.forwardRef((e,t)=>{const{icon:a="",...n}=e;return s.createElement("span",{...n,ref:t,dangerouslySetInnerHTML:{__html:a}})});a.d(t,"a",(function(){return n}))},KMbc:function(e,t,a){"use strict";a.r(t);var s=a("q1tI"),n=a("i8i4"),i=a("Eyy1"),r=a("TSYQ"),o=a("4O8T"),l=a.n(o),c=a("UXvI"),d=a("Kxc7"),u=a("FQhm"),h=a("17x9"),m=a("cvc5"),v=a("8+VR"),p=a("+GaQ"),f=a("KrBX");function b(e){const{children:t,className:a,noLeftDecoration:n,noRightDecoration:i,noMinimalWidth:o,onClick:l}=e;return s.createElement("div",{className:r(a,f.group,{[f.noMinimalWidth]:o,[f.noLeftDecoration]:n,[f.noRightDecoration]:i}), +onClick:l},t)}var g=a("tO+E");class y extends s.PureComponent{constructor(){super(...arguments),this._handleMeasure=({width:e})=>{this.props.onWidthChange(e)}}render(){const{children:e,shouldMeasure:t}=this.props;return s.createElement(m,{shouldMeasure:t,onMeasure:this._handleMeasure,whitelist:["width"]},s.createElement("div",{className:g.wrap},e))}}var S=a("tU7i"),_=a("KkTf");function E(e){return s.createElement(S.b,{...e,forceInteractive:!0,icon:_})}a("YFKU");var C=a("Iivm"),w=a("a+Yp"),M=a("6oLA");const I={text:window.t("View Only Mode")};function k(e){return s.createElement("div",{className:w.wrap},s.createElement(C.a,{className:w.icon,icon:M}),I.text)}var O,R=a("4Cm8"),x=a("XAms");!function(e){e.SymbolSearch="header-toolbar-symbol-search",e.Intervals="header-toolbar-intervals",e.ChartStyles="header-toolbar-chart-styles",e.Compare="header-toolbar-compare",e.Indicators="header-toolbar-indicators",e.StudyTemplates="header-toolbar-study-templates",e.Dropdown="header-toolbar-dropdown",e.Alerts="header-toolbar-alerts",e.Layouts="header-toolbar-layouts",e.SaveLoad="header-toolbar-save-load",e.UndoRedo="header-toolbar-undo-redo",e.Properties="header-toolbar-properties",e.PublishDesktop="header-toolbar-publish-desktop",e.PublishMobile="header-toolbar-publish-mobile",e.Fullscreen="header-toolbar-fullscreen",e.Screenshot="header-toolbar-screenshot",e.Replay="header-toolbar-replay",e.Financials="header-toolbar-financials",e.StartTrial="header-toolbar-start-trial"}(O||(O={}));var F=a("8d0Q"),V=a("1TxM"),W=a("a8bL");const L=Object(V.b)();class T extends s.PureComponent{constructor(e,t){super(e,t),this._handleMouseOver=e=>{Object(F.a)(e)&&this.setState({isHovered:!0})},this._handleMouseOut=e=>{Object(F.a)(e)&&this.setState({isHovered:!1})},this._activateSymbolSearchMode=()=>{this._setMode(2)},this._activateNormalMode=()=>{this._setMode(1)},this._handleInnerResize=e=>{const{onWidthChange:t}=this.props;t&&t(e)},this._handleMeasureAvailableSpace=({width:e})=>{const{onAvailableSpaceChange:t}=this.props;t&&t(e)},this._processCustoms=e=>{const{isFake:t,displayMode:a}=this.props,{tools:n}=this.context;return e.map(e=>s.createElement(b,{key:e.id},"Button"===e.type?s.createElement(n.Custom,{...e.params,isFake:t}):s.createElement(n.Dropdown,{displayMode:a,params:e.params})))},this._fixLastGroup=(e,t,a)=>{if(t===a.length-1&&s.isValidElement(e)&&e.type===b){const t=void 0!==this.context.tools.Publish&&!this.props.readOnly;return s.cloneElement(e,{noRightDecoration:t})}return e},Object(V.c)(t,{tools:h.any.isRequired}),this.state={isHovered:!1,mode:1,isAuthenticated:void 0}}componentDidMount(){0}componentWillUnmount(){0}render(){const{tools:e}=this.context,{features:t,displayMode:a,chartSaver:n,studyMarket:i,readOnly:o,saveLoadSyncEmitter:l,leftCustomElements:c,rightCustomElements:d,showScrollbarWhen:u,width:h=0,isFake:f=!1}=this.props,{isHovered:g,mode:S,isAuthenticated:_}=this.state,C=this._processCustoms(c),w=this._processCustoms(d),M=u.includes(a);return s.createElement("div",{className:r(W.inner,{[W.fake]:f}),onContextMenu:x.b, +"data-is-fake-main-panel":f},s.createElement(m,{onMeasure:this._handleMeasureAvailableSpace,whitelist:["width"],shouldMeasure:!f},s.createElement(R.a,{isVisibleFade:v.mobiletouch&&M,isVisibleButtons:!v.mobiletouch&&M&&g,isVisibleScrollbar:!1,shouldMeasure:M&&!f,onMouseOver:this._handleMouseOver,onMouseOut:this._handleMouseOut},s.createElement("div",{className:W.content},s.createElement(y,{onWidthChange:this._handleInnerResize,shouldMeasure:f},s.createElement(p.a,{map:this._fixLastGroup},!o&&s.Children.toArray([e.SymbolSearch&&s.createElement(b,{key:"symbol",className:2===S&&W.symbolSearch},s.createElement(e.SymbolSearch,{id:f?void 0:O.SymbolSearch,isActionsVisible:t.allowSymbolSearchSpread,isExpanded:2===S,onFocus:this._activateSymbolSearchMode,onBlur:this._activateNormalMode,maxWidth:h})),e.DateRange&&s.createElement(b,{key:"range"},s.createElement(e.DateRange,null)),e.Intervals&&1===S&&s.createElement(b,{key:"intervals"},s.createElement(e.Intervals,{id:f?void 0:O.Intervals,isShownQuicks:t.allowFavoriting,isFavoritingAllowed:t.allowFavoriting,displayMode:a,isFake:f})),e.Bars&&1===S&&s.createElement(b,{key:"styles"},s.createElement(e.Bars,{id:f?void 0:O.ChartStyles,isShownQuicks:t.allowFavoriting,isFavoritingAllowed:t.allowFavoriting,displayMode:a,isFake:f})),e.Compare&&1===S&&s.createElement(b,{key:"compare"},s.createElement(e.Compare,{id:f?void 0:O.Compare,className:W.button,displayMode:a})),e.Indicators&&1===S&&s.createElement(b,{key:"indicators"},s.createElement(e.Indicators,{id:f?void 0:O.Indicators,className:W.button,studyMarket:i,displayMode:a})),e.Financials&&1===S&&s.createElement(b,{key:"financials"},s.createElement(e.Financials,{id:f?void 0:O.Financials,className:W.button,displayMode:a})),e.Templates&&1===S&&s.createElement(b,{key:"templates"},s.createElement(e.Templates,{id:f?void 0:O.StudyTemplates,isShownQuicks:t.allowFavoriting,isFavoritingAllowed:t.allowFavoriting,displayMode:a})),1===S&&e.Alert&&s.createElement(b,{key:"alert"},s.createElement(e.Alert,{id:f?void 0:O.Alerts,className:W.button,displayMode:a})),1===S&&e.AlertReferral&&s.createElement(b,{key:"alert-referral"},s.createElement(e.AlertReferral,{className:W.button,displayMode:a})),e.Replay&&1===S&&s.createElement(b,{key:"replay"},s.createElement(e.Replay,{id:f?void 0:O.Replay,className:W.button,displayMode:a})),e.UndoRedo&&1===S&&s.createElement(b,{key:"undo-redo"},s.createElement(e.UndoRedo,{id:f?void 0:O.UndoRedo})),e.ScalePercentage&&s.createElement(b,{key:"percentage"},s.createElement(e.ScalePercentage,null)),e.ScaleLogarithm&&s.createElement(b,{key:"logarithm"},s.createElement(e.ScaleLogarithm,null)),...C]),1===S?function(e){const t=e.findIndex(e=>s.isValidElement(e)&&!!e.key&&-1!==e.key.toString().indexOf("view-only-badge"));return[t].filter(e=>e>=0).forEach(t=>{e=s.Children.map(e,(e,a)=>{if(s.isValidElement(e)){switch([t-1,t,t+1].indexOf(a)){case 0:const t={noRightDecoration:!0};e=s.cloneElement(e,t);break;case 1:const a={noLeftDecoration:!0,noRightDecoration:!0};e=s.cloneElement(e,a);break;case 2:const n={noLeftDecoration:!0} +;e=s.cloneElement(e,n)}}return e})}),e}(s.Children.toArray([o&&s.createElement(b,{key:"view-only-badge"},s.createElement(k,null)),s.createElement(b,{key:"gap",className:r(W.fill,f&&W.collapse)}),!o&&e.Layout&&s.createElement(b,{key:"layout"},s.createElement(e.Layout,{id:f?void 0:O.Layouts})),e.SaveLoad&&s.createElement(b,{key:"save-load-right"},s.createElement(e.SaveLoad,{id:f?void 0:O.SaveLoad,chartSaver:n,isReadOnly:o,displayMode:a,isFake:f,stateSyncEmitter:l})),e.SaveLoadReferral&&s.createElement(b,{key:"save-load-referral"},s.createElement(e.SaveLoadReferral,{isReadOnly:o,displayMode:a})),t.showLaunchInPopupButton&&e.OpenPopup&&s.createElement(b,{key:"popup"},s.createElement(e.OpenPopup,null)),!o&&e.Properties&&s.createElement(b,{key:"properties"},s.createElement(e.Properties,{id:f?void 0:O.Properties,className:W.iconButton})),!o&&e.Fullscreen&&s.createElement(b,{key:"fullscreen",onClick:this._trackFullscreenButtonClick},s.createElement(e.Fullscreen,{id:f?void 0:O.Fullscreen})),e.Screenshot&&s.createElement(b,{key:"screenshot"},s.createElement(e.Screenshot,{id:f?void 0:O.Screenshot,className:W.iconButton})),!o&&e.Publish&&s.createElement(b,{key:"publish",className:W.mobilePublish},s.createElement(e.Publish,{id:f?void 0:O.PublishMobile})),...w])):[s.createElement(b,{key:"gap",className:r(W.fill,2===S&&W.minimalPriority)}),s.createElement(b,{key:"symbol-search-close"},s.createElement(E,{className:r(W.iconButton,W.symbolSearchClose)}))]))))),e.Publish&&!o&&!f&&s.createElement(e.Publish,{id:O.PublishDesktop,className:W.desktopPublish}))}_onLoginStateChange(){0}_setMode(e){this.setState({mode:e})}_trackFullscreenButtonClick(){0}}T.contextType=L;var P=a("hY0g"),D=a.n(P),A=a("ulZB");class N extends A.b{constructor(e,t,a=[]){super(e,t,"FAVORITE_CHART_STYLES_CHANGED","StyleWidget.quicks",a)}}var z=a("pPtI"),j=a("L6rT");class B extends A.a{constructor(e,t,a){super(e,t,"FAVORITE_INTERVALS_CHANGED","IntervalWidget.quicks",a)}_serialize(e){return Object(j.uniq)(e.map(z.normalizeIntervalString))}_deserialize(e){return Object(j.uniq)(Object(z.convertResolutionsFromSettings)(e).filter(z.isResolutionMultiplierValid).map(z.normalizeIntervalString))}}var K=a("Vdly"),H=a("FBuY");a("bSeV");class X extends A.a{constructor(e,t,a=[]){super(e,t,"CUSTOM_INTERVALS_CHANGED","IntervalWidget.intervals",a)}set(e,t){e.length,this.get().length,super.set(e,t)}_serialize(e){return Object(j.uniq)(e.map(z.normalizeIntervalString))}_deserialize(e){return Object(j.uniq)(Object(z.convertResolutionsFromSettings)(e).filter(z.isResolutionMultiplierValid).map(z.normalizeIntervalString))}}const U=new X(H.TVXWindowEvents,K);var q=a("LxhU"),G=a("cSDC");class Q{constructor(e){this._customIntervalsService=U,this._chartApiInstance=e}getDefaultIntervals(){return null===this._chartApiInstance?[]:this._chartApiInstance.defaultResolutions().map(z.normalizeIntervalString)}getCustomIntervals(){return this._customIntervalsService.get()}add(e,t,a){if(!this.isValidInterval(e,t))return null +;const s=this._getIntervalString(e,t),n=Object(z.normalizeIntervalString)(s),i=this.getCustomIntervals();return this._isIntervalDefault(n)||i.includes(n)?null:(this._customIntervalsService.set(Object(z.sortResolutions)([...i,n])),n)}remove(e){this._customIntervalsService.set(this.getCustomIntervals().filter(t=>t!==e))}isValidInterval(e,t){const a=parseInt(e);return a===this._minMaxTime(a,t)}isSupportedInterval(e){return Object(z.isAvailable)(e)}getOnChange(){return this._customIntervalsService.getOnChange()}getPossibleIntervals(){return G.a}getResolutionUtils(){return{getMaxResolutionValue:this._getMaxResolutionValue,getTranslatedResolutionModel:z.getTranslatedResolutionModel,mergeResolutions:z.mergeResolutions,sortResolutions:z.sortResolutions}}_getMaxResolutionValue(e){return q.Interval.isMinuteHours(e)?Math.floor(Object(z.getMaxResolutionValue)("1")/60):Object(z.getMaxResolutionValue)(e)}_isIntervalDefault(e){return this.getDefaultIntervals().includes(e)}_minMaxTime(e,t){return Math.max(1,Math.min(e,this._getMaxResolutionValue(t)))}_getIntervalString(e,t){const a=parseInt(e),s=q.Interval.parse(t),n=s.isMinuteHours()?60*a:a;return new q.Interval(s.kind(),n).value()}}var Y=a("yMne"),Z=a("cBZt"),J=a("TcSq"),$=a("aIyQ"),ee=a.n($);const te={};let ae=null;class se{constructor(e=K){this._favorites=[],this._favoritesChanged=new ee.a,this._settings=e,H.TVXWindowEvents.on("StudyFavoritesChanged",e=>{const t=JSON.parse(e);this._loadFromState(t.favorites||[])}),this._settings.onSync.subscribe(this,this._loadFavs),this._loadFavs()}isFav(e){const t=this.favId(e);return-1!==this._findFavIndex(t)}toggleFavorite(e){this.isFav(e)?this.removeFavorite(e):this.addFavorite(e)}addFavorite(e){const t=this.favId(e);this._favorites.push(ie(t)),this._favoritesChanged.fire(),this._saveFavs()}removeFavorite(e){const t=this.favId(e),a=this._findFavIndex(t);-1!==a&&(this._favorites.splice(a,1),this._favoritesChanged.fire()),this._saveFavs()}favId(e){return Object(J.isPineIdString)(e)?e:Object(J.extractPineId)(e)||Object(Z.extractStudyId)(e)}favorites(){return this._favorites}favoritePineIds(){return this._favorites.filter(e=>"pine"===e.type).map(e=>e.pineId)}favoritesChanged(){return this._favoritesChanged}static getInstance(){return null===ae&&(ae=new se),ae}static create(e){return new se(e)}_loadFavs(){const e=this._settings.getJSON("studyMarket.favorites",[]);this._loadFromState(e)}_saveFavs(){const e=this._stateToSave();this._settings.setJSON("studyMarket.favorites",e),H.TVXWindowEvents.emit("StudyFavoritesChanged",JSON.stringify({favorites:e}))}_stateToSave(){return this._favorites.map(ne)}_loadFromState(e){this._favorites=e.map(e=>ie(function(e){return e in te?te[e]:e}(e))),this._favoritesChanged.fire()}_findFavIndex(e){return this._favorites.findIndex(t=>e===ne(t))}}function ne(e){return"java"===e.type?e.studyId:e.pineId}function ie(e){return Object(J.isPineIdString)(e)?{type:"pine",pineId:e}:{type:"java",studyId:e}}const re={[q.ResolutionKind.Ticks]:!1,[q.ResolutionKind.Seconds]:!1,[q.ResolutionKind.Minutes]:!1, +[q.SpecialResolutionKind.Hours]:!1,[q.ResolutionKind.Days]:!1,[q.ResolutionKind.Range]:!1};class oe extends A.b{constructor(e,t,a=re){super(e,t,"INTERVALS_MENU_VIEW_STATE_CHANGED","IntervalWidget.menu.viewState",a)}isAllowed(e){return Object.keys(re).includes(e)}}A.b;var le=a("54XG");const ce={Area:3,Bars:0,Candles:1,"Heiken Ashi":8,"Hollow Candles":9,Line:2,Renko:4,Kagi:5,"Point & figure":6,"Line Break":7,Baseline:10},de=["1","30","60"];function ue(e=[]){let t=e.map(e=>ce[e])||[1,4,5,6];return d.enabled("widget")&&(t=[0,1,3]),t}function he(e=[]){return Object(z.mergeResolutions)(e,d.enabled("star_some_intervals_by_default")?de:[])}new B(H.TVXWindowEvents,K,he()),new N(H.TVXWindowEvents,K,ue()),new le.FavoriteStudyTemplateService(H.TVXWindowEvents,K);const me={tools:h.any.isRequired,isFundamental:h.any,chartApiInstance:h.any,availableTimeFrames:h.any,chartWidgetCollection:h.any,windowMessageService:h.any,favoriteChartStylesService:h.any,favoriteIntervalsService:h.any,intervalService:h.any,favoriteStudyTemplatesService:h.any,studyTemplates:h.any,chartChangesWatcher:h.any,saveChartService:h.any,sharingChartService:h.any,loadChartService:h.any,chartWidget:h.any,favoriteScriptsModel:h.any,intervalsMenuViewStateService:h.any,templatesMenuViewStateService:h.any,financialsDialogController:h.any,snapshotUrl:h.any};var ve=a("gWrr"),pe=a("6aN0");const fe=[];class be extends s.PureComponent{constructor(e){super(e),this._saveLoadSyncEmitter=new l.a,this._handleFullWidthChange=e=>{this._fullWidth=e,this.setState({measureValid:!1})},this._handleFavoritesWidthChange=e=>{this._favoritesWidth=e,this.setState({measureValid:!1})},this._handleCollapseWidthChange=e=>{this._collapseWidth=e,this.setState({measureValid:!1})},this._handleMeasure=e=>{this.setState({availableWidth:e,measureValid:!1})};const{tools:t,windowMessageService:a,chartWidgetCollection:s,chartApiInstance:n,availableTimeFrames:r,isFundamental:o,favoriteIntervalsService:u,favoriteChartStylesService:h,favoriteStudyTemplatesService:m,studyTemplates:v,saveChartService:p,sharingChartService:f,loadChartService:b,financialsDialogController:g,snapshotUrl:y}=e;this._showScrollbarWhen=Object(i.ensureDefined)(e.allowedModes).slice(-1),this._panelWidthChangeHandlers={full:this._handleFullWidthChange,medium:this._handleFavoritesWidthChange,small:this._handleCollapseWidthChange};const{chartChangesWatcher:S}=e;this._chartChangesWatcher=S;const _=ue(this.props.defaultFavoriteStyles);this._favoriteChartStylesService=h||new N(H.TVXWindowEvents,K,_);const E=he(this.props.defaultFavoriteIntervals);this._favoriteIntervalsService=u||new B(H.TVXWindowEvents,K,E),this._intervalsMenuViewStateService=new oe(H.TVXWindowEvents,K),this._intervalService=new Q(n),this._registry={tools:t,isFundamental:o,chartWidgetCollection:s,windowMessageService:a,chartApiInstance:n,availableTimeFrames:r,favoriteStudyTemplatesService:m,studyTemplates:v,saveChartService:p,sharingChartService:f,loadChartService:b,intervalsMenuViewStateService:this._intervalsMenuViewStateService, +favoriteChartStylesService:this._favoriteChartStylesService,favoriteIntervalsService:this._favoriteIntervalsService,intervalService:this._intervalService,chartChangesWatcher:this._chartChangesWatcher,chartWidget:s.activeChartWidget.value(),favoriteScriptsModel:se.getInstance(),templatesMenuViewStateService:this._templatesMenuVuewStateService,financialsDialogController:g,snapshotUrl:y},this.state={isVisible:!0,availableWidth:0,displayMode:"full",measureValid:!1,leftCustomElements:[],rightCustomElements:[]},this._readOnly=s.readOnly(),this._features={allowFavoriting:d.enabled("items_favoriting"),showIdeasButton:Boolean(this.props.ideas),showLaunchInPopupButton:Boolean(this.props.popupButton),allowSymbolSearchSpread:d.enabled("header_symbol_search")&&d.enabled("show_spread_operators"),allowToolbarHiding:d.enabled("collapsible_header")},this._setDisplayMode=Object(c.default)(this._setDisplayMode,100),this._negotiateResizer()}componentDidUpdate(e,t){const{isVisible:a,measureValid:s}=this.state;a!==t.isVisible&&(u.emit("toggle_header",a),this._negotiateResizer()),s||this._setDisplayMode()}render(){const{resizerBridge:e,allowedModes:t,...a}=this.props,{displayMode:n,isVisible:o,leftCustomElements:l,rightCustomElements:c}=this.state,d={features:this._features,readOnly:this._readOnly,isFake:!1,saveLoadSyncEmitter:this._saveLoadSyncEmitter,leftCustomElements:l,rightCustomElements:c,...a},u={...d,isFake:!0,showScrollbarWhen:fe},h=Object(i.ensureDefined)(t),m=this.props.tools.PublishButtonManager||s.Fragment;return s.createElement(V.a,{value:this._registry,validation:me},s.createElement(m,null,s.createElement("div",{className:r(pe.toolbar,{[pe.isHidden]:!o}),onClick:this.props.onClick},s.createElement("div",{className:pe.overflowWrap},s.createElement(T,{key:"live",showScrollbarWhen:this._showScrollbarWhen,displayMode:n,onAvailableSpaceChange:this._handleMeasure,...d}),h.map(e=>s.createElement(T,{key:e,displayMode:e,onWidthChange:this._panelWidthChangeHandlers[e],...u}))))))}addButton(e,t="left"){const a=new D.a(0),s=Object(ve.b)(`
`),n={type:"Button",params:{key:Number(new Date),element:s,width:a},id:e},{leftCustomElements:i,rightCustomElements:r}=this.state;return"left"===t?this.setState({leftCustomElements:[...i,n]}):this.setState({rightCustomElements:[...r,n]}),s}addDropdown(e,t){const{leftCustomElements:a,rightCustomElements:s}=this.state,n={type:"Dropdown",id:e,params:t};"left"===t.align?this.setState({leftCustomElements:[...a,n]}):this.setState({rightCustomElements:[...s,n]})}updateDropdown(e,t){const a=t=>"Dropdown"===t.type&&t.id===e,s=this.state.leftCustomElements.find(a)||this.state.rightCustomElements.find(a);void 0!==s&&(s.params={...s.params,...t},this.setState({leftCustomElements:this.state.leftCustomElements.slice(),rightCustomElements:this.state.rightCustomElements.slice()}))}removeDropdown(e){const t=t=>"Dropdown"===t.type&&t.id!==e,a=this.state.leftCustomElements.filter(t),s=this.state.rightCustomElements.filter(t);this.setState({leftCustomElements:a, +rightCustomElements:s})}_negotiateResizer(){this.props.resizerBridge.negotiateHeight(this.state.isVisible?Y.b:Y.a)}_setDisplayMode(){const{availableWidth:e}=this.state,{allowedModes:t}=this.props,a={full:this._fullWidth,medium:this._favoritesWidth,small:this._collapseWidth},s=Object(i.ensureDefined)(t);let n=s.map(e=>a[e]).findIndex(t=>e>=t);-1===n&&(n=s.length-1);const r=s[n];this.setState({measureValid:!0,displayMode:r})}}be.defaultProps={allowedModes:["full","medium"]},a.d(t,"HeaderToolbarRenderer",(function(){return ge}));class ge{constructor(e,t){this._component=null,this._handleRef=e=>{this._component=e},this._container=e,n.render(s.createElement(be,{...t,ref:this._handleRef}),this._container)}destroy(){n.unmountComponentAtNode(this._container)}getComponent(){return Object(i.ensureNotNull)(this._component)}}},KkTf:function(e,t){e.exports=''},KrBX:function(e,t,a){e.exports={group:"group-3uonVBsm",noLeftDecoration:"noLeftDecoration-3uonVBsm",noRightDecoration:"noRightDecoration-3uonVBsm",noMinimalWidth:"noMinimalWidth-3uonVBsm"}},"a+Yp":function(e,t,a){e.exports={wrap:"wrap-35jKyg6w",icon:"icon-35jKyg6w"}},a8bL:function(e,t,a){e.exports={"css-value-header-toolbar-height":"38px",inner:"inner-pzOKvpP8",fake:"fake-pzOKvpP8",fill:"fill-pzOKvpP8",minimalPriority:"minimalPriority-pzOKvpP8",collapse:"collapse-pzOKvpP8",button:"button-pzOKvpP8",iconButton:"iconButton-pzOKvpP8",hidden:"hidden-pzOKvpP8",symbolSearch:"symbolSearch-pzOKvpP8",symbolSearchClose:"symbolSearchClose-pzOKvpP8",content:"content-pzOKvpP8",desktopPublish:"desktopPublish-pzOKvpP8",mobilePublish:"mobilePublish-pzOKvpP8"}},bQ7Y:function(e,t,a){e.exports={button:"button-2Vpz_LXc",hover:"hover-2Vpz_LXc",isInteractive:"isInteractive-2Vpz_LXc",isGrouped:"isGrouped-2Vpz_LXc",isActive:"isActive-2Vpz_LXc",isOpened:"isOpened-2Vpz_LXc",isDisabled:"isDisabled-2Vpz_LXc",text:"text-2Vpz_LXc",icon:"icon-2Vpz_LXc"}},cSDC:function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));var s=a("YFKU");const n=[{name:"1",label:Object(s.t)("minutes",{context:"interval"})},{name:"1H",label:Object(s.t)("hours",{context:"interval"})},{name:"1D",label:Object(s.t)("days",{context:"interval"})},{name:"1W",label:Object(s.t)("weeks",{context:"interval"})},{name:"1M",label:Object(s.t)("months",{context:"interval"})}]},"tO+E":function(e,t,a){e.exports={"css-value-header-toolbar-height":"38px",wrap:"wrap-1ETeWwz2"}},tU7i:function(e,t,a){"use strict";a.d(t,"a",(function(){return o})),a.d(t,"b",(function(){return l}));var s=a("q1tI"),n=a("TSYQ"),i=a("Iivm"),r=a("bQ7Y");const o=r,l=s.forwardRef((e,t)=>{const{icon:a,isActive:o,isOpened:l,isDisabled:c,isGrouped:d,isHovered:u,onClick:h,text:m,textBeforeIcon:v,title:p,theme:f=r,className:b,forceInteractive:g,"data-name":y,...S}=e,_=n(b,f.button,p&&"apply-common-tooltip",{[f.isActive]:o,[f.isOpened]:l,[f.isInteractive]:(g||Boolean(h))&&!c,[f.isDisabled]:c,[f.isGrouped]:d, +[f.hover]:u}),E=a&&("string"==typeof a?s.createElement(i.a,{className:f.icon,icon:a}):s.cloneElement(a,{className:n(f.icon,a.props.className)}));return s.createElement("div",{...S,ref:t,"data-role":"button",className:_,onClick:c?void 0:h,title:p,"data-name":y},v&&m&&s.createElement("div",{className:n("js-button-text",f.text)},m),E,!v&&m&&s.createElement("div",{className:n("js-button-text",f.text)},m))})}}]); \ No newline at end of file diff --git a/static/charting_library/bundles/library.237999374a0f9a719893.js b/static/charting_library/bundles/library.237999374a0f9a719893.js new file mode 100644 index 0000000..b214d9b --- /dev/null +++ b/static/charting_library/bundles/library.237999374a0f9a719893.js @@ -0,0 +1,92041 @@ +(window.webpackJsonp = window.webpackJsonp || []).push([ + ["library"], { + "+2Ad": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "setupChartScreenshotHint", (function() { + return o + })); + var s = i("YFKU"), + r = i("FQhm"), + n = i("Eyy1"); + + function o(e, t) { + const o = Object(s.t)("Link to the chart image copied to clipboard {emoji}").format({ + emoji: "👍" + }), + a = Object(s.t)("Chart image copied to clipboard {emoji}").format({ + emoji: "👍" + }); + r.on("onServerScreenshotCopiedToClipboard", () => h(o), null), r.on( + "onClientScreenshotCopiedToClipboard", () => h(a), null); + let l = null; + const c = e.getContainer(); + + function h(e) { + l ? l.show(e) : Promise.all([i.e("react"), i.e(84), i.e("chart-screenshot-hint")]).then( + i.bind(null, "USSy")).then(i => { + l || (l = new i.ChartScreenshotHintRenderer(Object(n.ensureNotNull)(c), { + bottomPadding: t.seriesControlBarEnabled + }), l.show(e)) + }) + } + } + }, + "+6II": function(e, t, i) { + "use strict"; + var s = i("8+VR"); + let r = 0, + n = 0, + o = 0; + + function a() { + clearTimeout(r), clearTimeout(n), clearTimeout(o) + } + + function l(e, t) { + r = setTimeout(e, t) + } + const c = "tooltip-root-element"; + let h; + + function u() { + const e = document.getElementById(c); + e ? h = e : (h = document.createElement("div"), h.id = c, document.body.appendChild(h)) + } + + function d() { + h && (h.innerHTML = "") + } + "interactive" === document.readyState ? u() : document.addEventListener("DOMContentLoaded", u); + var p = i("Eyy1"); + const _ = { + default: "", + white: "theme-white", + "round-shadow": "theme-round-shadow" + }, + m = Object.keys(_); + var f = i("CPmC"), + g = i("/DW5"), + b = i("gWrr"), + v = i("Ialn"), + S = (i("HbRj"), i("XAms")), + y = i("Hr11"), + w = i("qFKp"), + P = i("Wo0S"); + + function C(e) { + const t = e.hasAttribute("data-tooltip") ? e.getAttribute("data-tooltip") : e.getAttribute( + "title"); + return t && (Object(f.b)(e, "text", t), e.removeAttribute("title")), Object(f.a)(e, + "text") || "" + } + + function x(e) { + const t = E.cloneNode(!0), + i = V(t), + { + content: s + } = e; + switch (s.type) { + case "element": + i.innerHTML = "", i.appendChild(s.data); + break; + case "html": + i.innerHTML = s.data; + break; + case "text": + if (e.hotkey) { + const e = D.cloneNode(!0); + e.innerText = s.data, i.appendChild(e) + } else i.innerText = s.data + } + if (e.hotkey) { + const t = "none" !== s.type, + r = k.cloneNode(!0), + n = Object(g.a)(e.hotkey), + o = n.keys.map(e => + `${e}`); + r.innerHTML = function(e, t) { + return e.replace(/{\d}|{hotkey_\d}/gi, e => { + const i = Number(e.match(/\d/)); + return t[i] + }) + }(n.text, o).replace(/\s\+\s/g, + `+`), i.classList.add(P[ + "common-tooltip__body--with-hotkey"]), t && r.classList.add(P[ + "common-tooltip__hotkey-block--divider"]), i.appendChild(r) + } + return t.addEventListener("contextmenu", S.a), t + } + + function T(e, t) { + const i = t.rect; + if (!i) return; + ! function(e, t) { + const i = m.includes(t) ? _[t] : ""; + e.classList.remove(...m.map(e => _[e]).filter(e => !!e)), i && !e.classList.contains( + i) && e.classList.add(i) + }(e, t.colorTheme || "default"), t.addClass && e.classList.add(t.addClass); + const s = V(e), + r = e.querySelector("." + P["common-tooltip__button-container"]); + s.classList.toggle(P["common-tooltip__body--width_wide"], Boolean(t.wide)), s.classList + .toggle(P["common-tooltip__body--no-padding"], Boolean(t.noPadding)), s.classList + .toggle(P["common-tooltip__body--width_narrow"], Boolean(t.narrow)), + s.classList.toggle(P["common-tooltip__body--no-buttons"], !0), s.style.left = M(0), s + .style.width = M(s.clientWidth + (Boolean(t.noPadding) ? 0 : 2)); + const n = document.body.clientWidth, + o = w.CheckMobile.iOS() || Object(w.supportTouch)() && Object(w.isMac)() ? window + .innerHeight : document.body.clientHeight, + a = t.vertical, + l = t.extendMargin || a && i.w < 20 || !a && i.h < 20; + e.classList.toggle(P["common-tooltip--farther"], l), e.classList.toggle(P[ + "common-tooltip--vertical"], a), e.classList.toggle(P["common-tooltip--horizontal"], + !a); + const c = function(e) { + return e.querySelector("." + P["common-tooltip__ear-holder"]) + }(e), + h = e.offsetHeight; + if (a) { + const a = 10, + l = o - 10, + u = 12, + d = a + u, + p = l - u, + _ = Object(y.clamp)(i.y + i.h / 2, d, p) - h / 2, + m = _ + h; + e.style.left = M(i.x + i.w), e.style.top = M(_), _ < a ? s.style.top = r.style.top = M( + a - _) : m > l && (s.style.top = r.style.top = M(l - m)); + const { + right: f + } = (e.querySelector(":last-child") || s).getBoundingClientRect(), g = f + 10 > n; + e.classList.toggle(P["common-tooltip--direction_reversed"], g), e.classList.toggle(P[ + "common-tooltip--direction_normal"], !g); + let b = g ? "after" : "before"; + Object(v.isRtl)() ? (b = t.otr ? "after" : b, b = t.otl ? "before" : b) : (b = t.otr ? + "before" : b, b = t.otl ? "after" : b), c.classList.toggle(P[ + "common-tooltip__ear-holder--before"], "before" === b), c.classList.toggle(P[ + "common-tooltip__ear-holder--after"], "after" === b), "after" === b && (e.style + .left = "auto", e.style.right = M(n - i.x)) + } else { + const a = i.x - (s.offsetWidth - i.w) / 2, + l = n - 10 - e.offsetWidth, + u = Math.max(10, Math.min(a, l)); + e.style.left = M(u); + const d = l < a; + e.classList.toggle(P["common-tooltip--direction_reversed"], d), e.classList.toggle(P[ + "common-tooltip--direction_normal"], !d); + const p = function(e, t, i, s) { + if (e.above) return B(t, s) ? "above" : "below"; + if (e.below) return function(e, t, i) { + return i.y + i.h + t + 10 < e + }(t, i, s) ? "below" : "above"; + return B(i, s) ? "above" : "below" + }(t, o, h, i); + "above" === p ? e.style.bottom = M(o - i.y) : e.style.top = M(i.y + i.h), c.classList + .add("above" === p ? P["common-tooltip__ear-holder--above"] : P[ + "common-tooltip__ear-holder--below"]); + const { + left: _ + } = s.getBoundingClientRect(); + let m = Math.trunc(i.x + i.w / 2 - (_ + s.clientWidth / 2)); + e.style.left = M(u + m), e.style.width = M(s.clientWidth + r.clientWidth), m = d ? Math + .max(0, m) : Math.min(0, m), r.style.left = M(-m), s.style.left = M(-m) + } + } + + function I(e) { + e.classList.toggle(P["common-tooltip--hidden"], !0) + } + + function M(e) { + return Math.floor(e) + "px" + } + const O = + `\n\t
\n\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t
\n`, + L = `\n\t
\n`, + A = `\n\t
\n`, + E = Object(b.b)(O), + k = Object(b.b)(L), + D = Object(b.b)(A); + + function V(e) { + return e.querySelector("." + P["common-tooltip__body"]) + } + + function B(e, t) { + return 10 + e < t.y + } + var R = i("lxNp"); + i.d(t, "c", (function() { + return H + })), i.d(t, "b", (function() { + return U + })), i.d(t, "a", (function() { + return G + })); + let N = !1, + j = null, + F = null; + s.mobiletouch || document.addEventListener("mouseover", (function(e) { + var t; + if (null === (t = e.sourceCapabilities) || void 0 === t ? void 0 : t + .firesTouchEvents) return; + const i = e.target, + s = e.currentTarget, + r = function(e, t, i) { + const s = []; + for (; e && e !== t;) e.classList && e.classList.contains(i) && s.push( + e), e = e.parentElement || (r = e.parentNode) && (r.nodeType === + Node.ELEMENT_NODE ? r : null); + var r; + return s + }(i, s, "apply-common-tooltip"); + for (const t of r) { + if ("buttons" in e) { + if (1 & e.buttons) continue + } else if (1 === e.which) continue; + const i = () => H(t); + if (i()) { + const e = e => { + e.target instanceof Element && e.target.contains(t) && s(null, ! + 0) + }, + s = (r, n = !1) => { + t.removeEventListener("common-tooltip-update", i), t + .removeEventListener("mouseleave", s), t + .removeEventListener("mousedown", s), document + .removeEventListener("scroll", e, { + capture: !0 + }), F && (F.destroy(), F = null), G(n) + }; + t.addEventListener("common-tooltip-update", i), t.addEventListener( + "mouseleave", s), t.addEventListener("mousedown", s), document + .addEventListener("scroll", e, { + capture: !0 + }), null === F && (F = Object(R.createGroup)({ + desc: "Tooltip" + }), F.add({ + desc: "Hide", + hotkey: 27, + handler: s + })); + break + } + } + }), !0); + const W = new MutationObserver(() => { + if (j && j.options.target) { + let e; + e = "isConnected" in j.options.target ? j.options.target.isConnected : document + .body.contains(j.options.target), e || G() + } + }), + H = (e, t = {}) => { + const { + content: i, + ...s + } = Y(t), r = function(e) { + const t = C(e), + i = e.getBoundingClientRect(), + s = { + h: i.height, + w: i.width, + x: i.left, + y: i.top + }, + r = e.getAttribute("data-color-theme") || "", + n = e.classList.contains("common-tooltip-html"), + o = parseInt(e.getAttribute("data-tooltip-delay") || ""), + a = parseInt(e.getAttribute("data-tooltip-debounce") || ""); + let l = { + type: "none" + }; + return t && (l = { + type: n ? "html" : "text", + data: t + }), { + above: e.classList.contains("common-tooltip-above"), + below: e.classList.contains("common-tooltip-below"), + otl: e.classList.contains("common-tooltip-otl"), + otr: e.classList.contains("common-tooltip-otr"), + vertical: e.classList.contains("common-tooltip-vertical"), + hotkey: e.getAttribute("data-tooltip-hotkey"), + narrow: e.classList.contains("common-tooltip-narrow"), + wide: e.classList.contains("common-tooltip-wide"), + colorTheme: r, + tooltipDelay: o, + tooltipDebounce: a, + rect: s, + content: l, + target: e + } + }(e), n = Object.assign(r, s); + return "none" !== i.type && (n.content = i), !("none" === n.content.type && !n + .hotkey) && (n.target = e, U(n), !0) + }, + U = e => { + const t = Y(e), + i = x(t); + var s; + if (j = { + options: t, + element: i + }, s = i, d(), h && h.appendChild(s), a(), !N) return I(i), void l(() => q(i), + function(e) { + return "number" != typeof e.tooltipDelay || isNaN(e.tooltipDelay) ? + 500 : e.tooltipDelay + }(t)); + const { + tooltipDebounce: r + } = e; + "number" != typeof r || isNaN(r) ? q(i) : l(() => q(i), r) + }; + + function z() { + d(), N = !1, j = null + } + const G = e => { + if (a(), W.disconnect(), !j) return; + if (!e && !N) return; + const { + element: t, + options: i + } = j, s = () => { + t.removeEventListener("mouseleave", s), I(t), e ? z() : o = setTimeout(() => { + z() + }, 250) + }; + var r, l; + i.tooltipHideDelay ? (r = () => { + t.querySelector(":hover") ? t.addEventListener("mouseleave", s) : s() + }, l = i.tooltipHideDelay, n = setTimeout(r, l)) : s() + }; + + function q(e) { + const { + options: t + } = Object(p.ensureNotNull)(j); + if (T(e, t), function(e) { + e.classList.toggle(P["common-tooltip--hidden"], !1) + }(e), W.observe(document, { + childList: !0, + subtree: !0 + }), N = !0, t.forceHideOnMove) { + const e = () => { + document.removeEventListener("mousemove", e), G() + }; + document.addEventListener("mousemove", e) + } + } + + function Y(e) { + if (function(e) { + return "content" in e + }(e)) return e; + const { + inner: t, + html: i, + text: s, + ...r + } = e; + let n = { + type: "none" + }; + return t && (n = { + type: "element", + data: t + }), s && (n = { + type: i ? "html" : "text", + data: s + }), { + content: n, + ...r + } + } + }, + "+6ja": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "availableTimezones", (function() { + return o + })), i.d(t, "timezoneIsAvailable", (function() { + return a + })), i.d(t, "timezoneTitle", (function() { + return l + })); + i("YFKU"); + var s = i("/+9u"); + const r = [{ + id: "Etc/UTC", + title: window.t("UTC") + }, { + id: "exchange", + title: window.t("Exchange") + }], + n = [{ + id: "Africa/Cairo", + title: window.t("Cairo"), + offset: 0 + }, { + id: "Africa/Johannesburg", + title: window.t("Johannesburg"), + offset: 0 + }, { + id: "Africa/Lagos", + title: window.t("Lagos"), + offset: 0 + }, { + id: "America/Argentina/Buenos_Aires", + title: window.t("Buenos Aires"), + offset: 0 + }, { + id: "America/Bogota", + title: window.t("Bogota"), + offset: 0 + }, { + id: "America/Caracas", + title: window.t("Caracas"), + offset: 0 + }, { + id: "America/Chicago", + title: window.t("Chicago"), + offset: 0 + }, { + id: "America/El_Salvador", + title: window.t("San Salvador"), + offset: 0 + }, { + id: "America/Juneau", + title: window.t("Juneau"), + offset: 0 + }, { + id: "America/Lima", + title: window.t("Lima"), + offset: 0 + }, { + id: "America/Los_Angeles", + title: window.t("Los Angeles"), + offset: 0 + }, { + id: "America/Mexico_City", + title: window.t("Mexico City"), + offset: 0 + }, { + id: "America/New_York", + title: window.t("New York"), + offset: 0 + }, { + id: "America/Phoenix", + title: window.t("Phoenix"), + offset: 0 + }, { + id: "America/Santiago", + title: window.t("Santiago"), + offset: 0 + }, { + id: "America/Sao_Paulo", + title: window.t("Sao Paulo"), + offset: 0 + }, { + id: "America/Toronto", + title: window.t("Toronto"), + offset: 0 + }, { + id: "America/Vancouver", + title: window.t("Vancouver"), + offset: 0 + }, { + id: "US/Mountain", + title: window.t("Denver"), + offset: 0 + }, { + id: "Asia/Almaty", + title: window.t("Almaty"), + offset: 0 + }, { + id: "Asia/Ashkhabad", + title: window.t("Ashkhabad"), + offset: 0 + }, { + id: "Asia/Bahrain", + title: window.t("Bahrain"), + offset: 0 + }, { + id: "Asia/Bangkok", + title: window.t("Bangkok"), + offset: 0 + }, { + id: "Asia/Chongqing", + title: window.t("Chongqing"), + offset: 0 + }, { + id: "Asia/Dubai", + title: window.t("Dubai"), + offset: 0 + }, { + id: "Asia/Ho_Chi_Minh", + title: window.t("Ho Chi Minh"), + offset: 0 + }, { + id: "Asia/Hong_Kong", + title: window.t("Hong Kong"), + offset: 0 + }, { + id: "Asia/Jakarta", + title: window.t("Jakarta"), + offset: 0 + }, { + id: "Asia/Jerusalem", + title: window.t("Jerusalem"), + offset: 0 + }, { + id: "Asia/Kolkata", + title: window.t("Kolkata"), + offset: 0 + }, { + id: "Asia/Kuwait", + title: window.t("Kuwait"), + offset: 0 + }, { + id: "Asia/Muscat", + title: window.t("Muscat"), + offset: 0 + }, { + id: "Asia/Qatar", + title: window.t("Qatar"), + offset: 0 + }, { + id: "Asia/Riyadh", + title: window.t("Riyadh"), + offset: 0 + }, { + id: "Asia/Seoul", + title: window.t("Seoul"), + offset: 0 + }, { + id: "Asia/Shanghai", + title: window.t("Shanghai"), + offset: 0 + }, { + id: "Asia/Singapore", + title: window.t("Singapore"), + offset: 0 + }, { + id: "Asia/Taipei", + title: window.t("Taipei"), + offset: 0 + }, { + id: "Asia/Tehran", + title: window.t("Tehran"), + offset: 0 + }, { + id: "Asia/Tokyo", + title: window.t("Tokyo"), + offset: 0 + }, { + id: "Atlantic/Reykjavik", + title: window.t("Reykjavik"), + offset: 0 + }, { + id: "Australia/Adelaide", + title: window.t("Adelaide"), + offset: 0 + }, { + id: "Australia/Brisbane", + title: window.t("Brisbane"), + offset: 0 + }, { + id: "Australia/Perth", + title: window.t("Perth"), + offset: 0 + }, { + id: "Australia/Sydney", + title: window.t("Sydney"), + offset: 0 + }, { + id: "Europe/Amsterdam", + title: window.t("Amsterdam"), + offset: 0 + }, { + id: "Europe/Athens", + title: window.t("Athens"), + offset: 0 + }, { + id: "Europe/Belgrade", + title: window.t("Belgrade"), + offset: 0 + }, { + id: "Europe/Berlin", + title: window.t("Berlin"), + offset: 0 + }, { + id: "Europe/Brussels", + title: window.t("Brussels"), + offset: 0 + }, { + id: "Europe/Copenhagen", + title: window.t("Copenhagen"), + offset: 0 + }, { + id: "Europe/Dublin", + title: window.t("Dublin"), + offset: 0 + }, { + id: "Europe/Helsinki", + title: window.t("Helsinki"), + offset: 0 + }, { + id: "Europe/Istanbul", + title: window.t("Istanbul"), + offset: 0 + }, { + id: "Europe/Lisbon", + title: window.t("Lisbon"), + offset: 0 + }, { + id: "Europe/London", + title: window.t("London"), + offset: 0 + }, { + id: "Europe/Luxembourg", + title: window.t("Luxembourg"), + offset: 0 + }, { + id: "Europe/Madrid", + title: window.t("Madrid"), + offset: 0 + }, { + id: "Europe/Malta", + title: window.t("Malta"), + offset: 0 + }, { + id: "Europe/Moscow", + title: window.t("Moscow"), + offset: 0 + }, { + id: "Europe/Oslo", + title: window.t("Oslo"), + offset: 0 + }, { + id: "Europe/Paris", + title: window.t("Paris"), + offset: 0 + }, { + id: "Europe/Riga", + title: window.t("Riga"), + offset: 0 + }, { + id: "Europe/Rome", + title: window.t("Rome"), + offset: 0 + }, { + id: "Europe/Stockholm", + title: window.t("Stockholm"), + offset: 0 + }, { + id: "Europe/Tallinn", + title: window.t("Tallinn"), + offset: 0 + }, { + id: "Europe/Vilnius", + title: window.t("Vilnius"), + offset: 0 + }, { + id: "Europe/Warsaw", + title: window.t("Warsaw"), + offset: 0 + }, { + id: "Europe/Zurich", + title: window.t("Zurich"), + offset: 0 + }, { + id: "Pacific/Auckland", + title: window.t("New Zealand"), + offset: 0 + }, { + id: "Pacific/Chatham", + title: window.t("Chatham Islands"), + offset: 0 + }, { + id: "Pacific/Fakaofo", + title: window.t("Tokelau"), + offset: 0 + }, { + id: "Pacific/Honolulu", + title: window.t("Honolulu"), + offset: 0 + }, { + id: "Pacific/Norfolk", + title: window.t("Norfolk Island"), + offset: 0 + }]; + for (const e of n) { + const t = Object(s.a)(e.id); + e.title = `(${t.string}) ${e.title}`, e.offset = t.offset + } + n.sort((e, t) => { + const i = e.offset - t.offset; + return 0 !== i ? i : e.title.localeCompare(t.title) + }); + const o = r.concat(n); + + function a(e) { + for (let t = 0; t < o.length; t++) + if (e === o[t].id) return !0; + return !1 + } + + function l(e) { + for (const t of o) + if (t.id === e) return t.title; + return e + } + }, + "+DwS": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("hY0g"), + r = i.n(s); + + function n(e, t) { + const i = new r.a(e()), + s = {}; + t.subscribe(s, () => { + i.setValue(e()) + }); + return i.readonly().spawn(() => t.unsubscribeAll(s)) + } + }, + "+FzY": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("VymR"); + + function r(e, t) { + let i = ""; + return s.a.parse(e, e => (i = s.a.base + ("svg" === t ? `svg/${e}.svg` : `72x72/${e}.png`), + !1)), i + } + }, + "+GxX": function(e, t, i) { + "use strict"; + var s = i("VVxS").TVLocalStorage, + r = i("aIyQ"); + i("qFKp"); + var n = new r; + TradingView.FeatureToggle = { + force_prefix: "forcefeaturetoggle.", + onChanged: new r, + enableFeature: function(e) { + s.setItem(this.force_prefix + e, "true"), n.fire(e) + }, + disableFeature: function(e) { + s.setItem(this.force_prefix + e, "false"), n.fire(e) + }, + resetFeature: function(e) { + s.removeItem(this.force_prefix + e), n.fire(e) + }, + onFeaturesStateChanged: function() { + return n + } + }, + TradingView.isFeatureEnabled = function(e) { + function t(e) { + try { + var t = (void 0)(e + function() { + if (window.user && window.user.id) return window.user.id; + var e = s.getItem("featuretoggle_seed"); + return null !== e || (e = Math.floor(1e6 * Math.random()), s + .setItem("featuretoggle_seed", e)), e + }()); + return new DataView(t).getUint32(0, !0) / 4294967296 + } catch (e) { + return .5 + } + } + return function(i) { + return !("local" !== window.environment || ! function(e) { + return -1 === ["broker_FXCM_token_v2", "broker_TRADESTATION_V3", + "broker_TRADOVATE_dev", "black_friday_mainpage", + "black_friday_popup", "datawindow", + "trading-fast-renew-oauth-token", + "switching_trial_year_to_month_disabled", + "switching_year_to_month_disabled", + "default_year_billing_cycle_switcher", + "marketing-analytics", "disable_obs_streaming", + "google-ads", "visible_address_fields_by_default", + "slow-support-warning", "hide-trading-floating-toolbar", + "tvcoins_donations", "save-short-streams", + "details_disable_bid_ask", "vat_disabled", + "pro_plan_upgrades_disabled", + "pro_plan_downgrades_disabled", "video-ideas-new-api", + "unit_conversion", "disable_recaptcha_on_signup", + "braintree-trial-implementation", + "braintree-gopro-in-order-dialog", "trial-weekly", + "braintree-apple-pay", "braintree-google-pay", + "braintree-apple-pay-trial", "braintree-google-pay-trial", + "hide_gopro_popup_upgrade_button", "yandex_metric_enabled", + "broker_id_session", "remove_line_tools_from_content", + "chart_storage_with_broker_name", + "autosave_line_tools_immediately", + "log_removing_line_tools_group", + "oanda-european-accounts-warning", + "mobile_show_bottom_panel", "disable_save_settings", + "enable_non_unique_watch_sections", + "desktop_version_notification_enabled", "paperrest_2fa", + "paperrest_preview", "favorites-in-broker-dropdown", + "streams_stats_profile", "hide_ecomonic_events", + "aggregating_page_pings", "hide_alert_counter", + "mobile_menu_alert_button", + "show_reverse_on_active_source_only", "mobile_trading_web", + "mobile_trading_ios", "mobile_trading_android", + "hide_real_brokers_on_mobile", + "percentage_values_for_percentage_scale", + "hide_historical_price_label", "hide_ranges_label_colors", + "new_align_trading_sources" + ].indexOf(e) && -1 === e.indexOf("-maintenance") && !1 === + /broker_[A-Z]+[a-zA-Z0-9_]+_dev/g.test(e) + }(i)) || (!e[i] || -1 !== e[i]) && (!!("true" === s.getItem(TradingView + .FeatureToggle.force_prefix + i) || window.is_authenticated && + "undefined" != typeof user && user.settings && "true" === user + .settings[TradingView.FeatureToggle.force_prefix + i]) || !( + "false" === s.getItem(TradingView.FeatureToggle.force_prefix + i) || + window.is_authenticated && "undefined" != typeof user && user + .settings && "false" === user.settings[TradingView.FeatureToggle + .force_prefix + i]) && (!!e[i] && (1 === e[i] || t(i) <= e[i]))) + } + }(window.featureToggleState || {}), t.FeatureToggle = TradingView.FeatureToggle, t + .isFeatureEnabled = TradingView.isFeatureEnabled, t.onFeaturesStateChanged = TradingView + .FeatureToggle.onFeaturesStateChanged.bind(TradingView.FeatureToggle) + }, + "+PIq": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("ocLq"); + + function r(e, t, i) { + const r = { + slope: NaN, + average: NaN, + intercept: NaN, + stdDev: NaN, + upDev: NaN, + downDev: NaN, + pearsons: NaN + }; + return 0 === e.length || (function(e, t) { + let i = 0, + s = 0, + r = 0, + n = 0; + for (let t = 0; t < e.length; ++t) { + const o = e[t], + a = t + 1; + i += a, s += o, r += a * a, n += o * a + } + t.slope = (e.length * n - i * s) / (e.length * r - i * i), t.average = s / e + .length, t.intercept = t.average - t.slope * i / e.length + t.slope + }(e, r), function(e, t, i, r) { + let n = 0, + o = 0, + a = 0, + l = 0, + c = 0, + h = 0, + u = r.intercept; + const d = e.length - 1, + p = r.intercept + r.slope * d / 2; + for (let s = 0; s <= d; ++s) { + let d = t[s] - u; + d > n && (n = d), d = u - i[s], d > o && (o = d), d = e[s]; + const _ = d - r.average, + m = u - p; + d -= u, a += d * d, l += _ * _, c += m * m, h += _ * m, u += r.slope + } + r.stdDev = Math.sqrt(a / (0 === d ? 1 : d)), r.pearsons = s.Std.isZero(l) || s + .Std.isZero(c) ? 0 : h / Math.sqrt(l * c), r.upDev = n, r.downDev = o + }(e, t, i, r)), r + } + i.d(t, "regressionTrendStudyItem", (function() { + return n + })); + const n = { + name: "Regression Trend", + metainfo: { + _metainfoVersion: 51, + description: "Regression Trend", + format: { + type: "inherit" + }, + id: "RegressionTrend@tv-basicstudies-144", + is_hidden_study: !0, + is_price_study: !0, + shortDescription: "Reg Trend", + defaults: { + inputs: { + "first bar time": 0, + "last bar time": 0, + "lower diviation": -2, + source: "close", + "upper diviation": 2, + "use lower diviation": !0, + "use upper diviation": !0 + } + }, + inputs: [{ + defval: 2, + id: "upper diviation", + max: 500, + min: -500, + name: "Upper Deviation", + type: "float" + }, { + defval: -2, + id: "lower diviation", + max: 500, + min: -500, + name: "Lower Deviation", + type: "float" + }, { + defval: !0, + id: "use upper diviation", + name: "Use Upper Deviation", + type: "bool" + }, { + defval: !0, + id: "use lower diviation", + name: "Use Lower Deviation", + type: "bool" + }, { + defval: 0, + id: "first bar time", + isHidden: !0, + max: 253370764800, + min: -253370764800, + name: "First bar time", + type: "time" + }, { + defval: 0, + id: "last bar time", + isHidden: !0, + max: 253370764800, + min: -253370764800, + name: "Last bar time", + type: "time" + }, { + defval: "close", + id: "source", + name: "Source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"], + type: "source" + }], + plots: [] + }, + constructor: class { + constructor() { + this._resultSent = !1 + } + init(e, t) { + this._resultSent = !1, this._data = { + baseLine: { + startPrice: NaN, + endPrice: NaN + }, + upLine: { + startPrice: NaN, + endPrice: NaN + }, + downLine: { + startPrice: NaN, + endPrice: NaN + }, + pearsons: NaN, + startIndex__t: NaN, + endIndex__t: NaN + } + } + main(e, t) { + const i = t(6), + n = e.new_unlimited_var(s.Std.time(e)), + o = e.new_unlimited_var(s.Std.high(e)), + a = e.new_unlimited_var(s.Std.low(e)), + l = e.new_unlimited_var(s.Std[i](e)); + if (!e.symbol.isLastBar) return null; + if (this._resultSent) return null; + const c = t(0), + h = t(1), + u = t(2), + d = t(3), + p = t(4), + _ = t(5), + m = n.indexOf(p), + f = n.indexOf(_), + g = [], + b = [], + v = [], + S = []; + for (let e = m; e >= f; --e) g.push(n.get(e)), b.push(o.get(e)), v.push( + a.get(e)), S.push(l.get(e)); + return this._updateData(g, u, c, d, h, p, _, r(S, b, v)), this + ._resultSent = !0, { + type: "non_series_data", + nonseries: !0, + data: { + data: this._data + } + } + } + _updateData(e, t, i, s, r, n, o, a) { + const l = e.length - 1; + this._data.baseLine.startPrice = a.intercept, this._data.baseLine + .endPrice = a.intercept + a.slope * l; + const c = a.intercept + (t ? a.stdDev * i : a.upDev); + this._data.upLine.startPrice = c, this._data.upLine.endPrice = c + a + .slope * l; + const h = a.intercept + (s ? a.stdDev * r : -a.downDev); + this._data.downLine.startPrice = h, this._data.downLine.endPrice = h + a + .slope * l, this._data.pearsons = a.pearsons, this._data + .startIndex__t = n, this._data.endIndex__t = o + } + } + } + }, + "+Qfv": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("O+9b"), + n = i("ocLq"), + o = i("23IT"), + a = i("KG+6"), + l = i("LxhU"), + c = i("8LSp"), + h = i("iu9X"), + u = i("c7G1"), + d = i("WYmP"), + p = i("hXqA"), + _ = i("WTyR"), + m = i("972a"), + f = i("aR4w"); + class g extends f.a { + constructor(e, t, i, s, r, n, o, a, l, c, h, u) { + super(e, t, i, n, o, a, !1, l, c, () => h, u, s, r, !1), this._firstBarTime = s, + this._lastBarTime = r + } + update(e) { + this._supplyRowsLayout(this._ctx), this.timeInRequestedRange(e) && super.update( + e) + } + timeInRequestedRange(e) { + const t = this._timeScale().get(e); + return this._firstBarTime <= t && t < this._lastBarTime + } + } + var b = i("rWtV"); + i.d(t, "VolumeProfileFixedRange", (function() { + return v + })), i.d(t, "volumeProfileFixedRangeVbPStudyItem", (function() { + return y + })), i.d(t, "volumeProfileFixedRangeBSStudyItem", (function() { + return w + })); + class v extends r.a { + constructor() { + super(...arguments), this._rowsLayout = "Number Of Rows", this._rowSize = 24, + this._volume = "Up/Down", this._firstBarTime = 0, this._lastBarTime = 0, + this._vaVolumePercent = 70, this._anInt = 0, this._eraseCmds = [] + } + nextGraphicsObjId() { + return ++this._anInt + } + pushEraseObjCmd(e, t) { + this._eraseCmds.push(new u.b(e, t)) + } + popEraseCmds() { + const e = this._eraseCmds; + return this._eraseCmds = [], e + } + init(e, t) { + this._studyDataUpdate = new p.a(!0), this._hists = new c.a, this._boxPolygons = + new d.a, this._pocLines = new d.a, this._valueAreaHists = new c.a; + const i = new h.b; + i.getObjsContainer("hhists").push(new h.a("histBars2", this._hists)), i + .getObjsContainer("hhists").push(new h.a("histBarsVA", this + ._valueAreaHists)), i.getObjsContainer("horizlines").push(new h.a( + "pocLines", this._pocLines)), i.getObjsContainer("polygons").push(new h + .a("histBoxBg", this._boxPolygons)), this._studyDataUpdate.init(i), this + ._rowsLayout = t(0), this._rowSize = t(1), this._volume = t(2), this + ._firstBarTime = t(3), this._lastBarTime = t(4), this._vaVolumePercent = t( + 5), this.verifyRowSizeInput(this._rowSize, this._rowsLayout), this + ._originalResolution = l.Interval.parse(e.symbol.interval + e.symbol + .resolution); + const n = this._lastBarTime + this._originalResolution.inMilliseconds(this + ._lastBarTime); + 0 === this._firstBarTime && 0 === this._lastBarTime ? this._basicResolution = + this._originalResolution : this._basicResolution = this + .findBasicResolutionForFromTo(this._originalResolution, this._firstBarTime, + n, Object(s.ensureDefined)(e.symbol.info)), this._hasSecondarySymbol = ! + this._originalResolution.isEqualTo(this._basicResolution), this + ._hasSecondarySymbol && e.new_sym(e.symbol.tickerid, this._basicResolution + .value()); + const o = this._getRowsLayout(this._rowsLayout, this._rowSize); + this._vbPCheckHaveVolumeExpr = new _.a(this), this._volumeByPriceExpr = new g( + Object(r.c)(this._volume), e, this, this._firstBarTime, n, this._hists, + this._boxPolygons, this._pocLines, this._valueAreaHists, this + ._vaVolumePercent, o, Object(r.b)()), this._volumeByPriceExpr + .setIdsGeneratorProxy(this), this._developingPocSeries = new b.a, this + ._developingVAHighSeries = new b.a, this._developingVALowSeries = new b.a + } + main(e, t, i) { + this._hasSecondarySymbol && e.select_sym(1), this._timeSeries = e + .new_unlimited_var(), this._openSeries = e.new_unlimited_var(), this + ._highSeries = e.new_unlimited_var(), this._lowSeries = e + .new_unlimited_var(), this._closeSeries = e.new_unlimited_var(), + this._volumeSeries = e.new_unlimited_var(); + const r = { + type: "composite", + data: [] + }; + if (i && i.period === this._basicResolution.value() && (this._timeSeries.set(n + .Std.time(e)), this._openSeries.set(n.Std.open(e)), this._highSeries + .set(n.Std.high(e)), this._lowSeries.set(n.Std.low(e)), this + ._closeSeries.set(n.Std.close(e)), this._volumeSeries.set(n.Std.volume( + e)), this._developingPocSeries.addHist(n.Std.time(e)), this + ._developingVAHighSeries.addHist(n.Std.time(e)), this + ._developingVALowSeries.addHist(n.Std.time(e)), this + ._vbPCheckHaveVolumeExpr.update(0, e.symbol.isLastBar), this + ._volumeByPriceExpr.update(0), this._developingPocSeries + .removeLastIfNaN(), this._developingVAHighSeries.removeLastIfNaN(), this + ._developingVALowSeries.removeLastIfNaN(), e.symbol.isLastBar)) { + this._studyDataUpdate.setEraseCmds(this.popEraseCmds()), this + ._studyDataUpdate.update(); + const e = this._studyDataUpdate.getUpdate(); + e.json && r.data.push({ + nonseries: !0, + type: "study_graphics", + data: e.json + }), e.jsonUpdate && r.data.push({ + nonseries: !0, + type: "study_graphics", + data: e.jsonUpdate + }) + } + if (this._hasSecondarySymbol && e.select_sym(0), i && i.period === this + ._originalResolution.value()) { + Object(s.assert)(e.symbol.time === i.time); + const t = i.time, + n = t + this._originalResolution.inMilliseconds(t) - 1; + if (t && t >= this._firstBarTime) { + const e = this._developingPocSeries.getLeftOrEqual(n), + t = this._developingVAHighSeries.getLeftOrEqual(n), + i = this._developingVALowSeries.getLeftOrEqual(n); + r.data.push([e, t, i]) + } else r.data.push([NaN, NaN, NaN]) + } + return r + } + time() { + return this._timeSeries + } + open() { + return this._openSeries + } + high() { + return this._highSeries + } + low() { + return this._lowSeries + } + close() { + return this._closeSeries + } + volume() { + return this._volumeSeries + } + developingPoc() { + return this._developingPocSeries + } + developingVAHigh() { + return this._developingVAHighSeries + } + developingVALow() { + return this._developingVALowSeries + } + } + + function S(e) { + return { + constructor: v, + name: e.description, + metainfo: { + _metainfoVersion: 51, + shortDescription: "VPFR", + format: { + type: "volume" + }, + is_price_study: !0, + defaults: { + graphics: { + hhists: { + histBars2: { + colors: ["#1592e6", "#fbc123"], + direction: a.a.LeftToRight, + percentWidth: 30, + showValues: !1, + transparencies: [76, 76], + valuesColor: "#424242", + visible: !0 + }, + histBarsVA: { + colors: ["#1592e6", "#fbc123"], + direction: a.a.LeftToRight, + percentWidth: 30, + showValues: !1, + transparencies: [30, 30], + valuesColor: "#424242", + visible: !0 + } + }, + horizlines: { + pocLines: { + color: "#ff0000", + style: m.b.Solid, + visible: !0, + width: 2 + } + }, + polygons: { + histBoxBg: { + color: "#37a6ef", + transparency: 94 + } + } + }, + inputs: { + first_bar_time: 0, + last_bar_time: 0, + rows: 24, + rowsLayout: "Number Of Rows", + subscribeRealtime: !0, + vaVolume: 70, + volume: "Up/Down" + }, + styles: { + developingPoc: { + color: "#ff0000", + linestyle: m.b.Solid, + linewidth: 1, + plottype: o.LineStudyPlotStyle.StepLine, + trackPrice: !1, + transparency: 0, + visible: !1 + }, + developingVAHigh: { + color: "#0000ff", + linestyle: m.b.Solid, + linewidth: 1, + plottype: o.LineStudyPlotStyle.StepLine, + trackPrice: !1, + transparency: 0, + visible: !1 + }, + developingVALow: { + color: "#0000ff", + linestyle: m.b.Solid, + linewidth: 1, + plottype: o.LineStudyPlotStyle.StepLine, + trackPrice: !1, + transparency: 0, + visible: !1 + } + } + }, + graphics: { + hhists: { + histBars2: { + location: a.b.Absolute, + title: "Volume Profile", + titles: ["Up Volume", "Down Volume"] + }, + histBarsVA: { + location: a.b.Absolute, + title: "Value Area", + titles: ["Value Area Up", "Value Area Down"] + } + }, + horizlines: { + pocLines: { + name: "POC", + showPrice: !0 + } + }, + polygons: { + histBoxBg: { + mouseTouchable: !1, + name: "Histogram Box", + showBorder: !1 + } + } + }, + inputs: [{ + defval: "Number Of Rows", + id: "rowsLayout", + name: "Rows Layout", + options: ["Number Of Rows", "Ticks Per Row"], + type: "text" + }, { + defval: 24, + id: "rows", + max: 1e6, + min: 1, + name: "Row Size", + type: "integer" + }, { + defval: "Up/Down", + id: "volume", + name: "Volume", + options: ["Up/Down", "Total"], + type: "text" + }, { + defval: 0, + id: "first_bar_time", + isHidden: !0, + max: 253370764800, + min: -253370764800, + name: "First Bar Time", + type: "time" + }, { + defval: 0, + id: "last_bar_time", + isHidden: !0, + max: 253370764800, + min: -253370764800, + name: "Last Bar Time", + type: "time" + }, { + defval: 70, + id: "vaVolume", + max: 100, + min: 0, + name: "Value Area Volume", + type: "integer" + }, { + defval: !0, + id: "subscribeRealtime", + isHidden: !0, + name: "SubscribeRealtime", + type: "bool" + }], + plots: [{ + id: "developingPoc", + type: "line" + }, { + id: "developingVAHigh", + type: "line" + }, { + id: "developingVALow", + type: "line" + }], + styles: { + developingPoc: { + histogramBase: 0, + title: "Developing Poc" + }, + developingVAHigh: { + histogramBase: 0, + title: "Developing VA High" + }, + developingVALow: { + histogramBase: 0, + title: "Developing VA Low" + } + }, + ...e + } + } + } + const y = S({ + id: "VbPFixed@tv-volumebyprice-57", + description: "Volume Profile Fixed Range" + }), + w = S({ + id: "VbPFixed@tv-basicstudies-152", + description: "Fixed Range", + is_hidden_study: !0 + }) + }, + "+cnz": function(e, t) { + e.exports = + '' + }, + "+hLl": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolBrush", (function() { + return o + })); + var s = i("Ocx9"), + r = i("DVnF"), + n = i("j3hX"); + class o extends r.a { + constructor(e, t) { + super(e, t || o.createProperties()), this._loadPaneViews(e) + } + properties() { + return super.properties() + } + smooth() { + return this.properties().childs().smooth.value() + } + name() { + return "Brush" + } + hasEditableCoordinates() { + return !1 + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolbrush", e); + return o._configureProperties(t), t + } + _loadPaneViews(e) { + i.e("lt-pane-views").then(i.bind(null, "00XE")).then(t => { + this._setPaneViews([new t.BrushPaneView(this, e)]) + }) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "ZSes")).then( + e => e.BrushDefinitionsViewModel) + } + static _configureProperties(e) { + r.a._configureProperties(e), e.addChild("backgroundsColors", new n + .LineToolColorsProperty([e.childs().backgroundColor], e.childs() + .fillBackground)) + } + } + }, + "+jnJ": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return a + })); + i("YFKU"); + var s = i("8+VR"), + r = i("m/cY"), + n = i("Vdly"); + + function o(e) { + return "alwaysOn" === e || "alwaysOff" === e ? e : "visibleOnMouseOver" + } + + function a(e, t) { + let i, a; + + function l() { + if (!i) { + i = Object(r.a)(); + let s = n.getValue(e); + void 0 === s && void 0 !== t && (s = n.getValue(t)), i.setValue(o(s)), i.subscribe( + i, t => { + n.setValue(e, o(t.value())) + }) + } + return i + } + return { + property: l, + availableValues: function() { + return [{ + id: "visibleOnMouseOver", + value: "visibleOnMouseOver", + title: window.t("Visible on Mouse Over") + }, { + id: "alwaysOn", + value: "alwaysOn", + title: window.t("Always Visible") + }, { + id: "alwaysOff", + value: "alwaysOff", + title: window.t("Always Invisible") + }] + }, + actualBehavior: function() { + if (!a) { + a = Object(r.a)(); + const e = l(), + t = () => { + let t = e.value(); + "alwaysOn" !== t && "alwaysOff" !== t && (t = s.mobiletouch ? + "alwaysOn" : "visibleOnMouseOver"), a && a.setValue(t) + }; + e.subscribe(a, t), t() + } + return a + } + } + } + }, + "/+9u": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("jCNj"); + + function r(e, t = Date.now()) { + const i = Object(s.get_timezone)(e).offset_utc(t); + let r = ""; + const n = i / 1e3 / 60 / 60; + n % 1 && (r = ":" + n % 1 * 60); + let o = ""; + return o = n > 0 ? "+" + (n - n % 1) + r : 0 === n ? "" : String(n - n % 1 + r), { + offset: i, + string: "UTC" + o + } + } + }, + "//lZ": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "doAnimate", (function() { + return n + })); + const s = { + from: 0, + duration: 250, + easing: i("9uLv").c.easeOutCubic + }; + class r { + constructor(e) { + this._doing = !0, this._completed = !1, this._options = { + ...s, + ...e + }; + const t = performance.now(); + window.requestAnimationFrame(e => { + this._animation(t, this._options.from, e) + }) + } + stop() { + this._doing = !1 + } + completed() { + return this._completed + } + _animation(e, t, i) { + if (!this._doing) return void this._finishAnimation(); + const s = (i = !i || i < 1e12 ? performance.now() : i) - e, + r = s >= this._options.duration || t === this._options.to, + n = (o = this._options.from, a = this._options.to, l = this._options.easing(s / + this._options.duration), o * (1 - l) + a * l); + var o, a, l; + const c = r ? this._options.to : n, + h = c - t; + this._options.onStep(h, c), r ? this._finishAnimation() : window + .requestAnimationFrame(t => { + this._animation(e, c, t) + }) + } + _finishAnimation() { + this._options.onComplete && this._options.onComplete(), this._completed = !0 + } + } + + function n(e) { + return new r(e) + } + }, + "//lt": function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "PaneCursorType", (function() { + return s + })), + function(e) { + e[e.Default = 0] = "Default", e[e.Pointer = 1] = "Pointer", e[e.Eraser = 2] = "Eraser", + e[e.Dot = 3] = "Dot", e[e.Grabbing = 4] = "Grabbing", e[e.ZoomIn = 5] = "ZoomIn", e[ + e.VerticalResize = 6] = "VerticalResize", e[e.HorizontalResize = 7] = + "HorizontalResize", e[e.DiagonalNeSwResize = 8] = "DiagonalNeSwResize", e[e + .DiagonalNwSeResize = 9] = "DiagonalNwSeResize" + }(s || (s = {})) + }, + "/3z9": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isMacKeyboard", (function() { + return r + })), i.d(t, "Modifiers", (function() { + return n + })), i.d(t, "modifiersFromEvent", (function() { + return o + })), i.d(t, "hashFromEvent", (function() { + return a + })), i.d(t, "humanReadableModifiers", (function() { + return l + })), i.d(t, "humanReadableHash", (function() { + return h + })); + var s = i("qFKp"); + const r = Object(s.isMac)() || s.CheckMobile.iOS(); + var n; + + function o(e) { + let t = 0; + return e.shiftKey && (t += 1024), e.altKey && (t += 512), e.ctrlKey && (t += 256), e + .metaKey && (t += 2048), t + } + + function a(e) { + return o(e) | e.keyCode + } + + function l(e) { + let t = ""; + return 256 & e && (t += r ? "^" : "Ctrl + "), 512 & e && (t += r ? "⌥" : "Alt + "), 1024 & + e && (t += r ? "⇧" : "Shift + "), 2048 & e && (t += r ? "⌘" : "Win + "), t + }! function(e) { + e[e.None = 0] = "None", e[e.Alt = 512] = "Alt", e[e.Shift = 1024] = "Shift", e[e.Mod = r ? + 2048 : 256] = "Mod", e[e.Control = 256] = "Control", e[e.Meta = 2048] = "Meta" + }(n || (n = {})); + const c = { + 9: "⇥", + 13: "↵", + 27: "Esc", + 8: r ? "⌫" : "Backspace", + 32: "Space", + 35: "End", + 36: "Home", + 37: "←", + 38: "↑", + 39: "→", + 40: "↓", + 45: "Ins", + 46: "Del", + 188: ",", + 191: "/" + }; + for (let e = 1; e <= 16; e++) c[e + 111] = "F" + e; + + function h(e) { + let t = l(e); + const i = 255 & e; + return t += i in c ? c[i] : String.fromCharCode(i), t + } + }, + "/5ju": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Kxc7"), + r = i("hY0g"), + n = i.n(r), + o = i("FQhm"), + a = i("htUT"), + l = i("/z0S"), + c = i("YFKU"); + i("HbRj"), i("+GxX"); + i("zUrt"); + async function h() { + return !0 + } + var u = i("fZEr"); + class d { + constructor(e, t) { + this._visibility = new n.a(!1), this._chartWidgetCollection = e, this._doSave = t + } + hide() { + var e; + null === (e = this._hide) || void 0 === e || e.call(this), this._visibility + .setValue(!1) + } + visible() { + return this._visibility.readonly() + } + } + class p extends d { + cloneChart() { + this._cloneChart().then(() => this._visibility.setValue(!0)) + } + show() { + Object(l.a)(this.cloneChart.bind(this), { + source: "Clone chart" + }) + } + async _cloneChart() { + const e = this._chartWidgetCollection, + t = await h(), + i = e.metaInfo.name.value(); + t && (this._hide = await Object(u.showRename)({ + title: Object(c.t)("Copy Chart Layout"), + text: Object(c.t)("Enter a new chart layout name") + ":", + maxLength: 64, + initValue: Object(c.t)("{title} copy", { + context: "ex: AAPL chart copy" + }).format({ + title: e.metaInfo.name.value() + }), + onRename: ({ + newValue: t, + dialogClose: r + }) => { + s.enabled("saveload_storage_customization") && (e.metaInfo + .uid.deleteValue(), e.metaInfo.id.deleteValue(), e + .metaInfo.name.setValue(t), this._doSave(void 0, + void 0, () => { + e.metaInfo.name.setValue(i) + })), r() + }, + onClose: () => this._visibility.setValue(!1) + })) + } + } + class _ extends d { + show(e, t, i) { + this._saveNewChart(e, t, i).then(() => this._visibility.setValue(!0)) + } + async _saveNewChart(e, t, i) { + const s = this._chartWidgetCollection, + r = s.metaInfo.name.value(); + await h() && (this._hide = await Object(u.showRename)({ + title: Object(c.t)("Save New Chart Layout"), + text: Object(c.t)("Enter a new chart layout name") + ":", + maxLength: 64, + initValue: r, + onRename: ({ + newValue: n, + dialogClose: o + }) => { + s.metaInfo.name.setValue(n), this._doSave(e, t, () => { + s.metaInfo.name.setValue(r), null == i || i() + }), o() + }, + onClose: () => this._visibility.setValue(!1) + })) + } + } + class m extends d { + show() { + this._renameChart(), this._visibility.setValue(!0) + } + _renameChart() { + Object(l.a)(async () => { + const e = this._chartWidgetCollection, + t = e.metaInfo.name.value(); + this._hide = await Object(u.showRename)({ + title: Object(c.t)("Rename Chart Layout"), + text: Object(c.t)("Enter a new chart layout name") + + ":", + maxLength: 64, + initValue: t, + onRename: ({ + newValue: i, + dialogClose: s + }) => { + e.metaInfo.name.setValue(i), this._doSave( + void 0, void 0, () => { + e.metaInfo.name.setValue(t) + }), s() + }, + onClose: () => this._visibility.setValue(!1) + }) + }, { + source: "Rename chart" + }) + } + } + i.d(t, "SaveChartService", (function() { + return f + })); + class f { + constructor(e, t) { + this._autosaveTimer = null, this._watchedAutoSaveEnabled = new n.a, this + ._toggleAutoSaveEnabledHandler = this._toggleAutoSaveEnabled.bind(this), this + ._doSave = (e, t, i, s) => { + const r = this._chartWidgetCollection; + void 0 !== e && e(), this._chartSaver.saveChartSilently(e => { + var i; + i = r.metaInfo.uid.value(), "/chart/" === location.pathname && ( + location.href = "/chart/" + i), void 0 !== t && t(e) + }, () => { + void 0 !== i && i() + }, { + autoSave: Boolean(s) + }) + }, this._chartWidgetCollection = e, this._chartSaver = t, this + ._createController = new _(e, this._doSave), + this._renameController = new m(e, this._doSave), this._saveAsController = new p( + e, this._doSave), this._chartChangesWatcher = new a.ChartChangesWatcher(e + .undoHistory, t, o), e.saveKeysPressed().subscribe(this, this + .saveChartOrShowTitleDialog), this._chartChangesWatcher.getOnChange() + .subscribe(this, this._onStateChanged) + } + autoSaveEnabled() { + return this._watchedAutoSaveEnabled + } + destroy() { + 0 + } + getCreateController() { + return this._createController + } + getRenameController() { + return this._renameController + } + getSaveAsController() { + return this._saveAsController + } + cloneChart() { + this._saveAsController.cloneChart() + } + saveChartAs() { + this._saveAsController.show() + } + renameChart() { + this._renameController.show() + } + saveNewChart(e, t, i) { + this._createController.show(e, t, i) + } + saveExistentChart(e, t, i) { + this._doSave(e, t, i) + } + hasChanges() { + return this._chartChangesWatcher.hasChanges() + } + saveChartOrShowTitleDialog(e, t, i) { + const s = window.saver.isSaveInProcess(), + r = this._chartChangesWatcher.hasChanges(), + n = !!this._chartWidgetCollection.metaInfo.id.value(); + window.is_authenticated && (s || !r && n) || Object(l.a)(() => { + null != this._chartWidgetCollection.metaInfo.id.value() ? this + .saveExistentChart(e, t, i) : this.saveNewChart(e, t, i) + }, { + source: "Save chart", + sourceMeta: "Chart" + }) + } + whenReadyToSave(e) { + this._chartSaver.whenReadyToSave(e) + } + saveToJSON() { + return this._chartSaver.saveToJSON() + } + saveChartSilently(e, t, i) { + this._chartSaver.saveChartSilently(e, t, i) + } + setAutoSaveEnabled(e) { + window.is_authenticated && window.saver.isSaveInProcess() || Object(l.a)(() => { + this._watchedAutoSaveEnabled.setValue(e) + }, { + source: "AutoSave chart" + }) + } + saveChartLineTools(e, t) { + return this._chartSaver.saveChartLineTools(e, t) + } + _autoSaveEnabledSettingHandler(e) { + 0 + } + _toggleAutoSaveEnabled(e) { + 0 + } + _enableAutoSave() { + 0 + } + _disableAutoSave() { + 0 + } + _onStateChanged(e) { + e ? this._startAutosave() : this._stopAutosave() + } + _startAutosave() { + s.enabled("charts_auto_save") && null === this._autosaveTimer && (this + ._autosaveTimer = setTimeout(() => { + this._autosaveTimer = null, this._chartWidgetCollection.metaInfo.id + .value() && this._doSave(void 0, void 0, void 0, !0) + }, 6e4)) + } + _stopAutosave() { + null !== this._autosaveTimer && (clearInterval(this._autosaveTimer), this + ._autosaveTimer = null) + } + } + }, + "/DW5": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return r + })), i.d(t, "a", (function() { + return n + })); + var s = i("CLNU"); + + function r(e) { + return Object(s.clean)(JSON.stringify(e)) + } + + function n(e) { + return JSON.parse(Object(s.clean)(e, !0)) + } + }, + "/DxK": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolHorzLine", (function() { + return l + })); + var s = i("tc+8"), + r = i.n(s), + n = i("Ocx9"), + o = i("Ss5c"), + a = i("p1SQ"); + class l extends o.LineDataSource { + constructor(e, t) { + super(e, t || l.createProperties()), this._priceAxisView = new a + .LineToolHorzLinePriceAxisView(this), i.e("lt-pane-views").then(i.bind(null, + "ckl+")).then(({ + HorzLinePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + state(e) { + const t = super.state(e); + return t.points && 0 !== t.points.length && (t.points[0].offset = 0), t + } + pointsCount() { + return 1 + } + name() { + return "Horizontal Line" + } + priceAxisViews(e, t) { + return this.isSourceHidden() ? null : t === this.priceScale() && this + .properties().showPrice.value() && this._model.paneForSource(this) === e ? [ + this._priceAxisView + ] : null + } + timeAxisViews() { + return null + } + timeAxisPoints() { + return [] + } + updateAllViews() { + super.updateAllViews(), this._priceAxisView.update() + } + canHasAlert() { + return !0 + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e.showLabel = this + .properties().childs().showLabel.value(), e + } + static createProperties(e) { + const t = new n.DefaultProperty("linetoolhorzline", e); + return l._configureProperties(t), t + } + _getAlertPlots() { + return [this.points()[0].price] + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "NEbb")).then( + e => e.HorizontalLineDefinitionsViewModel) + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text || + ""), this.properties().childs().showLabel.setValue(Boolean(e.showLabel)) + } + static _configureProperties(e) { + o.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new r.a("")), e.addExclusion("text"), e.addExclusion( + "showLabel") + } + } + }, + "/G2Z": function(e, t, i) { + "use strict"; + (function(e) { + i("xdS3"); + var t, s = i("Eyy1").assert; + i("fPdn"), i("wZIs"), i("WmDe"), JSON.parse(urlParams.disabledFeatures).forEach(( + function(t) { + e.setEnabled(t, !1) + })), JSON.parse(urlParams.enabledFeatures).forEach((function(t) { + e.setEnabled(t, !0) + })), null != (t = window.parent[window.urlParams.uid].settingsAdapter) ? (TVSettings + .setSettingsAdapter(t), TVSettings.sync()) : e.enabled( + "use_localstorage_for_settings") && TVSettings.sync(); + var r = i("UlDV").RestrictedToolsetBootloader, + n = i("I4UZ").HeaderToolbarBootloader, + o = i("9zVu").DrawingToolbarBootloader, + a = i("OiSa").isDrawingToolbarVisible; + (0, i("8+VR").setClasses)(); + var l = i("EsvI"), + c = i("oiZD").setTheme, + h = i("JcHK"), + u = i("Ery9"), + d = i("lxNp"), + p = i("n0Bl").migrateShortcut, + _ = i("RXmj").ChartSaver, + m = i("/5ju").SaveChartService, + f = i("lA7n").LoadChartService, + g = i("F58L").StudyTemplates, + b = i("54XG").FavoriteStudyTemplateService, + v = i("PT1i").linking, + S = i("FQhm"), + y = i("kcTO").formatterOptions, + w = i("iboI").customFormatters, + P = i("JT5O").StudyMarket, + C = i("FBuY").TVXWindowEvents, + x = i("jofe").createDeferredPromise, + T = i("FIi8").deepExtend, + I = i("e3/o").randomHash, + M = i("/qn+").convertPropertyToWatchedValue, + O = i("1ANp").property, + L = i("RspR").property, + A = i("3t3b").dateFormatProperty, + E = i("UXvI").default, + k = i("LxhU").Interval, + D = i("lW/c").Root, + V = i("NsVT").ChartPage, + B = i("IWXC").destroyQuoteSessions, + R = i("uDHo").TIMEFRAMETYPE, + N = new V(new D(window).allocate()), + j = N.allocate({ + areaName: "center" + }), + F = (N.allocate({ + areaName: "tradingpanel" + }), window.parent[urlParams.uid].brokerFactory, Boolean(!1)), + W = i("vPbs").CHART_WIDGET_COLLECTION_SERVICE, + H = i("eqEH"); + i("Wh/T"); + var U = i("/Y2c"), + z = i("g5Qf").createFavoriteDrawingToolbar, + G = i("x5Tw").setupChartEventHint, + q = i("+2Ad").setupChartScreenshotHint, + Y = i("EX27"), + K = i("0YCj"), + J = i("9nLJ"); + i("2cgs"), i("vIQA"); + var Z = i("K5cv").setSearchRequestDelay, + X = i("dfhE"), + $ = i("ocLq"), + Q = i("qE4g").addBrandingSource, + ee = i("6vtU").setAdditionalSymbolInfoFields, + te = i("kNVT").setSymbolSearchCompleteOverrideFunction, + ie = i("fRER").DropdownApi, + se = window.parent[urlParams.uid].getCustomIndicators, + re = x(), + ne = x(), + oe = e.enabled("left_toolbar"); + if (Promise.all([re.promise, ne.promise]).then((function() { + window.ChartApiInstance.start() + })), "function" == typeof se) { + var ae = se($); + ae && ae.then ? ae.then((function(e) { + if (!Array.isArray(e)) return console.warn( + "custom_indicators_getter should be a function that returns a Promise object which result is an array of custom indicators" + ), void re.resolve(); + JSServer.studyLibrary.push.apply(JSServer.studyLibrary, e), re + .resolve(), console.log("{0} custom indicators loaded.".format(e + .length)) + })).catch((function(e) { + console.warn("Error loading custom indicators " + e), re.resolve() + })) : (console.warn( + "custom_indicators_getter should be a function that returns a Promise object" + ), re.resolve()) + } else re.resolve(); + window.widgetReady = function(e) { + S.subscribe("onChartReady", e) + }; + var le = urlParams.theme && urlParams.theme.toLowerCase(); + + function ce(e) { + window.__defaultsOverrides = window.__defaultsOverrides || {}, T(window + .__defaultsOverrides, e), void 0 !== TradingView.defaultProperties && + void 0 !== TradingView.defaultProperties.chartproperties && (window + .applyDefaultsOverrides(TradingView.defaultProperties.chartproperties), + window.applyDefaultOverridesToLinetools()) + }! function(e) { + l.themes[e] && c(e) + }(le), window.applyStudiesOverrides = function(e) { + e && (window.chartWidgetCollection ? window.chartWidgetCollection + .applyStudiesOverrides(e) : K.mergeDefaultsOverrides(e)) + }, window.applyOverrides = function(e) { + ce(e), window.chartWidgetCollection && window.chartWidgetCollection + .applyOverrides(e) + }, window.doWhenApiIsReady = function(e) { + window.tradingViewApi ? e() : ne.promise.then(e) + }, window.applyTradingCustomization = function(e) { + for (var t in e.order) TradingView.defaultProperties.linetoolorder[t] = e.order[ + t]; + for (var t in e.position) TradingView.defaultProperties.linetoolposition[t] = e + .position[t] + }, window.changeTheme = function(e, t) { + var i = l.themes[e.toLowerCase()]; + return i ? window.tradingViewApi.themes().setStdTheme(i.name, !0, t && t + .disableUndo) : Promise.resolve() + }, window.getTheme = function() { + return window.tradingViewApi.themes().getCurrentThemeName() + }, window.is_authenticated = !1; + JSON.parse(window.urlParams.brokerConfig); + window.t("charts by TradingView"), window.t("powered by TradingView"), window.t( + "by TradingView"); + var he = null, + ue = x(), + de = null, + pe = function() { + if (e.setEnabled("charting_library_debug_mode", "true" === urlParams.debug), e + .setEnabled("chart_property_page_trading", !1), e.enabled( + "remove_library_container_border")) { + var t = document.querySelector("#library-container"); + null !== t && (t.style.border = "0px", t.style.padding = "1px") + } + e.enabled("no_min_chart_width") && (window.document.body.style.minWidth = + "0px"), null != urlParams.studiesOverrides && K.mergeDefaultsOverrides( + JSON + .parse(urlParams.studiesOverrides)), s(void 0 === TradingView + .defaultProperties, + "Default properties are inited before applying overrides"), + ce(JSON.parse(urlParams.overrides)), urlParams.numeric_formatting = + urlParams.numeric_formatting && JSON.parse(urlParams.numeric_formatting), + urlParams.numeric_formatting && "string" == typeof urlParams + .numeric_formatting.decimal_sign && (y.decimalSign = urlParams + .numeric_formatting.decimal_sign[0]), window.ChartApiInstance = new Y( + window.parent[urlParams.uid].datafeed), window.parent[urlParams.uid] + .customFormatters && (window.parent[urlParams.uid].customFormatters + .timeFormatter && (w.timeFormatter = window.parent[urlParams.uid] + .customFormatters.timeFormatter), window.parent[urlParams.uid] + .customFormatters.dateFormatter && (w.dateFormatter = window.parent[ + urlParams.uid].customFormatters.dateFormatter), window.parent[ + urlParams.uid].customFormatters.tickMarkFormatter && (w + .tickMarkFormatter = window.parent[urlParams.uid].customFormatters + .tickMarkFormatter)), window.ChartApiInstance + .setStudiesAccessController(window.ChartApiInstance + .createStudiesAccessController(urlParams.studiesAccess)); + var c = urlParams.chartContent ? JSON.parse(urlParams.chartContent).json : + void 0, + u = urlParams.chartContentExtendedData ? JSON.parse(urlParams + .chartContentExtendedData) : c ? c.extendedData : void 0, + d = urlParams.interval || "D", + p = function(e) { + var t = /(\d+)(\w+)/; + return e.map((function(e) { + var i = t.exec(e.text), + s = i[2].toLowerCase(), + r = parseInt(i[1]), + n = "y" === s ? 12 * r + "M" : r + s, + o = k.parse(e.resolution); + return { + text: window.t(e.title) || r + window.t(s, { + context: "dates", + count: r + }), + description: e.description || "", + value: { + value: n.toUpperCase(), + type: R.PeriodBack + }, + targetResolution: o.value(), + requiresIntraday: o.isIntraday() + } + })) + }(JSON.parse(urlParams.timeFrames)), + x = { + resizerBridge: j, + padding: e.enabled("border_around_the_chart") ? 2 : 0, + content: c, + widgetOptions: { + addToWatchlistEnabled: !1, + hideIdeas: !0, + addVolume: window.ChartApiInstance.studiesAccessController + .isToolEnabled("Volume"), + muteSessionErrors: !0, + timezone: urlParams.timezone, + defSymbol: urlParams.symbol, + defInterval: d, + compareSymbols: urlParams.compareSymbols && JSON.parse(urlParams + .compareSymbols), + defTimeframe: urlParams.timeframe, + paneContextMenuEnabled: e.enabled("pane_context_menu"), + paneContextMenu: { + mainSeriesTrade: F + }, + priceScaleContextMenuEnabled: e.enabled("scales_context_menu"), + currencyConversionEnabled: e.enabled("pricescale_currency"), + unitConversionEnabled: e.enabled("pricescale_unit"), + legendWidgetEnabled: e.enabled("legend_widget"), + legendWidget: { + contextMenu: { + settings: e.enabled("show_chart_property_page"), + showOpenMarketStatus: e.enabled("display_market_status") + } + }, + sourceStatusesWidget: { + errorSolution: !1 + }, + marketStatusWidgetEnabled: e.enabled("display_market_status"), + marketStatusWidget: { + preMarketSolution: !1, + postMarketSolution: !1 + }, + chartWarningWidget: { + subscriptionFullInfo: !1 + }, + timeScaleWidget: { + contextMenuEnabled: e.enabled("scales_context_menu"), + timezoneMenuEnabled: e.enabled("timezone_menu"), + priceAxisLabelsOptions: { + showLabels: e.enabled("main_series_scale_menu") + } + }, + timeScale: { + preserveBarSpacing: !1, + lockVisibleTimeRangeOnResize: e.enabled( + "lock_visible_time_range_on_resize"), + rightBarStaysOnScroll: e.enabled("right_bar_stays_on_scroll"), + minBarSpacing: urlParams.time_scale && JSON.parse(urlParams + .time_scale).min_bar_spacing + }, + goToDateEnabled: e.enabled("go_to_date"), + crossHair: { + menuEnabled: e.enabled("chart_crosshair_menu") + }, + handleScale: { + mouseWheel: e.enabled("mouse_wheel_scale"), + pinch: e.enabled("pinch_scale"), + axisPressedMouseMove: { + time: e.enabled("axis_pressed_mouse_move_scale"), + price: e.enabled("axis_pressed_mouse_move_scale") + } + }, + handleScroll: { + mouseWheel: e.enabled("mouse_wheel_scroll"), + pressedMouseMove: e.enabled("pressed_mouse_move_scroll"), + horzTouchDrag: e.enabled("horz_touch_drag_scroll"), + vertTouchDrag: e.enabled("vert_touch_drag_scroll") + }, + shiftVisibleRangeOnNewBar: e.enabled( + "shift_visible_range_on_new_bar"), + croppedTickMarks: e.enabled("cropped_tick_marks"), + countdownEnabled: e.enabled("countdown"), + indicatorsDialogShortcutEnabled: e.enabled( + "insert_indicator_dialog_shortcut") + }, + seriesControlBarEnabled: e.enabled("timeframes_toolbar"), + seriesControlBar: { + timeFramesWidgetEnabled: !0, + timeFramesWidget: { + goToDateEnabled: e.enabled("go_to_date"), + availableTimeFrames: function(e, t) { + return e ? t !== X.STATUS_DELAYED && t !== X + .STATUS_DELAYED_STREAMING && t !== X.STATUS_READY ? + [] : p.filter((function(t) { + return !(t.requiresIntraday && !e + .has_intraday) && !(e + .supported_resolutions && !e + .supported_resolutions.includes( + t.targetResolution)) + })) : [] + } + }, + timeWidgetEnabled: !0, + timeWidget: { + timezoneMenuEnabled: e.enabled("timezone_menu") + }, + adjustForDividendsButtonEnabled: !1, + sessionIdButtonEnabled: !1, + percentageScaleButtonEnabled: !0, + logScaleButtonEnabled: !0, + autoScaleButtonEnabled: !0, + fullscreenButtonEnabled: !0, + mobileChangeLayoutEnabled: !1 + }, + globalEvents: !0, + snapshotUrl: urlParams.snapshotUrl, + mobileForceChartMaximizeEnabled: !1, + saveChartEnabled: e.enabled("save_shortcut") + }; + oe && (z(), x.widgetOptions.isDrawingToolbarVisible = a), u && (x.metaInfo = { + id: u.uid, + name: u.name, + description: u.description, + uid: u.uid, + username: "", + tags: "" + }), window.parent[urlParams.uid].additionalSymbolInfoFields && ee(window + .parent[urlParams.uid].additionalSymbolInfoFields), window.parent[ + urlParams.uid].symbolSearchComplete && te(window.parent[urlParams.uid] + .symbolSearchComplete); + var T = window.chartWidgetCollection = new U(x); + Q(T), window.studyMarket = new P(T), void 0 !== H && H.registerService(W, T), T + .activeChartWidget.subscribe((function(e) { + S.emit("activeChartChanged", T.getAll().indexOf(e)) + })), window.saver = new _(T); + var I = new m(T, window.saver), + M = new f(T); + window.chartWidget = T.activeChartWidget.value(), window.pro = new TradingView + .Pro; + var O = function(t) { + if (!e.enabled("header_widget")) return null; + var s = N.allocate({ + areaName: "top" + }), + o = new(0, i("htUT").ChartChangesWatcher)(t.chartWidgetCollection + .undoHistory, window.saver, S), + a = JSON.parse(urlParams.favorites); + a.intervals = a.intervals.map((function(e) { + var t = "" + e; + return t.match(/1[DWMYdwmy]/) && (t = t.slice(1)), t + })); + var l = null; + e.enabled("study_templates") && (l = new b(C, TVSettings), de = new g({ + chartWidgetCollection: t.chartWidgetCollection, + favoriteStudyTemplatesService: l + })); + var c = void 0, + h = urlParams.header_widget_buttons_mode; + "fullsize" === h && (c = ["full"]); + "compact" === h && (c = ["small"]); + return new n(new r, { + chartSaver: window.saver, + chartApiInstance: ChartApiInstance, + chartWidgetCollection: t.chartWidgetCollection, + defaultFavoriteStyles: a.chartTypes, + defaultFavoriteIntervals: a.intervals, + hideStudyTemplates: !0, + resizerBridge: s, + studyMarket: window.studyMarket, + studyTemplates: de, + favoriteStudyTemplatesService: l, + allowedModes: c, + saveChartService: t.saveChartService, + loadChartService: t.loadChartService, + chartChangesWatcher: o, + onClick: we, + snapshotUrl: t.snapshotUrl + }) + }({ + chartWidgetCollection: T, + saveChartService: I, + loadChartService: M, + snapshotUrl: urlParams.snapshotUrl + }); + null !== O ? O.load().then((function(e) { + he = e.getComponent(), ue.resolve() + })) : (ue.promise.catch((function() {})), ue.reject( + "header widget is not loaded")); + var L = function(e) { + if (oe) { + var t = urlParams.toolbarbg && /^[0-9a-f]+$/i.test(urlParams + .toolbarbg) ? String(urlParams.toolbarbg) : void 0; + if (t) { + var i = document.createElement("style"); + i.textContent = + "body,.chart-controls-bar,#footer-chart-panel{background-color:#" + + t + " !important}", document.head.appendChild(i) + } + return new o({ + bgColor: t, + chartWidgetCollection: e, + drawingsAccess: urlParams.drawingsAccess ? JSON.parse( + urlParams.drawingsAccess) : void 0, + resizerBridge: N.allocate({ + areaName: "left" + }), + onClick: we + }) + } + return null + }(T), + A = null; + window.tradingViewApi = new J({ + chartWidgetCollection: T, + chartApiInstance: window.ChartApiInstance, + saveChartService: I, + loadChartService: M + }); + if (v.bindToChartWidgetCollection(T), TradingView.isNaN(urlParams + .studyCountLimit) || (TradingView.STUDY_COUNT_LIMIT = Math.max(2, + + urlParams.studyCountLimit)), !TradingView.isNaN(urlParams.ssreqdelay)) { + var D = Math.max(0, +urlParams.ssreqdelay); + Z(D) + } + window.ChartApiInstance.connect(), Promise.all([i.e("react"), i.e(1), i.e(4), i + .e(6), i.e(11), i.e(12), i.e(13), i.e(14), i.e(17), i.e(21), i.e( + 22), i.e(24), i.e(28), i.e(33), i.e(41), i.e(48), i.e(51), i.e( + 52), + i.e(60), i.e(67), i.e(75), i.e(0), i.e(5), i.e(30), i.e(38), i.e( + "line-tools-icons"), i.e(53), i.e(54), i.e("floating-toolbars") + ]).then(i.t.bind(null, "tPkB", 7)).then(({ + default: e + }) => { + window.lineToolPropertiesToolbar = new e(T) + }); + var V = document.querySelector(".tv-content"); + + function B() { + L && L.load(), A && A.load().then((function(e) { + window.footerWidget = e.getComponent() + })) + } + null !== V && V.addEventListener("contextmenu", (function(e) { + null !== e.target && "input" !== e.target.tagName + .toLowerCase() && "textarea" !== e.target.tagName + .toLowerCase() && e.preventDefault() + })), ne.resolve(), T.undoHistory.undoStack().onChange().subscribe(null, E(( + function() { + S.emit("onAutoSaveNeeded") + }), 1e3 * (urlParams.autoSaveDelay || 5), { + leading: !1, + trailing: !0 + })), window.chartWidget.withModel(null, (function() { + if (ChartApiInstance.on("realtime_tick", (function(e) { + S.emit("onTick", e) + })), !l.savedThemeName() && le) { + var t = l.getStdTheme(le); + t && t.content && void 0 === c && T.applyTheme(t.content, ! + 1, !1, le, !0, !0).then(() => window.applyOverrides( + window.__defaultsOverrides)) + } + e.enabled("charting_library_debug_mode") && S.subscribeToAll(( + function() { + var e = Array.prototype.slice.call(arguments); + console.log('Event "{0}", arguments: {1}' + .format(e[0], JSON.stringify(e.slice( + 1)))) + })), G && (G(T), G = null), q && (q(T, { + seriesControlBarEnabled: e.enabled( + "timeframes_toolbar") + }), q = null) + })), + h.isAnyChartWidgetInitialized(T) ? B() : h.waitAnyChartWidgetInitialized(T, + B), S.subscribe("chart_load_requested", (function(e) { + window.tradingViewApi.loadChart({ + json: JSON.parse(e.content), + extendedData: e + }) + })) + }; + window.addEventListener("unload", (function() { + window.ChartApiInstance && window.ChartApiInstance.disconnect(), window + .chartWidgetCollection && (window.chartWidgetCollection.destroy(), + window.chartWidgetCollection = null), B(), window + .ChartApiInstance && (window.ChartApiInstance.destroy(), window + .ChartApiInstance = null) + })), e.enabled("saveload_storage_customization") && (window.parent[urlParams.uid] + .saveLoadAdapter ? u.setCustomAdapter(window.parent[urlParams.uid] + .saveLoadAdapter) : void 0 !== urlParams.chartsStorageUrl && urlParams + .chartsStorageUrl && void 0 !== urlParams.clientId && urlParams.clientId ? u + .initialize(urlParams.clientId, urlParams.userId, urlParams.chartsStorageUrl, + urlParams.chartsStorageVer || "1.0") : (e.setEnabled( + "saveload_storage_customization", !1), e.setEnabled("header_saveload", ! + 1))); + var _e = x(); + + function me() { + _e.resolve() + } + window.parent[urlParams.uid].loadLastChart && e.enabled( + "saveload_storage_customization") ? u.getCharts().then((function(e) { + if (0 !== e.length) { + var t = e.sort((function(e, t) { + return t.modified_iso - e.modified_iso + }))[0]; + u.getChartContent(t).then((function(e) { + var t = JSON.parse(e.content); + t.extendedData = e, urlParams.chartContent = JSON + .stringify({ + json: t + }), me() + })).catch(me) + } else me() + })).catch(me) : me(); + var fe, ge, be = x(); + Promise.all([be.promise, _e.promise]).then((function() { + var t, i, s, r, n, o, a = document.querySelector(".loading-indicator"); + if (a && (a.style.display = "none"), setTimeout(pe, 0), e.enabled( + "14851") && Math.random() <= .02) { + t = window, i = document, s = "script", r = "ga", t + .GoogleAnalyticsObject = r, t.ga = t.ga || function() { + (t.ga.q = t.ga.q || []).push(arguments) + }, t.ga.l = 1 * new Date, n = i.createElement(s), o = i + .getElementsByTagName(s)[0], n.async = 1, n.src = + "//www.google-analytics.com/analytics.js", o.parentNode + .insertBefore(n, o); + var l = document.URL.match(new RegExp("(:?.*://)([^/]+)/.*"))[2]; + ga("create", "UA-112911840-1", "auto"), ga("set", "anonymizeIp", ! + 0), ga("set", { + hostname: l, + page: l, + referrer: l + }), ga("send", "pageview") + } + })), fe = !0, window.parent[urlParams.uid].datafeed.onReady((function(e) { + fe && console.warn( + "`onReady` should return result asynchronously. Use `setTimeout` with 0 interval to execute the callback function." + ), window.configurationData = e, be.resolve() + })), fe = !1, window.getFunctionFromArguments = function(e) { + return window.parent[urlParams.uid][e] + }, window.createShortcutAction = (ge = d.createGroup({ + desc: "API" + }), function(e, t) { + ge.add({ + hotkey: p(e), + handler: t + }) + }), window.initializationFinished = function() { + window.chartWidgetCollection.undoHistory.clearStack() + }, window.headerReady = function() { + return ue.promise + }, window.createButton = function(e) { + if (null === he) throw new Error( + "Cannot create button: header widget is not ready or is not loaded - use `headerReady` to wait until header is ready" + ); + var t = (e = e || {}).align || "left"; + return he.addButton(I(), t) + }, window.createDropdown = function(e) { + if (void 0 === e) throw new Error( + "Cannot create dropdown without any parameters. Please refer to the documentation" + ); + void 0 === e.align && (e.align = "left"); + const t = I(); + return he ? (he.addDropdown(t, e), Promise.resolve(new ie(he, t))) : ue.promise + .then(() => (he.addDropdown(t, e), new ie(he, t))) + }, window.getAllFeatures = function() { + const t = e.getAllFeatures(); + return Object.keys(t).forEach((function(e) { + isNaN(parseFloat(e)) || delete t[e] + })), t + }; + var ve = null; + window.getNavigationButtonsVisibility = function() { + return null === ve && (ve = M(O())), ve + }; + var Se = null; + window.getPaneButtonsVisibility = function() { + return null === Se && (Se = M(L())), Se + }; + var ye = null; + + function we(e) { + var t = TradingView.bottomWidgetBar; + t && t.turnOffMaximize() + } + window.getDateFormat = function() { + return null === ye && (ye = M(A)), ye + } + }).call(this, i("Kxc7")) + }, + "/McG": function(e) { + e.exports = JSON.parse( + '{"content":{"chartProperties":{"scalesProperties":{"textColor":"#131722","lineColor":"rgba(42, 46, 57, 0.14)","backgroundColor":"#ffffff"},"paneProperties":{"vertGridProperties":{"color":"rgba(42, 46, 57, 0.06)"},"horzGridProperties":{"color":"rgba(42, 46, 57, 0.06)"},"crossHairProperties":{"color":"#9598A1"},"background":"#ffffff","backgroundGradientStartColor":"#ffffff","backgroundGradientEndColor":"#ffffff"}},"sessions":{"graphics":{"backgrounds":{"outOfSession":{"color":"#2962FF","transparency":92},"preMarket":{"color":"#FF9800","transparency":92},"postMarket":{"color":"#2962FF","transparency":92}},"vertlines":{"sessBreaks":{"color":"#4985e7","style":2,"width":1}}}},"mainSourceProperties":{"baseLineColor":"#B2B5BE","candleStyle":{"borderColor":"#378658","upColor":"#26a69a","wickColor":"#737375","wickUpColor":"#26a69a","wickDownColor":"#ef5350","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350"},"haStyle":{"borderColor":"#378658","upColor":"#26a69a","wickColor":"#737375","wickUpColor":"#26a69a","wickDownColor":"#ef5350","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350"},"barStyle":{"downColor":"#ef5350","upColor":"#26a69a"},"pnfStyle":{"downColor":"#ef5350","upColor":"#26a69a","upColorProjection":"#a9dcc3","downColorProjection":"#f5a6ae"},"baselineStyle":{"baselineColor":"rgba( 117, 134, 150, 1)","topFillColor1":"rgba( 38, 166, 154, 0.28)","topFillColor2":"rgba( 38, 166, 154, 0.05)","bottomFillColor1":"rgba( 239, 83, 80, 0.05)","bottomFillColor2":"rgba( 239, 83, 80, 0.28)","topLineColor":"rgba( 38, 166, 154, 1)","bottomLineColor":"rgba( 239, 83, 80, 1)"},"areaStyle":{"transparency":100,"color1":"rgba(41, 98, 255, 0.28)","color2":"#2962FF","linecolor":"#2962FF","linewidth":2,"linestyle":0},"renkoStyle":{"upColor":"#26a69a","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350","upColorProjection":"#a9dcc3","downColorProjection":"#f5a6ae","borderUpColorProjection":"#a9dcc3","borderDownColorProjection":"#f5a6ae","wickUpColor":"#26a69a","wickDownColor":"#ef5350"},"lineStyle":{"color":"#2962FF","linewidth":2,"linestyle":0},"kagiStyle":{"downColor":"#ef5350","upColor":"#26a69a","upColorProjection":"#a9dcc3","downColorProjection":"#f5a6ae"},"pbStyle":{"upColor":"#26a69a","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350","upColorProjection":"#a9dcc3","downColorProjection":"#f5a6ae","borderUpColorProjection":"#a9dcc3","borderDownColorProjection":"#f5a6ae"},"rangeStyle":{"upColor":"#26a69a","downColor":"#ef5350","upColorProjection":"#a9dcc3","downColorProjection":"#f5a6ae"}}}}' + ) + }, + "/ToI": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return o + })), i.d(t, "a", (function() { + return a + })); + var s = i("Eyy1"), + r = i("3u3j"); + class n extends r.a { + constructor(e, t, i, s) { + super(e, t, s), this._sourcePaneRemoved = !1, this._targetPaneIndex = e.panes() + .indexOf(i) + } + redo() { + const e = this._chartModel.panes()[this._initialPaneIndex], + t = this._chartModel.panes()[this._targetPaneIndex], + i = e !== t, + r = this._targetPriceScale(t), + n = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(this + ._sourceId)), + o = this._chartModel.children(n, !0); + for (const e of o) i ? (this._chartModel.detachSource(e), t.addDataSource(e, r, + !1)) : t.move(e, r); + i ? (this._sourcePaneRemoved = this._chartModel.detachSource(n), t + .addDataSource(n, r, !1)) : t.move(n, r); + const a = t.priceScalePosition(r); + t.movePriceScale(r, a, this._targetPriceScaleIndex(n)), this._chartModel + .fullUpdate() + } + undo() { + this._sourcePaneRemoved && this._chartModel.createPane(this._initialPaneIndex); + const e = this._chartModel.panes()[this._initialPaneIndex], + t = e !== this._chartModel.panes()[this._targetPaneIndex], + i = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(this + ._sourceId)); + let r = e.getPriceScaleById(this._initialPriceScaleId); + null === r && (r = e.createPriceScaleAtPosition(this._initialPriceScalePosition, + this._initialPriceScaleIndex)); + const n = this._chartModel.children(i, !0); + for (const i of n) t ? (this._chartModel.detachSource(i), e.addDataSource(i, r, + !1)) : e.move(i, r); + t ? (this._chartModel.detachSource(i), e.addDataSource(i, r, !1)) : e.move(i, + r), Object(s.ensureNotNull)(i.priceScale()).restoreState(this + ._originalPriceScaleState()), this._chartModel.fullUpdate() + } + } + class o extends n { + constructor(e, t, i, s, r) { + super(e, t, i, r), this._targetPriceScalePosition = s + } + _targetPriceScale(e) { + const t = e.createPriceScaleAtPosition(this._targetPriceScalePosition); + return t.restoreState(this._newPriceScaleState("overlay" === this + ._targetPriceScalePosition)), t + } + _targetPriceScaleIndex(e) { + return e === this._chartModel.mainSeries() ? 0 : void 0 + } + } + class a extends n { + constructor(e, t, i, s, r) { + super(e, t, i, r), this._targetPriceScaleId = s.id() + } + _targetPriceScale(e) { + return Object(s.ensureNotNull)(e.getPriceScaleById(this._targetPriceScaleId)) + } + _targetPriceScaleIndex(e) {} + } + }, + "/Y2c": function(e, t, i) { + "use strict"; + (function(t) { + var s = i("Eyy1").assert, + r = i("jofe").createDeferredPromise, + n = (i("qFKp").CheckMobile, i("VNzU").layouts), + o = i("Zo2/"), + a = i("qFKp").supportTouch, + l = i("qFKp").isIE, + c = i("qFKp").isEdge, + h = i("x8jL").createUndoHistory, + u = i("mMWL"), + d = i("lxNp"), + p = i("/3z9"), + _ = i("FQhm"), + m = i("PzPU"), + f = i("Kxc7"), + g = i("ijBy").SetChartLayoutCommand, + b = i("hY0g"), + v = i("HySD").ResizerDetacherState, + S = i("HV/F").delegateToPromise, + y = i("sEk5"), + w = i("lJvs"), + P = i("txPx").getLogger("Chart.ChartWidgetCollection"), + C = (i("JWMC").trackEvent, i("wamh").ChangeToolBarsThemeUndoCommand); + const { + getCurrentTheme: x + } = i("EsvI"); + var T = i("dfhE"), + I = i("ufwo").rangesAreEqual, + M = i("0psP").GeneralChartPropertiesRenderer, + O = i("NSoL").clientSnapshot, + L = i("pPtI").setLastUsedResolution, + A = i("TCfT").CompareDialogRenderer, + E = i("mNbo").isOnMobileAppPage, + k = i("E3Wt"), + D = k.applyIndicatorsToAllChartsImpl, + V = k.applyIndicatorToAllChartsImpl, + B = k.lineToolsAndGroupsDTOsImpl, + R = k.getStateForChartImpl, + N = k.getAsyncStateForChartImpl, + j = k.resetLineToolsInvalidatedImpl, + F = k.applyLineToolUpdateNotificationImpl, + W = k.createClipboardHandler, + H = k.chartsSymbolsImpl, + U = { + saveChartEnabled: !0, + takeScreenshotEnabled: !0, + publishedChartsEnabled: !0 + }; + e.exports = function(e) { + var k = this, + z = Object.assign({}, U, e), + G = 1, + q = 2, + Y = 0, + K = 0, + J = new b, + Z = z.readOnly || !1, + X = [], + $ = 0, + Q = new b, + ee = new b, + te = null, + ie = "s", + se = new b, + re = [], + ne = !1, + oe = !1, + ae = !1, + le = new b(!1), + ce = new b(!1), + he = new b(!1), + ue = new b(TVSettings.getBool("chart.syncCrosshair", !0)), + de = d.createGroup({ + desc: "Layout" + }), + pe = null, + _e = ue.value(); + ue.subscribe((function(e) { + _e = e = !!e, TVSettings.setValue("chart.syncCrosshair", e); + for (var t = 0; t < X.length; ++t) { + var i = X[t].chartWidget; + i.hasModel() && i.model().lightUpdate() + } + })); + var me = new b(ie), + fe = z.resizerBridge.width, + ge = z.resizerBridge.height, + be = null; + void 0 !== z.padding && (q = z.padding), void 0 !== z.topOffset && (G = z + .topOffset), void 0 !== z.edge && (Y = z.edge), void 0 !== z.border && ( + K = z.border); + var ve = z.widgetOptions || {}, + Se = z.metaInfo || {}, + ye = { + id: new b(Se.id || null), + name: new b(Se.name), + description: new b(Se.description), + username: new b(Se.username), + uid: new b(Se.uid), + lastModified: new b(Se.lastModified) + }, + we = h(); + we.onChange().subscribe(null, (function(e) { + _.emit("undo_redo_state_changed", e) + })); + var Pe = z.resizerBridge.container.value(), + Ce = r(), + xe = new t, + Te = new t, + Ie = new t; + + function Me() { + X.forEach((function(e) { + e.chartWidget.onZoom().unsubscribeAll(this) + })) + } + + function Oe() { + X.forEach((function(e) { + e.chartWidget.onScroll().unsubscribeAll(this) + })) + } + var Le, Ae = null, + Ee = null, + ke = null; + z.seriesControlBarEnabled && (Le = Y + K + "px", (Ae = document.createElement( + "div")).style.left = Le, Ae.style.right = Le, Ae.style.bottom = Le, + Ae.classList.add("chart-toolbar", "chart-controls-bar"), Pe.appendChild( + Ae), Promise.all([i.e("react"), i.e(1), i.e(6), i.e(8), i.e(11), i + .e(12), i.e(13), i.e(14), i.e(28), i.e(29), i.e(41), i.e(43), i + .e(48), i.e(73), i.e(0), i.e(5), i.e(7), i.e(10), i.e(38), i.e( + "chart-bottom-toolbar") + ]).then(i.bind(null, "MfqI")).then(({ + BottomToolbarRenderer: e + }) => { + var i = z.resizerBridge, + s = [i.container.spawn(), i.width.spawn(), i.height + .spawn() + ], + r = i.container.value(), + n = new t, + o = function() { + n.fire() + }; + s.forEach((function(e) { + e.subscribe(o) + })), Ee = new e(Ae, n, (function() { + var e = r.getBoundingClientRect(), + t = Re(); + return t.top = e.top + t.top, t.left = e.left + + t.left, t + }), k, ChartApiInstance, ve, z.seriesControlBar), ke = + function() { + null !== Ee && (Ee.destroy(), Ee = null, Ae.remove(), + Ae = null), s.forEach((function(e) { + e.destroy() + })), n.destroy() + } + })); + var De = new M(k), + Ve = new A(k); + + function Be() { + return { + undoHistory: we, + chartWidgetsDefs: X, + chartsCountToSave: Ne, + actualLayoutCount: je, + savedChartWidgetOptions: re, + activeChartWidget: J, + options: z, + parent: Pe, + toastsFactory: null + } + } + + function Re() { + var e = Y + K, + t = Ae ? Ae.offsetHeight : 0; + return { + width: fe.value() - 2 * e, + height: ge.value() - G - t - e, + top: G, + left: e + } + } + + function Ne() { + return je() + } + + function je() { + return n[ie].count + } + + function Fe(e, t, i, s, r) { + return R(Be(), e, t, i, s, r) + } + + function We() { + var e; + e = be ? [be] : X.slice(0, te.count).filter((function(e) { + return !e.hiddenInLayout.value() + })); + for (var t = 0; t < e.length; t++) He(e[t], t, e.length) + } + + function He(e, t, i) { + var s = te.sizer(Re(), t, i, q + K); + s.width = Math.max(Math.round(s.width), 0), s.height = Math.max(Math.round(s + .height), 0), s.top = Math.round(s.top), s.left = Math.round(s + .left), e.metrics = s; + var r = e.container.value(); + r && (r.style.width = s.width + "px", r.style.height = s.height + "px", r + .style.top = s.top + "px", + r.style.left = s.left + "px"), e.width.setValue(s.width), e.height + .setValue(s.height) + } + + function Ue(e) { + return e.rdState.owner.value() !== e + } + + function ze() { + return Promise.resolve(null) + } + + function Ge(e) { + var t; + e = Object.assign({ + chartWidgetCollection: k, + isActive: 0 === X.length, + barsMarksContainersFactory: qe, + undoHistory: we, + readOnly: Z, + initialLoading: ae, + getToasts: ze + }, e || {}), void 0 !== gt && (e.customLegendWidgetFactories = new Map( + gt)); + var i = document.createElement("div"); + i.classList.add("chart-container"), i.style.position = "absolute", i.style + .overflow = "hidden", Pe.appendChild(i), (l || c) && (i.style + .touchAction = "none", i.style.msTouchAction = "none"), z + .className && i.addClass(z.className); + var s = { + alive: new b(!0), + container: new b(i), + width: new b, + height: new b, + hiddenInLayout: new b(!1), + visible: new b, + rdState: new v, + requestFullscreen: function() { + Q.value() && (Ye(s), J.setValue(s.chartWidget)) + }, + exitFullscreen: function() { + J.value() === s.chartWidget && Ye(null) + }, + detachable: Q, + fullscreenable: Q, + fullscreen: new b + }; + + function r() { + s.visible.setValue(!s.hiddenInLayout.value() && z.resizerBridge.visible + .value()) + } + s.rdState.pushOwner(s), X.push(s), s.hiddenInLayout.subscribe((function() { + s.chartWidget.setVisible(!s.hiddenInLayout.value()), r() + })), z.resizerBridge.visible.subscribe(r), r(), + function(e) { + for (var t = 0, i = 0, s = 0; s < te.count; s++) { + X[s] && Ue(X[s]) || (X[s] === e && (i = t), t++) + } + He(e, i, t) + }(s), Object.assign(e, s.rdState.bridge()); + var n = e.content ? e.content.chartId : Je(Ke); + return s.chartWidget = t = new o.ChartWidget(e, n, ye.uid.value()), pe && s + .chartWidget.setSaveChartService(pe), e.containsData ? t + .finishInitWithoutConnect() : t.connect(), t.withModel(null, ( + function() { + var e = t.model().model(); + ft.forEach((function(t, i) { + e.addCustomSource(i, t.factory, t.layer) + })) + })), et(), tt(), xe.fire(t), t + } + + function qe(e) { + var t = [], + i = new y(e); + t.push(i); + var s = new w(e); + return t.push(s), t + } + + function Ye(e) { + be !== e && (be = e, Qe(ie)) + } + + function Ke(e) { + return X.some((function(t) { + return t.chartWidget && t.chartWidget.id() === e + })) + } + + function Je(e) { + for (var t = 1; e("" + t);) t++; + return "" + t + } + + function Ze() { + X.every(e => e.chartWidget.hasModel()) && (et(), _.emit("layout_changed")) + } + + function Xe(e, t) { + const i = Ge(Object.assign({}, ve, re.shift() || function() { + const e = J.value(); + if (e) { + const t = e.state(); + return t.chartId = Je(Ke), t + .shouldBeSavedEvenIfHidden = !1, { + content: t + } + } + }(), 0 === e || le.value() ? void 0 : { + defSymbol: null + })); + return i.modelCreated().subscribe(null, t || Ze, !0), i + } + + function $e(e) { + e.hiddenInLayout.setValue(!0); + const t = e.container.value(); + t.parentNode && t.parentNode.removeChild(t), e.fullscreen.setValue(!1) + } + + function Qe(e) { + e in n || (e = "s"), Me(), Oe(); + var t = ie, + i = n[e].count; + _.emit("layout_about_to_be_changed", e), me.setValue(e), ie = e, te = n[e]; + for (var s = i; s < X.length; s++) { + Ue(r = X[s]) && r.rdState.bridge().attach() + } + t !== e && be && (be = null), be && J.setValue(be.chartWidget); + for (s = 0; s < i || s < X.length; s++) { + var r = X[s]; + if (be ? be === r : s < i && (!r || !Ue(r))) { + if (r) { + if (Pe.appendChild(r.container.value()), r.hiddenInLayout + .setValue(!1), oe) { + var o = re.shift(); + o && (ne = !0, r.chartWidget.loadContent(o.content, ae), + ne = !1) + } + } else Xe(s), r = X[s]; + r.container.value().classList.toggle("multiple", i > 1), r + .fullscreen.setValue(be === r) + } else r && $e(r) + } + We(), et(), + function() { + for (var e = te.count, t = e, i = 0; i < e; i++) X[i] && Ue(X[i]) && + t--; + ee.setValue(t), Q.setValue(t > 1) + }(), Ze(), X.forEach((function(e) { + e.chartWidget.onZoom().subscribe(this, (function(e) { + Te.fire(e) + })) + })), X.forEach((function(e) { + e.chartWidget.onScroll().subscribe(this, (function() { + Ie.fire() + })) + })), ee.value() < 1 && i > 0 && X[i - 1].rdState.bridge().attach() + } + + function et() { + var e = Math.min(te.count, X.length) - 1; + if (e < 0) J.deleteValue(); + else { + var t = $; + t < 0 && (t = 0), t > e && (t = e), J.setValue(X[t].chartWidget) + } + } + + function tt() { + for (var e = X.length; e--;) { + var t = e === $; + X[e].container.value().classList.toggle("active", t), X[e].container + .value().classList.toggle("inactive", !t) + } + } + + function it(e) {} + fe.subscribe(We), ge.subscribe(We), this.updateLayout = We; + var st = new t, + rt = new b, + nt = new b, + ot = null; + + function at(e) { + var t = e.mainSeries().properties(); + t.style.subscribe(null, lt), lt(t.style), e.model() + .onSelectedSourceChanged().subscribe(null, ct), ct(e.selection() + .allSources()) + } + + function lt(e) { + rt.setValue(e.value()) + } + + function ct() { + var e = ot.model(); + nt.setValue(e.selection().allSources()) + } + + function ht(e) { + for (var t = !1, i = 0; i < X.length; i++) { + var s = X[i].chartWidget; + if (s.hasModel()) s.model().mainSeries().properties().symbol.value() !== + e && (t || (we.beginUndoMacro("Change Symbol"), t = !0), s + .setSymbol(e)) + } + t && we.endUndoMacro() + } + J.subscribe((function(e) { + if (e) { + for (var t, i = X.length; i--;) + if (X[i].chartWidget === e) { + t = i; + break + } if (!isFinite(t)) throw new Error( + "Cannot make detached ChartWidget active"); + if ($ !== t) { + be && (Ue(X[t]) || (be = X[t])), $ = t, tt(); + for (i = X.length; i--;) X[i].chartWidget !== e && X[i] + .chartWidget.setActive(!1); + yt(), e.setActive(!0) + }! function(e) { + if (ot !== e) { + if (ot && (ot.modelCreated().unsubscribe(null, at), + ot.hasModel())) { + var t = ot.model(); + t.mainSeries().properties().style.unsubscribe( + null, lt), t.model() + .onSelectedSourceChanged().unsubscribe(null, + ct), ot = null + } + e && (ot = e, e.hasModel() ? at(e.model()) : e + .modelCreated().subscribe(null, at)) + } + }(e) + } + }), { + callWithLast: !0 + }); + var ut = !1, + dt = !1; + + function pt(e) { + var t = Math.max(1, window.devicePixelRatio || 1); + if (e && e.onlyActiveChart || be) return { + layout: "s", + hidpiRatio: t, + theme: x().name, + charts: [J.value().images(e)] + }; + for (var i = [], s = te.count, r = { + showCollapsedStudies: (e = e || {}).showCollapsedStudies, + status: e.status + }, n = 0; n < X.length && n < s; n++) i.push(X[n].chartWidget.images( + r)); + return { + layout: ie, + hidpiRatio: t, + theme: x().name, + charts: i + } + } + + function _t() { + const e = { + snapshotUrl: z.snapshotUrl + }; + const t = E("any"); + return (t ? m.getImageOfChartSilently : m.copyToClipboardImageOfChart)(k, e) + .then((function(e) { + return _.emit("onScreenshotReady", e), t || _.emit( + "onServerScreenshotCopiedToClipboard"), e + })) + } + + function mt(e) { + if (0 !== X.length) { + for (var t = X.length; t--;) X[t].chartWidget.setActive(!1); + X[$].chartWidget.setActive(e) + } + } + Z || (de.add({ + desc: "Switch active chart", + hotkey: 9, + handler: function() {} + }), de.add({ + desc: "Switch active chart", + hotkey: p.Modifiers.Shift + 9, + handler: function() {} + })), z.takeScreenshotEnabled && (de.add({ + desc: "Screenshot server", + hotkey: p.Modifiers.Alt + 83, + handler: function() { + _t() + } + }), E("any") || (de.add({ + desc: "Download client screenshot", + hotkey: p.Modifiers.Mod + p.Modifiers.Alt + 83, + handler: function() { + m.downloadClientScreenshot(k) + } + }), de.add({ + desc: "Copy client screenshot", + hotkey: p.Modifiers.Mod + p.Modifiers.Shift + 83, + handler: function() { + m.copyToClipboardClientScreenshot(k).then(() => { + _.emit( + "onClientScreenshotCopiedToClipboard" + ) + }) + } + }))), z.saveChartEnabled && de.add({ + desc: "Save Chart Layout", + hotkey: p.Modifiers.Mod + 83, + handler: function() { + st.fire() + } + }); + var ft = new Map, + gt = new Map; + const bt = W(Be()); + + function vt(e) { + if (f.enabled("charting_library_base")) return e; + if ("s" === e || ve.containsData || Z || (void 0)((void 0) + .MULTIPLE_CHARTS) && (void 0)((void 0).MULTIPLE_CHARTS).limit >= n[ + e] + .count) return e; + return "s" + } + + function St(e, t) { + if (oe = !0, ae = Boolean(t), re = [], e) { + e.charts || (e = { + layout: "s", + charts: [e] + }); + var i = new Set; + e.charts.forEach((function(e) { + e.chartId && i.add(e.chartId) + })), e.charts.forEach((function(e) { + if (!e.chartId) { + var t = Je((function(e) { + return i.has(e) + })); + i.add(t), e.chartId = t + } + })), ie = vt(e.layout || "s"); + for (var s = 0; s < e.charts.length; s++) { + var r = e.charts[s]; + re.push({ + content: r + }) + } + e.symbolLock && le.setValue(!0), e.intervalLock && ce.setValue(!0), e + .trackTimeLock && he.setValue(!0) + } + Qe(ie), u.init(), u.tool.subscribe(wt), u.tool.subscribe(yt), oe = !1, + ae = !1 + } + + function yt() { + var e = J.value(); + X.forEach((function(t) { + t.chartWidget !== e && t.chartWidget + .updateCrossHairPositionIfNeeded() + })), e && e.updateCrossHairPositionIfNeeded() + } + + function wt() { + X.forEach((function(e) { + e.chartWidget.onToolChanged() + })) + } + z.globalEvents && bt.listen(), Object.assign(this, { + createChartWidget: Ge, + getAll: function() { + return X.map((function(e) { + return e.chartWidget + })) + }, + destroy: function() { + mt(!1), null !== ke && (ke(), ke = null), Me(), Oe(), X + .forEach((function(e) { + void 0 !== e.timingsMeter && e.timingsMeter + .destroy(), e.chartWidget.destroy() + })), z.resizerBridge.remove(), window + .removeEventListener("resize", We), u.tool.unsubscribe( + yt), u.tool.unsubscribe(wt), Ce.resolve(), Pe + .remove(), ft.clear(), gt.clear(), de.destroy(), bt && + bt.destroy() + }, + layout: me.readonly(), + setLayout: Qe, + activeChartWidget: J, + viewMode: se, + activeChartStyle: rt.readonly(), + setChartStyleToWidget: function(e, t) { + t || (t = J.value()), t && function(e, t) { + var i = e.model(), + s = i.mainSeries().properties().style; + i.setChartStyleProperty(s, t, "Change Series Style") + }(t, e) + }, + selectedSources: nt.readonly(), + metaInfo: ye, + state: function(e, t, i, s) { + for (var r = [], n = Ne(), o = 0; o < n; o++) { + var a = Fe(o, e, t, i, s); + a && r.push(a) + } + var l = { + name: k.metaInfo.name.value(), + layout: ie, + charts: r + }; + return le.value() && (l.symbolLock = 1), ce.value() && (l + .intervalLock = 1), he.value() && (l.trackTimeLock = + 1), l + }, + lineToolsAndGroupsDTOs: function() { + return B(Be()) + }, + resetLineToolsInvalidated: function(e, t) { + return j(Be(), e, t) + }, + applyLineToolUpdateNotification: F.bind(null, X), + asyncState: function() { + for (var e, t = [], i = Ne(), s = 0; s < i; s++) t.push((e = + s, N(Be(), e))); + return Promise.all(t).then((function(e) { + for (var t = { + charts: [] + }, i = 0; i < e.length; i++) t.charts + .push(e[i]); + return t + })) + }, + readOnly: function() { + return Z + }, + onZoom: function() { + return Te + }, + onScroll: function() { + return Ie + }, + lock: { + symbol: le, + setSymbolLockWithUndo: function(e) { + if (e !== le.value()) { + if (we.beginUndoMacro("Symbol Lock"), e) + for (var t = J.value(), i = t.getSymbol(), s = + 0; s < X.length; s++) { + var r = X[s].chartWidget; + r !== t && (r.getSymbol() !== i && r + .setSymbol(i)) + } + we.setWatchedValue(le, e, "Symbol Lock"), we + .endUndoMacro() + } + }, + interval: ce, + setIntervalLockWithUndo: function(e) { + if (e !== ce.value()) { + if (we.beginUndoMacro("Interval Lock"), e) + for (var t = J.value(), i = t.getResolution(), + s = 0; s < X.length; s++) { + var r = X[s].chartWidget; + r !== t && (r.getResolution() !== i && r + .setResolution(i)) + } + we.setWatchedValue(ce, e, "Resolution Lock"), we + .endUndoMacro() + } + }, + crosshair: ue, + trackTime: he, + setTrackTimeWithUndo: function(e) { + he.value() !== e && we.setWatchedValue(he, e, + "Track Time") + } + }, + setSymbol: function(e) { + le.value() ? ht(e) : J.value().setSymbol(e) + }, + setResolution: function(e) { + ne || dt || ut || function(e) { + if (L(e), ut = !0, ce.value()) { + for (var t = !1, i = 0; i < X.length; i++) { + var s = X[i].chartWidget; + s.model().mainSeries().properties().interval + .value() !== e && (t || (we + .beginUndoMacro( + "Change Resolution"), t = !0 + ), s.setResolution(e)) + } + t && we.endUndoMacro() + } else J.value().setResolution(e); + ut = !1 + }(e) + }, + setTimeFrame: function(e) { + if (!ne && !dt) { + if (dt = !0, ce.value()) + for (var t = 0; t < X.length; t++) { + var i, s = X[t].chartWidget; + null !== (i = s.model().model() + .appliedTimeFrame().value()) && I(i, + e) || s.loadRange(e) + } else null !== (i = J.value().model().model() + .appliedTimeFrame().value()) && I(i, e) || J + .value().loadRange(e); + dt = !1 + } + }, + updateLayout: We, + setChartLayoutWithUndo: function(e) { + return e = vt(e), me.value() !== e && (we.pushUndoCommand( + new g(k, e)), !0) + }, + images: pt, + clientSnapshot: function(e) { + const t = { + hideResolution: e && e.hideResolution + }, + i = e && e.hideResolution; + let s = e; + return O(pt({ + showCollapsedStudies: !0, + status: t, + hideResolution: i + }), s) + }, + tags: function() { + for (var e = [], t = 0; t < X.length && t < te.count; t++) + e = e.concat(X[t].chartWidget.tags()); + return e = (e = Array.from(new Set(e))).map((function(e) { + return e.toLowerCase().replace(/\W+/g, "-") + .replace(/-+/g, "-").replace(/^-|-$/g, + "") + })) + }, + syncCrosshair: function(e, t, i, s) { + if (i || _e) + for (var r = te.count, n = 0; n < X.length && n < + r; n++) { + var o = X[n].chartWidget; + o !== t && (X[n].rdState.bridge().visible.value() && + o.hasModel() && o.model().model() + .setExternalPosition(e, s)) + } + }, + syncScroll: function(e, t) { + if (he.value()) { + var i = te.count; + we.beginUndoMacro("Sync Time"); + for (var s = 0; s < X.length && s < i; s++) { + var r = X[s].chartWidget; + if (r.hasModel()) { + var n = r.model().model(); + if (n === t) continue; + n.syncTimeWithModel(t, e) + } + } + we.endUndoMacro() + } + }, + setSymbolAll: ht, + clearChartMetaInfo: function() { + ye.id.setValue(null), ye.uid.setValue(void 0), ye.name + .setValue(void 0) + }, + takeScreenshot: function() { + var e = { + snapshotUrl: z.snapshotUrl + }; + return m.getImageOfChartSilently(k, e).then((function(e) { + return _.emit("onScreenshotReady", e), e + })) + }, + takeServerScreenshot: _t, + loadContent: St, + purgeUnusedWidgets: function() { + for (var e = n[ie].count; e < X.length; e++) X[e] + .chartWidget.destroy(); + X.splice(n[ie].count) + }, + applyOverrides: function(e) { + for (var t = 0; t < X.length; t++) X[t].chartWidget + .applyOverrides(e) + }, + applyStudiesOverrides: function(e) { + for (var t = 0; t < X.length; t++) X[t].chartWidget + .applyStudiesOverrides(e) + }, + switchChart: it, + startFullscreen: function() { + z.resizerBridge.requestFullscreen() + }, + exitFullscreen: function() { + z.resizerBridge.exitFullscreen() + }, + destroyPromise: function() { + return Ce.promise() + }, + chartWidgetCreated: function() { + return xe + }, + saveKeysPressed: function() { + return st + }, + getContainer: function() { + return Pe + }, + onWidget: ve.onWidget, + applyTheme: function(e, t, i, s, r, n, o) { + void 0 === n && (n = !0); + const a = x().name; + return Promise.all(t ? [J.value()] : X.concat(re).map((e, + t) => e.chartWidget ? e.chartWidget : + new Promise(e => { + const i = Xe(t, () => e(i)); + $e(X[t]) + }))).then(t => { + o ? (r && new C(a, s, n).redo(), t.forEach(( + function(t) { + t.model().model() + .restoreTheme(e, i, o) + }))) : (we.beginUndoMacro( + "Apply Chart Theme"), r && we + .pushUndoCommand(new C(a, s, n)), t + .forEach((function(t) { + t.model().model() + .restoreTheme(e, i) + })), we.endUndoMacro()) + }) + }, + applyIndicatorsToAllCharts: function(e) { + D(Be(), e) + }, + applyIndicatorsToAllChartsAvailable: function() { + return !Z && je() > 1 + }, + applyIndicatorToAllCharts: function(e, t, i, s) { + V(Be(), e, t, i, s) + }, + setActive: mt, + inlineChartsCount: ee.readonly(), + revertToInline: function() { + Ye(null); + for (var e = 0; e < X.length; e++) X[e].rdState.bridge() + .attach() + }, + chartMarketStatuses: function() { + return X.map((function(e) { + return "-" + })) + }, + chartSeriesStatuses: function() { + return X.map((function(e) { + var t = e.chartWidget.hasModel() ? e + .chartWidget.model().mainSeries() + .status() : null; + return (null === t ? "" : T + .SERIES_STATUS_TEXT[t]) + " (" + t + + ")" + })) + }, + undoHistory: we, + applyPreferencesToAllCharts: function(e) {}, + getToasts: ze, + addCustomSource: function(e, t, i) { + s(!ft.has(e), + "Cannot create the same custom source multiple times" + ), ft.set(e, { + factory: t, + layer: i + }); + for (var r = 0; r < X.length; ++r) { + var n = X[r].chartWidget; + n.hasModel() && n.model().model().addCustomSource(e, t, + i) + } + }, + removeCustomSource: function(e) { + s(ft.has(e), "Cannot remove not created custom source"), ft + .delete(e); + for (var t = 0; t < X.length; ++t) { + var i = X[t].chartWidget; + i.hasModel() && i.model().model().removeCustomSource(e) + } + }, + addCustomWidgetToLegend: function(e, t) { + s(!gt.has(e), + "Cannot create the same custom widget in legend multiple times" + ), gt.set(e, t); + for (var i = 0; i < X.length; ++i) X[i].chartWidget + .addCustomWidgetToLegend(e, t) + }, + setViewMode: function(e) { + se.setValue(e) + }, + moveActiveChartWithUndo: function(e) {}, + activeChartCanBeMoved: function() { + return !1 + }, + generalPropertiesDefinitions: function() { + return J.value().generalPropertiesDefinitions() + }, + reconnectChartApi: function(e) { + (void 0)(e) + }, + setBroker: function(e) { + 0 + }, + setSaveChartService: function(e) { + pe = e; + for (var t = 0; t < X.length; ++t) { + X[t].chartWidget.setSaveChartService(e) + } + }, + getCompareDialogRenderer: function() { + return Ve + }, + getChartPropertiesDialogRenderer: function() { + return De + }, + clipboard: bt, + chartsSymbols: function() { + return H(Be()) + } + }), St(z.content, !0), me.subscribe((function() { + tt() + })), me.hook = function(e) { + return e === this.value() ? e : vt(e) + }, Z && (me.writeLock = !0), window.addEventListener("resize", We); + var Pt = 0; + + function Ct() { + 0 === --Pt && _.emitOnce("onChartReady") + } + if (X.forEach((function(e) { + if (e) { + Pt++; + var t = e.chartWidget; + t.withModel(null, (function() { + z.metaInfo && t.model().model() + .setChartSaveTime(1e3 * z.metaInfo + .lastModified); + var e = t.model().mainSeries(); + if (e.bars().size() > 0 || e.isStatusBad()) + Ct(); + else { + var i = e.dataEvents(), + s = function() { + Ct(), i.barReceived() + .unsubscribe(null, s), i + .completed().unsubscribe( + null, s), i.error() + .unsubscribe(null, s) + }; + i.barReceived().subscribe(null, s), i + .completed().subscribe(null, s), i + .error().subscribe(null, s) + } + })) + } + })), a()) { + var xt = u.tool.setValue; + u.tool.setValue = function() { + k.selectedSources.value() && k.activeChartWidget.value().model() + .lineBeingCreated() && k.activeChartWidget.value().model() + .cancelCreatingLine(), xt.apply(u.tool, arguments) + } + } + Promise.all(X.map((function(e) { + return S(e.chartWidget.modelCreated()).promise + }))).then((function() { + return Promise.all(X.map((function(e) { + return S(e.chartWidget.model().mainSeries() + .dataEvents().symbolResolved()) + .promise + }))) + })).then((function() { + window.saver && window.is_authenticated && z.widgetOptions + .justCloned && window.saver.saveChartSilently() + })).catch(P.logError.bind(P)) + } + }).call(this, i("aIyQ")) + }, + "/YGI": function(e, t, i) { + "use strict"; + i.r(t); + var s, r = i("0YCj"), + n = i.n(r); + ! function(e) { + e.StudyCannotBeChild = "cannot_be_child", e.StubWasRemoved = "stub_was_removed", e + .CannotGetMetainfo = "cannot_get_metainfo", e.Cancelled = "cancelled", e.Unknown = + "unknown" + }(s || (s = {})); + var o = i("txPx"); + i.d(t, "StudyInserter", (function() { + return l + })); + const a = Object(o.getLogger)("Chart.Studies.StudyInserter"); + class l { + constructor(e, t, i) { + this._parentSource = void 0, this._propsState = void 0, this._preferredPriceScale = + void 0, this._allowChangeCurrency = !1, this._allowChangeUnit = !1, this + ._paneSize = void 0, this._forceOverlay = !1, this._studyMetaInfoRepository = t, + this._inserterImpl = i, this._studyDescriptor = e + } + setParentSource(e) { + this._parentSource = e || void 0 + } + setPaneSize(e) { + this._paneSize = e + } + setPreferredPriceScale(e) { + this._preferredPriceScale = e + } + setAllowChangeCurrency(e) { + this._allowChangeCurrency = e + } + setAllowChangeUnit(e) { + this._allowChangeUnit = e + } + setForceOverlay(e) { + this._forceOverlay = e + } + setPropertiesState(e) { + this._propsState = e + } + setTargetPriceScaleMode(e) { + this._targetPriceScaleMode = e + } + async insert(e, t) { + const i = void 0 !== (r = this._inserterImpl).createStub && void 0 !== r + .removeStub ? this._inserterImpl.createStub() : null; + var r; + let n, o = !0; + try { + n = await this._studyMetaInfoRepository.findById(this._studyDescriptor) + } catch (e) { + return a.logWarn("Cannot get study " + JSON.stringify(this._studyDescriptor)), + Promise.reject(s.CannotGetMetainfo) + } finally { + null !== i && (o = this._inserterImpl.removeStub(i)) + } + if (!o) return Promise.reject(s.StubWasRemoved); + if (void 0 !== t && t.cancelled) return Promise.reject(s.Cancelled); + if (!this._canApplyStudyToParent(n)) return Promise.reject(s.StudyCannotBeChild); + const l = { + ...n.defaults.inputs + }, + c = void 0 !== e ? await e(l, n.inputs, n) : {}; + if (void 0 !== t && t.cancelled) return Promise.reject(s.Cancelled); + const h = this._insertStudy(n, c); + return null === h ? Promise.reject(s.Unknown) : h + } + _insertStudy(e, t) { + return this._inserterImpl.createStudy(e, t, null, this._propsState, this + ._forceOverlay, this._parentSource, this._preferredPriceScale, this + ._allowChangeCurrency, this._allowChangeUnit, this._paneSize, this + ._targetPriceScaleMode) + } + _canApplyStudyToParent(e) { + return void 0 === this._parentSource || n.a.canBeChild(e) + } + } + }, + "/bs+": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return n + })); + var s = i("E6p6"); + + function r(e, t, i) { + if (i.isDays()) return t; + if (e.moveTo(1e3 * t), i.isIntraday()) { + const i = e.indexOfBar(1e3 * t); + if (i < 0) throw new Error(t + " is out of the instrument session "); + return e.endOfBar(i) / 1e3 + } + return e.startOfBar(s.SessionStage.LASTBAR_SESSION) / 1e3 + } + + function n(e, t, i) { + if (i.isDays()) return t; + const s = 1e3 * t - 1; + if (e.moveTo(s), i.isIntraday()) { + const i = e.indexOfBar(s); + if (i < 0) throw new Error(t + " is out of the instrument session "); + return e.startOfBar(i) / 1e3 + } + return t = e.startOfBar(0) / 1e3 + } + }, + "/hKg": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PaneRendererCandles", (function() { + return l + })); + var s = i("Eyy1"), + r = i("VdBB"), + n = i("gAom"), + o = i("Zp/P"), + a = i("ExCE"); + class l extends a.a { + constructor(e) { + super(), this._barSpacing = 1, this._barWidth = 1, this._borderVisible = !1, + this._barBorderWidth = 1, this._wickVisible = !1, this._bodyVisible = !0, + this._borderColor = void 0, this._wickColor = void 0, this._hittest = + void 0, e && this.setData(e) + } + setData(e) { + this._bars = e.bars, this._barSpacing = e.barSpacing, this._borderVisible = e + .borderVisible, this._bodyVisible = e.bodyVisible, this._wickVisible = e + .wickVisible, this._borderColor = e.borderColor, this._wickColor = e + .wickColor, this._hittest = e.hittest + } + hitTest(e) { + return this._wickVisible || this._borderVisible || this._bodyVisible ? super + .hitTest(e) : null + } + draw(e, t) { + if (0 === this._bars.length) return; + const i = t.pixelRatio; + if (this._barWidth = Object(o.optimalCandlestickWidth)(this._barSpacing, i), + this._barWidth >= 2) { + Math.floor(i) % 2 != this._barWidth % 2 && this._barWidth-- + } + this._wickVisible && this._drawWicks(e, i), this._borderVisible && this + ._drawBorder(e, i), this._bodyVisible && this._drawCandles(e, i) + } + _getTolerance() { + return Object(o.interactionTolerance)().series + this._barBorderWidth / 2 + } + _getBarSpacing() { + return this._barSpacing + } + _getHitTest() { + return this._hittest || new r.HitTestResult(r.HitTestResult.REGULAR) + } + _isPointAtBar(e, t, i) { + const s = this._bodyVisible || this._borderVisible, + r = this._wickVisible; + if (!s && !r) return !1; + if (s) { + const s = r ? Math.min(e.high, e.low) : Math.min(e.open, e.close), + n = r ? Math.max(e.high, e.low) : Math.max(e.open, e.close); + return s - i <= t && t <= n + i + } { + const s = Math.min(e.open, e.close), + r = Math.max(e.open, e.close); + return e.high - i <= t && t <= s + i || r - i <= t && t <= e.low + i + } + } + _drawWicks(e, t) { + const i = this._bars; + let r = "", + n = Math.min(Math.floor(t), Math.floor(this._barSpacing * t)); + n = Math.max(Math.floor(t), Math.min(n, this._barWidth)); + const o = Math.floor(.5 * n); + let a = null; + for (const l of i) { + const i = l.wickColor ? l.wickColor : Object(s.ensureDefined)(this + ._wickColor); + i !== r && (e.fillStyle = i, r = i); + const c = Math.round(Math.min(l.open, l.close) * t), + h = Math.round(Math.max(l.open, l.close) * t), + u = Math.round(l.high * t), + d = Math.round(l.low * t); + let p = Math.round(t * l.time) - o; + const _ = p + n - 1; + null !== a && (p = Math.max(a + 1, p), p = Math.min(p, _)); + const m = _ - p + 1; + e.fillRect(p, u, m, c - u), e.fillRect(p, h + 1, m, d - h), a = _ + } + } + _calculateBorderWidth(e) { + let t = Math.floor(1 * e); + this._barWidth <= 2 * t && (t = Math.floor(.5 * (this._barWidth - 1))); + const i = Math.max(Math.floor(e), t); + return this._barWidth <= 2 * i ? Math.max(Math.floor(e), Math.floor(1 * e)) : i + } + _drawBorder(e, t) { + let i = ""; + const r = this._calculateBorderWidth(t); + let o = null; + for (const a of this._bars) { + if (a.borderColor !== i && (e.fillStyle = a.borderColor ? a.borderColor : + Object(s.ensureDefined)(this._borderColor), i = a.borderColor), this + ._bodyVisible && a.hollow) continue; + let l = Math.round(a.time * t) - Math.floor(.5 * this._barWidth); + const c = l + this._barWidth - 1, + h = Math.round(Math.min(a.open, a.close) * t), + u = Math.round(Math.max(a.open, a.close) * t); + if (null !== o && (l = Math.max(o + 1, l), l = Math.min(l, c)), this + ._barSpacing * t > 2 * r) Object(n.fillRectInnerBorder)(e, l, h, c - l + + 1, u - h + 1, r); + else { + const t = c - l + 1; + e.fillRect(l, h, t, u - h + 1) + } + o = c + } + } + _drawCandles(e, t) { + let i = ""; + const s = this._calculateBorderWidth(t); + for (const r of this._bars) { + if (this._borderVisible && this._barWidth <= 2 * s && !r.hollow) continue; + let o = Math.round(Math.min(r.open, r.close) * t), + a = Math.round(Math.max(r.open, r.close) * t), + l = Math.round(r.time * t) - Math.floor(.5 * this._barWidth), + c = l + this._barWidth - 1; + if (r.color !== i) { + const t = r.color; + e.fillStyle = t, i = t + } + if (r.hollow) e.fillStyle = r.color, Object(n.fillRectInnerBorder)(e, l, o, + c - l + 1, a - o + 1, s); + else { + if (this._borderVisible && (l += s, o += s, c -= s, a -= s), o > a) + continue; + e.fillRect(l, o, c - l + 1, a - o + 1) + } + } + } + } + }, + "/kal": function(e, t) { + e.exports = + '' + }, + "/qn+": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "convertPropertyToWatchedValue", (function() { + return n + })); + var s = i("hY0g"), + r = i.n(s); + + function n(e) { + const t = new r.a(e.value()); + let i = !1; + e.subscribe(t, () => { + i || (i = !0, t.setValue(e.value()), i = !1) + }); + const s = () => { + i || (i = !0, e.setValue(t.value()), i = !1) + }; + return t.subscribe(s), t.spawn(() => { + e.unsubscribeAll(t), t.unsubscribe(s) + }) + } + }, + "/tGj": function(e, t, i) { + "use strict"; + + function s(e) { + return e.symbolSource() === e + } + i.r(t), i.d(t, "isSymbolSource", (function() { + return s + })) + }, + "/z0S": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("Kxc7"); + + function r(e, t) { + s.enabled("saveload_requires_authentication") ? window.runOrSignIn(e, t) : e() + } + }, + "08i5": function(e, t, i) { + "use strict"; + var s, r; + i.r(t), i.d(t, "AlertStatus", (function() { + return s + })), i.d(t, "Direction", (function() { + return r + })), + function(e) { + e[e.Waiting = 0] = "Waiting", e[e.Success = 1] = "Success", e[e.Failure = 2] = "Failure" + }(s || (s = {})), + function(e) { + e[e.Up = 1] = "Up", e[e.Down = 2] = "Down" + }(r || (r = {})) + }, + "0C7r": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "intervalsVisibilitiesDefaults", (function() { + return s + })); + const s = { + ticks: !0, + seconds: !0, + secondsFrom: 1, + secondsTo: 59, + minutes: !0, + minutesFrom: 1, + minutesTo: 59, + hours: !0, + hoursFrom: 1, + hoursTo: 24, + days: !0, + daysFrom: 1, + daysTo: 366, + weeks: !0, + weeksFrom: 1, + weeksTo: 52, + months: !0, + monthsFrom: 1, + monthsTo: 12, + ranges: !0 + } + }, + "0F0w": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("aIyQ"), + r = i.n(s), + n = i("Eyy1"), + o = i("hY0g"), + a = i.n(o), + l = i("e3/o"), + c = i("txPx"); + const h = Object(c.getLogger)("ChartApi.AbstractSession"); + var u = i("ogJP"); + i.d(t, "ChartSession", (function() { + return d + })); + Object(c.getLogger)("ChartSession"); + class d extends class { + constructor(e, t, i) { + this._isConnected = new a.a(!1), this._state = 0, this._isConnectForbidden = !1, + this._sessionId = "", this._sessionIdChanged = new r.a, this._chartApi = e, this + ._sessionPrefix = t, this._shouldReconnectAfterCriticalError = i + } + destroy() { + this._logNormal("Destroying session"), this._isConnected.unsubscribe(), this + .disconnect(), this._sessionIdChanged.destroy(), delete this._chartApi, this + ._logNormal("Session has been destroyed") + } + isConnected() { + return this._isConnected + } + sessionId() { + return this._sessionId + } + onSessionIdChanged() { + return this._sessionIdChanged + } + connect() { + 0 === this._state && (Object(n.assert)(!this._isConnectForbidden, + "Cannot call connect because it is forbidden at this moment"), this + ._setSessionId(`${this._sessionPrefix}_${Object(l.randomHash)()}`), this + ._logNormal("Connecting session - wait until transport stay connected"), + this._state = 1, this._chartApi.createSession(this._sessionId, this)) + } + disconnect() { + 0 !== this._state && (Object(n.assert)("" !== this._sessionId, + "sessionId must not be invalid"), this._logNormal( + "Disconnecting session..."), this._forbidConnectWhile(() => { + this._chartApi.connected() && this._sendRemoveSession(), this + ._processDestroyingOnServer() + })) + } + onMessage(e) { + switch (e.method) { + case "connected": + return void this._onChartApiConnected(); + case "disconnected": + return void this._onChartApiDisconnected(); + case "critical_error": + const t = String(e.params[0]), + i = String(e.params[1]); + return void this._onCriticalError(t, i) + } + this._onMessage(e) + } + _getChartApi() { + return this._chartApi + } + _generateLogMessage(e) { + return `[${this._sessionId}] ${e}` + } + _onCriticalError(e, t) { + this._logError(`Critical error. Reason=${e}, info=${t}.`), this._forbidConnectWhile( + () => { + this._processDestroyingOnServer() + }), this._shouldReconnectAfterCriticalError ? (this._logNormal( + "Reconnecting after critical error..."), this.connect()) : this._logNormal( + "Reconnecting after critical error skipped") + } + _onChartApiConnected() { + Object(n.assert)(1 === this._state, "Session is not registered"), this._logNormal( + "Transport is connected. Creating session on the server"), this + ._sendCreateSession(), this._state = 2, this._isConnected.setValue(!0) + } + _onChartApiDisconnected() { + this._logNormal("Transport is disconnected. Reconnecting..."), this + ._forbidConnectWhile(() => { + this._processDestroyingOnServer() + }), this.connect() + } + _setSessionId(e) { + const t = this._sessionId; + this._logNormal(`Changing sessionId: old=${t}, new=${e}`), this._sessionId = e, this + ._sessionIdChanged.fire(e, t) + } + _logNormal(e) { + h.logNormal(this._generateLogMessage(e)) + } + _logError(e) { + h.logError(this._generateLogMessage(e)) + } + _processDestroyingOnServer() { + this._state = 0, this._isConnected.setValue(!1), this._chartApi.removeSession(this + ._sessionId), this._setSessionId("") + } + _forbidConnectWhile(e) { + this._isConnectForbidden = !0, e(), this._isConnectForbidden = !1 + } + } { + constructor(e, t = !1) { + super(e, "cs", !1), this._sessionDisabled = !1, this._handler = null, this + ._criticalError = new r.a, this._disableStatistics = t + } + destroy() { + this._criticalError.destroy(), this._handler = null, super.destroy() + } + serverTimeOffset() { + return this._getChartApi().serverTimeOffset() + } + switchTimezone(e) { + return this._getChartApi().switchTimezone(this.sessionId(), e) + } + defaultResolutions() { + return this._getChartApi().defaultResolutions() + } + availableCurrencies() { + return this._getChartApi().availableCurrencies() + } + availableUnits() { + return this._getChartApi().availableUnits() + } + resolveSymbol(e, t, i) { + return this._getChartApi().resolveSymbol(this.sessionId(), e, t, i) + } + requestFirstBarTime(e, t, i) { + return this._getChartApi().requestFirstBarTime(this.sessionId(), e, t, i) + } + createSeries(e, t, i, s, r, n, o) { + return this._getChartApi().createSeries(this.sessionId(), e, t, i, s, r, n, o) + } + modifySeries(e, t, i, s, r, n) { + return this._getChartApi().modifySeries(this.sessionId(), e, t, i, s, r, n) + } + removeSeries(e) { + return !!this.isConnected().value() && this._getChartApi().removeSeries(this + .sessionId(), e) + } + requestMoreData(e, t, i) { + return "number" == typeof e ? this._getChartApi().requestMoreData(this.sessionId(), + e) : this._getChartApi().requestMoreData(this.sessionId(), e, t, i) + } + requestMoreTickmarks(e, t, i) { + return Object(u.isNumber)(e) ? this._getChartApi().requestMoreTickmarks(this + .sessionId(), e) : this._getChartApi().requestMoreTickmarks(this + .sessionId(), e, t, i) + } + requestMetadata(e, t) { + (() => { + this._getChartApi().requestMetadata(this.sessionId(), e, t) + })() + } + isCanCreateStudy(e) { + return this._getChartApi().isCanCreateStudy(e) + } + createStudy(e, t, i, s, r, n, o) { + return this._getChartApi().createStudy(this.sessionId(), e, t, i, s, r, n, o) + } + rebindStudy(e, t, i, s, r, n, o) { + return this._getChartApi().rebindStudy(this.sessionId(), e, t, i, s, r, n, o) + } + modifyStudy(e, t, i, s) { + return this._getChartApi().modifyStudy(this.sessionId(), e, t, i, s) + } + removeStudy(e, t) { + return this._getChartApi().removeStudy(this.sessionId(), e, t) + } + createPointset(e, t, i, s, r, n) { + return this._getChartApi().createPointset(this.sessionId(), e, t, i, s, r, n) + } + modifyPointset(e, t, i, s) { + return this._getChartApi().modifyPointset(this.sessionId(), e, t, i, s) + } + removePointset(e) { + return this._getChartApi().removePointset(this.sessionId(), e) + } + setVisibleTimeRange(e, t, i, s, r, n) { + this._getChartApi().setVisibleTimeRange(this.sessionId(), e, t, i, s, !0, r, n) + } + criticalError() { + return this._criticalError + } + connect(e = null) { + null !== e && (this._handler = e), super.connect() + } + setHandler(e) { + this._handler = e + } + connected() { + return this.isConnected().value() && !this._sessionDisabled + } + disable() { + this._sessionDisabled = !0 + } + chartApi() { + return this._getChartApi() + } + _sendCreateSession() { + Object.keys(this).forEach(e => { + /^(s|st|symbol_)\d+$/.test(e) && delete this[e] + }), this._getChartApi().chartCreateSession(this.sessionId(), this + ._disableStatistics) + } + _sendRemoveSession() { + this._getChartApi().chartDeleteSession(this.sessionId()) + } + _onMessage(e) { + this._handler && this._handler(e) + } + _onCriticalError(e, t) { + this._criticalError.fire(e, t), super._onCriticalError(e, t) + } + } + }, + "0Pxc": function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("GEp6").distanceToLine, + n = i("hfHJ"), + o = n.rotationMatrix, + a = n.scalingMatrix, + l = n.translationMatrix, + c = n.transformPoint, + h = i("Ss5c").LineDataSource, + u = i("Ocx9").DefaultProperty, + d = i("j3hX").LineToolColorsProperty; + class p extends h { + constructor(e, t) { + super(e, t || p.createProperties()), this.version = p.version, i.e("lt-pane-views") + .then(i.t.bind(null, "dKqZ", 7)).then(({ + ArcPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + startChanging(e, t) { + if (super.startChanging(e, t), 0 === e || 1 === e) { + var i = this.pointToScreenPoint(this._points[0])[0], + n = this.pointToScreenPoint(this._points[1])[0], + o = this.pointToScreenPoint(this._points[2])[0]; + this._dist = r(i, n, o).distance; + var a = n.subtract(i), + l = new s(-a.y, a.x), + c = i.add(n).scaled(.5); + o.subtract(c).dotProduct(l) < 0 && (this._dist = -this._dist) + } + } + pointsCount() { + return 3 + } + name() { + return "Arc" + } + hasEditableCoordinates() { + return !1 + } + setPoint(e, t) { + var i = Object.assign({}, t), + n = this.pointToScreenPoint(this._points[0])[0], + h = this.pointToScreenPoint(this._points[1])[0], + u = this.pointToScreenPoint(this._points[2])[0]; + switch (e) { + case 0: + n = this.pointToScreenPoint(i)[0]; + var d = h.subtract(n), + p = n.add(h).scaled(.5); + m = (m = new s(-d.y, d.x)).normalized(), u = p.add(m.scaled(this._dist)), + u = this.screenPointToPoint(u), this._points[0] = i, this._points[2] = + u; + break; + case 1: + var _ = r(n, h, u).distance; + d = (h = this.pointToScreenPoint(i)[0]).subtract(n), p = n.add(h).scaled( + .5); + m = (m = new s(-d.y, d.x)).normalized(), u = p.add(m.scaled(this._dist)), + u = this.screenPointToPoint(u), this._points[1] = i, this._points[2] = + u; + break; + case 2: + i = this.pointToScreenPoint(i)[0]; + var m; + _ = r(n, h, i).distance, d = h.subtract(n), p = n.add(h).scaled(.5); + m = (m = new s(-d.y, d.x)).normalized(), u = p.add(m.scaled(_)); + var f = p.add(m.scaled(-_)), + g = d.length(), + b = d.x / g, + v = d.y / g, + S = Math.acos(b); + v < 0 && (S = -S); + var y = l(-p.x, -p.y); + i = c(y, i); + var w = c(y, u); + y = o(-S), i = c(y, i), w = c(y, w), y = a(1, g / (2 * _)), i = c(y, i), w = + c(y, w); + var P = i.y * w.y >= 0 ? new s(u.x, u.y) : new s(f.x, f.y); + P = this.screenPointToPoint(P), this._points[2] = P + } + this.normalizePoints() + } + migrateVersion(e, t, i) { + if (1 === e && 2 === this._points.length) { + var s = (2 * this._points[0].price + 3 * this._points[1].price) / 5; + this._points.append({ + price: s, + index: this._points[1].index + }) + } + if (1 === e && 2 === this._timePoint.length) { + var r = { + price: s = (2 * this._timePoint[0].price + 3 * this._timePoint[1] + .price) / 5, + offset: this._timePoint[1].offset, + time_t: this._timePoint[1].time_t + }; + this._timePoint.append(r) + } + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Zd1D"))) + .GeneralFiguresDefinitionsViewModel + } + static createProperties(e) { + var t = new u("linetoolarc", e); + return p._configureProperties(t), t + } + static _configureProperties(e) { + h._configureProperties(e), e.addChild("linesColors", new d([e.color])) + } + } + p.version = 2, t.LineToolArc = p + }, + "0YCj": function(e, t, i) { + "use strict"; + (function(e, t) { + i("Eyy1").assert; + var s = i("txPx").getLogger("Chart.Study.MetaInfo"), + r = i("9iCb").applyOverridesToStudyDefaults, + n = {}; + + function o(e) { + TradingView.merge(this, { + palettes: {}, + inputs: [], + plots: [], + graphics: {}, + defaults: {} + }), TradingView.merge(this, e); + var t = e.fullId || e.id; + TradingView.merge(this, o.parseIdString(t)), this.name = this.id + } + o.VERSION_STUDY_ARG_SOURCE = 41, o.METAINFO_FORMAT_VERSION_SOS_V2 = 42, o + .VERSION_PINE_PROTECT_TV_4164 = 43, o.CURRENT_METAINFO_FORMAT_VERSION = 52, o + .VERSION_NEW_STUDY_PRECISION_FORMAT = 46, o.CHILD_STUDY_ALLOWED_PLOT_TYPES = [ + "line" + ], o.canPlotBeSourceOfChildStudy = function(e) { + return o.CHILD_STUDY_ALLOWED_PLOT_TYPES.includes(e) + }, o.CHILD_STUDY_EXCLUDE_IDS = ["CorrelationCoefficient@tv-basicstudies", + "Correlation - Log@tv-basicstudies-1" + ], o.CHILD_STUDY_PARENT_EXCLUDE_IDS = [], o.FilledArea = {}, o.FilledArea + .TYPE_PLOTS = "plot_plot", o.FilledArea.TYPE_HLINES = "hline_hline", o.versionOf = + function(e) { + var t = "_metainfoVersion" in e && isNumber(e._metainfoVersion) ? e + ._metainfoVersion : 0; + return t < 0 && s.logError("Metainfo format version cannot be negative: " + t), + t + }, o.parseIdString = function(e) { + var t = {}; + if (-1 === e.indexOf("@")) t.shortId = e, t.packageId = "tv-basicstudies", t + .id = e + "@" + t.packageId, t.version = 1; + else { + var i = e.split("@"); + t.shortId = i[0]; + var s = i[1].split("-"); + if (3 === s.length) t.packageId = s.slice(0, 2).join("-"), t.id = t + .shortId + "@" + t.packageId, t.version = s[2]; + else if (1 === s.length && "decisionbar" === s[0]) t.packageId = "les-" + s[ + 0], t.id = t.shortId + "@" + t.packageId, t.version = 1; + else { + if (1 !== s.length) throw new Error("unexpected study id:" + e); + t.packageId = "tv-" + s[0], t.id = t.shortId + "@" + t.packageId, t + .version = 1 + } + } + if (t.fullId = t.id + "-" + t.version, "tv-scripting" === t.packageId) { + var r = t.shortId; + if (0 === r.indexOf("Script$") || 0 === r.indexOf("StrategyScript$")) { + var n = r.indexOf("_"); + t.productId = n >= 0 ? r.substring(0, n) : t.packageId + } else t.productId = t.packageId + } else t.productId = t.packageId; + return t + }, o.getPackageName = function(e) { + return (/^[^@]+@([^-]+-[^-]+)/.exec(e || "") || [0, "tv-basicstudies"])[1] + }, o.cutDollarHash = function(e) { + var t = e.indexOf("$"), + i = e.indexOf("@"); + return -1 === t ? e : e.substr(0, t) + (i >= 0 ? e.substr(i) : "") + }, o.hasUserIdSuffix = function(e) { + return /^USER;[\d\w]+;\d+$/.test(e) + }, o.isStandardPine = function(e) { + return /^(Strategy)?Script\$STD;.*@tv-scripting$/.test(e) + }, o.getSourceIdByInputs = function(e, t) { + if (!Array.isArray(e) || !t) return null; + for (var i = 0; i < e.length; ++i) { + var s = e[i]; + if (o.isSourceInput(s) && "string" == typeof t[s.id]) { + var r = t[s.id]; + return ~r.indexOf("$") && (r = r.split("$")[0]), r + } + } + return null + }, o.getSourceInputIds = function(e) { + for (var t = [], i = e.inputs, s = 0; s < i.length; ++s) { + var r = i[s]; + o.isSourceInput(r) && t.push(r.id) + } + return t + }, o.setChildStudyMetaInfoPropertiesSourceId = function(t, i, s) { + for (var r = 0; r < t.inputs.length; ++r) { + var n = t.inputs[r]; + if (o.isSourceInput(n) && (s instanceof e && s.inputs && s.inputs[n.id])) { + var a = s.inputs[n.id].value(); + if (a.indexOf("$") > 0) { + var l = a.replace(/^[^\$]+/, i); + s.inputs[n.id].setValue(l) + } + } + } + }, o.patchChildStudyMetaInfoState = function(e) { + e.state && function e(t) { + if ("object" == typeof t) + for (var i in t) "string" == typeof t[i] && /^[^\$]+\$\d+$/.test(t[ + i]) ? t[i] = t[i].replace(/^[^\$]+/, "{pid}") : e(t[i]) + }(e.state.inputs), e.state.isChildStudy = !0 + }, o.prototype.parseValue = function(e, t) { + return "bool" === e ? TradingView.parseBool(t) : t + }, o.prototype.defaultInputs = function() { + for (var e = [], t = 0; t < this.inputs.length; t++) e.push(this.inputs[t] + .defval); + return e + }, o.prototype.state = function(e) { + var t = {}; + for (var i in this) this.hasOwnProperty(i) && (t[i] = this[i], !0 !== e && + "id" === i && (t[i] += "-" + this.version)); + return t + }, o.prototype.symbolInputId = function() { + var e = this.inputs.filter((function(e) { + return "symbol" === e.type + })); + return e.length > 0 ? e[0].id : null + }, o.prototype.createDefaults = function() { + if (this.defaults) { + var e = TradingView.clone(this.defaults); + e.precision = "default"; + var t = o.getStudyPropertyRootName(this); + defaults.create(t, e) + } + }, o.prototype.removeDefaults = function() { + defaults.remove(o.getStudyPropertyRootName(this)) + }, o.findStudyMetaInfoByDescription = function(e, t) { + if (e) { + for (var i = 0; i < e.length; ++i) + if (e[i].description.toLowerCase() === t.toLowerCase()) return e[i]; + throw new Error("unexpected study id:" + t) + } + throw new Error("There is no studies metainfo") + }, o.isParentSourceId = function(e) { + return "string" == typeof e && /^[^\$]+\$\d+$/.test(e) + }, o.isSourceInput = function(e) { + return e.id && (("source" === e.id || "src" === e.id) && ("text" === e.type || + "source" === e.type) || "source" === e.type) + }, o.getChildSourceInputTitles = function(e, t, i) { + var s = {}; + if (t.plots && t.plots.length && e.options && e.options.length) + for (var r, n, a, l = 0; l < e.options.length; ++l) n = (r = e.options[ + l]) && +r.split("$")[1], (a = isFinite(n) && t.plots[n]) && ~o + .CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(a.type) && (s[r] = t.styles && t + .styles[a.id] && t.styles[a.id].title || a.id, i && (s[r] = i + + ": " + s[r])); + return s + }; + var a = new Map([ + ["AnchoredVWAP@tv-basicstudies", "linetoolanchoredvwap"], + ["RegressionTrend@tv-basicstudies", "linetoolregressiontrend"] + ]); + o.getStudyPropertyRootName = function(e) { + var t = a.get(e.id); + if (void 0 !== t) return t; + var i = "study_" + e.id; + return e.pine && e.pine.version && (i += "_" + e.pine.version.replace(".", + "_")), i + }, o.getStudyPropertyRootNameById = function(e) { + var t = a.get(e); + return void 0 !== t ? t : "study_" + e + }, o.overrideDefaults = function(e) { + 0 !== e.length && r(n, e, (function(e) { + return TradingView.defaultProperties[o.getStudyPropertyRootName( + e)] || null + })) + }, o.mergeDefaultsOverrides = function(e) { + TradingView.merge(n, e) + }, o.isScriptStrategy = function(e) { + if (e.extra && e.extra.kind) return e.extra.kind === TVScript.Kinds.STRATEGY; + if (!0 === e.isTVScriptStrategy) return !0; + var t = e.TVScriptSourceCode || e.scriptSource; + return !!t && TVScript.isStrategy(t) + }, o.getOrderedInputIds = function(e) { + for (var t = [], i = e.inputs, s = 0; s < i.length; ++s) { + var r = i[s]; + t.push(r.id) + } + return t + }, o.canBeChild = function(e) { + if (e && "string" == typeof e) return !0; + if (!e || e.extra && !o.isAllowedSourceInputsCount(e.extra.sourceInputsCount) || + !0 === e.canNotBeChild || !1 === e.canBeChild || ~o.CHILD_STUDY_EXCLUDE_IDS + .indexOf(e.id)) return !1; + for (var t = e.inputs, i = 0, s = 0; s < t.length; ++s) o.isSourceInput(t[s]) && + ++i; + return o.isAllowedSourceInputsCount(i) + }, o.isAllowedSourceInputsCount = function(e) { + return 1 === e + }, o.canHaveChildren = function(e) { + if (e) { + if (e.isTVScriptStrategy || e.TVScriptSourceCode && TVScript.isStrategy(e + .TVScriptSourceCode)) return !1; + if (e.id && !~o.CHILD_STUDY_PARENT_EXCLUDE_IDS.indexOf(e.id) && Array + .isArray(e.plots)) + for (var t = 0; t < e.plots.length; ++t) + if (~o.CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(e.plots[t].type)) + return !0 + } + return !1 + }, TradingView.StudyMetaInfo = o, t && t.exports && (t.exports = o) + }).call(this, i("tc+8"), i("YuTi")(e)) + }, + "0psP": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "GeneralChartPropertiesRenderer", (function() { + return r + })); + var s = i("sQaR"); + class r extends s.a { + constructor(e) { + super(), this._dialog = null, this._subscribe = e => { + this._setVisibility(e) + }, this._chartWidgetCollection = e + } + show() { + const e = this._chartWidgetCollection, + t = e.activeChartWidget.value(); + return t.generalPropertiesDefinitions().then(s => Promise.all([i.e("redux"), i + .e("react"), i.e(1), i.e(3), i.e(4), i.e(6), i.e(8), i.e(9), i + .e(11), i.e(12), i.e(13), i.e(14), i.e(16), i.e(17), i.e(19), i + .e(21), i.e(22), i.e(23), i.e(26), i.e(29), i.e(33), i.e(34), i + .e(35), i.e(36), i.e(39), i.e(45), i.e(68), i.e(87), i.e(0), i + .e(2), i.e(5), i.e(7), i.e(10), i.e(15), i.e(18), i.e(20), i.e( + 25), i.e(27), i.e(30), i.e(31), i.e(32), i.e(37), i.e(44), i + .e("general-chart-properties-dialog") + ]).then(i.bind(null, "PI1I")).then(i => { + var r, n; + const o = new i.GeneralChartPropertiesDialogRenderer({ + chartWidgetCollection: e, + propertyPages: s, + activePageId: this._activePageId, + model: t.model() + }); + return null === (r = this._dialog) || void 0 === r || r.hide(), + null === (n = this._dialog) || void 0 === n || n.visible() + .unsubscribe(this._subscribe), this._dialog = o, o.visible() + .subscribe(this._subscribe), o.show(), this._activePageId = + void 0, o + })) + } + hide() { + var e; + null === (e = this._dialog) || void 0 === e || e.hide() + } + isVisible() { + return this.visible().value() + } + focusOnText() {} + setActivePage(e) { + this._activePageId = e + } + } + }, + "0qMc": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "lineToolsLocalizedNames", (function() { + return r + })); + i("YFKU"); + var s = i("+GxX"); + const r = { + LineTool5PointsPattern: window.t("XABCD Pattern"), + LineToolABCD: window.t("ABCD Pattern"), + LineToolArc: window.t("Arc"), + LineToolArrow: window.t("Arrow"), + LineToolArrowMarkDown: window.t("Arrow Mark Down"), + LineToolArrowMarkLeft: window.t("Arrow Mark Left"), + LineToolArrowMarkRight: window.t("Arrow Mark Right"), + LineToolArrowMarkUp: window.t("Arrow Mark Up"), + LineToolBalloon: window.t("Balloon"), + LineToolBarsPattern: window.t("Bars Pattern"), + LineToolBezierCubic: window.t("Double Curve"), + LineToolBezierQuadro: window.t("Curve"), + LineToolBrush: window.t("Brush"), + LineToolCallout: window.t("Callout"), + LineToolCircleLines: window.t("Cyclic Lines"), + LineToolCypherPattern: window.t("Cypher Pattern"), + LineToolDateAndPriceRange: window.t("Date and Price Range"), + LineToolDateRange: window.t("Date Range"), + LineToolDisjointAngle: window.t("Disjoint Channel"), + LineToolElliottCorrection: window.t("Elliott Correction Wave (ABC)"), + LineToolElliottDoubleCombo: window.t("Elliott Double Combo Wave (WXY)"), + LineToolElliottImpulse: window.t("Elliott Impulse Wave (12345)"), + LineToolElliottTriangle: window.t("Elliott Triangle Wave (ABCDE)"), + LineToolElliottTripleCombo: window.t("Elliott Triple Combo Wave (WXYXZ)"), + LineToolEllipse: window.t("Ellipse"), + LineToolExtended: window.t("Extended Line"), + LineToolFibChannel: window.t("Fib Channel"), + LineToolFibCircles: window.t("Fib Circles"), + LineToolFibRetracement: window.t("Fib Retracement"), + LineToolFibSpeedResistanceArcs: window.t("Fib Speed Resistance Arcs"), + LineToolFibSpeedResistanceFan: window.t("Fib Speed Resistance Fan"), + LineToolFibSpiral: window.t("Fib Spiral"), + LineToolFibTimeZone: window.t("Fib Time Zone"), + LineToolFibWedge: window.t("Fib Wedge"), + LineToolFlagMark: window.t("Flag Mark"), + LineToolImage: window.t("Image"), + LineToolFlatBottom: window.t("Flat Top/Bottom"), + LineToolAnchoredVWAP: window.t("Anchored VWAP"), + LineToolGannComplex: window.t("Gann Square"), + LineToolGannFixed: window.t("Gann Square Fixed"), + LineToolGannFan: window.t("Gann Fan"), + LineToolGannSquare: window.t("Gann Box"), + LineToolHeadAndShoulders: window.t("Head and Shoulders"), + LineToolHorzLine: window.t("Horizontal Line"), + LineToolHorzRay: window.t("Horizontal Ray"), + LineToolIcon: window.t("Icon"), + LineToolInsidePitchfork: window.t("Inside Pitchfork"), + LineToolNote: window.t("Note"), + LineToolNoteAbsolute: window.t("Anchored Note"), + LineToolSignpost: window.t("Signpost"), + LineToolParallelChannel: window.t("Parallel Channel"), + LineToolPitchfan: window.t("Pitchfan"), + LineToolPitchfork: window.t("Pitchfork"), + LineToolPolyline: window.t("Polyline"), + LineToolPath: window.t("Path"), + LineToolPrediction: window.t("Forecast"), + LineToolPriceLabel: window.t("Price Label"), + LineToolArrowMarker: window.t("Arrow Marker"), + LineToolPriceRange: window.t("Price Range"), + LineToolProjection: window.t("Projection"), + LineToolRay: window.t("Ray"), + LineToolRectangle: window.t("Rectangle"), + LineToolRegressionTrend: window.t("Regression Trend"), + LineToolRiskRewardLong: window.t("Long Position"), + LineToolRiskRewardShort: window.t("Short Position"), + LineToolFixedRangeVolumeProfile: window.t("Fixed Range Volume Profile"), + LineToolRotatedRectangle: window.t("Rotated Rectangle"), + LineToolSchiffPitchfork: window.t("Modified Schiff Pitchfork"), + LineToolSchiffPitchfork2: window.t("Schiff Pitchfork"), + LineToolSineLine: window.t("Sine Line"), + LineToolText: window.t("Text", { + context: "tool" + }), + LineToolTextAbsolute: window.t("Anchored Text"), + LineToolThreeDrivers: window.t("Three Drives Pattern"), + LineToolTimeCycles: window.t("Time Cycles"), + LineToolTrendAngle: window.t("Trend Angle"), + LineToolTrendBasedFibExtension: window.t("Trend-Based Fib Extension"), + LineToolTrendBasedFibTime: window.t("Trend-Based Fib Time"), + LineToolTrendLine: window.t("Trend Line"), + LineToolInfoLine: window.t("Info Line"), + LineToolTriangle: window.t("Triangle"), + LineToolTrianglePattern: window.t("Triangle Pattern"), + LineToolVertLine: window.t("Vertical Line"), + LineToolCrossLine: window.t("Cross Line"), + LineToolHighlighter: window.t("Highlighter"), + LineToolPriceNote: window.t("Price Note"), + LineToolVbPFixed: window.t("Volume Profile Fixed Range") + }; + Object(s.isFeatureEnabled)("remove-line-tool-ghost-feed") || (r.LineToolGhostFeed = window.t( + "Ghost Feed")) + }, + "1AAW": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("hY0g"), + r = i.n(s); + + function n(e, ...t) { + const i = (...t) => e(...t.map(e => e.value())), + s = new r.a(i(...t)), + n = () => s.setValue(i(...t)), + o = t.map(e => e.spawn()); + for (const e of o) e.subscribe(n); + return s.readonly().spawn(() => o.forEach(e => e.destroy())) + } + }, + "1ANp": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "navigationButtonsVisibilityKey", (function() { + return r + })), i.d(t, "property", (function() { + return n + })), i.d(t, "availableValues", (function() { + return o + })), i.d(t, "actualBehavior", (function() { + return a + })); + var s = i("+jnJ"); + const r = "NavigationButtons.visibility", + { + property: n, + availableValues: o, + actualBehavior: a + } = Object(s.a)(r) + }, + "1IXQ": function(e, t, i) { + "use strict"; + i("jJ9X"); + var s = i("aO4+").Point, + r = i("/3z9"), + n = i("qFKp").CheckMobile, + o = i("7KDR"), + a = o.Action, + l = o.Separator, + c = i("ikwP").hardResizeCanvas, + h = i("S8xo").MouseEventHandler, + u = i("YmeR").ActionBinder, + d = i("T6Of").LimitedPrecisionNumericFormatter, + p = i("HZKX").createLinesAction, + _ = i("xzdg").PriceAxisWidgetBase, + m = i("Kxc7"), + f = window.t("Merge All Scales Into One"); + class g extends _ { + constructor(e, t, i, s, r, n, o, a) { + super(e, t, i, r, n, s, a), this._axisInfo = o, this._offset = 0, this + .restoreDefaultCursor(), this.update(), this._mouseEventHandler = new h(this + ._topCanvasBinding.canvas, this, { + treatVertTouchDragAsPageScroll: !1, + treatHorzTouchDragAsPageScroll: !0 + }), this.contextMenu = null, this.actions = null + } + destroy() { + null !== this.actions && this.actions.reset && this.actions.reset.destroy(), this + ._mouseEventHandler.destroy(), super.destroy() + } + dataSourceAtPoint(e, t) { + var i = this._grouppedSources(), + r = i.sources.concat(Array.from(i.topLevelSources)).concat(this._pane.state() + .customSources()), + n = null, + o = null; + if (!this._priceScale) return null; + + function a(e, t) { + var i = o ? o.result() : 0; + e.result() > i && (o = e, n = t) + } + for (var l = new s(e, t), c = this._pane.state(), h = r.length - 1; h >= 0; --h) { + var u = r[h], + d = u.priceAxisViews(c, this._priceScale); + if (d && 0 !== d.length) + for (var p = d.length - 1; p >= 0; --p) { + var _ = d[p].renderer(); + if (null !== _ && void 0 !== _.hitTest) { + var m = _.hitTest(l, this._size.w, this._isLeft ? "left" : "right"); + null !== m && a(m, u) + } + } + } + return n + } + _initActions(e) { + if (this._pane.hasState() && null === this.actions) { + this.actions = {}; + var t = this, + s = this._pane.chart().model(); + this.actions.reset = new a({ + label: window.t("Reset Price Scale"), + icon: i("LdoW"), + shortcut: "Alt+R", + shortcutHint: r.humanReadableHash(r.Modifiers.Alt + 82), + statName: "ResetScale", + onExecute: g.prototype.reset.bind(this) + }), this.actions.setAutoScale = new a({ + label: window.t("Auto (Fits Data To Screen)"), + checkable: !0, + checked: !0, + statName: "ToggleAutoScale", + onExecute: function() { + s.togglePriceScaleAutoScaleMode(t.priceScale()), t + ._updateScalesActions() + } + }), this.actions.setPercentage = new a({ + label: window.t("Percent", { + context: "scale_menu" + }), + checkable: !0, + checked: this.priceScale().isPercentage(), + statName: "TogglePercantage", + onExecute: function() { + s.togglePriceScalePercentageScaleMode(t.priceScale()), t + ._updateScalesActions() + } + }), this.actions.setIndexedTo100 = new a({ + label: window.t("Indexed to 100", { + context: "scale_menu" + }), + checkable: !0, + checked: this.priceScale().isIndexedTo100(), + statName: "ToggleIndexedTo100", + onExecute: function() { + s.togglePriceScaleIndexedTo100ScaleMode(t.priceScale()), t + ._updateScalesActions() + } + }), this.actions.setLog = new a({ + label: window.t("Logarithmic", { + context: "scale_menu" + }), + checkable: !0, + checked: this.priceScale().isLog(), + statName: "ToggleLogScale", + onExecute: function() { + s.togglePriceScaleLogScaleMode(t.priceScale()), t + ._updateScalesActions() + } + }), this.actions.setRegular = new a({ + label: window.t("Regular", { + context: "scale_menu" + }), + checkable: !0, + checked: this.priceScale().isRegular(), + statName: "ToggleRegularScale", + onExecute: function() { + s.setPriceScaleRegularScaleMode(t.priceScale()), t + ._updateScalesActions() + } + }), this.actions.alignLabels = new a({ + label: window.t("No Overlapping Labels", { + context: "scale_menu" + }), + checkable: !0, + checked: !1, + statName: "TogglePreciseLabels" + }), this.actions.alignLabels.binding = new u(this.actions.alignLabels, this + .priceScale().properties().alignLabels, this._pane.chart().model(), + "No Overlapping Labels"), this.actions.invertScale = new a({ + label: window.t("Invert Scale", { + context: "scale_menu" + }), + checkable: !0, + checked: this.priceScale().isInverted(), + statName: "Invert Scale", + onExecute: function() { + s.invertPriceScale(t.priceScale()), t._updateScalesActions() + } + }), this._updateScalesActions() + } + } + _logAction() { + return this._isMainSeriesAxis() ? this._pane.chart().actions().logSeriesScale : this + .actions.setLog + } + _percentageAction() { + return this._isMainSeriesAxis() ? this._pane.chart().actions().percentSeriesScale : + this.actions.setPercentage + } + _indexedTo100Action() { + return this._isMainSeriesAxis() ? this._pane.chart().actions() + .indexedTo100SeriesScale : this.actions.setIndexedTo100 + } + _autoScaleAction() { + return this._isMainSeriesAxis() ? this._pane.chart().actions().autoSeriesScale : + this.actions.setAutoScale + } + _regularScaleAction() { + return this._isMainSeriesAxis() ? this._pane.chart().actions().regularSeriesScale : + this.actions.setRegular + } + _lockScaleAction() { + var e = this._pane.chart().actions().lockSeriesScale, + t = v(this.priceScale(), this._pane.chart().model().model() + .mainSeriesScaleRatio()); + return e.update({ + hint: t + }), e + } + _invertAction() { + return this._isMainSeriesAxis() ? this._pane.chart().actions().invertSeriesScale : + this.actions.invertScale + } + _isMainSeriesAxis() { + return this.priceScale().hasMainSeries() + } + _updateMainSeriesScalesActions() { + this._isMainSeriesAxis() && null !== this.actions && this._updateScalesActions() + } + _updateScalesActions() { + var e = this.priceScale(), + t = this._isMainSeriesAxis(), + i = e.mainSource().properties(), + s = t && e.isLockScale(), + r = t && i.style.value() === TradingView.Series.STYLE_PNF; + this.actions.setRegular.update({ + checked: e.isRegular(), + disabled: s || r + }), this.actions.setPercentage.update({ + checked: e.isPercentage(), + disabled: s || r + }), this.actions.setIndexedTo100.update({ + checked: e.isIndexedTo100(), + disabled: s || r + }), this.actions.setLog.update({ + checked: e.isLog(), + disabled: s || r + }), this.actions.setAutoScale.update({ + checked: e.isAutoScale(), + disabled: e.properties().autoScaleDisabled.value() + }) + } + _createMergeScalesAction() { + var e = this._pane.chart().actions(), + t = this._pane.chart().model().model().priceScaleSlotsCount(); + if (t.left + t.right === 1) return 0 === t.left ? e.moveScaleToLeft : e + .moveScaleToRight; + var i = []; + return i.push(e.mergeLeftScalesAction), i.push(e.mergeRightScalesAction), new a({ + label: f, + subItems: i + }) + } + getContextMenuActions() { + this._initActions(); + var e = this._pane.chart().actions(), + t = []; + if (t.push(this.actions.reset, new l, this._autoScaleAction()), this + ._isMainSeriesAxis() && t.push(this._lockScaleAction()), t.push(e + .scaleSeriesOnly, this._invertAction(), new l, this._regularScaleAction(), + this._percentageAction(), this._indexedTo100Action(), this._logAction(), + new l), n.any() || (t.push(this._createMergeScalesAction()), t.push(new l)), + !m.enabled("fundamental_widget")) { + t.push(new a({ + label: window.t("Labels"), + subItems: [e.showSymbolLabelsAction, e.showSeriesLastValue, + null, null, e.showHighLowPriceLabels, e + .showAverageClosePriceLabel, null, e + .showStudyPlotNamesAction, e.showStudyLastValue, null, + null, this.actions.alignLabels + ].filter(Boolean) + })) + } + return t.push(p(this._pane.chart())), this._options.countdownEnabled && t.push(e + .showCountdown), this._options.currencyConversionEnabled && t.push(e + .showCurrency), this._options.unitConversionEnabled && t.push(e.showUnit), + this._pane.chart().model().crossHairSource().isMenuEnabled() && t.push(e + .addPlusButton), !TradingView.onWidget() && m.enabled( + "show_chart_property_page") && m.enabled("chart_property_page_scales") && e + .scalesProperties && t.push(new l, e.scalesProperties), t + } + setSizeAndOffset(e, t) { + if (e.w < 0 || e.h < 0) throw new Error( + "Try to set invalid size to PriceAxisWidget " + JSON.stringify(e)); + this._size.equals(e) || (this._size = e, this._canvasBinding.resizeCanvas({ + width: e.w, + height: e.h + }), this._topCanvasBinding.resizeCanvas({ + width: e.w, + height: e.h + }), this._cell.style.width = e.w + "px", this._cell.style.height = e.h + + "px", this._cell.style.minWidth = e.w + "px"), this._offset !== t && (this + ._offset = t, this._cell.style.left = t + "px") + } + getWidth() { + return this._size.w + } + update() {} + hardResetCanvas() { + null !== this._size && (c(this._canvasBinding, this._size), c(this + ._topCanvasBinding, this._size)) + } + _isMainPane() { + return this._pane.state().containsMainSeries() + } + restoreDefaultCursor() { + this.setCursor("") + } + setCursor(e) { + var t = ""; + "grabbing" !== e && "ns-resize" !== e || (t = "price-axis--cursor-" + e), this + ._currentCursorClassName !== t && (this._currentCursorClassName && this._cell + .classList.remove(this._currentCursorClassName), t && this._cell.classList + .add(t), this._currentCursorClassName = t, this._cell.style.cursor) + } + axisInfo() { + return this._axisInfo + } + } + + function b(e) { + var t = new d(e); + return function(e, i) { + return isNumber(i) && !e.isLog() ? t.format(i) : "" + } + } + var v = b(4); + e.exports = { + PriceAxisWidget: g, + scaleRatioForContextMenuTransformer: b + } + }, + "1Wlv": function(e, t, i) { + "use strict"; + (function(e) { + var s = i("Yj6H").PriceScaleBase, + r = i("7ktv").PriceDataSource, + n = i("Qb4w").PriceRange, + o = i("e3/o").randomHash, + a = i("3ClC").isStudy, + l = i("TTFo"), + c = l.fromLog, + h = l.toLog; + class u extends s { + constructor(t, i) { + super(i), this._scalesProperties = t, this.m_scrollStartPoint = null; + var s = this; + this._modeChanged = new e, this._properties.isInverted.listeners() + .subscribe(this, u.prototype._onIsInvertedChanged), this._properties + .listeners().subscribe(null, (function() { + if (s.mainSource() && s.mainSource().model()) { + var e = s.mainSource().model().paneForSource(s + .mainSource()); + s.mainSource().model().updatePane(e) + } + })), this._scalesProperties.listeners().subscribe(this, (function() { + this._marksCache = null + })), this.setId(o()) + } + _convertPriceRangeFromLog(e) { + if (null === e) return null; + var t = c(e.minValue()), + i = c(e.maxValue()); + return new n(t, i) + } + _convertPriceRangeToLog(e) { + if (null === e) return null; + var t = h(e.minValue()), + i = h(e.maxValue()); + return new n(t, i) + } + _canConvertPriceRangeFromLog(e) { + if (null === e) return !1; + var t = c(e.minValue()), + i = c(e.maxValue()); + return isFinite(t) && isFinite(i) + } + mode() { + return { + autoScale: this._properties.autoScale.value(), + lockScale: this._properties.lockScale.value(), + percentage: this._properties.percentage.value(), + indexedTo100: this._properties.indexedTo100.value(), + log: this._properties.log.value() + } + } + setMode(e) { + var t = {}, + i = this.mode(), + s = this._properties.state(), + r = null; + void 0 !== e.autoScale && e.autoScale !== s.autoScale && (t.autoScale = e + .autoScale, this._setAutoScaleValueWithDependentProperties(e + .autoScale)), void 0 !== e.lockScale && e.lockScale !== s + .lockScale && (t.lockScale = e.lockScale, this + ._setLockScaleValueWithDependentProperties(e.lockScale)), void 0 !== + e.percentage && e.percentage !== s.percentage && (t.percentage = e + .percentage, this._setPercentageValueWithDependentProperties(e + .percentage), this._invalidatedForRange.isValid = !1), + void 0 !== e.indexedTo100 && e.indexedTo100 !== s.indexedTo100 && (t + .indexedTo100 = e.indexedTo100, this + ._setIndexedTo100ValueWithDependentProperties(e.indexedTo100), this + ._invalidatedForRange.isValid = !1), void 0 !== e.log && e.log !== s + .log && (t.log = e.log, this._setLogValueWithDependentProperties(e + .log)), s.log && !this._properties.log.value() && (this + ._canConvertPriceRangeFromLog(this.m_priceRange) ? null !== (r = + this._convertPriceRangeFromLog(this.m_priceRange)) && this + .setPriceRange(r) : this.properties().autoScale.setValue(!0)), !s + .log && this._properties.log.value() && null !== (r = this + ._convertPriceRangeToLog(this.m_priceRange)) && this.setPriceRange( + r), s.autoScale !== this._properties.autoScale.value() && this + ._properties.autoScale.listeners().fire(this._properties.autoScale), s + .autoScaleDisabled !== this._properties.autoScaleDisabled.value() && + this._properties.autoScaleDisabled.listeners().fire(this._properties + .autoScaleDisabled), s.lockScale !== this._properties.lockScale + .value() && this._properties.lockScale.listeners().fire(this._properties + .lockScale), s.percentage !== this._properties.percentage.value() && + (this._properties.percentage.listeners().fire(this._properties + .percentage), this.updateFormatter()), s.indexedTo100 !== this + ._properties.indexedTo100.value() && (this._properties.indexedTo100 + .listeners().fire(this._properties.indexedTo100), this + .updateFormatter()), s.percentageDisabled !== this._properties + .percentageDisabled.value() && this._properties.percentageDisabled + .listeners().fire(this._properties.percentageDisabled), s.log !== this + ._properties.log.value() && this._properties.log.listeners().fire(this + ._properties.log), s.logDisabled !== this._properties.logDisabled + .value() && this._properties.logDisabled.listeners().fire(this + ._properties.logDisabled), void 0 === t.log && void 0 === t + .percentage && void 0 === t.lockScale && void 0 === t.autoScale && + void 0 === t.indexedTo100 || this._modeChanged.fire(i, this.mode()) + } + modeChanged() { + return this._modeChanged + } + fontSize() { + return this._scalesProperties.fontSize.value() + } + isEmpty() { + return this._makeSureItIsValid(), 0 === this.m_height || !this + .m_priceRange || this.m_priceRange.isEmpty() + } + startScroll(e) { + this.isAutoScale() || null === this.m_scrollStartPoint && null === this + ._priceRangeSnapshot && (this.isEmpty() || (this.m_scrollStartPoint = e, + this._priceRangeSnapshot = this.priceRange().clone())) + } + scrollTo(e) { + if (!this.isAutoScale() && null !== this.m_scrollStartPoint) { + var t = this.priceRange().length() / (this.internalHeight() - 1), + i = e - this.m_scrollStartPoint; + this.isInverted() && (i *= -1); + var s = i * t, + r = this._priceRangeSnapshot.clone(); + r.shift(s), this.setPriceRange(r, !0), this._marksCache = null + } + } + endScroll() { + this.isAutoScale() || null !== this.m_scrollStartPoint && (this + .m_scrollStartPoint = null, this._priceRangeSnapshot = null) + } + _onIsInvertedChanged() { + this._marksCache = null, this._markBuilder.rebuildTickMarks() + } + canDetachSource(e) { + return this.m_dataSources.some((function(t) { + return t !== e && t instanceof r && !(a(t) && t + .isLinkedToSeries()) + })) + } + } + t.PriceScale = u + }).call(this, i("aIyQ")) + }, + "1pHB": function(e, t) { + e.exports = + '' + }, + "2+aH": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("fgLi"), + o = i("hY0g"), + a = i.n(o), + l = i("HGP3"), + c = i("KcY8"), + h = i("Ulff"); + class u extends c.a { + constructor(e, t, i) { + super(), this._source = e, this._priceScale = t, this._priceProvider = i + } + setHitTestData(e) { + this._hitTestData = e + } + additionalPadding(e) { + return 0 + } + _updateRendererData(e, t, i) { + e.visible = !1, t.visible = !1; + const s = this._priceScale.mainSource(), + r = null !== s ? s.firstValue() : null; + if (!this._isVisible() || this._priceScale.isEmpty() || null === r) return; + const n = this._priceProvider(this._priceScale); + if (null === n) return; + i.background = this._bgColor(), i.textColor = this.generateTextColor(i + .background); + const o = this.additionalPadding(this._priceScale.fontSize()); + i.additionalPaddingTop = o, i.additionalPaddingBottom = o, i.coordinate = this + ._priceScale.priceToCoordinate(n, r), e.text = this._priceScale.formatPrice( + n, r), e.visible = !0, t.visible = !0, t.hitTestData = this._hitTestData + } + } + const d = { + normalBgColor: l.colorsPalette["color-cold-gray-750"], + hoveredBgColor: l.colorsPalette["color-cold-gray-600"] + }, + p = { + normalBgColor: l.colorsPalette["color-cold-gray-900"], + hoveredBgColor: l.colorsPalette["color-cold-gray-650"] + }; + class _ extends u { + additionalPadding(e) { + return 2 / 12 * e + } + _isVisible() { + return this._source.visible && null !== this._source.pane + } + _bgColor() { + return this._getThemedColors().normalBgColor + } + _updateRendererData(e, t, i) { + const s = t.visible; + super._updateRendererData(e, t, i), this._source.isHovered() ? t.backgroung = this + ._getThemedColors().hoveredBgColor : t.backgroung = void 0, s || (t.visible = s) + } + _getThemedColors() { + return this._source.model().isDark() ? d : p + } + } + class m extends u { + _isVisible() { + return null !== this._source.measurePane() + } + _bgColor() { + return h.a.common + } + } + var f = i("mMWL"), + g = i("YFKU"), + b = i("FQhm"), + v = i("KtbP"), + S = i("JWMC"), + y = (i("7KDR"), i("5VQP")), + w = (i("Kxc7"), i("/tGj")); + + function P(e) { + const t = e.priceScale(); + return null === t ? 0 : t.isPercentage() || t.isIndexedTo100() ? 2 : 1 + } + class C extends v.PanePriceAxisView { + constructor(e, t, i, s, r) { + super(e, t, s), this._crossHairMenuCachedState = null, this._hasActions = !1, + this._tooltipText = null, this._gaOrigin = "CH menu", this + ._crosshairPriceAxisView = e, e.setPaneRendererLabelIcon(0), this + ._crosshair = t, this._scale = i, + this._options = r + } + _updateImpl(e, t) { + super._updateImpl(e, t); + const i = this._crosshair.y, + s = this._chartModel.properties().scalesProperties.fontSize.value(), + r = this._chartModel.timeScale().width(), + n = this._crosshair.model().priceAxisRendererOptions(), + o = s + 2 * this._crosshairPriceAxisView.additionalPadding(s) + n + .paddingTop + n.paddingBottom, + a = o, + l = i - o / 2, + c = r - a, + h = this._crosshair.pane, + u = this._mainDataSourceOnPane(), + d = u && u.symbolSource(), + p = !!d && (d.isConvertedToOtherCurrency() || d.isConvertedToOtherUnit()); + if (null !== u) { + const e = P(u), + t = u.idForAlert(), + i = this._crossHairMenuCachedState; + null !== i && i.id === t && i.priceScale === e && i + .isCurrencyOrUnitConverted === p || (this + ._updateTooltipAndActionsAvaliability(u, e, p), this + ._crossHairMenuCachedState = { + id: t, + priceScale: e, + isCurrencyOrUnitConverted: p + }) + } + const _ = null !== u && Object(w.isSymbolSource)(u) ? u.symbol() : null, + m = Boolean(_) || !1; + this._crosshairPriceAxisView.setPaneLabelVisible(m); + const f = null !== h && 0 !== h.leftPriceScales().length && m, + g = null !== h && 0 !== h.rightPriceScales().length && m, + b = r - a / 2, + v = this._tooltipText ? { + text: this._tooltipText, + rect: { + x: b, + y: l, + w: 0, + h: 0 + } + } : void 0; + this._data = { + left: f, + right: g, + xl: 0, + xr: c, + y: l, + containerWidth: a, + containerHeight: o, + clickHandler: this._handleClick.bind(this), + tooltip: v + }, this._crosshairPriceAxisView.setHitTestData(this._data) + } + _priceScale() { + return this._scale + } + _updateTooltipAndActionsAvaliability(e, t, i) { + this._tooltipText = null, this._hasActions = !1; + if (!(1 === t)) return; + const s = !i && !1; + let r = 0; + s && r++; + let n = 0; + 1 === r && (s ? (n = 1, this._tooltipText = window.t("Add Alert")) : this + ._tooltipText = window.t("Add Horizontal Line")), this + ._crosshairPriceAxisView.setPaneRendererLabelIcon(n), this._hasActions = + 0 !== r + } + _handleClick(e, t, i) { + Object(S.trackEvent)(this._gaOrigin, "click"); + const s = this._mainDataSourceOnPane(), + r = null !== s && Object(w.isSymbolSource)(s) ? s.symbol() : null, + n = { + pageX: i.pageX, + pageY: i.pageY, + clientX: i.clientX, + clientY: i.clientY, + screenX: i.screenX, + screenY: i.screenY, + price: this._crosshair.price, + symbol: r + }; + b.emit("onPlusClick", n) + } + _getMenuItems(e) { + return Promise.resolve([]) + } + _createAlertMenuItems(e) { + return Promise.resolve([]) + } + _createTradingMenuItems() { + return Promise.resolve([]) + } + _createAddHorizontalLineMenuItem() { + return [] + } + _getActionAddAlert(e) { + return null + } + _getActionAddHorizontalLine(e) { + return null + } + _getValue(e, t) { + const i = e.priceScale(), + s = e.firstValue(); + if (null === i || null === s) return null; + return i.isPercentage() || i.isIndexedTo100() ? null : i.coordinateToPrice(t, s) + } + _formatValue(e, t) { + return t.formatter().format(e) + } + _addAlert(e, t) {} + _addHorizontalLineTool(e, t) {} + _showContextMenu(e, t, i, r) { + const n = "left" === r; + setTimeout(() => { + y.ContextMenuManager.createMenu(e).then(e => { + e.show((e, t) => { + const r = Object(s.ensureDefined)(this + ._data), + o = Object(s.ensureNotNull)(i.view) + .innerHeight, + a = n ? r.xl : r.xr, + l = i.localX - a, + c = { + left: i.clientX - l, + right: i.clientX - l + r + .containerWidth, + top: i.clientY - r.containerHeight / + 2, + bottom: i.clientY + r + .containerHeight / 2 + }; + return { + clientX: n ? c.left : c.right - e, + clientY: o < c.bottom + t ? c.top - t : + c.bottom + } + }) + }) + }) + } + _mainDataSourceOnPane() { + const e = this._crosshair.pane; + return null !== e ? e.mainDataSource() : null + } + } + var x = i("Tmoa"), + T = i("8Uy/"), + I = i("VaSN"), + M = i("jFln"), + O = i("VdBB"), + L = i("gAom"); + class A { + constructor(e) { + this._data = e + } + hitTest(e) { + return void 0 === this._data.clickHandler ? null : new O.HitTestResult(O + .HitTestResult.CUSTOM, { + clickHandler: this._data.clickHandler, + tapHandler: this._data.clickHandler + }) + } + draw(e, t) { + const i = t.pixelRatio, + s = this._data.vertLinesVisible, + r = this._data.horzLinesVisible; + if (!s && !r) return; + e.save(), e.lineWidth = Math.max(1, Math.floor(this._data.lineWidth * i)), e + .strokeStyle = this._data.color, e.fillStyle = this._data.color, e.lineCap = + "butt", Object(M.setLineStyle)(e, this._data.lineStyle); + const n = Math.round(this._data.x * i), + o = Math.round(this._data.y * i), + a = Math.ceil(this._data.w * i), + l = Math.ceil(this._data.h * i); + s && n >= 0 && Object(L.drawVerticalLine)(e, n, 0, l), r && o >= 0 && Object(L + .drawHorizontalLine)(e, o, 0, a), this._data.drawCenter && (e.beginPath(), e + .arc(n, o, Math.round(3 * i), 0, 2 * Math.PI, !0), e.fillStyle = this._data + .color, e.fill()), e.restore() + } + } + var E = i("CW80"); + const k = l.colorsPalette["color-tv-blue-500"], + D = l.colorsPalette["color-tv-blue-500"]; + class V { + constructor(e, t) { + this._rendererData = {}, this._renderer = new A(this._rendererData), this._source = + e, this._pane = t + } + update() {} + renderer(e, t) { + const i = this._source.selectPointMode().value(), + r = this._source.visible && (this._source.areLinesVisible || i) && !this._source + .linesShouldBeHidden(), + n = this._rendererData; + if (!r || null === this._pane) return null; + const o = this._source.paneForPointSelect(), + a = null !== o ? this._source.pane === o && this._pane === o : this._pane === + this._source.pane; + if (i && this._source.isOnHoveredChartWidget() && a) { + const e = Object(s.ensureNotNull)(this._source.pointToSelect()); + n.color = k, n.lineWidth = 1, n.lineStyle = T.LINESTYLE_SOLID, n + .horzLinesVisible = !0, n.vertLinesVisible = !0, n.drawCenter = !0, + "time" === e ? (n.horzLinesVisible = !1, n.drawCenter = !1) : "price" === + e && (n.vertLinesVisible = !1, n.drawCenter = !1) + } else { + const e = this._source.properties(), + t = this._source.model().currentTool(), + i = Object(I.lastEventIsTouch)() && (Object(E.isLineToolName)(t) || Object(f + .toolIsMeasure)(t)); + let s; + s = i ? D : e.childs().color.value(); + const r = e.childs().transparency.value(); + !i && r > 0 && (s = Object(x.generateColor)(s, r)), n.color = s, n + .horzLinesVisible = this._pane === this._source.pane, n.vertLinesVisible = ! + 0, n.lineWidth = e.childs().width.value(), n.lineStyle = e.childs().style + .value(), n.drawCenter = i && this._pane === this._source.pane + } + return n.w = this._pane.width(), n.h = this._pane.height(), n.x = void 0 !== this + ._source.lockedX && isFinite(this._source.lockedX) && this._source.lockedX || + this._source.x, n.y = this._source.y, this._renderer + } + } + var B = i("IjC5"); + const R = { + backgroundColor: Object(x.generateColor)(l.colorsPalette["color-tv-blue-500"], 70), + borderColor: Object(x.generateColor)(l.colorsPalette["color-tv-blue-500"], 20) + }; + class N { + constructor(e) { + this._renderer = new B.RectangleRenderer, this._rectangle = null, this._crosshair = + e + } + update() { + const e = this._crosshair.selection(); + null !== e && null !== this._crosshair.pane ? this._rectangle = this._crosshair.pane + .logicalRectToPixels(e) : this._rectangle = null + } + renderer(e, t) { + if (!this._rectangle) return null; + const i = { + backcolor: R.backgroundColor, + color: R.borderColor, + fillBackground: !0, + linewidth: 1, + points: [this._rectangle.min, this._rectangle.max], + extendLeft: !1, + extendRight: !1 + }; + return this._renderer.setData(i), this._renderer + } + } + var j = i("Ialn"), + F = i("GH0z"), + W = i("5C6T"), + H = i("nda6"), + U = i("nEwK"), + z = i("pJOz"), + G = i("qgcf"), + q = i("Zy3/"), + Y = i("a7Ha"), + K = i("zDbI"); + const J = Object(g.t)("{count} bars"), + Z = Object(g.t)("Vol"), + X = new F.PercentageFormatter, + $ = new H.TimeSpanFormatter, + Q = new U.VolumeFormatter, + ee = Object(l.getHexColorByName)("color-tv-blue-500"), + te = { + bgColorPositive: Object(x.generateColor)(ee, 80), + bgColorNegative: "rgba(239,83,80,0.2)", + colorPositive: "#1E53E5", + colorNegative: "#EF5350", + labelBgColorPositive: ee, + labelBgColorNegative: "#EF5350" + }; + class ie { + constructor(e, t) { + this._pipFormatter = null, this._lastSymbolInfo = null, this._horzTrenRenderer = + new z.TrendLineRenderer, this._vertTrenRenderer = new z.TrendLineRenderer, this + ._bgRenderer = new B.RectangleRenderer, this._labelRenderer = new G + .TextRenderer, this._p1 = null, this._p2 = null, this._label = null, this + ._source = e, this._pane = t + } + update() { + const [e, t] = this._source.measurePoints(); + if (void 0 === t) return this._p1 = null, void(this._p2 = null); + const i = Object(s.ensureNotNull)(this._source.measurePane()), + n = e.price, + o = t.price, + a = t.price - n, + l = t.index - e.index, + c = Object(j.forceLTRStr)("" + l), + h = Object(s.ensureNotNull)(i.mainDataSource()); + let u = Object(s.ensureNotNull)(h.formatter()).format(a); + if (Math.abs(n) > 1e-8) { + const e = a / Math.abs(n); + u += " (" + X.format(100 * e) + ")" + } + const d = Object(j.forceLTRStr)(u); + this._label = d + "\n" + J.format({ + count: c + }); + const p = Object(s.ensureNotNull)(h.firstValue()), + _ = this._source.model().timeScale().indexToCoordinate(e.index), + m = this._source.model().timeScale().indexToCoordinate(t.index), + f = i.defaultPriceScale().priceToCoordinate(n, p), + g = i.defaultPriceScale().priceToCoordinate(o, p); + this._p1 = new r.Point(_, f), this._p2 = new r.Point(m, g); + const b = this._source.model().timeScale().indexToUserTime(e.index), + v = this._source.model().timeScale().indexToUserTime(t.index); + let S = null; + if (null !== b && null !== v) { + const e = this._pane.model().mainSeries().symbolInfo(); + null !== e && e !== this._lastSymbolInfo && (this._pipFormatter = new W + .PipFormatter(e.pricescale, e.minmov, e.type, e.minmove2), this + ._lastSymbolInfo = e), S = (v.valueOf() - b.valueOf()) / 1e3 + } + const y = this._pipFormatter ? this._pipFormatter.format(a) : null, + w = null !== y ? " , " + y : "", + P = null !== S ? $.format(S) : null, + C = null !== P ? ", " + Object(j.startWithLTR)(P) : ""; + this._label = Object(j.forceLTRStr)(d + w) + "\n" + J.format({ + count: c + }) + C; + const x = this._source.measureVolume(); + Number.isNaN(x) || (this._label += `\n${Z} ${Q.format(x)}`); + const I = o < n ? te.bgColorNegative : te.bgColorPositive, + M = o < n ? te.colorNegative : te.colorPositive, + O = o < n ? te.labelBgColorNegative : te.labelBgColorPositive, + L = { + points: [this._p1, this._p2], + linewidth: 0, + fillBackground: !0, + color: I, + backcolor: I, + extendLeft: !1, + extendRight: !1 + }; + this._bgRenderer.setData(L); + const A = this._p1.add(this._p2).scaled(.5); { + const e = Math.round(A.y), + t = new r.Point(this._p1.x, e), + i = new r.Point(this._p2.x, e), + s = { + points: [t, i], + color: M, + linewidth: 1, + linestyle: T.LINESTYLE_SOLID, + extendleft: !1, + extendright: !1, + leftend: Y.LineEnd.Normal, + rightend: Math.abs(t.x - i.x) >= 50 ? Y.LineEnd.Arrow : Y.LineEnd.Normal + }; + this._horzTrenRenderer.setData(s) + } { + const e = Math.round(A.x), + t = new r.Point(e, this._p1.y), + i = new r.Point(e, this._p2.y), + s = { + points: [t, i], + color: M, + linewidth: 1, + linestyle: T.LINESTYLE_SOLID, + extendleft: !1, + extendright: !1, + leftend: Y.LineEnd.Normal, + rightend: Math.abs(t.y - i.y) >= 50 ? Y.LineEnd.Arrow : Y.LineEnd.Normal + }; + this._vertTrenRenderer.setData(s) + } + const E = { + x: 0, + y: 10 + }, + k = .5 * (this._p1.x + this._p2.x), + D = this._p2.y, + V = new r.Point(k, D), + B = (R = Object(s.ensureNotNull)(this._label), { + points: [V], + text: R, + color: "#FFFFFF", + horzAlign: "center", + vertAlign: "middle", + font: K.CHART_FONT_FAMILY, + offsetX: E.x, + offsetY: E.y, + bold: !1, + italic: !1, + fontsize: 12, + padding: 8, + highlightBorder: !1, + backgroundColor: O, + backgroundTransparency: 10, + backgroundVertInflate: 5, + backgroundHorzInflate: 5, + backgroundRoundRect: 4 + }); + var R; + this._labelRenderer.setData(B); + const N = this._labelRenderer.measure(), + F = Object(G.calculateLabelPosition)(N, this._p1, this._p2, E, this._pane + .height()); + this._labelRenderer.setPoints([F]) + } + renderer() { + if (null === this._p1 || null === this._p2) return null; + const e = new q.CompositeRenderer; + return e.append(this._bgRenderer), e.append(this._horzTrenRenderer), e.append(this + ._vertTrenRenderer), e.append(this._labelRenderer), e + } + } + var se = i("cPgM"); + class re extends se.ScaledPaneRenderer { + constructor(e) { + super(), this._data = e + } + hitTest(e) { + return null + } + _drawImpl(e) { + e.translate(this._data.x - this._data.width / 2, this._data.y - this._data + .height / 2), e.strokeStyle = "rgba(153,153,153,.3)", e.lineWidth = 2, e + .beginPath(), this._drawShackle(e), e.stroke(), e.closePath(), e + .strokeStyle = "rgba(153,153,153,.7)", e.lineWidth = 1, e.beginPath(), e + .rect(0, this._data.height - this._data.bodyHeight + .5, this._data.width, + this._data.bodyHeight), e.closePath(), e.stroke(), e.translate(0, -1), e + .strokeStyle = "#777", e.beginPath(), this._drawShackle(e), e.stroke(), e + .closePath(), e.fillStyle = "rgba(255,255,255,.7)", e.beginPath(), e.rect(1, + this._data.height - this._data.bodyHeight + 1.5, this._data.width - 2, + this._data.bodyHeight - 2), e.fill(), e.beginPath(), e.rect(.5, this + ._data.height - this._data.bodyHeight + 1, this._data.width - 1, this + ._data.bodyHeight - 1), e.stroke(), e.closePath(), e.fillStyle = "#777", + e.fillRect(this._data.width / 2 - .5, this._data.height - this._data + .bodyHeight / 2, 1, 2) + } + _drawShackle(e) { + const t = (this._data.width - 3) / 2, + i = this._data.height - this._data.bodyHeight; + e.moveTo(1.5, t), e.arc(this._data.width / 2, t, t, Math.PI, 2 * Math.PI), i > + t && (e.moveTo(1.5, t), e.lineTo(1.5, i), e.moveTo(this._data.width - 1.5, + t), e.lineTo(this._data.width - 1.5, i)) + } + } + class ne { + constructor(e, t, i) { + this._horzVisible = !1, this._source = e, this._pane = t, this._axis = i || "x" + } + update() {} + renderer(e, t) { + const i = this._source.visible && this._source.areLinesVisible, + r = Object(f.lockTimeAxis)().value(), + n = i && this._horzVisible, + o = i || r; + if ("y" === this._axis && !n || !o) return null; + const a = "y" === this._axis ? this._pane.width() - 4.5 : Object(s.ensureDefined)( + this._source.lockedX) + 1, + l = "y" === this._axis ? this._source.y : this._pane.height() - 5.5 - 1; + return new re({ + x: a, + y: l, + width: 9, + height: 11, + bodyHeight: 7 + }) + } + } + var oe = i("qFKp"), + ae = i("aIyQ"), + le = i.n(ae), + ce = i("GDWD"), + he = i("ivNn"), + ue = i("4miz"); + const de = window.t("n/a"); + class pe extends ue.b { + constructor(e) { + super(), + this._invalidated = !0, this._dateItem = new ue.a(window.t("Date"), ""), + this._timeItem = new ue.a(window.t("Time"), ""), this._model = e, this + ._items.push(this._dateItem), this._items.push(this._timeItem) + } + update() { + this._invalidated = !0 + } + items() { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._items + } + _updateImpl() { + const e = this._model.mainSeries().isDWM(); + if (this._timeItem.setVisible(!e), this._timeItem.setValue(de), this._dateItem + .setValue(de), this._model.timeScale().isEmpty()) return; + let t = this._model.crossHairSource().appliedIndex(); + if (!Object(he.isNumber)(t)) { + const e = this._model.mainSeries().data().last(); + if (null === e) return; + t = e.index + } + const i = this._model.timeScale().indexToUserTime(t); + null !== i && (this._dateItem.setValue(this._model.dateFormatter().format(i)), + e || this._timeItem.setValue(this._model.timeFormatter().format(i))) + } + } + var _e = i("cgFQ"); + class me extends _e.a { + constructor(e, t, i = !1) { + super(e), this._indexProvider = t, this._highlighted = i + } + _getBgColor() { + const e = this._model.isDark(); + return this._highlighted ? h.a.common : e ? l.colorsPalette[ + "color-cold-gray-750"] : l.colorsPalette["color-cold-gray-900"] + } + _getIndex() { + return this._model.crossHairSource().visible ? this._indexProvider() : null + } + } + var fe = i("585y"); + i.d(t, "Crosshair", (function() { + return be + })); + const ge = { + menuEnabled: !1, + menuForMainSourceOnly: !1, + disableTradingMenuActions: !1, + disableDrawHorizLineMenuAction: !1 + }; + class be extends n.DataSource { + constructor(e, t, i) { + super(), this.pane = null, this.price = NaN, this.index = NaN, this.visible = ! + 0, this.areLinesVisible = !0, this.x = NaN, this.y = NaN, this + ._measuringEnabled = new le.a, this._measurePane = null, this + ._startMeasurePoint = null, this._endMeasurePoint = null, this + ._lastValidMeasurePoint = null, this._isOnHoveredChartWidget = !1, this + ._selectPointMode = new a.a(!1), this._selectionPane = null, this + ._selectionView = new N(this), this._selectionStartPoint = null, this + ._measurePaneView = null, this._timeLockPaneView = null, this + ._priceAxisViews = new Map, this._panePriceAxisViews = new Map, this + ._startMeasurePriceAxisViews = new Map, this._endMeasurePriceAxisViews = + new Map, this._originX = NaN, this._originY = NaN, this._subscribed = !1, + this._movedDelegate = new le.a, this._pointSelectedDelegate = new le.a, this + ._requestedPoint = null, this._paneForRequestedPoint = null, this + ._volumeCalculator = null, this._model = e, this._options = Object + .assign({}, ge, i || {}), this._linesShouldBeHidden = this._model + .readOnly(), this._dataWindowView = new pe(e), this.setSelectionEnabled(!1); + const r = e => t => t === Object(s.ensureNotNull)(this._measurePane) + .defaultPriceScale() ? e() : null; + this._currentPosPriceProvider = e => { + const t = Object(s.ensureNotNull)(this.pane); + if (e === t.defaultPriceScale()) return this.price; + const i = Object(s.ensureNotNull)(t.defaultPriceScale().mainSource()) + .firstValue(); + if (null === i) return null; + const r = t.defaultPriceScale().priceToCoordinate(this.price, i), + n = Object(s.ensureNotNull)(e.mainSource()).firstValue(); + return null === n ? null : e.coordinateToPrice(r, n) + }, this._startMeasurePriceProvider = r(() => Object(s.ensureNotNull)(this + ._startMeasurePoint).price), + this._endMeasurePriceProvider = r(() => Object(s.ensureNotNull)(this + ._lastMeasurePoint()).price), this._properties = t; + this._timeAxisView = new me(e, () => this.appliedIndex(), !1), this + ._startMeasureTimeAxisView = new me(e, () => Object(s.ensureNotNull)(this + ._startMeasurePoint).index, !0), this._endMeasureTimeAxisView = new me( + e, () => Object(s.ensureNotNull)(this._lastMeasurePoint()).index, !0), e + .readOnly() || f.cursorTool.subscribe(e => this.areLinesVisible = + "arrow" !== e, { + callWithLast: !0 + }) + } + destroy() { + null !== this._volumeCalculator && this._volumeCalculator.destroy() + } + moved() { + return this._movedDelegate + } + originX() { + return this._originX + } + originY() { + return this._originY + } + saveOriginCoords(e, t) { + this._originX = e, this._originY = t + } + clearOriginCoords() { + this._originX = NaN, this._originY = NaN + } + currentPoint() { + return new r.Point(this.x, this.y) + } + model() { + return this._model + } + appliedIndex() { + return Number.isFinite(this.lockedIndex) ? this.lockedIndex : this.index + } + startMeasurePoint() { + return this._startMeasurePoint || null + } + endMeasurePoint() { + return this._endMeasurePoint || null + } + measureVolume() { + if (null === this._volumeCalculator) return NaN; + const [e, t] = this.measurePoints(); + return void 0 === t ? NaN : this._volumeCalculator.volume(e.index, t.index) + } + measurePane() { + return this._measurePane || null + } + startMeasuring(e, t) { + this._startMeasurePoint = e, this._measurePane = t, this._measuringEnabled.fire( + !0), t.containsMainSeries() && (Object(s.assert)(null === this + ._volumeCalculator), this._volumeCalculator = new fe.a(this.model() + .mainSeries())) + } + finishMeasure(e) { + this._endMeasurePoint = e + } + clearMeasure() { + delete this._measurePane, delete this._startMeasurePoint, delete this + ._endMeasurePoint, delete this._lastValidMeasurePoint, this._model + .lightUpdate(), null !== this._volumeCalculator && (this._volumeCalculator + .destroy(), this._volumeCalculator = null), this._measuringEnabled.fire( + !1) + } + measuringEnabled() { + return this._measuringEnabled + } + measurePoints() { + this.updateAllViews(); + const e = [Object(s.ensureNotNull)(this._startMeasurePoint)], + t = this._lastMeasurePoint(); + return null !== t && e.push(t), e + } + startSelection(e) { + this._selectionStartPoint = this.currentLogicalPoint(), this._selectionPane = e + } + clearSelection() { + this._selectionStartPoint = null, this._selectionPane = null + } + selection() { + return this._selectionStartPoint ? { + p1: this._selectionStartPoint, + p2: this.currentLogicalPoint() + } : null + } + currentLogicalPoint() { + return { + index: this.appliedIndex(), + price: this.price + } + } + selectPointMode() { + return this._selectPointMode + } + cancelRequestSelectPoint() { + this._selectPointMode.value() && this._setSelectPointModeState(!1) + } + requestSelectPoint(e, t) { + Object(s.assert)(!this._selectPointMode.value(), "Point already requested"), + t && (Object(s.assert)(-1 !== this._model.panes().indexOf(t), + "Chartmodel doesn't contains specified pane"), this + ._paneForRequestedPoint = t, this._model.panesCollectionChanged() + .subscribe(this, this._paneCollectionChanged)), this._requestedPoint = + e, this._setSelectPointModeState(!0) + } + onPointSelected() { + return this._pointSelectedDelegate + } + trySelectCurrentPoint() { + const e = Object(s.ensureNotNull)(this._requestedPoint); + if (!this._model.mainSeries().bars().contains(this.index) && "price" !== e) + return; + const t = Object(s.ensureNotNull)(this.pane); + if (this._paneForRequestedPoint && this._paneForRequestedPoint !== t) return; + let i, r; + if ("price" === e || (i = this._model.timeScale().indexToTimePoint(this.index), + null !== i)) { + if ("time" !== e) { + const e = t.mainDataSource(); + if (null === e) return; + const i = e.firstValue(), + s = e.priceScale(); + if (null === i || null === s) return; + r = s.coordinateToPrice(this.y, i) + } + this._setSelectPointModeState(!1), this._pointSelectedDelegate.fire({ + time: i, + price: r + }, t) + } + } + isOnHoveredChartWidget() { + return this._isOnHoveredChartWidget + } + setOnHoveredChartWidget(e) { + this._isOnHoveredChartWidget = e + } + clearPosition() { + this.visible = !1, this.index = NaN, this.price = NaN, this.x = NaN, this.y = + NaN, this.pane = null, this.clearOriginCoords() + } + setPosition(e, t, i) { + return this._subscribed || (this._model.mainSeries().onRestarted().subscribe( + this, this.clearMeasure), this._subscribed = !0), this + .setLockedPosition(i), this.visible = !0, this._tryToUpdateViews(e, t, i) + } + setLinesShouldBeHidden(e) { + this._linesShouldBeHidden = e + } + linesShouldBeHidden() { + return this._linesShouldBeHidden + } + handleContextMenuEvent(e) { + this._selectPointMode.value() && this._setSelectPointModeState(!1) + } + properties() { + return this._properties + } + priceAxisViews(e, t) { + const i = null === this._requestedPoint || "time" !== this._requestedPoint || ! + this._isOnHoveredChartWidget, + s = []; + return this.pane === e && i && s.push(this._createPriceAxisViewOnDemand(this + ._priceAxisViews, this._panePriceAxisViews, e, t, this + ._currentPosPriceProvider, _, !0)[0]), this._startMeasurePoint && s + .push(this._createPriceAxisViewOnDemand(this._startMeasurePriceAxisViews, + null, e, t, this._startMeasurePriceProvider, m)[0]), this + ._lastMeasurePoint() && s.push(this._createPriceAxisViewOnDemand(this + ._endMeasurePriceAxisViews, null, e, t, this + ._endMeasurePriceProvider, m)[0]), s + } + timeAxisViews() { + const e = [], + t = null === this._requestedPoint || "price" !== this._requestedPoint || ! + this._isOnHoveredChartWidget; + return !this._linesShouldBeHidden && (this.visible || Object(f.lockTimeAxis)() + .value()) && t && e.push(this._timeAxisView), this._startMeasurePoint && + e.push(this._startMeasureTimeAxisView), this._lastMeasurePoint() && e.push( + this._endMeasureTimeAxisView), e + } + paneViews(e) { + if (void 0 === e) return null; + const t = [new V(this, e)]; + if (e === this._selectionPane && t.push(this._selectionView), e === this + ._measurePane && (null === this._measurePaneView && (this._measurePaneView = + new ie(this, e)), this._measurePaneView.update(), t.push(this + ._measurePaneView)), ce.addPlusButtonProperty.value()) { + const i = e === this.pane, + s = !oe.CheckMobile.any() || window.screen.width >= 320, + r = f.tool.value(), + n = Object(E.isLineToolName)(r), + o = null !== this._model.lineBeingEdited() || null !== this._model + .lineBeingCreated() || this._model.sourcesBeingMoved().length > 0 || + null !== this._model.customSourceBeingMoved() || Object(f.toolIsMeasure) + (r); + if (i && this._isOnHoveredChartWidget && !this._selectPointMode.value() && + s && !n && !o) { + const i = e.mainDataSource(); + if (null !== i) { + const s = i.priceScale(); + if (null !== s) { + const i = this._createPriceAxisViewOnDemand(this + ._priceAxisViews, this._panePriceAxisViews, e, s, this + ._currentPosPriceProvider, _, !0)[1]; + null !== i && t.push(i) + } + } + } + } + return Object(f.lockTimeAxis)().value() && (null === this._timeLockPaneView && ( + this._timeLockPaneView = new ne(this, e)), t.push(this + ._timeLockPaneView)), t + } + dataWindowView() { + return this._dataWindowView + } + updateAllViews() { + this._priceAxisViews.forEach(e => { + e.forEach(e => e.update()) + }), this._panePriceAxisViews.forEach(e => { + e.forEach(e => e.update()) + }), this._startMeasurePoint && (this._startMeasurePriceAxisViews.forEach( + e => { + e.forEach(e => e.update()) + }), this._startMeasureTimeAxisView.update()), this + ._lastMeasurePoint() && (this._endMeasurePriceAxisViews.forEach(e => { + e.forEach(e => e.update()) + }), this._endMeasureTimeAxisView.update()), this._timeAxisView.update(), + this._selectionView.update(), this._dataWindowView.update() + } + setLockedPosition(e) { + delete this.lockedIndex, delete this.lockedX, e !== this._measurePane && Object( + f.lockTimeAxis)().value() && (this.lockedIndex = this._model.timeScale() + .points().roughIndex(f.lockTimeAxisTime.value()), null !== this + .lockedIndex && (this.lockedX = this._model.timeScale() + .indexToCoordinate(this.lockedIndex))) + } + isMenuEnabled() { + return this._options.menuEnabled + } + isHoveredEnabled() { + return ce.addPlusButtonProperty.value() + } + isHovered() { + return this._model.hoveredSource() === this + } + pointToSelect() { + return this._requestedPoint + } + paneForPointSelect() { + return this._paneForRequestedPoint + } + _lastMeasurePoint() { + return this._endMeasurePoint ? this._endMeasurePoint : (null !== this.pane && + this._measurePane === this.pane && (this._lastValidMeasurePoint = { + price: this._model.magnet().align(this.price, this.index, this + .pane), + index: this.index + }), this._lastValidMeasurePoint || null) + } + _createPriceAxisViewOnDemand(e, t, i, r, n, o, a = !1) { + let l = e.get(i), + c = null !== t ? t.get(i) : void 0; + void 0 === l && (l = new Map, e.set(i, l), this._options.menuEnabled && null !== + t && (c = new Map, t.set(i, c)), a && i.onDestroyed().subscribe(this, + () => this._onPaneDestroyed(i))); + let h = l.get(r); + if (void 0 === h) { + if (h = new o(this, r, n), l.set(r, h), void 0 !== c) { + const e = new C(h, this, r, this._model, this._options); + c.set(r, e) + } + a && r.lastSourceRemoved().subscribe(this, () => this._onPriceScaleCleared( + r)) + } + let u = null; + return void 0 !== c && (u = Object(s.ensureDefined)(c.get(r))), [h, u] + } + _onPaneDestroyed(e) { + e.onDestroyed().unsubscribeAll(this), this._priceAxisViews.delete(e), this + ._panePriceAxisViews.delete(e), this._startMeasurePriceAxisViews.delete(e), + this._endMeasurePriceAxisViews.delete(e) + } + _onPriceScaleCleared(e) { + e.lastSourceRemoved().unsubscribeAll(this), this._priceAxisViews.forEach(t => t + .delete(e)), this._panePriceAxisViews.forEach(t => t.delete(e)), this + ._startMeasurePriceAxisViews.forEach(t => t.delete(e)), this + ._endMeasurePriceAxisViews.forEach(t => t.delete(e)) + } + _tryToUpdateViews(e, t, i) { + return !!this._tryToUpdateData(e, t, i) && (this.updateAllViews(), this + ._movedDelegate.fire({ + index: this.index, + price: this.price + }), !0) + } + _tryToUpdateData(e, t, i) { + const r = this.x, + n = this.y, + o = this.price, + a = this.index, + l = this.pane, + c = this._priceScaleByPane(i); + if (this.index = e, this.x = isNaN(e) ? NaN : this._model.timeScale() + .indexToCoordinate(e), null !== c && null !== i) { + this.pane = i, this.price = t; + const e = Object(s.ensureNotNull)(i.mainDataSource()).firstValue(); + this.y = null === e ? NaN : c.priceToCoordinate(t, e) + } else this.pane = null, this.price = NaN, this.y = NaN; + return r !== this.x || n !== this.y || a !== this.index || o !== this.price || + l !== this.pane + } + _priceScaleByPane(e) { + return e && !e.defaultPriceScale().isEmpty() ? e.defaultPriceScale() : null + } + _setSelectPointModeState(e) { + e || (this._requestedPoint = null, this._paneForRequestedPoint && (this + ._paneForRequestedPoint = null, this._model.panesCollectionChanged() + .unsubscribe(this, this._paneCollectionChanged))), this._selectPointMode + .setValue(e), this._model.lightUpdate() + } + _paneCollectionChanged(e) { + const t = this._paneForRequestedPoint; + null !== t && -1 === e.indexOf(t) && this.cancelRequestSelectPoint() + } + } + }, + "22xp": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("9uLv"), + n = i("txPx"), + o = i("//lZ"), + a = i("aIyQ"), + l = i.n(a), + c = i("Kxc7"), + h = i("Hr11"), + u = i("ogJP"), + d = i("FIi8"), + p = i("ZJKN"); + class _ { + constructor(e, t) { + Object(s.assert)(e <= t, + "The left value should be greater than or equal to the right value"), this + ._left = e, this._right = t + } + left() { + return this._left + } + right() { + return this._right + } + length() { + return this._right - this._left + 1 + } + contains(e) { + return this._left <= e && e <= this._right + } + equals(e) { + return this._left === e.left() && this._right === e.right() + } + static compare(e, t) { + return null === e || null === t ? e === t : e.equals(t) + } + } + const m = Object(n.getLogger)("Chart.TimePoints"); + class f { + constructor() { + this._zoffset = 0, this._items = [] + } + clear() { + this._zoffset = 0, this._items = [] + } + size() { + return this._items.length + } + firstIndex() { + return this._offsetToIndex(0) + } + lastIndex() { + return this._offsetToIndex(this._items.length - 1) + } + merge(e, t, i) { + if (0 === i.length) return m.logError( + "merge: 'values' does not contain any time points"), []; + if (t > this._zoffset && e + t > 0) return m.logError( + "merge: when the first time point index is updated, we should fill the time points starting from the first one" + ), []; + if (0 === this._items.length) return this._items = i, this._zoffset = t, [{ + change: "rebuild", + index: this._validOffsetToIndex(0) + }]; + const s = e + this._zoffset; + if (s < 0) { + const r = Math.abs(s); + if (i.length < r) return m.logError( + "merge: 'values' does not contain enough time points to fill in the new items. 'index': " + + e.toString() + ", previous 'zoffset': " + this._zoffset.toString() + + ", new 'zoffset': " + t.toString() + ", 'values.length': " + i + .length), []; + this._items = new Array(r).concat(this._items), this._zoffset = t; + for (let s = 0; s < i.length; ++s) this._items[e + s + t] = i[s]; + return [{ + change: "rebuild", + index: this._validOffsetToIndex(0) + }] + } + const r = []; + let n = s; + for (; n < this._items.length && n - s < i.length; ++n) this._items[n] = i[n - s], r + .push({ + change: "update", + index: this._validOffsetToIndex(n), + value: i[n - s] + }); + const o = s + i.length; + if (o > this._items.length) { + const e = o - this._items.length; + for (let t = n; t < n + e; ++t) { + const e = this._items.length; + this._items.push(i[t - s]), r.push({ + change: "append", + index: this._validOffsetToIndex(e), + value: i[t - s] + }) + } + } else { + for (let e = o; e < this._items.length; ++e) r.push({ + change: "remove", + index: this._validOffsetToIndex(e), + value: this._items[e] + }); + this._items.length = o + } + return this._zoffset = t, r + } + addTail(e, t) { + for (let i = t ? 1 : 0; i < e.length; i++) this._items.push(e[i]) + } + remove(e) { + const t = this._indexToOffset(e); + if (null === t) return []; + const i = this._items.splice(t), + s = []; + for (let t = 0; t < i.length; t++) s.push({ + change: "remove", + index: e + t, + value: i[t] + }); + return s + } + valueAt(e) { + const t = this._indexToOffset(e); + return null !== t ? this._items[t] : null + } + indexOf(e, t) { + if (this._items.length < 1) return null; + if (e > this._items[this._items.length - 1]) return t ? this._validOffsetToIndex( + this._items.length - 1) : null; + for (let i = 0; i < this._items.length; ++i) { + if (e === this._items[i]) return this._validOffsetToIndex(i); + if (e < this._items[i]) return t ? this._validOffsetToIndex(i) : null + } + return null + } + state() { + return { + items: this._items, + zoffset: this._zoffset + } + } + restoreState(e) { + null !== e && (this._items = e.items, this._zoffset = e.zoffset) + } + roughTime(e, t = null) { + const i = this.valueAt(e); + if (null !== i) return i; + const s = this._items; + if (!s.length || s.length < 2) return null; + const r = s.length - 1, + n = this._validOffsetToIndex(0), + o = this._validOffsetToIndex(r), + a = s[0], + l = s[r], + c = (l - a) / (o - n); + if (e < n) { + return a - (n - e) * c + } + if (e > o) { + const i = e - o; + if (i < 500 && null != t) return t(l, i); + return l + i * c + } + return null + } + roughIndex(e, t = null) { + const i = this._items; + if (!i.length || i.length < 2) return null; + const s = i.length - 1, + r = this._validOffsetToIndex(0), + n = this._validOffsetToIndex(s), + o = i[0], + a = i[s]; + if (e >= o && e <= a) return this.closestIndexLeft(e); + const l = (a - o) / (n - r); + if (e < o) { + const t = o - e; + return r - Math.round(t / l) + } + if (e > a) { + const i = e - a; + let s = Math.trunc(i / l); + if (s < 500 && null !== t) { + const i = t(a, e); + i.success && (s = i.result) + } + return n + s + } + return null + } + closestIndexLeft(e) { + const t = this._items; + if (!t.length) return null; + if (Number.isNaN(e)) return null; + let i = t.length - 1; + if (e >= t[i]) return this._validOffsetToIndex(i); + let s = 0; + const r = t[s]; + if (e < r) return null; + if (e === r) return this._validOffsetToIndex(s); + for (; i > s + 1;) { + const r = s + i >> 1, + n = t[r]; + if (n > e) i = r; + else { + if (!(n < e)) return n === e ? this._validOffsetToIndex(r) : null; + s = r + } + } + return this._validOffsetToIndex(s) + } + _validOffsetToIndex(e) { + return e - this._zoffset + } + _offsetToIndex(e) { + return 0 <= e && e < this.size() ? this._validOffsetToIndex(e) : null + } + _indexToOffset(e) { + const t = e + this._zoffset; + return 0 <= t && t < this.size() ? t : null + } + } + var g = i("tc+8"), + b = i.n(g); + const v = new Map([ + [0, .1], + [11, .1], + [1, .35], + [9, .35], + [12, .35], + [8, .35] + ]); + class S { + constructor(e, t) { + this._styleSpecificRanges = new Map, this._logicalRange = e, this._defaultStyle = t + } + strictRange(e) { + if (null === this._logicalRange) return null; + void 0 === e && (e = this._defaultStyle); + let t = this._styleSpecificRanges.get(e); + if (void 0 === t) { + const i = (v.get(e) || 0) / 2; + t = new p.BarsRange(Math.floor(this._logicalRange.left() + i), Math.ceil(this + ._logicalRange.right() - i)), this._styleSpecificRanges.set(e, t) + } + return t + } + logicalRange() { + return this._logicalRange + } + isValid() { + return null !== this._logicalRange + } + static invalid() { + return new S(null, 1) + } + } + var y = i("Ocx9"), + w = i("GhVi"), + P = i("8OdW"); + class C { + constructor(e, t = 50) { + this._actualSize = 0, this._usageTick = 1, this._oldestTick = 1, this._cache = + new Map, this._tick2Labels = new Map, this._format = e, this._maxSize = t + } + format(e) { + const t = this._cache.get(e.valueOf()); + if (void 0 !== t) return t.string; + if (this._actualSize === this._maxSize) { + const e = this._tick2Labels.get(this._oldestTick); + this._tick2Labels.delete(this._oldestTick), this._cache.delete(Object(s + .ensureDefined)(e)), this._oldestTick++, this._actualSize-- + } + const i = this._format(e); + return this._cache.set(e.valueOf(), { + string: i, + tick: this._usageTick + }), this._tick2Labels.set(this._usageTick, e.valueOf()), this._actualSize++, + this._usageTick++, i + } + } + var x = i("iboI"), + T = i("YFKU"); + let I; + var M = i("kcTO"); + i.d(t, "TimeScale", (function() { + return k + })); + const O = { + preserveBarSpacing: !1, + lockVisibleTimeRangeOnResize: !1, + rightBarStaysOnScroll: !0, + minBarSpacing: .5 + }, + L = c.enabled("low_density_bars"), + A = L ? 1 : 5, + E = Object(n.getLogger)("Chart.TimeScale"); + class k { + constructor(e, t) { + this._width = 0, this._widthChanged = new l.a, this._rightOffset = 10, this + ._rightOffsetChanged = new l.a, this._maxRightOffsetChanged = new l.a, this + ._defaultRightOffsetProperty = new b.a(10), this._baseIndex = null, this + ._leftEdgeIndex = null, this._barSpacingChanged = new l.a, this._barSpacing = 6, + this._visibleBars = S.invalid(), this._visibleBarsInvalidated = !0, this + ._visibleBarsChanged = new l.a, this._logicalRangeChanged = new l.a, this + ._points = new f, this._tickMarks = new w.Tickmarks, this._onScroll = new l.a, + this._resetDelegate = new l.a, this._scrollStartPoint = null, this + ._scaleStartPoint = null, this._commonTransitionStartState = null, this + ._formattedBySpan = new Map, this._requestingMoreData = !1, this + ._requestedTickmarksCount = 0, this._endOfData = !1, this._options = Object(d + .deepExtend)({}, O, t), this._model = e, this._scalesProperties = e + .properties().scalesProperties, this._defaultRightOffsetProperty.listeners() + .subscribe(this, e => { + this.setRightOffset(e.value()) + }), this._options.preserveBarSpacing && (this._barSpacing = this + ._scalesProperties.childs().barSpacing.value() || 6), this + ._barSpacingChanged.subscribe(this, this._maxRightOffsetOnChanged), this + ._widthChanged.subscribe(this, this._maxRightOffsetOnChanged) + } + destroy() { + this._barSpacingChanged.unsubscribeAll(this), this._barSpacingChanged.destroy(), + this._widthChanged.unsubscribeAll(this), this._widthChanged.destroy() + } + isEmpty() { + return 0 === this._width || 0 === this._points.size() + } + update(e, t, i, s) { + this._visibleBarsInvalidated = !0, i.length > 0 && this._points.merge(e, t, i), this + ._tickMarks.merge(s), this._correctOffset() + } + addTail(e, t, i) { + this._tickMarks.removeTail(t); + const r = e.params, + n = Object(s.ensureDefined)(this._tickMarks.maxIndex) + (i ? 0 : 1); + for (let e = 0; e < r.marks.length; e++) r.marks[e].index = n + e; + this._tickMarks.addTail(r.marks), this._points.addTail(r.changes, i); + const o = this._rightOffset - r.changes.length; + this._updateRightOffset(o) + } + state(e) { + const t = { + m_barSpacing: this.barSpacing(), + m_rightOffset: e ? this._rightOffset : this._defaultRightOffsetProperty + .value() + }; + return e && (t.points = this._points.state(), t.tickmarks = this._tickMarks.state(), + t.width = this._width), t + } + restoreState(e, t) { + if (void 0 === e.m_barSpacing) return void E.logDebug( + "restoreState: invalid state"); + if (void 0 === e.m_rightOffset) return void E.logDebug( + "restoreState: invalid state"); + let i = e.m_barSpacing; + const s = e.m_rightOffset < 0 && !t ? this.rightOffsetDefaultValue() : e + .m_rightOffset, + r = s < 0 ? this.rightOffsetDefaultValue() : Math.round(s); + this._defaultRightOffsetProperty.setValue(r), this._rightOffset = s, t && (this + ._requestedTickmarksCount = 1 / 0, this._endOfData = !0, this._points + .restoreState(e.points || null), + this._tickMarks.restoreState(e.tickmarks || null), e.width && this._width > + 0 && (i *= this._width / e.width)), this._tryToUpdateBarSpacing(this + ._barSpacing, i), this._correctOffset(), this._rightOffsetChanged.fire(this + ._rightOffset) + } + marks() { + if (this.isEmpty()) return null; + const e = this._barSpacing, + t = 5 * ((this._scalesProperties.childs().fontSize.value() || 0) + 4), + i = Math.round(t / e), + r = Object(s.ensureNotNull)(this.visibleBarsStrictRange()), + n = Math.max(r.firstBar(), r.firstBar() - i), + o = Math.max(r.lastBar(), r.lastBar() - i), + a = this._tickMarks.build(e, t), + l = []; + for (const e of a) { + if (!(n <= e.index && e.index <= o)) continue; + const t = this._tickMarks.indexToTime(e.index); + null !== t && l.push({ + coord: this.indexToCoordinate(e.index), + label: this.formatLabel(t, e.span), + span: e.span, + major: e.label >= P.DAY_SPAN + }) + } + return l + } + visibleBarsStrictRange() { + return this._visibleBarsInvalidated && (this._visibleBarsInvalidated = !1, this + ._updateVisibleBars()), this._visibleBars.strictRange() + } + visibleBarsStrictRangeChanged() { + return this._visibleBarsChanged + } + logicalRangeChanged() { + return this._logicalRangeChanged + } + tickMarks() { + return this._tickMarks + } + points() { + return this._points + } + width() { + return this._width + } + setWidth(e, t) { + if (!Number.isFinite(e) || e <= 0) return void E.logWarn( + "setWidth: invalid argument: " + e); + if (this._width === e) return; + if (this._visibleBarsInvalidated = !0, (t || this._options + .lockVisibleTimeRangeOnResize) && this._width) { + const t = this._barSpacing * e / this._width; + this._tryToUpdateBarSpacing(this._barSpacing, t) + } + if (null !== this._leftEdgeIndex) { + if (Object(s.ensureNotNull)(this.visibleBarsStrictRange()).firstBar() <= this + ._leftEdgeIndex) { + const t = this._width - e; + this._rightOffset -= Math.round(t / this._barSpacing) + 1 + } + } + this._width = e, this._widthChanged.fire(e); + const i = this._rightOffset; + this._correctOffset(), this._rightOffset !== i && this._rightOffsetChanged.fire(this + ._rightOffset), this._requestMoreData() + } + setLeftEdgeFix(e) { + this._leftEdgeIndex = e; + const t = this.visibleBarsStrictRange(); + if (null === t) return; + const i = t.firstBar() - e; + if (i < 0) { + const e = this._rightOffset - i - 1; + this.scrollToOffsetAnimated(e, 500) + } + } + indexToCoordinate(e) { + if (this.isEmpty()) return 0; + if (!Object(u.isInteger)(e)) return 0; + const t = this.baseIndex() + this._rightOffset - e; + return this._width - (t + .5) * this._barSpacing - 1 + } + indexToUserTime(e) { + return this._tickMarks.indexToTime(e) + } + timePointToIndex(e) { + return this._points.indexOf(e, !0) + } + indexToTimePoint(e) { + return this._points.valueAt(e) + } + timeToCoordinate(e) { + const t = this._points.closestIndexLeft(e); + if (null === t) return null; + const i = Object(s.ensureNotNull)(this._points.valueAt(t)), + r = this.indexToCoordinate(t); + if (r <= 0 || r >= this._width) return null; + const n = this.barSpacing(), + o = this.baseIndex(), + a = r + (e - i) / (Object(s.ensureNotNull)(this._points.valueAt(o)) - Object(s + .ensureNotNull)(this._points.valueAt(o - 1))) * n + 1; + return a <= 0 || a >= this._width ? null : a + } + barIndexesToCoordinates(e) { + const t = this.baseIndex(); + for (const i of e) { + const e = i.time, + s = t + this._rightOffset - e, + r = this._width - (s + .5) * this._barSpacing - 1; + i.time = r, i.exactTime = r + } + } + timedValuesToCoordinates(e) { + const t = this.baseIndex() + this._rightOffset, + i = this._width - t * this._barSpacing - .5 * this._barSpacing - 1; + for (const t of e) t.x = i + t.x * this._barSpacing + } + indexesToCoordinates(e, t) { + if (this.isEmpty()) return; + void 0 === t && (t = e.length); + const i = this.baseIndex() + this._rightOffset, + s = this._width - i * this._barSpacing - .5 * this._barSpacing - 1, + r = this._barSpacing, + n = e; + for (let i = 0; i < t; ++i) Object(u.isInteger)(e[i]) ? n[i] = s + e[i] * r : n[i] = + 0 + } + rightOffsetForTimePoint(e) { + const t = this.timeToCoordinate(e); + return null === t ? null : this._rightOffsetForCoordinate(t) + } + scrollToRealtime(e, t) { + let i = this._defaultRightOffsetProperty.value(); + i < 0 && (i = this.rightOffsetDefaultValue()); + const s = () => { + void 0 !== t && t(), this._requestMoreData() + }; + if (e) { + const e = this._rightOffset, + t = this.maxRightOffset(); + t > 0 && i > t && (i = t); + const n = this._model; + Object(o.doAnimate)({ + from: e, + to: i, + duration: 1e3, + easing: r.c.easeInOutQuint, + onComplete: s, + onStep: (e, t) => { + this._visibleBarsInvalidated = !0, this._updateRightOffset( + t), n.recalculateAllPanes(), n.lightUpdate(), n + .recalcVisibleRangeStudies() + } + }) + } else this._visibleBarsInvalidated = !0, this._updateRightOffset(i), s() + } + scrollToOffsetAnimated(e, t) { + if (!isFinite(e)) throw new RangeError( + "offset is required and must be finite number"); + const i = void 0 === t ? 400 : t; + if (!isFinite(i) || i <= 0) throw new RangeError( + "animationDuration (optional) must be finite positive number"); + const s = this._rightOffset, + r = Date.now(), + n = () => { + this._visibleBarsInvalidated = !0; + const t = (Date.now() - r) / i; + if (t >= 1) return this._updateRightOffset(e), this + ._visibleBarsInvalidated = !0, this._model.recalculateAllPanes(), + void this._model.lightUpdate(); + const o = s + (e - s) * t; + this._updateRightOffset(o), this._model.recalculateAllPanes(), setTimeout(n, + 20) + }; + n() + } + defaultRightOffsetProperty() { + return this._defaultRightOffsetProperty + } + rightOffsetDefaultValue() { + return 10 + } + barSpacing() { + return this._barSpacing + } + setBarSpacing(e) { + Number.isFinite(e) ? (e = this.getValidBarSpacing(e), this._tryToUpdateBarSpacing( + this._barSpacing, e) && (this._correctOffset(), this._options + .preserveBarSpacing && (Object(y.saveDefaultProperties)(!0), this + ._scalesProperties.childs().barSpacing.setValue(this._barSpacing), + Object(y.saveDefaultProperties)(!1)))) : E.logWarn( + "setBarSpacing: invalid argument: " + e) + } + barSpacingChanged() { + return this._barSpacingChanged + } + getValidBarSpacing(e) { + return null == e && (e = this.barSpacing()), e < this.minBarSpacing() ? this + .minBarSpacing() : e > this.maxBarSpacing() ? this.maxBarSpacing() : e + } + isValidBarSpacing(e) { + return e >= this.minBarSpacing() && e <= this.maxBarSpacing() + } + preserveBarSpacing() { + return this._options.preserveBarSpacing + } + normalizeBarIndex(e) { + let t = 0, + i = 0; + const r = this.baseIndex(), + n = Object(s.ensureNotNull)(this._points.firstIndex()); + return e < n ? (t = Object(s.ensureNotNull)(this._points.valueAt(n)), i = e - n) : + e > r ? (t = Object(s.ensureNotNull)(this._points.valueAt(r)), i = e - r) : (t = + Object(s.ensureNotNull)(this._points.valueAt(e)), i = 0), { + time_t: t, + offset: i + } + } + denormalizeTimePoint(e) { + const t = this._points.indexOf(e.time_t, !1); + if (null !== t) return t + e.offset + } + rightOffset() { + return this._rightOffset + } + rightOffsetChanged() { + return this._rightOffsetChanged + } + minRightOffset() { + const e = this.points().firstIndex(), + t = this._baseIndex; + if (null === e || null === t) return null; + if (null !== this._leftEdgeIndex) { + const e = this.width() / this._barSpacing; + return this._leftEdgeIndex - t + e - 1 + } + return e - t - 1 + A + } + maxRightOffset() { + return this.width() / this._barSpacing - A + } + maxRightOffsetChanged() { + return this._maxRightOffsetChanged + } + onReset() { + return this._resetDelegate + } + scrollStartPoint() { + return this._scrollStartPoint + } + baseIndex() { + return this._baseIndex || 0 + } + zoom(e, t, i) { + if (!Number.isFinite(e) || !Number.isFinite(t)) return void E.logWarn( + `zoom: invalid arguments: ${e}, ${t}, ${i}`); + const s = this.coordinateToIndex(e), + r = this.barSpacing(), + n = r + t * (r / 10); + this.setBarSpacing(n); + (void 0 !== i ? !i : this._options.rightBarStaysOnScroll) || this.setRightOffset( + this.rightOffset() - .5 + (s - this._coordinateToFloatIndex(e))), this + ._requestMoreData() + } + zoomToBarsRange(e, t) { + if (null !== this._leftEdgeIndex && (e = Math.max(e, this._leftEdgeIndex)), t <= e) + return; + const i = this.baseIndex(), + s = this._rightOffset; + this._rightOffset = t - i; + const r = Math.max(t - e + 1, A); + this.setBarSpacing(this.width() / r), this._visibleBarsInvalidated = !0, this + ._correctOffset(), this._rightOffset !== s && this._rightOffsetChanged.fire(this + ._rightOffset), this._requestMoreData() + } + coordinateToIndex(e) { + return Math.ceil(this._coordinateToFloatIndex(e)) + } + coordinateToVisibleIndex(e) { + let t; + if (0 === e) { + const e = this._coordinateToFloatIndex(-1); + t = Math.floor(e) + 1 + } else t = this.coordinateToIndex(e); + const i = this.visibleBarsStrictRange(); + return null === i || i.contains(t) || (t = Math.min(Math.max(i.firstBar(), t), i + .lastBar())), t + } + canZoomIn() { + return this.barSpacing() < this.maxBarSpacing() + } + canZoomOut() { + return this.barSpacing() > this._options.minBarSpacing + } + minBarSpacing() { + return this._options.minBarSpacing + } + maxBarSpacing() { + return L ? this.width() : 50 + } + resetRightOffset() { + this.setRightOffset(this._defaultRightOffsetProperty.value()) + } + reset() { + this._visibleBarsInvalidated = !0, this._points = new f, this._scrollStartPoint = + null, this._scaleStartPoint = null, this._clearCommonTransitionsStartState(), + this._tickMarks.reset(), this._leftEdgeIndex = null, this._resetDelegate.fire(), + this.disconnect() + } + disconnect() { + this._requestingMoreData = !1, this._requestedTickmarksCount = 0, this + ._endOfData = !1 + } + setBaseIndex(e) { + Number.isFinite(e) ? (this._visibleBarsInvalidated = !0, this._baseIndex = e, this + ._correctOffset()) : E.logDebug("setBaseIndex: invalid argument: " + e) + } + setRightOffset(e) { + Number.isFinite(e) ? (this._visibleBarsInvalidated = !0, this._updateRightOffset( + e)) : E.logWarn("setRightOffset: invalid argument: " + e) + } + correctBarSpacing() { + this.isEmpty() || this.points().size() < this.width() / this.barSpacing() && (this + .setRightOffset(this._defaultRightOffsetProperty.value()), this + .setBarSpacing(this.width() / (this.points().size() + this.rightOffset()))) + } + logicalRange() { + return this._visibleBarsInvalidated && (this._visibleBarsInvalidated = !1, this + ._updateVisibleBars()), this._visibleBars.logicalRange() + } + restoreDefault() { + this._visibleBarsInvalidated = !0, this.setBarSpacing(6), this.resetRightOffset(), + this._requestMoreData() + } + restoreRightOffsetPropertyToDefault() { + this._defaultRightOffsetProperty.setValue(this.rightOffsetDefaultValue()) + } + startScale(e) { + this._scrollStartPoint && this.endScroll(), + null === this._scaleStartPoint && null === this._commonTransitionStartState && ( + this.isEmpty() || (this._scaleStartPoint = e, this + ._saveCommonTransitionsStartState())) + } + scaleTo(e) { + if (null === this._commonTransitionStartState) return; + const t = Object(h.clamp)(this._width - e, 0, this._width), + i = Object(h.clamp)(this._width - Object(s.ensureNotNull)(this + ._scaleStartPoint), 0, this._width); + 0 !== t && 0 !== i && this.setBarSpacing(this._commonTransitionStartState + .barSpacing * t / i) + } + endScale() { + null !== this._scaleStartPoint && (this._scaleStartPoint = null, this + ._clearCommonTransitionsStartState(), this._requestMoreData()) + } + startScroll(e) { + null === this._scrollStartPoint && null === this._commonTransitionStartState && ( + this.isEmpty() || (this._scrollStartPoint = e, this + ._saveCommonTransitionsStartState())) + } + scrollTo(e) { + if (this._visibleBarsInvalidated = !0, null === this._scrollStartPoint) return; + const t = (this._scrollStartPoint - e) / this.barSpacing(), + i = Object(s.ensureNotNull)(this._commonTransitionStartState).rightOffset + t; + this._updateRightOffset(i), this._onScroll.fire() + } + endScroll() { + null !== this._scrollStartPoint && (this._scrollStartPoint = null, this + ._clearCommonTransitionsStartState(), this._requestMoreData()) + } + formatLabel(e, t) { + let i = this._formattedBySpan.get(t); + return void 0 === i && (i = new C(e => this.formatLabelImpl(e, t)), this + ._formattedBySpan.set(t, i)), i.format(new Date(e)) + } + formatLabelImpl(e, t) { + if (!(e && e instanceof Date)) return "incorrect time"; + const i = function(e, t) { + if (e < P.MINUTE_SPAN && t) return "TimeWithSeconds"; + if (e < P.DAY_SPAN && t) return "Time"; + if (e < P.WEEK_SPAN) return "DayOfMonth"; + if (e < P.MONTH_SPAN) return "DayOfMonth"; + if (e < P.YEAR_SPAN) return "Month"; + return "Year" + }(t, !this._model.mainSeries().isDWM()); + return null !== x.customFormatters.tickMarkFormatter ? x.customFormatters + .tickMarkFormatter(e, i) : function(e, t) { + switch (t) { + case "TimeWithSeconds": + return Object(M.numberToStringWithLeadingZero)(e.getUTCHours(), 2) + + ":" + Object(M.numberToStringWithLeadingZero)(e.getUTCMinutes(), + 2) + ":" + Object(M.numberToStringWithLeadingZero)(e + .getUTCSeconds(), 2); + case "Time": + return Object(M.numberToStringWithLeadingZero)(e.getUTCHours(), 2) + + ":" + Object(M.numberToStringWithLeadingZero)(e.getUTCMinutes(), + 2); + case "DayOfMonth": + return e.getUTCDate().toString(); + case "Month": + return (void 0 === I && (I = [Object(T.t)("Jan"), Object(T.t)( + "Feb"), Object(T.t)("Mar"), Object(T.t)("Apr"), + Object(T.t)("May", { + context: "short" + }), Object(T.t)("Jun"), Object(T.t)("Jul"), Object(T + .t)("Aug"), Object(T.t)("Sep"), Object(T.t)( + "Oct"), Object(T.t)("Nov"), Object(T.t)("Dec") + ]), I)[e.getUTCMonth()]; + case "Year": + return e.getUTCFullYear().toString() + } + }(e, i) + } + onScroll() { + return this._onScroll + } + invalidateVisibleBars() { + this._visibleBarsInvalidated = !0 + } + onTimeScaleCompleted(e) { + if (this._requestingMoreData = !1, this._endOfData = e, c.enabled( + "fix_left_edge") && this._endOfData) { + const e = this._points.firstIndex(); + null !== e && this.setLeftEdgeFix(e) + } + this._requestMoreData() + } + requestMoreHistoryPoints(e) { + this._requestHistoryPoints(e) + } + _requestMoreData() { + this._requestFutureTickmarksIfNeeded(), this._requestHistoryPointsIfNeeded() + } + _requestFutureTickmarksIfNeeded() { + if (this.isEmpty() || !this._model.chartApi().isConnected().value()) return; + const e = this.visibleBarsStrictRange(); + if (null === e) return; + const t = e.lastBar() - Object(s.ensureNotNull)(this._points.lastIndex()); + if (t <= this._requestedTickmarksCount) return; + const i = t - this._requestedTickmarksCount; + this._requestedTickmarksCount = t, this._model.chartApi().requestMoreTickmarks(i) + } + _requestHistoryPointsIfNeeded() { + if (this.isEmpty()) return; + if (this._endOfData) return void E.logNormal( + "Skipping loading more data due end of data state"); + const e = this.visibleBarsStrictRange(); + if (null === e) return; + const t = Object(s.ensureNotNull)(this._points.firstIndex()) - e.firstBar(); + t <= 0 || this._requestHistoryPoints(t) + } + _requestHistoryPoints(e) { + this._model.chartApi().isConnected().value() && (this._requestingMoreData ? E + .logNormal("Skipping loading more data due active loading") : (this + ._requestingMoreData = !0, this._model.chartApi().requestMoreData(e))) + } + _updateVisibleBars() { + const e = this._visibleBars; + if (this.isEmpty()) return void(this._visibleBars.isValid() && (this._visibleBars = + S.invalid(), this._visibleBarsChanged.fire(null, e.strictRange()), + this._logicalRangeChanged.fire(null, e.logicalRange()))); + const t = this.baseIndex(), + i = this.width() / this._barSpacing, + s = this._rightOffset + t, + r = s - i + 1; + Number.isFinite(r) && Number.isFinite(s) ? (this._visibleBars = new S(new _(r, s), + this._model.mainSeries().style()), p.BarsRange.compare(e.strictRange(), + this._visibleBars.strictRange()) || this._visibleBarsChanged.fire(this + ._visibleBars.strictRange(), e.strictRange()), _.compare(e + .logicalRange(), this._visibleBars.logicalRange()) || this + ._logicalRangeChanged.fire(this._visibleBars.logicalRange(), e + .logicalRange())) : E.logWarn( + `updateVisibleBars error: baseIndex: ${t}, barSpacing: ${this._barSpacing}, rightOffset: ${this._rightOffset}` + ) + } + _rightOffsetForCoordinate(e) { + return (this._width - 1 - e) / this._barSpacing + } + _correctOffset() { + const e = this.maxRightOffset(); + this._rightOffset > e && (this._rightOffset = e, this._visibleBarsInvalidated = !0); + const t = this.minRightOffset(); + null !== t && this._rightOffset < t && (this._rightOffset = t, this + ._visibleBarsInvalidated = !0) + } + _tryToUpdateBarSpacing(e, t) { + return e !== t && (this._visibleBarsInvalidated = !0, this._barSpacing = t, this + ._barSpacingChanged.fire(t), !0) + } + _coordinateToFloatIndex(e) { + const t = this._rightOffsetForCoordinate(e), + i = this.baseIndex() + this.rightOffset() - t; + return Math.round(1e6 * i) / 1e6 + } + _saveCommonTransitionsStartState() { + this._commonTransitionStartState = { + barSpacing: this.barSpacing(), + rightOffset: this.rightOffset() + } + } + _clearCommonTransitionsStartState() { + this._commonTransitionStartState = null + } + _maxRightOffsetOnChanged() { + this._maxRightOffsetChanged.fire(this.maxRightOffset()) + } + _updateRightOffset(e) { + const t = this._rightOffset; + this._rightOffset = e, this._correctOffset(), this._rightOffset !== t && this + ._rightOffsetChanged.fire(this._rightOffset) + } + } + }, + "23IT": function(e, t, i) { + "use strict"; + var s, r; + + function n(e) { + return "line" === e.type + } + + function o(e) { + return "shapes" === e.type + } + + function a(e) { + return "chars" === e.type + } + + function l(e) { + return "arrows" === e.type + } + + function c(e) { + return "dataoffset" === e.type + } + + function h(e) { + return "ohlc_open" === e.type + } + + function u(e) { + return "ohlc_high" === e.type + } + + function d(e) { + return "ohlc_low" === e.type + } + + function p(e) { + return "ohlc_close" === e.type + } + + function _(e) { + return h(e) || u(e) || d(e) || p(e) + } + + function m(e) { + return "colorer" === e.type + } + + function f(e) { + return "bar_colorer" === e.type + } + + function g(e) { + return "bg_colorer" === e.type + } + + function b(e) { + return "text_colorer" === e.type + } + + function v(e) { + return "ohlc_colorer" === e.type + } + + function S(e) { + return "wick_colorer" === e.type + } + + function y(e) { + return "border_colorer" === e.type + } + + function w(e) { + return "up_colorer" === e.type + } + + function P(e) { + return "down_colorer" === e.type + } + + function C(e) { + return "alertcondition" === e.type + } + + function x(e) { + return "Plot" !== e + } + + function T(e) { + return "ohlc_bars" === e.plottype + } + + function I(e) { + return "ohlc_candles" === e.plottype + } + + function M(e) { + return m(e) || f(e) || g(e) || c(e) || v(e) || C(e) || w(e) || P(e) || y(e) || S(e) || b(e) + } + + function O(e) { + return m(e) || b(e) || f(e) || c(e) || v(e) || S(e) || y(e) || w(e) || P(e) || C(e) + } + i.r(t), i.d(t, "LineStudyPlotStyle", (function() { + return s + })), i.d(t, "isLinePlot", (function() { + return n + })), i.d(t, "isShapesPlot", (function() { + return o + })), i.d(t, "isCharsPlot", (function() { + return a + })), i.d(t, "isArrowsPlot", (function() { + return l + })), i.d(t, "isDataOffsetPlot", (function() { + return c + })), i.d(t, "isOhlcOpenPlot", (function() { + return h + })), i.d(t, "isOhlcHighPlot", (function() { + return u + })), i.d(t, "isOhlcLowPlot", (function() { + return d + })), i.d(t, "isOhlcClosePlot", (function() { + return p + })), i.d(t, "isOhlcPlot", (function() { + return _ + })), i.d(t, "isColorerPlot", (function() { + return m + })), i.d(t, "isBarColorerPlot", (function() { + return f + })), i.d(t, "isBgColorerPlot", (function() { + return g + })), i.d(t, "isTextColorerPlot", (function() { + return b + })), i.d(t, "isOhlcColorerPlot", (function() { + return v + })), i.d(t, "isCandleWickColorerPlot", (function() { + return S + })), i.d(t, "isCandleBorderColorerPlot", (function() { + return y + })), i.d(t, "isUpColorerPlot", (function() { + return w + })), i.d(t, "isDownColorerPlot", (function() { + return P + })), i.d(t, "isAlertConditionPlot", (function() { + return C + })), i.d(t, "isPlotTitleDefined", (function() { + return x + })), i.d(t, "isOhlcPlotStyleBars", (function() { + return T + })), i.d(t, "isOhlcPlotStyleCandles", (function() { + return I + })), i.d(t, "PlotSymbolSize", (function() { + return r + })), i.d(t, "isPlotWithTechnicalValues", (function() { + return M + })), i.d(t, "isNonVisualPlot", (function() { + return O + })), + function(e) { + e[e.Line = 0] = "Line", e[e.Histogram = 1] = "Histogram", e[e.Cross = 3] = "Cross", e[e + .Area = 4] = "Area", e[e.Columns = 5] = "Columns", e[e.Circles = 6] = "Circles", + e[e.LineWithBreaks = 7] = "LineWithBreaks", e[e.AreaWithBreaks = 8] = + "AreaWithBreaks", e[e.StepLine = 9] = "StepLine", e[e.StepLineWithDiamonds = 10] = + "StepLineWithDiamonds" + }(s || (s = {})), + function(e) { + e.Auto = "auto", e.Tiny = "tiny", e.Small = "small", e.Normal = "normal", e.Large = + "large", e.Huge = "huge" + }(r || (r = {})) + }, + "25b6": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return n + })), i.d(t, "d", (function() { + return o + })), i.d(t, "c", (function() { + return a + })), i.d(t, "a", (function() { + return l + })); + const s = /[<"'&>]/g, + r = e => `&#${e.charCodeAt(0)};`; + + function n(e) { + return e.replace(s, r) + } + + function o(e = "") { + return e.replace(/(<([^>]+)>)/gi, "") + } + + function a(e = "") { + return e.replace(/\s+/g, "") + } + + function l(e = "") { + return e.replace(/\b\w/g, e => e.toUpperCase()) + } + }, + "29fS": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PaneRendererBars", (function() { + return n + })); + var s = i("Zp/P"), + r = i("ExCE"); + class n extends r.a { + constructor(e) { + super(), this._bars = e.bars, this._barSpacing = e.barSpacing, this + ._dontDrawOpen = e.dontDrawOpen, this._thinBars = e.thinBars + } + draw(e, t) { + e.save(); + const i = t.pixelRatio; + if (this._barWidth = this._calcBarWidth(i), this._barWidth >= 2) { + Math.max(1, Math.floor(i)) % 2 != this._barWidth % 2 && this._barWidth-- + } + this._barLineWidth = this._thinBars ? Math.min(this._barWidth, Math.floor(i)) : + this._barWidth; + let s = null; + const r = this._barLineWidth <= this._barWidth && this._barSpacing >= Math + .floor(1.5 * t.pixelRatio); + for (const t of this._bars) { + s !== t.color && (e.fillStyle = t.color, s = t.color); + const n = Math.floor(.5 * this._barLineWidth), + o = Math.round(t.time * i), + a = o - n, + l = this._barLineWidth, + c = a + l - 1, + h = Math.min(t.high, t.low), + u = Math.max(t.high, t.low), + d = Math.round(h * i) - n, + p = Math.round(u * i) + n, + _ = Math.max(p - d, this._barLineWidth); + e.fillRect(a, d, l, _); + const m = Math.ceil(1.5 * this._barWidth); + if (r) { + const s = o - m, + r = o + m, + h = Math.min(a - s, r - c); + if (!this._dontDrawOpen) { + let r = Math.max(d, Math.round(t.open * i) - n), + o = r + l - 1; + o > d + _ - 1 && (o = d + _ - 1, r = o - l + 1), e.fillRect(s, r, h, + o - r + 1) + } + let u = Math.max(d, Math.round(t.close * i) - n), + p = u + l - 1; + p > d + _ - 1 && (p = d + _ - 1, u = p - l + 1), e.fillRect(c + 1, u, h, + p - u + 1) + } + } + e.restore() + } + _getTolerance() { + const e = this._calcBarWidth(1), + t = this._thinBars ? Math.min(e, 1) : e; + return Object(s.interactionTolerance)().series + t / 2 + } + _getBarSpacing() { + return this._barSpacing + } + _calcBarWidth(e) { + const t = Math.floor(e); + return Math.max(t, Math.floor(Object(s.optimalBarWidth)(this._barSpacing, e))) + } + } + }, + "2EnG": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StandardPivotPointsImageCache", (function() { + return n + })); + var s = i("ikwP"), + r = i("Eyy1"); + class n { + constructor(e, t, i, r) { + this._priceAxisFontSize = 11, this._prices = [], this._labelWidth = 0, this + ._paneRenderParams = e, this._recreateCanvasAndContext(new s.Size(0, 0)), this + .reset({ + font: t, + fontSize: i, + backColors: r + }) + } + destroy() { + delete this._canvas, delete this._cache + } + canvas() { + return this._canvas + } + reset(e) { + this._renderParams = e, this._prices = [], this._cache.font = e.fontSize + "px " + e + .font, this._labelWidth = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", + "S5", "R5", "/" + ].reduce((e, t) => { + const i = this._cache.measureText(t).width; + return Math.max(i, e) + }, 0) + } + rowHeight() { + return this._priceAxisFontSize + 4 + } + labelRectByIndex(e) { + return { + left: 0, + top: Math.round(this._topByIndex(e)), + width: Math.round(this._labelWidth + 4), + height: Math.round(this._renderParams.fontSize + 8) + } + } + setPrices(e) { + let t = !1; + const i = (e, t) => { + const i = void 0 === e, + s = void 0 === t; + return (!i && !s || i === s) && Object(r.ensureDefined)(e).formatted === + Object(r.ensureDefined)(t).formatted + }; + if (e.length !== this._prices.length) t = !0; + else + for (let s = 0; s < this._prices.length; s++) + if (!i(this._prices[s], e[s])) { + t = !0; + break + } if (t) { + const t = this._labelWidth + 6, + i = this._renderParams.fontSize, + r = Math.max(e.length, 22) * (i + 8); + this._recreateCanvasAndContext(new s.Size(t, r)), this._prices = e, this._cache + .save(), Object(s.drawScaled)(this._cache, this._paneRenderParams + .pixelRatio, () => { + this._cache.translate(.5, .5), + this._cache.font = this._renderParams.fontSize + "px " + this + ._renderParams.font, this._cache.textBaseline = "middle"; + for (let e = 0; e < this._prices.length; e++) { + if (!this._prices[e]) continue; + const t = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", + "S5", "R5" + ][e]; + this._cache.fillStyle = this._renderParams.backColors[e], this + ._cache.fillText(t, 0, this._centerByIndex(e)), this._cache + .fillText("/", 0, this._centerByIndex(e + 11)) + } + }), this._cache.restore(), this._prices = e + } + } + _recreateCanvasAndContext(e) { + this._canvas = document.createElement("canvas"), this._canvas.width = e.w * this + ._paneRenderParams.pixelRatio, this._canvas.height = e.h * this + ._paneRenderParams.pixelRatio, this._cache = Object(r.ensureNotNull)(this + ._canvas.getContext("2d")) + } + _centerByIndex(e) { + return Math.round((e + .5) * (this._renderParams.fontSize + 8)) + } + _topByIndex(e) { + return Math.round(e * (this._renderParams.fontSize + 8)) + } + } + }, + "2bPF": function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("7KDR").Action, + n = i("Ocx9").DefaultProperty, + o = i("k9/m").PlotRowSearchMode, + a = i("Ye2/").LineToolBarsPatternMode; + class l extends s { + constructor(e, t) { + var s = t || l.createProperties(); + super(e, s), s.mirrored.listeners().subscribe(this, l.prototype.mirror), s.flipped + .listeners().subscribe(this, l.prototype.flip), this._scaleCoeff = 1, this + .version = l.version, this._pattern = [], this._properties.mode.listeners() + .subscribe(this, l.prototype.onModeChanged), i.e("lt-pane-views").then(i.t.bind( + null, "c6sA", 7)).then(({ + BarsPatternPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + isSynchronizable() { + return !1 + } + onModeChanged() { + var e = this.patternPriceDiff(); + e *= this._pressCoeff, this._points[1].price = this._timePoint[1].price = this + ._points[0].price + e + } + additionalActions(e) { + var t = this; + return [new r({ + checked: this.properties().mirrored.value(), + checkable: !0, + label: window.t("Mirrored"), + payload: { + target: this + }, + onExecute: function(t) { + var i = t.getPayload().target; + e.setProperty(i.properties().mirrored, !i.properties() + .mirrored.value(), "Bats Pattern Mirroring"), i + .updateAllViews(), i._model.updateSource(i) + } + }), new r({ + checked: this.properties().flipped.value(), + checkable: !0, + label: window.t("Flipped"), + payload: { + target: this + }, + onExecute: function(t) { + var i = t.getPayload().target; + e.setProperty(i.properties().flipped, !i.properties() + .flipped.value(), "Bats Pattern Flipping"), i + .updateAllViews(), i._model.updateSource(i) + } + }), new r({ + checkable: !0, + label: window.t("Restore Size"), + onExecute: function(i) { + var s = t.points()[0], + r = t.patternPriceDiff(), + n = s.price + r, + o = s.index + t._pattern.length - 1; + e.startChangingLinetool(t, { + price: n, + index: o + }, 1, {}), e.changeLinePoint({ + price: n, + index: o + }, {}), e.endChangingLinetool() + } + })] + } + pointsCount() { + return 2 + } + _preparePoint(e, t) { + e = this._alignPointToRangeOfActualData(e); + var i = this._model.mainSeries(); + this.properties().mode.value() === a.Bars ? e.price = i.bars().valueAt(e.index)[ + TradingView.HIGH_PLOT] : e.price = i.bars().valueAt(e.index)[TradingView + .CLOSE_PLOT]; + var r = this.priceScale(), + n = this.ownerSource().firstValue(), + o = .05 * r.height(), + l = r.priceToCoordinate(e.price, n) - o; + return e.price = r.coordinateToPrice(l, n), s.prototype._preparePoint.call(this, e, + t) + } + state(e) { + var t = s.prototype.state.call(this, e); + return t.pattern = this._pattern, t + } + restoreData(e) { + e.pattern && (this._pattern = e.pattern) + } + name() { + return "Bars Pattern" + } + hasEditableCoordinates() { + return !1 + } + cloneData(e) { + this._pattern = TradingView.clone(e._pattern) + } + mirror() { + for (var e = this._pattern, t = e[0][TradingView.HIGH_PLOT], i = Math.min(e[0][ + TradingView.LOW_PLOT + ], e[0][TradingView.HIGH_PLOT]), s = Math.max(e[0][TradingView.LOW_PLOT], e[ + 0][TradingView.HIGH_PLOT]), r = 1; r < e.length; r++) i = Math.min(i, e[r][ + TradingView.LOW_PLOT + ]), s = Math.max(s, e[r][TradingView.HIGH_PLOT]); + if (i < s) { + var n = (i + s) / 2, + o = function(e) { + return n - (e - n) + }; + for (r = 0; r < e.length; r++) e[r][TradingView.HIGH_PLOT] = o(e[r][TradingView + .HIGH_PLOT + ]), e[r][TradingView.LOW_PLOT] = o(e[r][TradingView.LOW_PLOT]), e[r][ + TradingView.OPEN_PLOT + ] = o(e[r][TradingView.OPEN_PLOT]), e[r][TradingView.CLOSE_PLOT] = o(e[r][ + TradingView.CLOSE_PLOT + ]) + } + var a = e[0][TradingView.HIGH_PLOT] - t, + l = e[e.length - 1][TradingView.LOW_PLOT] - e[0][TradingView.HIGH_PLOT]; + this._points[0].price += a, this._points[1].price = this._points[0].price + l, this + .updateAllViews() + } + flip() { + this._points[0].price = this._points[1].price; + for (var e = 0; e < this._pattern.length / 2; e++) { + var t = this._pattern[e]; + this._pattern[e] = this._pattern[this._pattern.length - e - 1], this._pattern[ + this._pattern.length - e - 1] = t + } + var i = this._pattern[this._pattern.length - 1][TradingView.LOW_PLOT] - this + ._pattern[0][TradingView.HIGH_PLOT]; + this._points[1].price = this._points[0].price + i, this.updateAllViews() + } + firstPatternPrice() { + var e = parseInt(this.properties().mode.value(), 10); + if (e === a.LineHL2) return (this._pattern[0][TradingView.HIGH_PLOT] + this + ._pattern[0][TradingView.LOW_PLOT]) / 2; + var t = { + 0: TradingView.HIGH_PLOT, + 1: TradingView.CLOSE_PLOT, + 2: TradingView.OPEN_PLOT, + 3: TradingView.OPEN_PLOT, + 4: TradingView.HIGH_PLOT, + 5: TradingView.LOW_PLOT + } [e]; + return this._pattern[0][t] + } + lastPatternPrice() { + var e = parseInt(this.properties().mode.value(), 10); + if (e === a.LineHL2) return (this._pattern[this._pattern.length - 1][TradingView + .HIGH_PLOT + ] + this._pattern[this._pattern.length - 1][TradingView.LOW_PLOT]) / 2; + var t = { + 0: TradingView.LOW_PLOT, + 1: TradingView.CLOSE_PLOT, + 2: TradingView.CLOSE_PLOT, + 3: TradingView.OPEN_PLOT, + 4: TradingView.HIGH_PLOT, + 5: TradingView.LOW_PLOT + } [e]; + return this._pattern[this._pattern.length - 1][t] + } + patternPriceDiff() { + return this.lastPatternPrice() - this.firstPatternPrice() + } + pressCoeff() { + var e = this.patternPriceDiff(), + t = this.points()[0].price, + i = (this.points()[1].price - t) / e; + return this._pressCoeff = i, i + } + addPoint(e, t) { + var i = s.prototype.addPoint.call(this, e, t, !0); + if (i) { + var r = Math.min(this.points()[0].index, this.points()[1].index), + n = Math.max(this.points()[0].index, this.points()[1].index), + a = this._model.mainSeries().nearestIndex(r, o.NearestRight), + l = this._model.mainSeries().nearestIndex(n, o.NearestLeft); + this.points()[0].index > this.points()[1].index && (this._points[0].price = this + ._points[1].price), this._pattern = []; + for (var c = a; c <= l; c++) { + var h = this._model.mainSeries().data().valueAt(c); + this._pattern.push(TradingView.clone(h)) + } + if (this._pattern.length > 0) { + var u = this.patternPriceDiff(); + this._points[1].price = this._points[0].price + u, + this._points[1].index = this._points[0].index + (l - a), this + .normalizePoints(), this.createServerPoints() + } + } + return i + } + setPoint(e, t, i) { + 1 === e && t.index <= this._points[0].index && (t.index = this._points[0].index + + 1), 0 === e && t.index >= this._points[1].index && (t.index = this._points[ + 1] + .index - 1), super.setPoint(e, t, i) + } + migrateVersion(e, t, i) { + if (1 === e && this._pattern.length > 0) { + var s = this.patternPriceDiff(); + 2 === this._timePoint.length && (this._timePoint[1].price = this._timePoint[0] + .price + s), 2 === this._points.length && (this._points[1].price = this + ._points[0].price + s) + } + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "8ioM"))) + .BarsPatternDefinitionsViewModel + } + static createProperties(e) { + var t = new n("linetoolbarspattern", e); + return l._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e), e.addExclusion("mirrored"), e.addExclusion("flipped") + } + } + l.version = 2, t.LineToolBarsPattern = l + }, + "2cgs": function(e, t, i) { + "use strict"; + var s = i("ocLq"); + JSServer.studyLibrary = [{ + name: "Accumulation/Distribution", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Accumulation/Distribution", + shortDescription: "Accum/Dist", + is_price_study: !1, + inputs: [], + id: "Accumulation/Distribution@tv-basicstudies-1", + scriptIdPart: "", + name: "Accumulation/Distribution", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t, i, r) { + return s.Std.or(s.Std.and(s.Std.eq(e, t), s.Std.eq(e, i)), s.Std.eq( + t, i)) ? 0 : (2 * e - i - t) / (t - i) * r + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this.f_0(s.Std.close(this._context), s.Std.high(this + ._context), s.Std.low(this._context), s.Std.volume(this + ._context)); + return [s.Std.cum(i, this._context)] + } + } + }, { + name: "Accumulative Swing Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "ASI", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Accumulative Swing Index", + shortDescription: "ASI", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Limit Move Value", + defval: 10, + type: "float", + min: .1, + max: 1e5 + }], + id: "Accumulative Swing Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Accumulative Swing Index", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + var i = t.new_var(s.Std.open(t)), + r = t.new_var(s.Std.high(t)), + n = t.new_var(s.Std.low(t)), + o = t.new_var(s.Std.close(t)), + a = s.Std.abs(r - o.get(1)), + l = s.Std.abs(n - o.get(1)), + c = s.Std.abs(r - n), + h = s.Std.abs(o.get(1) - i.get(1)), + u = s.Std.max(a, l), + d = s.Std.iff(a >= s.Std.max(l, c), a - .5 * l + .25 * h, s.Std + .iff(l >= s.Std.max(a, c), l - .5 * a + .25 * h, c + .25 * + h)); + return s.Std.iff(0 === d, 0, (o - o.get(1) + .5 * (o - i) + .25 * (o + .get(1) - i.get(1))) / d * u / e * 50) + }, this.f_1 = function(e, t) { + var i = this.f_0(e, t); + return s.Std.cum(i, t) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0); + return [this.f_1(i, this._context)] + } + } + }, { + name: "Advance/Decline", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Advance/Decline", + shortDescription: "AD", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Advance/Decline@tv-basicstudies-1", + scriptIdPart: "", + name: "Advance/Decline", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return s.Std.gt(e, t) + }, this.f_1 = function(e, t) { + return s.Std.lt(e, t) + }, this.f_2 = function(e, t) { + return 0 === t ? e : e / t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this.f_0(s.Std.close(this._context), s.Std.open(this + ._context)), + n = this._context.new_var(r), + o = s.Std.sum(n, i, this._context), + a = this.f_1(s.Std.close(this._context), s.Std.open(this + ._context)), + l = this._context.new_var(a), + c = s.Std.sum(l, i, this._context); + return [this.f_2(o, c)] + } + } + }, { + name: "Arnaud Legoux Moving Average", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9, + in_1: .85, + in_2: 6 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Arnaud Legoux Moving Average", + shortDescription: "ALMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Window Size", + defval: 9, + type: "integer", + min: 0, + max: 5e3 + }, { + id: "in_1", + name: "Offset", + defval: .85, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_2", + name: "Sigma", + defval: 6, + type: "float", + min: -1e12, + max: 1e12 + }], + id: "Arnaud Legoux Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Arnaud Legoux Moving Average", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._input(2), + a = this._context.new_var(i); + return [s.Std.alma(a, r, n, o)] + } + } + }, { + name: "Aroon", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FB8C00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Aroon", + shortDescription: "Aroon", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Aroon@tv-basicstudies-1", + scriptIdPart: "", + name: "Aroon", + format: { + precision: 2, + type: "percent" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return 100 * (e + t) / t + }, + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.high(this._context), + n = i + 1, + o = this._context.new_var(r), + a = s.Std.highestbars(o, n, this._context), + l = this.f_0(a, i), + c = s.Std.low(this._context), + h = this._context.new_var(c), + u = s.Std.lowestbars(h, n, this._context); + return [l, this.f_0(u, i)] + } + } + }, { + name: "Average Price", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + id: "AveragePrice@tv-basicstudies-1", + scriptIdPart: "", + name: "Average Price", + description: "Average Price", + shortDescription: "Average Price", + is_price_study: !0, + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#2196F3" + } + }, + inputs: {} + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [], + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + return this._context = e, this._input = t, [s.Std.ohlc4(this + ._context)] + } + } + }, { + name: "Average Directional Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF5252" + } + }, + inputs: { + in_0: 14, + in_1: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "ADX", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Average Directional Index", + shortDescription: "ADX", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "ADX Smoothing", + defval: 14, + type: "integer", + min: -1e12, + max: 1e12 + }, { + id: "in_1", + name: "DI Length", + defval: 14, + type: "integer", + min: -1e12, + max: 1e12 + }], + id: "average_directional_Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Average Directional Index", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e) { + var t = this._context.new_var(s.Std.high(this._context)), + i = s.Std.change(t), + r = this._context.new_var(s.Std.low(this._context)), + n = -s.Std.change(r), + o = this._context.new_var(s.Std.tr(void 0, this._context)), + a = s.Std.rma(o, e, this._context), + l = this._context.new_var(s.Std.and(s.Std.gt(i, n), s.Std.gt(i, + 0)) ? i : 0), + c = s.Std.fixnan(100 * s.Std.rma(l, e, this._context) / a, this + ._context), + h = this._context.new_var(s.Std.and(s.Std.gt(n, i), s.Std.gt(n, + 0)) ? n : 0); + return [c, s.Std.fixnan(100 * s.Std.rma(h, e, this._context) / a, + this._context)] + }, this.f_1 = function(e, t) { + var i = this.f_0(e), + r = i[0], + n = i[1], + o = r + n, + a = this._context.new_var(s.Std.abs(r - n) / (s.Std.eq(o, 0) ? + 1 : o)); + return [100 * s.Std.rma(a, t, this._context)] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this._context + .setMinimumAdditionalDepth(this._input(0) + this._input(1)), + this.f_1(this._input(0), this._input(1)) + } + } + }, { + name: "Average True Range", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#B71C1C" + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Average True Range", + shortDescription: "ATR", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Average True Range@tv-basicstudies-1", + scriptIdPart: "", + name: "Average True Range", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.tr(this._context), + n = this._context.new_var(r); + return [s.Std.rma(n, i, this._context)] + } + } + }, { + name: "Awesome Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 1, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#000080" + } + }, + palettes: { + palette_0: { + colors: { + 0: { + color: "#F44336", + width: 1, + style: 0 + }, + 1: { + color: "#009688", + width: 1, + style: 0 + } + } + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + palette: "palette_0", + target: "plot_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Awesome Oscillator", + shortDescription: "AO", + is_price_study: !1, + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + } + } + } + }, + inputs: [], + id: "Awesome Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Awesome Oscillator", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e - t + }, this.f_1 = function(e) { + return s.Std.le(e, 0) ? 0 : 1 + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.hl2(this._context), + r = this._context.new_var(i), + n = s.Std.sma(r, 5, this._context), + o = this._context.new_var(i), + a = s.Std.sma(o, 34, this._context), + l = this.f_0(n, a), + c = l, + h = this._context.new_var(l), + u = s.Std.change(h); + return [c, this.f_1(u)] + } + } + }, { + name: "Balance of Power", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF5252" + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Balance of Power", + shortDescription: "Balance of Power", + is_price_study: !1, + inputs: [], + id: "Balance of Power@tv-basicstudies-1", + scriptIdPart: "", + name: "Balance of Power", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t, i, s) { + return (e - t) / (i - s) + }, this.main = function(e, t) { + return this._context = e, this._input = t, [this.f_0(s.Std.close( + this._context), s.Std.open(this._context), s.Std + .high(this._context), s.Std.low(this._context))] + } + } + }, { + name: "Bollinger Bands", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 95, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Median", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Bollinger Bands", + shortDescription: "BB", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_1", + objBId: "plot_2", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "mult", + defval: 2, + type: "float", + min: .001, + max: 50 + }], + id: "Bollinger Bands@tv-basicstudies-1", + scriptIdPart: "", + name: "Bollinger Bands", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e * t + }, this.f_1 = function(e, t) { + return e + t + }, this.f_2 = function(e, t) { + return e - t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._context.new_var(i), + a = s.Std.sma(o, r, this._context), + l = this._context.new_var(i), + c = s.Std.stdev(l, r, this._context), + h = this.f_0(n, c); + return [a, this.f_1(a, h), this.f_2(a, h)] + } + } + }, { + name: "Bollinger Bands %B", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#26A69A" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 1 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + filledAreasStyle: { + fill_0: { + color: "#26A69A", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Bollinger Bands %B", + shortDescription: "BB %B", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "mult", + defval: 2, + type: "float", + min: .001, + max: 50 + }], + id: "Bollinger Bands %B@tv-basicstudies-1", + scriptIdPart: "", + name: "Bollinger Bands %B", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e * t + }, this.f_1 = function(e, t) { + return e + t + }, this.f_2 = function(e, t) { + return e - t + }, this.f_3 = function(e, t, i) { + return (e - t) / (i - t) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._context.new_var(i), + a = s.Std.sma(o, r, this._context), + l = this._context.new_var(i), + c = s.Std.stdev(l, r, this._context), + h = this.f_0(n, c), + u = this.f_1(a, h), + d = this.f_2(a, h); + return [this.f_3(i, d, u)] + } + } + }, { + name: "Bollinger Bands Width", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + inputs: { + in_0: 20, + in_1: 2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Bollinger Bands Width", + shortDescription: "BBW", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "mult", + defval: 2, + type: "float", + min: .001, + max: 50 + }], + id: "Bollinger Bands Width@tv-basicstudies-1", + scriptIdPart: "", + name: "Bollinger Bands Width", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e * t + }, this.f_1 = function(e, t) { + return e + t + }, this.f_2 = function(e, t) { + return e - t + }, this.f_3 = function(e, t, i) { + return (e - t) / i + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._context.new_var(i), + a = s.Std.sma(o, r, this._context), + l = this._context.new_var(i), + c = s.Std.stdev(l, r, this._context), + h = this.f_0(n, c), + u = this.f_1(a, h), + d = this.f_2(a, h); + return [this.f_3(u, d, a)] + } + } + }, { + name: "Chaikin Money Flow", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chaikin Money Flow", + shortDescription: "CMF", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Chaikin Money Flow@tv-basicstudies-1", + scriptIdPart: "", + name: "Chaikin Money Flow", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t, i, r) { + return s.Std.or(s.Std.and(s.Std.eq(e, t), s.Std.eq(e, i)), s.Std.eq( + t, i)) ? 0 : (2 * e - i - t) / (t - i) * r + }, this.f_1 = function(e, t) { + return e / t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this.f_0(s.Std.close(this._context), s.Std.high(this + ._context), s.Std.low(this._context), s.Std.volume(this + ._context)), + n = this._context.new_var(r), + o = s.Std.sum(n, i, this._context), + a = s.Std.volume(this._context), + l = this._context.new_var(a), + c = s.Std.sum(l, i, this._context); + return [this.f_1(o, c)] + } + } + }, { + name: "Chaikin Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#EC407A" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 3, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chaikin Oscillator", + shortDescription: "Chaikin Osc", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "short", + defval: 3, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "long", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Chaikin Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Chaikin Oscillator", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e - t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.accdist(this._context), + o = this._context.new_var(n), + a = s.Std.ema(o, i, this._context), + l = this._context.new_var(n), + c = s.Std.ema(l, r, this._context); + return [this.f_0(a, c)] + } + } + }, { + name: "Chaikin Volatility", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Chaikin Volatility@tv-basicstudies-1", + scriptIdPart: "", + name: "Chaikin Volatility", + description: "Chaikin Volatility", + shortDescription: "Chaikin Volatility", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#AB47BC" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + periods: 10, + rocLookback: 10 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "periods", + type: "integer", + name: "Periods" + }, { + id: "rocLookback", + type: "integer", + name: "Rate of Change Lookback" + }], + format: { + type: "volume" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.rocLookback = this._input(1) + }, this.main = function(e, t) { + this._context = e, this._input = t, this._context + .setMinimumAdditionalDepth(this.period + this.rocLookback); + var i = this._context.new_var(s.Std.high(this._context) - s.Std.low( + this._context)), + r = this._context.new_var(s.Std.ema(i, this.period, this + ._context)); + return [s.Std.roc(r, this.rocLookback)] + } + } + }, { + name: "Chande Kroll Stop", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + inputs: { + in_0: 10, + in_1: 1, + in_2: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Long", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Short", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chande Kroll Stop", + shortDescription: "Chande Kroll Stop", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "p", + defval: 10, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_1", + name: "x", + defval: 1, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_2", + name: "q", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }], + id: "Chande Kroll Stop@tv-basicstudies-1", + scriptIdPart: "", + name: "Chande Kroll Stop", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return e - t * i + }, this.f_1 = function(e, t, i) { + return e + t * i + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2), + o = s.Std.high(this._context), + a = this._context.new_var(o), + l = s.Std.highest(a, i, this._context), + c = s.Std.atr(i, this._context), + h = this.f_0(l, r, c), + u = this._context.new_var(o), + d = s.Std.lowest(u, i, this._context), + p = this.f_1(d, r, c), + _ = this._context.new_var(h), + m = s.Std.highest(_, n, this._context), + f = this._context.new_var(p); + return [s.Std.lowest(f, n, this._context), m] + } + } + }, { + name: "Chande Momentum Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chande Momentum Oscillator", + shortDescription: "ChandeMO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Chande Momentum Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Chande Momentum Oscillator", + format: { + type: "price", + precision: 2 + } + }, + constructor: function() { + this.f_0 = function(e) { + return s.Std.ge(e, 0) ? e : 0 + }, + this.f_1 = function(e) { + return s.Std.ge(e, 0) ? 0 : -e + }, this.f_2 = function(e, t) { + return 100 * e / t + }, this.f_3 = function(e, t) { + return this.f_2(e - t, e + t) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.close(this._context), + n = this._context.new_var(r), + o = s.Std.change(n), + a = this.f_0(o), + l = this.f_1(o), + c = this._context.new_var(a), + h = s.Std.sum(c, i, this._context), + u = this._context.new_var(l), + d = s.Std.sum(u, i, this._context); + return [this.f_3(h, d)] + } + } + }, { + name: "Chop Zone", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 5, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#000080" + } + }, + palettes: { + palette_0: { + colors: { + 0: { + color: "#26C6DA", + width: 1, + style: 0 + }, + 1: { + color: "#43A047", + width: 1, + style: 0 + }, + 2: { + color: "#A5D6A7", + width: 1, + style: 0 + }, + 3: { + color: "#009688", + width: 1, + style: 0 + }, + 4: { + color: "#D50000", + width: 1, + style: 0 + }, + 5: { + color: "#E91E63", + width: 1, + style: 0 + }, + 6: { + color: "#FF6D00", + width: 1, + style: 0 + }, + 7: { + color: "#FFB74D", + width: 1, + style: 0 + }, + 8: { + color: "#FDD835", + width: 1, + style: 0 + } + } + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + palette: "palette_0", + target: "plot_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Chop Zone", + shortDescription: "Chop Zone", + is_price_study: !1, + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + }, + 2: { + name: "Color 2" + }, + 3: { + name: "Color 3" + }, + 4: { + name: "Color 4" + }, + 5: { + name: "Color 5" + }, + 6: { + name: "Color 6" + }, + 7: { + name: "Color 7" + }, + 8: { + name: "Color 8" + } + }, + valToIndex: { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8 + } + } + }, + inputs: [], + id: "chop_zone@tv-basicstudies-1", + scriptIdPart: "", + name: "Chop Zone", + format: { + precision: 0, + type: "price" + } + }, + constructor: function() { + this.f_0 = function() { + var e = s.Std.close(this._context), + t = s.Std.hlc3(this._context), + i = this._context.new_var(s.Std.high(this._context)), + r = s.Std.highest(i, 30, this._context), + n = s.Std.lowest(i, 30, this._context), + o = 25 / (r - n) * n, + a = this._context.new_var(e), + l = this._context.new_var(s.Std.ema(a, 34, this._context)), + c = (l.get(1) - l.get(0)) / t * o, + h = s.Std.sqrt(1 + c * c), + u = s.Std.round(180 * s.Std.acos(1 / h) / 3.141592653589793), + d = s.Std.iff(s.Std.gt(c, 0), -u, u), + p = s.Std.and(s.Std.gt(d, -2.14), s.Std.le(d, -.71)) ? 7 : 8, + _ = s.Std.and(s.Std.gt(d, -3.57), s.Std.le(d, -2.14)) ? 6 : p, + m = s.Std.and(s.Std.gt(d, -5), s.Std.le(d, -3.57)) ? 5 : _, + f = s.Std.le(d, -5) ? 4 : m, + g = s.Std.and(s.Std.lt(d, 2.14), s.Std.ge(d, .71)) ? 3 : f, + b = s.Std.and(s.Std.lt(d, 3.57), s.Std.ge(d, 2.14)) ? 2 : g, + v = s.Std.and(s.Std.lt(d, 5), s.Std.ge(d, 3.57)) ? 1 : b; + return [1, s.Std.ge(d, 5) ? 0 : v] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_0() + } + } + }, { + name: "Choppiness Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 61.8 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 38.2 + }], + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Choppiness Index", + shortDescription: "CHOP", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Choppiness Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Choppiness Index", + format: { + type: "price", + precision: 2 + } + }, + constructor: function() { + this.f_0 = function(e, t, i, r) { + return 100 * s.Std.log10(e / (t - i)) / r + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.atr(1, this._context), + n = this._context.new_var(r), + o = s.Std.sum(n, i, this._context), + a = s.Std.high(this._context), + l = this._context.new_var(a), + c = s.Std.highest(l, i, this._context), + h = s.Std.low(this._context), + u = this._context.new_var(h), + d = s.Std.lowest(u, i, this._context), + p = s.Std.log10(i); + return [this.f_0(o, c, d, p)] + } + } + }, { + name: "Commodity Channel Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + smoothedMA: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !1 + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 100 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -100 + }], + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + smoothingLine: "SMA", + smoothingLength: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "smoothedMA", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + smoothedMA: { + title: "Smoothed MA", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Commodity Channel Index", + shortDescription: "CCI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "smoothingLine", + name: "Smoothing Line", + defval: "SMA", + type: "text", + options: ["SMA", "EMA", "WMA"] + }, { + id: "smoothingLength", + name: "Smoothing Length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Commodity Channel Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Commodity Channel Index", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return (e - t) / (.015 * i) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.hlc3(this._context), + r = this._input(0), + n = this._input(1), + o = this._input(2); + this._context.setMinimumAdditionalDepth(r + o); + var a, l = this._context.new_var(i), + c = s.Std.sma(l, r, this._context), + h = this._context.new_var(i), + u = s.Std.dev(h, r, this._context), + d = this.f_0(i, c, u), + p = this._context.new_var(d); + return "EMA" === n ? a = s.Std.ema(p, o, this._context) : "WMA" === + n ? a = s.Std.wma(p, o, this._context) : "SMA" === n && (a = s + .Std.sma(p, o, this._context)), [d, a] + } + } + }, { + name: "Connors RSI", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 70 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 30 + }], + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 3, + in_1: 2, + in_2: 100 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "CRSI", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Connors RSI", + shortDescription: "CRSI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "RSI Length", + defval: 3, + type: "integer", + min: 1 + }, { + id: "in_1", + name: "UpDown Length", + defval: 2, + type: "integer", + min: 1 + }, { + id: "in_2", + name: "ROC Length", + defval: 100, + type: "integer", + min: 1 + }], + id: "Connors RSI@tv-basicstudies-1", + scriptIdPart: "", + name: "Connors RSI", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + var e; + this.f_1 = function(e, t, i) { + var r = i.new_var(s.Std.max(s.Std.change(e), 0)); + return s.Std.rma(r, t, i) + }, this.f_2 = function(e, t, i) { + var r = i.new_var(-s.Std.min(s.Std.change(e), 0)); + return s.Std.rma(r, t, i) + }, this.f_3 = (e = 0, function(t) { + var i = t.get(0), + r = t.get(1); + return e = i === r ? 0 : i > r ? s.Std.nz(e) <= 0 ? 1 : s.Std + .nz(e) + 1 : s.Std.nz(e) >= 0 ? -1 : s.Std.nz(e) - 1, this + ._context.new_var(e) + }), this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._context.new_var(i), + n = this._input(0), + o = this._input(1), + a = this._input(2); + this._context.setMinimumAdditionalDepth(a); + var l = s.Std.rsi(this.f_1(r, n, this._context), this.f_2(r, n, this + ._context)), + c = this.f_3(r), + h = s.Std.rsi(this.f_1(c, o, this._context), this.f_2(c, o, this + ._context)), + u = this._context.new_var(s.Std.roc(r, 1)), + d = s.Std.percentrank(u, a); + return [s.Std.avg(l, h, d)] + } + } + }, { + name: "Coppock Curve", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10, + in_1: 14, + in_2: 11 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Coppock Curve", + shortDescription: "Coppock Curve", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "WMA Length", + defval: 10, + type: "integer", + min: -1e12, + max: 5e3 + }, { + id: "in_1", + name: "Long RoC Length", + defval: 14, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_2", + name: "Short RoC Length", + defval: 11, + type: "integer", + min: 1, + max: 4999 + }], + id: "Coppock Curve@tv-basicstudies-1", + scriptIdPart: "", + name: "Coppock Curve", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e + t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2); + this._context.setMinimumAdditionalDepth(i + Math.max(r, n)); + var o = s.Std.close(this._context), + a = this._context.new_var(o), + l = s.Std.roc(a, r), + c = this._context.new_var(o), + h = s.Std.roc(c, n), + u = this.f_0(l, h), + d = this._context.new_var(u); + return [s.Std.wma(d, i, this._context)] + } + } + }, { + name: "Correlation Coeff", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 4, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: "AAPL", + in_1: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Correlation Coefficient", + shortDescription: "CC", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "sym", + defval: "AAPL", + type: "symbol" + }, { + id: "in_1", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Correlation Coeff@tv-basicstudies-1", + scriptIdPart: "", + name: "Correlation Coeff", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this._context.new_sym(this + ._input(0), s.Std.period(this._context)) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_unlimited_var(this._context.symbol.time), + r = (this._input(0), s.Std.period(this._context), s.Std.close( + this._context)), + n = this._input(1); + this._context.select_sym(1); + var o = this._context.new_unlimited_var(this._context.symbol.time), + a = s.Std.close(this._context), + l = this._context.new_unlimited_var(a); + this._context.select_sym(0); + var c = l.adopt(o, i, 0), + h = this._context.new_var(r), + u = this._context.new_var(c); + return [s.Std.correlation(h, u, n, this._context)] + } + } + }, { + name: "Correlation - Log", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Correlation - Log@tv-basicstudies-1", + scriptIdPart: "", + name: "Correlation - Log", + description: "Correlation - Log", + shortDescription: "Correlation - Log", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#2196F3" + } + }, + inputs: { + instrument: "INTC", + instrument2: "AMZN", + periods: 25 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "instrument", + name: "Instrument 1", + type: "symbol", + defval: "INTC", + confirm: !0 + }, { + id: "instrument2", + name: "Instrument 2", + type: "symbol", + defval: "AMZN", + confirm: !0 + }, { + id: "periods", + name: "Periods", + type: "integer", + defval: 25 + }], + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this._context.new_sym(this + ._input(0), s.Std.period(this._context)), this._context + .new_sym(this._input(1), s.Std.period(this._context)), this + .period = this._input(2) + }, this.correlationLog = function(e, t, i, r) { + var n = s.Std.sma(e, i, r), + o = s.Std.sma(t, i, r), + a = r.new_var(e.get() * t.get()); + return (s.Std.sma(a, i, r) - n * o) / Math.sqrt(s.Std.variance2(e, + n, i) * s.Std.variance2(t, o, i)) + }, this.main = function(e, t) { + this._context = e, this._input = t, this._context.select_sym(1); + var i = this._context.new_var(this._context.symbol.time); + this._context.select_sym(2); + var r = this._context.new_var(s.Std.close(this._context)), + n = this._context.new_var(s.Std.log(r.get() / r.get(1))), + o = this._context.new_var(this._context.symbol.time); + this._context.select_sym(1); + var a = this._context.new_var(s.Std.close(this._context)), + l = this._context.new_var(s.Std.log(a.get() / a.get(1))), + c = this._context.new_var(n.adopt(o, i, 0)), + h = this.correlationLog(l, c, this.period, this._context); + return [s.Std.round(1e3 * h) / 1e3] + } + } + }, { + name: "Detrended Price Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 21, + in_1: !1 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "DPO", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Detrended Price Oscillator", + shortDescription: "DPO", + is_price_study: !1, + is_hidden_study: !1, + id: "detrended_price_oscillator@tv-basicstudies-1", + bands: [{ + id: "hline_0", + name: "Zero", + isHidden: !1 + }], + inputs: [{ + id: "in_0", + name: "Period", + defval: 21, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "isCentered", + defval: !1, + type: "bool" + }], + scriptIdPart: "", + name: "Detrended Price Oscillator", + format: { + type: "price", + precision: 2 + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._input(0), + t = this._input(1), + i = Math.floor(e / 2 + 1); + this._context.setMinimumAdditionalDepth(e + i); + var r = this._context.new_var(s.Std.close(this._context)), + n = this._context.new_var(s.Std.sma(r, e, this._context)), + o = this._context.new_var(s.Std.close(this._context)).get(i) - + n, + a = s.Std.close(this._context) - n.get(i); + return [t ? o : a, t ? -i : 0] + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this.f_0(); + return [{ + value: i[0], + offset: i[1] + }] + } + } + }, { + name: "Directional Movement Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F50057" + } + }, + inputs: { + in_0: 14, + in_1: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "+DI", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "-DI", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "ADX", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Directional Movement", + shortDescription: "DMI", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "DI Length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "ADX Smoothing", + defval: 14, + type: "integer", + min: 1, + max: 50 + }], + id: "Directional Movement Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Directional Movement Index", + format: { + precision: 4, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e) { + return -e + }, this.f_1 = function(e, t) { + return s.Std.and(s.Std.gt(e, t), s.Std.gt(e, 0)) ? e : 0 + }, this.f_2 = function(e, t) { + return 100 * e / t + }, this.f_3 = function(e, t) { + return e + t + }, this.f_4 = function(e, t, i) { + return s.Std.abs(e - t) / (s.Std.eq(i, 0) ? 1 : i) + }, this.f_5 = function(e) { + return 100 * e + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1); + this._context.setMinimumAdditionalDepth(i + r); + var n = s.Std.high(this._context), + o = this._context.new_var(n), + a = s.Std.change(o), + l = s.Std.low(this._context), + c = this._context.new_var(l), + h = s.Std.change(c), + u = this.f_0(h), + d = s.Std.tr(this._context), + p = this._context.new_var(d), + _ = s.Std.rma(p, i, this._context), + m = this.f_1(a, u), + f = this._context.new_var(m), + g = s.Std.rma(f, i, this._context), + b = this.f_2(g, _), + v = s.Std.fixnan(b, this._context), + S = this.f_1(u, a), + y = this._context.new_var(S), + w = s.Std.rma(y, i, this._context), + P = this.f_2(w, _), + C = s.Std.fixnan(P, this._context), + x = this.f_3(v, C), + T = this.f_4(v, C, x), + I = this._context.new_var(T), + M = s.Std.rma(I, r, this._context); + return [v, C, this.f_5(M)] + } + } + }, { + name: "Donchian Channels", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 95, + visible: !0 + } + }, + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Basis", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Donchian Channels", + shortDescription: "DC", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_1", + objBId: "plot_0", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Donchian Channels@tv-basicstudies-1", + scriptIdPart: "", + name: "Donchian Channels", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.low(this._context), + n = this._context.new_var(r), + o = s.Std.lowest(n, i, this._context), + a = s.Std.high(this._context), + l = this._context.new_var(a), + c = s.Std.highest(l, i, this._context); + return [o, c, s.Std.avg(c, o)] + } + } + }, { + name: "Double Exponential Moving Average", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + } + }, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Double EMA", + shortDescription: "DEMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Double Exponential Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Double Exponential Moving Average", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return 2 * e - t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0); + this._context.setMinimumAdditionalDepth(2 * i); + var r = s.Std.close(this._context), + n = this._context.new_var(r), + o = s.Std.ema(n, i, this._context), + a = this._context.new_var(o), + l = s.Std.ema(a, i, this._context); + return [this.f_0(o, l)] + } + } + }, { + name: "Ease of Movement", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + } + }, + inputs: { + in_0: 1e4, + in_1: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Ease Of Movement", + shortDescription: "EOM", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Divisor", + defval: 1e4, + type: "integer", + min: 1, + max: 1e9 + }, { + id: "in_1", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Ease of Movement@tv-basicstudies-1", + scriptIdPart: "", + name: "Ease of Movement", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t, i, s, r) { + return e * t * (i - s) / r + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.hl2(this._context), + o = this._context.new_var(n), + a = s.Std.change(o), + l = this.f_0(i, a, s.Std.high(this._context), s.Std.low(this + ._context), s.Std.volume(this._context)), + c = this._context.new_var(l); + return [s.Std.sma(c, r, this._context)] + } + } + }, { + name: "Elders Force Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F44336" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 13 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Elder's Force Index", + shortDescription: "EFI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 13, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Elders Force Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Elders Force Index", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e * t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.close(this._context), + n = this._context.new_var(r), + o = s.Std.change(n), + a = this.f_0(o, s.Std.volume(this._context)), + l = this._context.new_var(a); + return [s.Std.ema(l, i, this._context)] + } + } + }, { + name: "EMA Cross", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + }, + plot_2: { + linestyle: 0, + linewidth: 4, + plottype: 3, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9, + in_1: 26 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Short", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Long", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Crosses", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "EMA Cross", + shortDescription: "EMA Cross", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Short", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Long", + defval: 26, + type: "integer", + min: 1, + max: 2e3 + }], + id: "EMA Cross@tv-basicstudies-1", + scriptIdPart: "", + name: "EMA Cross", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e ? t : s.Std.na() + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.close(this._context), + o = this._context.new_var(n), + a = s.Std.ema(o, i, this._context), + l = this._context.new_var(n), + c = s.Std.ema(l, r, this._context), + h = a, + u = c, + d = s.Std.cross(a, c, this._context); + return [h, u, this.f_0(d, a)] + } + } + }, { + name: "Envelopes", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 95, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 10, + in_2: 10, + in_3: "Simple", + in_4: "close" + } + }, + plots: [{ + id: "plot_1", + type: "line" + }, { + id: "plot_0", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Average", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Envelopes", + shortDescription: "Envelopes", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_1", + objBId: "plot_2", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Upper Percentage", + defval: 2, + type: "float", + min: 0 + }, { + id: "in_2", + name: "Lower Percentage", + defval: 2, + type: "float", + min: 0 + }, { + id: "in_3", + name: "Method", + type: "text", + defval: "Simple", + options: ["Simple", "Exponential", "Weighted"] + }, { + id: "in_4", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }], + id: "Envelope@tv-basicstudies-1", + scriptIdPart: "", + name: "Envelopes", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e * (1 + t) + }, this.f_1 = function(e, t) { + return e * (1 - t) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_var(s.Std[this._input(4)](this._context)), + r = s.Std.sma(i, this._input(0), this._context); + return "Exponential" === this._input(3) ? r = s.Std.ema(i, this + ._input(0), this._context) : "Weighted" === this._input( + 3) && (r = s.Std.wma(i, this._input(0), this._context)), [ + this + .f_0(r, this._input(1) / 100), r, this.f_1(r, this._input( + 2) / 100) + ] + } + } + }, { + name: "Standard Error", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Standard Error@tv-basicstudies-1", + scriptIdPart: "", + name: "Standard Error", + description: "Standard Error", + shortDescription: "Standard Error", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF6D00" + } + }, + inputs: { + length: 14 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "length", + type: "integer", + name: "Length" + }], + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0) + }, this.main = function(e, t) { + this._context = e, this._input = t; + for (var i, r, n = this._context.new_var(s.Std.close(this + ._context)), o = 0, a = 0, l = 0; l < this.period; l++) o += + l + 1, a += n.get(l); + i = o / this.period, r = a / this.period; + var c = 0, + h = 0, + u = 0; + for (l = 0; l < this.period; l++) u += Math.pow(r - n.get(l), 2), + h += (i - l - 1) * (r - n.get(l)), c += Math.pow(i - l - 1, 2); + return h = Math.pow(h, 2), [Math.sqrt((u - h / c) / (this.period - + 2))] + } + } + }, { + name: "Standard Error Bands", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !0, + id: "Standard Error Bands@tv-basicstudies-1", + scriptIdPart: "", + name: "Standard Error Bands", + description: "Standard Error Bands", + shortDescription: "Standard Error Bands", + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + transparency: 0, + trackPrice: !1, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#FF6D00" + }, + plot_2: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#2196F3" + } + }, + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 95, + visible: !0 + } + }, + inputs: { + periods: 21, + errors: 2, + method: "Simple", + averagePeriods: 3 + } + }, + styles: { + plot_0: { + title: "Plot 1" + }, + plot_1: { + title: "Plot 2" + }, + plot_2: { + title: "Plot 3" + } + }, + filledAreas: [{ + id: "fill_0", + objAId: "plot_0", + objBId: "plot_2", + type: "plot_plot", + title: "Background" + }], + inputs: [{ + id: "periods", + type: "integer", + name: "Periods" + }, { + id: "errors", + type: "float", + name: "Standard Errors" + }, { + id: "method", + name: "Method", + type: "text", + defval: "Simple", + options: ["Simple", "Exponential", "Weighted"] + }, { + id: "averagePeriods", + type: "integer", + name: "Averaging Periods" + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.errorDeviation = this._input(1), this.maMethod = this + ._input(2), this.averagePeriod = this._input(3) + }, this.main = function(e, t) { + this._context = e, this._input = t; + for (var i, r, n = this._context.new_var(s.Std.close(this + ._context)), o = 0, a = 0, l = 0; l < this.period; l++) o += + l + 1, a += n.get(l); + i = o / this.period, r = a / this.period; + var c = 0, + h = 0, + u = 0; + for (l = 0; l < this.period; l++) u += Math.pow(r - n.get(l), 2), + h += (i - l - 1) * (r - n.get(l)), c += Math.pow(i - l - 1, 2); + h = Math.pow(h, 2); + var d, p, _, m = Math.sqrt((u - h / c) / (this.period - 2)), + f = s.Std.linreg(n, this.period, 0), + g = this._context.new_var(f + this.errorDeviation * m), + b = this._context.new_var(f), + v = this._context.new_var(f - this.errorDeviation * m); + return "Simple" === this.maMethod ? (d = s.Std.sma(g, this + .averagePeriod, this._context), p = s.Std.sma(b, this + .averagePeriod, this._context), _ = s.Std.sma(v, this + .averagePeriod, this._context)) : "Exponential" === this + .maMethod ? (d = s.Std.ema(g, this.averagePeriod, this + ._context), p = s.Std.ema(b, this.averagePeriod, this + ._context), _ = s.Std.ema(v, this.averagePeriod, this + ._context)) : (d = s.Std.wma(g, this.averagePeriod, this + ._context), p = s.Std.wma(b, this.averagePeriod, this + ._context), _ = s.Std.wma(v, this.averagePeriod, this + ._context)), [d, p, _] + } + } + }, { + name: "Fisher Transform", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + bands: [{ + color: "#E91E63", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 1.5 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: .75 + }, { + color: "#E91E63", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -.75 + }, { + color: "#E91E63", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -1.5 + }], + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Fisher", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_1: { + title: "Trigger", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Fisher Transform", + shortDescription: "Fisher", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Level", + isHidden: !1 + }, { + id: "hline_1", + name: "Level", + isHidden: !1 + }, { + id: "hline_2", + name: "Level", + isHidden: !1 + }, { + id: "hline_3", + name: "Level", + isHidden: !1 + }, { + id: "hline_4", + name: "Level", + isHidden: !1 + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }], + id: "fisher_transform@tv-basicstudies-1", + scriptIdPart: "", + name: "Fisher Transform", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e) { + var t = s.Std.lt(e, -.99) ? -.999 : e; + return [s.Std.gt(e, .99) ? .999 : t] + }, this.f_1 = function() { + var e = this._input(0), + t = this._context.new_var(s.Std.hl2(this._context)), + i = s.Std.highest(t, e, this._context), + r = this._context.new_var(s.Std.hl2(this._context)), + n = s.Std.lowest(r, e, this._context), + o = this._context.new_var(), + a = this.f_0(.66 * ((s.Std.hl2(this._context) - n) / s.Std.max( + i - n, .001) - .5) + .67 * s.Std.nz(o.get(1))); + o.set(a[0]); + var l = this._context.new_var(); + l.set(.5 * s.Std.log((1 + o.get(0)) / s.Std.max(1 - o.get(0), + .001)) + .5 * s.Std.nz(l.get(1))); + var c = l.get(1); + return [l.get(0), c] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_1() + } + } + }, { + name: "Historical Volatility", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Historical Volatility", + shortDescription: "HV", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 1e12 + }], + id: "historical_volatility@tv-basicstudies-1", + scriptIdPart: "", + name: "Historical Volatility", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._input(0), + t = s.Std.or(s.Std.isintraday(this._context), s.Std.and(s.Std + .isdaily(this._context), s.Std.eq(s.Std.interval(this + ._context), 1))) ? 1 : 7, + i = this._context.new_var(s.Std.close(this._context)), + r = this._context.new_var(s.Std.log(s.Std.close(this._context) / + i.get(1))); + return [100 * s.Std.stdev(r, e, this._context) * s.Std.sqrt(365 / + t)] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_0() + } + } + }, { + name: "Hull MA", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Hull Moving Average", + shortDescription: "HMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Hull MA@tv-basicstudies-1", + scriptIdPart: "", + name: "Hull MA", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return 2 * e - t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = r / 2; + this._context.setMinimumAdditionalDepth(Math.ceil(r + n)); + var o = this._context.new_var(i), + a = s.Std.wma(o, n, this._context), + l = this._context.new_var(i), + c = s.Std.wma(l, r, this._context), + h = this.f_0(a, c), + u = s.Std.sqrt(r), + d = s.Std.round(u), + p = this._context.new_var(h); + return [s.Std.wma(p, d, this._context)] + } + } + }, { + name: "Ichimoku Cloud", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#B71C1C" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + }, + plot_3: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#A5D6A7" + }, + plot_4: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#EF9A9A" + } + }, + palettes: { + palette_0: { + colors: { + 0: { + color: "#43A047", + width: 1, + style: 0 + }, + 1: { + color: "#F44336", + width: 1, + style: 0 + } + } + } + }, + filledAreasStyle: { + fill_0: { + color: "#000080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 9, + in_1: 26, + in_2: 52, + in_3: 26 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }, { + id: "plot_3", + type: "line" + }, { + id: "plot_4", + type: "line" + }, { + id: "plot_5", + palette: "palette_0", + target: "fill_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Conversion Line", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_1: { + title: "Base Line", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_2: { + title: "Lagging Span", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_3: { + title: "Lead 1", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_4: { + title: "Lead 2", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Ichimoku Cloud", + shortDescription: "Ichimoku", + is_price_study: !0, + is_hidden_study: !1, + id: "Ichimoku Cloud@tv-basicstudies-1", + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + } + }, + valToIndex: { + 0: 0, + 1: 1 + } + } + }, + filledAreas: [{ + id: "fill_0", + objAId: "plot_3", + objBId: "plot_4", + type: "plot_plot", + title: "Plots Background", + isHidden: !1, + palette: "palette_0" + }], + inputs: [{ + id: "in_0", + name: "Conversion Line Periods", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "Base Line Periods", + defval: 26, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_2", + name: "Lagging Span 2 Periods", + defval: 52, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_3", + name: "Displacement", + defval: 26, + type: "integer", + min: 1, + max: 1e12 + }], + scriptIdPart: "", + name: "Ichimoku Cloud", + format: { + type: "inherit" + } + }, + constructor: function() { + this.donchian = function(e) { + var t = this._context.new_var(s.Std.low(this._context)), + i = this._context.new_var(s.Std.high(this._context)); + return s.Std.avg(s.Std.lowest(t, e, this._context), s.Std.highest(i, + e, this._context)) + }, this.f_1 = function() { + var e = this._input(0), + t = this._input(1), + i = this._input(2), + r = this._input(3), + n = this.donchian(e), + o = this.donchian(t), + a = s.Std.avg(n, o), + l = this.donchian(i); + return [n, o, s.Std.close(this._context), a, l, 1 - r, r - 1, r - 1, + s.Std.gt(a, l) ? 0 : 1 + ] + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this.f_1(); + return [i[0], i[1], { + value: i[2], + offset: i[5] + }, { + value: i[3], + offset: i[6] + }, { + value: i[4], + offset: i[7] + }, i[8]] + } + } + }, { + name: "Keltner Channels", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 95, + visible: !0 + } + }, + inputs: { + in_0: !0, + in_1: 20, + in_2: 1 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Middle", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Keltner Channels", + shortDescription: "KC", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_0", + objBId: "plot_2", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "useTrueRange", + defval: !0, + type: "bool" + }, { + id: "in_1", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "mult", + defval: 1, + type: "float", + min: -1e12, + max: 1e12 + }], + id: "Keltner Channels@tv-basicstudies-1", + scriptIdPart: "", + name: "Keltner Channels", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t, i, s) { + return e ? t : i - s + }, this.f_1 = function(e, t, i) { + return e + t * i + }, this.f_2 = function(e, t, i) { + return e - t * i + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._input(2), + a = this._context.new_var(i), + l = s.Std.ema(a, n, this._context), + c = this.f_0(r, s.Std.tr(this._context), s.Std.high(this + ._context), s.Std.low(this._context)), + h = this._context.new_var(c), + u = s.Std.ema(h, n, this._context); + return [this.f_1(l, u, o), l, this.f_2(l, u, o)] + } + } + }, { + name: "Klinger Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Klinger Oscillator", + shortDescription: "Klinger Oscillator", + is_price_study: !1, + inputs: [], + id: "Klinger Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Klinger Oscillator", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return s.Std.ge(e, 0) ? t : -t + }, this.f_1 = function(e, t) { + return e - t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.hlc3(this._context); + this._context.setMinimumAdditionalDepth(66); + var r = this._context.new_var(i), + n = s.Std.change(r), + o = this.f_0(n, s.Std.volume(this._context)), + a = this._context.new_var(o), + l = s.Std.ema(a, 34, this._context), + c = this._context.new_var(o), + h = s.Std.ema(c, 55, this._context), + u = this.f_1(l, h), + d = this._context.new_var(u); + return [u, s.Std.ema(d, 13, this._context)] + } + } + }, { + name: "Know Sure Thing", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#009688" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F44336" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 10, + in_1: 15, + in_2: 20, + in_3: 30, + in_4: 10, + in_5: 10, + in_6: 10, + in_7: 15, + in_8: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "KST", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Know Sure Thing", + shortDescription: "KST", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "roclen1", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "roclen2", + defval: 15, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "roclen3", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_3", + name: "roclen4", + defval: 30, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_4", + name: "smalen1", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_5", + name: "smalen2", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_6", + name: "smalen3", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_7", + name: "smalen4", + defval: 15, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_8", + name: "siglen", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Know Sure Thing@tv-basicstudies-1", + scriptIdPart: "", + name: "Know Sure Thing", + format: { + type: "price", + precision: 4 + } + }, + constructor: function() { + this.f_0 = function(e, t, i, s) { + return e + 2 * t + 3 * i + 4 * s + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2), + o = this._input(3), + a = this._input(4), + l = this._input(5), + c = this._input(6), + h = this._input(7), + u = this._input(8); + this._context.setMinimumAdditionalDepth(Math.max(a + i, l + r, c + + n, h + o) + u); + var d = s.Std.close(this._context), + p = i, + _ = this._context.new_var(d), + m = s.Std.roc(_, p), + f = a, + g = this._context.new_var(m), + b = s.Std.sma(g, f, this._context), + v = r, + S = this._context.new_var(d), + y = s.Std.roc(S, v), + w = l, + P = this._context.new_var(y), + C = s.Std.sma(P, w, this._context), + x = n, + T = this._context.new_var(d), + I = s.Std.roc(T, x), + M = c, + O = this._context.new_var(I), + L = s.Std.sma(O, M, this._context), + A = o, + E = this._context.new_var(d), + k = s.Std.roc(E, A), + D = h, + V = this._context.new_var(k), + B = s.Std.sma(V, D, this._context), + R = this.f_0(b, C, L, B), + N = this._context.new_var(R); + return [R, s.Std.sma(N, u, this._context)] + } + } + }, { + name: "Least Squares Moving Average", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 25, + in_1: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Least Squares Moving Average", + shortDescription: "LSMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 25, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "Offset", + defval: 0, + type: "integer", + min: -1e12, + max: 1e12 + }], + id: "Least Squares Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Least Squares Moving Average", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.close(this._context), + o = this._context.new_var(n); + return [s.Std.linreg(o, i, r)] + } + } + }, { + name: "Linear Regression Curve", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Linear Regression Curve", + shortDescription: "LRC", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Linear Regression Curve@tv-basicstudies-1", + scriptIdPart: "", + name: "Linear Regression Curve", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._context.new_var(i); + return [s.Std.linreg(n, r, 0)] + } + } + }, { + name: "Linear Regression Slope", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Linear Regression Slope@tv-basicstudies-1", + scriptIdPart: "", + name: "Linear Regression Slope", + description: "Linear Regression Slope", + shortDescription: "Linear Regression Slope", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF5252" + } + }, + inputs: { + periods: 14 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + type: "integer", + name: "Periods" + }], + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0) + }, this.linregSlope = function(e, t, i) { + var s, r, n, o = 0, + a = 0, + l = 0, + c = 0; + for (s = 0; s < t; ++s) o += n = t - 1 - s + 1, a += r = e.get(s), + l += n * n, c += r * n; + return (t * c - o * a) / (t * l - o * o) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_var(s.Std.close(this._context)); + return [this.linregSlope(i, this.period, 0)] + } + } + }, { + name: "MA Cross", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_2: { + linestyle: 0, + linewidth: 4, + plottype: 3, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9, + in_1: 26 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Short", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Long", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Crosses", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "MA Cross", + shortDescription: "MA Cross", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Short", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Long", + defval: 26, + type: "integer", + min: 1, + max: 2e3 + }], + id: "MA Cross@tv-basicstudies-1", + scriptIdPart: "", + name: "MA Cross", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e ? t : s.Std.na() + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.close(this._context), + o = this._context.new_var(n), + a = s.Std.sma(o, i, this._context), + l = this._context.new_var(n), + c = s.Std.sma(l, r, this._context), + h = a, + u = c, + d = s.Std.cross(a, c, this._context); + return [h, u, this.f_0(d, a)] + } + } + }, { + name: "MA with EMA Cross", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#43A047" + }, + plot_2: { + linestyle: 0, + linewidth: 4, + plottype: 3, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "MA", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "EMA", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Crosses", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "MA with EMA Cross", + shortDescription: "MA/EMA Cross", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length MA", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Length EMA", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "MA with EMA Cross@tv-basicstudies-1", + scriptIdPart: "", + name: "MA with EMA Cross", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e ? t : s.Std.na() + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.close(this._context), + o = this._context.new_var(n), + a = s.Std.sma(o, i, this._context), + l = this._context.new_var(n), + c = s.Std.ema(l, r, this._context), + h = a, + u = c, + d = s.Std.cross(a, c, this._context); + return [h, u, this.f_0(d, a)] + } + } + }, { + name: "Mass Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Mass Index", + shortDescription: "Mass Index", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Mass Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Mass Index", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e - t + }, this.f_1 = function(e, t) { + return e / t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this.f_0(s.Std.high(this._context), s.Std.low(this + ._context)), + n = this._context.new_var(r), + o = s.Std.ema(n, 9, this._context), + a = this._context.new_var(o), + l = s.Std.ema(a, 9, this._context), + c = this.f_1(o, l), + h = this._context.new_var(c); + return [s.Std.sum(h, i, this._context)] + } + } + }, { + name: "McGinley Dynamic", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "McGinley Dynamic", + shortDescription: "McGinley Dynamic", + is_price_study: !0, + is_hidden_study: !1, + id: "mcginley_dynamic@tv-basicstudies-1", + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 1e12 + }], + scriptIdPart: "", + name: "McGinley Dynamic", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._input(0), + t = s.Std.close(this._context), + i = this._context.new_var(t), + r = s.Std.ema(i, e, this._context), + n = this._context.new_var(), + o = n.get(1) + (t - n.get(1)) / (e * s.Std.pow(t / n.get(1), + 4)); + return n.set(s.Std.na(n.get(1)) ? r : o), [n.get(0)] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_0() + } + } + }, { + name: "Median Price", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + id: "Median Price@tv-basicstudies-1", + scriptIdPart: "", + name: "Median Price", + description: "Median Price", + shortDescription: "Median Price", + is_price_study: !0, + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF6D00" + } + }, + inputs: {} + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [], + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + return this._context = e, this._input = t, [s.Std.hl2(this + ._context)] + } + } + }, { + name: "Momentum", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 10, + in_1: "close" + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Mom", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Momentum", + shortDescription: "Mom", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }], + id: "Momentum@tv-basicstudies-1", + scriptIdPart: "", + name: "Momentum", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std[this._input(1)](this._context), + n = this._context.new_var(r).get(i); + return [n ? r - n : null] + } + } + }, { + name: "Money Flow Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#7E57C2" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#7E57C2", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Money Flow Index", + shortDescription: "MFI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Money Flow@tv-basicstudies-1", + scriptIdPart: "", + name: "Money Flow Index", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return e * (s.Std.le(t, 0) ? 0 : i) + }, this.f_1 = function(e, t, i) { + return e * (s.Std.ge(t, 0) ? 0 : i) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.hlc3(this._context), + n = this._context.new_var(r), + o = s.Std.change(n), + a = this.f_0(s.Std.volume(this._context), o, r), + l = this._context.new_var(a), + c = s.Std.sum(l, i, this._context), + h = this.f_1(s.Std.volume(this._context), o, r), + u = this._context.new_var(h), + d = s.Std.sum(u, i, this._context); + return [s.Std.rsi(c, d)] + } + } + }, { + name: "Moving Average", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + smoothedMA: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !1 + } + }, + inputs: { + length: 9, + source: "close", + offset: 0, + smoothingLine: "SMA", + smoothingLength: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "smoothedMA", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + smoothedMA: { + title: "Smoothed MA", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Moving Average", + shortDescription: "MA", + is_price_study: !0, + inputs: [{ + id: "length", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "source", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "offset", + name: "Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }, { + id: "smoothingLine", + name: "Smoothing Line", + defval: "SMA", + type: "text", + options: ["SMA", "EMA", "WMA"] + }, { + id: "smoothingLength", + name: "Smoothing Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std[this._input(1)](this._context), + r = this._input(0), + n = this._input(2), + o = this._input(3), + a = this._input(4); + this._context.setMinimumAdditionalDepth(r + a); + var l, c = this._context.new_var(i), + h = s.Std.sma(c, r, this._context), + u = this._context.new_var(h); + return "EMA" === o ? l = s.Std.ema(u, a, this._context) : "WMA" === + o ? l = s.Std.wma(u, a, this._context) : "SMA" === o && (l = s + .Std.sma(u, a, this._context)), [{ + value: h, + offset: n + }, { + value: l, + offset: n + }] + } + } + }, { + name: "Moving Average Channel", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 20, + in_2: 0, + in_3: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + filledAreas: [{ + id: "fill_0", + objAId: "plot_0", + objBId: "plot_1", + type: "plot_plot", + title: "Plots Background" + }], + description: "Moving Average Channel", + shortDescription: "MAC", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Upper Length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "Lower Length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_2", + name: "Upper Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }, { + id: "in_3", + name: "Lower Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }], + id: "Moving Average Channel@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Channel", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.high(this._context), + r = s.Std.low(this._context), + n = this._input(0), + o = this._input(1), + a = this._input(2), + l = this._input(3), + c = this._context.new_var(i), + h = this._context.new_var(r); + return [{ + value: s.Std.sma(c, n, this._context), + offset: a + }, { + value: s.Std.sma(h, o, this._context), + offset: l + }] + } + } + }, { + name: "Moving Average Convergence/Divergence", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 5, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF5252" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + palettes: { + palette_0: { + colors: { + 0: { + color: "#26A69A", + width: 1, + style: 0 + }, + 1: { + color: "#B2DFDB", + width: 1, + style: 0 + }, + 2: { + color: "#FFCDD2", + width: 1, + style: 0 + }, + 3: { + color: "#FF5252", + width: 1, + style: 0 + } + } + } + }, + inputs: { + in_0: 12, + in_1: 26, + in_3: "close", + in_2: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }, { + id: "plot_3", + palette: "palette_0", + target: "plot_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Histogram", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "MACD", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "MACD", + shortDescription: "MACD", + is_price_study: !1, + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + }, + 2: { + name: "Color 2" + }, + 3: { + name: "Color 3" + } + } + } + }, + inputs: [{ + id: "in_0", + name: "fastLength", + defval: 12, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "slowLength", + defval: 26, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_3", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "in_2", + name: "signalLength", + defval: 9, + type: "integer", + min: 1, + max: 50 + }], + id: "Moving Average Convergence/Divergence@tv-basicstudies-1", + scriptIdPart: "", + name: "MACD", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e - t + }, this.f_1 = function(e) { + var t = e > 0 ? 1 : 3, + i = s.Std.change(this._context.new_var(e)); + return t - (s.Std.le(i, 0) ? 0 : 1) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std[this._input(2)](this._context), + r = this._input(0), + n = this._input(1), + o = this._input(3); + this._context.setMinimumAdditionalDepth(Math.max(r, n) + o); + var a = this._context.new_var(i), + l = s.Std.ema(a, r, this._context), + c = this._context.new_var(i), + h = s.Std.ema(c, n, this._context), + u = this.f_0(l, h), + d = this._context.new_var(u), + p = s.Std.ema(d, o, this._context), + _ = this.f_0(u, p); + return [_, u, p, this.f_1(_)] + } + } + }, { + name: "Moving Average Exponential", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + smoothedMA: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !1 + } + }, + inputs: { + length: 9, + source: "close", + offset: 0, + smoothingLine: "SMA", + smoothingLength: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "smoothedMA", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + smoothedMA: { + title: "Smoothed MA", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Moving Average Exponential", + shortDescription: "EMA", + is_price_study: !0, + inputs: [{ + id: "length", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "source", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "offset", + name: "Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }, { + id: "smoothingLine", + name: "Smoothing Line", + defval: "SMA", + type: "text", + options: ["SMA", "EMA", "WMA"] + }, { + id: "smoothingLength", + name: "Smoothing Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Moving Average Exponential@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Exponential", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std[this._input(1)](this._context), + r = this._input(0), + n = this._input(2), + o = this._input(3), + a = this._input(4); + this._context.setMinimumAdditionalDepth(r + a); + var l, c = this._context.new_var(i), + h = s.Std.ema(c, r, this._context), + u = this._context.new_var(h); + return "EMA" === o ? l = s.Std.ema(u, a, this._context) : "WMA" === + o ? l = s.Std.wma(u, a, this._context) : "SMA" === o && (l = s + .Std.sma(u, a, this._context)), [{ + value: h, + offset: n + }, { + value: l, + offset: n + }] + } + } + }, { + name: "Moving Average Weighted", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9, + in_1: "close", + in_2: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Moving Average Weighted", + shortDescription: "WMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "in_2", + name: "Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }], + id: "Moving Average Weighted@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Weighted", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std[this._input(1)](this._context), + r = this._input(0), + n = this._input(2), + o = this._context.new_var(i); + return [{ + value: s.Std.wma(o, r, this._context), + offset: n + }] + } + } + }, { + name: "Moving Average Double", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + id: "Moving Average Double@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Double", + description: "Moving Average Double", + shortDescription: "Moving Average Double", + is_price_study: !0, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF6D00" + }, + plot_1: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#2196F3" + } + }, + inputs: { + firstPeriods: 14, + secondPeriods: 21, + method: "Simple" + } + }, + styles: { + plot_0: { + title: "Plot 1" + }, + plot_1: { + title: "Plot 2" + } + }, + inputs: [{ + id: "firstPeriods", + name: "1st Period", + type: "integer", + defval: 14, + min: 1, + max: 1e4 + }, { + id: "secondPeriods", + name: "2nd Period", + type: "integer", + defval: 21, + min: 1, + max: 1e4 + }, { + id: "method", + name: "Method", + type: "text", + defval: "Simple", + options: ["Simple", "Exponential", "Weighted"] + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i, r, n = this._context.new_var(s.Std.close(this._context)); + return "Exponential" === this._input(2) ? (i = s.Std.ema(n, this + ._input(0), this._context), r = s.Std.ema(n, this + ._input(1), this._context)) : "Weighted" === this._input( + 2) ? (i = s.Std.wma(n, this._input(0), this._context), r = s + .Std + .wma(n, this._input(1), this._context)) : (i = s.Std.sma(n, + this._input(0), this._context), r = s.Std.sma(n, this + ._input(1), this._context)), [i, r] + } + } + }, { + name: "Moving Average Triple", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !0, + id: "Moving Average Triple@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Triple", + description: "Moving Average Triple", + shortDescription: "Moving Average Triple", + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + transparency: 0, + trackPrice: !1, + color: "#FF6D00" + }, + plot_1: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#2196F3" + }, + plot_2: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#26C6DA" + } + }, + inputs: { + firstPeriods: 14, + secondPeriods: 21, + thirdPeriods: 35, + method: "Simple" + } + }, + styles: { + plot_0: { + title: "Plot 1" + }, + plot_1: { + title: "Plot 2" + }, + plot_2: { + title: "Plot 3" + } + }, + inputs: [{ + id: "firstPeriods", + name: "1st Period", + type: "integer", + defval: 14, + min: 1, + max: 1e4 + }, { + id: "secondPeriods", + name: "2nd Period", + type: "integer", + defval: 21, + min: 1, + max: 1e4 + }, { + id: "thirdPeriods", + name: "3rd Period", + type: "integer", + defval: 35, + min: 1, + max: 1e4 + }, { + id: "method", + name: "Method", + type: "text", + defval: "Simple", + options: ["Simple", "Exponential", "Weighted"] + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i, r, n, o = this._context.new_var(s.Std.close(this._context)); + return "Exponential" === this._input(3) ? (i = s.Std.ema(o, this + ._input(0), this._context), r = s.Std.ema(o, this + ._input(1), this._context), n = s.Std.ema(o, this + ._input(2), this._context)) : "Weighted" === this._input( + 3) ? (i = s.Std.wma(o, this._input(0), this._context), r = s + .Std + .wma(o, this._input(1), this._context), n = s.Std.wma(o, + this._input(2), this._context)) : (i = s.Std.sma(o, this + ._input(0), this._context), r = s.Std.sma(o, this + ._input(1), this._context), n = s.Std.sma(o, this + ._input(2), this._context)), [i, r, n] + } + } + }, { + name: "Moving Average Adaptive", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !0, + id: "Moving Average Adaptive@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Adaptive", + description: "Moving Average Adaptive", + shortDescription: "Moving Average Adaptive", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + transparency: 0, + trackPrice: !1, + color: "#AB47BC" + } + }, + inputs: { + periods: 10 + } + }, + styles: { + plot_0: { + title: "Plot 1" + } + }, + inputs: [{ + id: "periods", + name: "Period", + type: "integer", + defval: 10, + min: 1, + max: 1e4 + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.periods = this._input(0) + }, this.ama = function(e, t) { + var i = this.periods, + r = this._context.new_var(), + n = e.get(), + o = s.Std.stdev(t, i, this._context), + a = s.Std.log(n / e.get(i)) / (o * Math.sqrt(i)), + l = .1 * Math.abs(a), + c = (n - r.get(1)) * l + r.get(1); + return r.set(isNaN(c) ? n : c), c + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_var(s.Std.close(this._context)), + r = this._context.new_var(s.Std.log(i.get() / i.get(1))); + return [this.ama(i, r)] + } + } + }, { + name: "Moving Average Hamming", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !0, + id: "Moving Average Hamming@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Hamming", + description: "Moving Average Hamming", + shortDescription: "Moving Average Hamming", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + transparency: 0, + trackPrice: !1, + color: "#4CAF50" + } + }, + inputs: { + periods: 10 + } + }, + styles: { + plot_0: { + title: "Plot 1" + } + }, + inputs: [{ + id: "periods", + name: "Period", + type: "integer", + defval: 10, + min: 1, + max: 1e4 + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.periods = this._input(0); + for (var i = [], s = 0, r = 1; r <= this.periods; ++r) { + var n = Math.sin((1 + r) / this.periods * Math.PI / 2); + i.unshift(n), s += n + } + this.hmaFactors = i, this.hmaFactorsSum = s + }, this.hma = function(e) { + for (var t = this.periods, i = 0, s = 0; s < t; ++s) i += e.get(t - + s - 1) * this.hmaFactors[s]; + return i /= this.hmaFactorsSum + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_var(s.Std.close(this._context)); + return [this.hma(i)] + } + } + }, { + name: "Moving Average Multiple", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !0, + id: "Moving Average Multiple@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Multiple", + description: "Moving Average Multiple", + shortDescription: "Moving Average Multiple", + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }, { + id: "plot_3", + type: "line" + }, { + id: "plot_4", + type: "line" + }, { + id: "plot_5", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + transparency: 0, + trackPrice: !1, + color: "#9C27B0" + }, + plot_1: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#FF6D00" + }, + plot_2: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#43A047" + }, + plot_3: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#26C6DA" + }, + plot_4: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#F50057" + }, + plot_5: { + linestyle: 0, + visible: !0, + linewidth: 1, + transparency: 0, + plottype: 0, + trackPrice: !1, + color: "#2196F3" + } + }, + inputs: { + firstPeriods: 14, + secondPeriods: 21, + thirdPeriods: 35, + fourthPeriods: 50, + fifthPeriods: 100, + sixthPeriods: 200, + method: "Simple" + } + }, + styles: { + plot_0: { + title: "Plot 1" + }, + plot_1: { + title: "Plot 2" + }, + plot_2: { + title: "Plot 3" + }, + plot_3: { + title: "Plot 4" + }, + plot_4: { + title: "Plot 5" + }, + plot_5: { + title: "Plot 6" + } + }, + inputs: [{ + id: "firstPeriods", + name: "1st Period", + type: "integer", + defval: 14, + min: 1, + max: 1e4 + }, { + id: "secondPeriods", + name: "2nd Period", + type: "integer", + defval: 21, + min: 1, + max: 1e4 + }, { + id: "thirdPeriods", + name: "3rd Period", + type: "integer", + defval: 35, + min: 1, + max: 1e4 + }, { + id: "fourthPeriods", + name: "4th Period", + type: "integer", + defval: 50, + min: 1, + max: 1e4 + }, { + id: "fifthPeriods", + name: "5th Period", + type: "integer", + defval: 100, + min: 1, + max: 1e4 + }, { + id: "sixthPeriods", + name: "6th Period", + type: "integer", + defval: 200, + min: 1, + max: 1e4 + }, { + id: "method", + name: "Method", + type: "text", + defval: "Simple", + options: ["Simple", "Exponential", "Weighted"] + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i, r, n, o, a, l, c = this._context.new_var(s.Std.close(this + ._context)); + return "Exponential" === this._input(6) ? (i = s.Std.ema(c, this + ._input(0), this._context), r = s.Std.ema(c, this + ._input(1), this._context), n = s.Std.ema(c, this + ._input(2), this._context), o = s.Std.ema(c, this + ._input(3), this._context), a = s.Std.ema(c, this + ._input(4), this._context), l = s.Std.ema(c, this + ._input(5), this._context)) : "Weighted" === this._input( + 6) ? (i = s.Std.wma(c, this._input(0), this._context), r = s + .Std + .wma(c, this._input(1), this._context), n = s.Std.wma(c, + this._input(2), this._context), o = s.Std.wma(c, this + ._input(3), this._context), a = s.Std.wma(c, this + ._input(4), this._context), l = s.Std.wma(c, this + ._input(5), this._context)) : (i = s.Std.sma(c, this + ._input(0), this._context), r = s.Std.sma(c, this + ._input(1), this._context), n = s.Std.sma(c, this + ._input(2), this._context), o = s.Std.sma(c, this + ._input(3), this._context), a = s.Std.sma(c, this + ._input(4), this._context), l = s.Std.sma(c, this + ._input(5), this._context)), [i, r, n, o, a, l] + } + } + }, { + name: "Majority Rule", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Majority Rule@tv-basicstudies-1", + scriptIdPart: "", + name: "Majority Rule", + description: "Majority Rule", + shortDescription: "Majority Rule", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF5252" + } + }, + inputs: { + rollingPeriod: 14 + } + }, + styles: { + plot_0: { + title: "Majority Rule" + } + }, + inputs: [{ + id: "rollingPeriod", + type: "integer", + name: "Rolling Period" + }], + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.rollingPeriod = this + ._input(0) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i, r = s.Std.close(this._context); + return i = r > this._context.new_var(r).get(1) ? 1 : 0, [100 * s.Std + .sma(this._context.new_var(i), this.rollingPeriod, this + ._context) + ] + } + } + }, { + name: "Net Volume", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Net Volume", + shortDescription: "Net Volume", + is_price_study: !1, + inputs: [], + id: "Net Volume@tv-basicstudies-1", + scriptIdPart: "", + name: "Net Volume", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return s.Std.gt(e, 0) ? t : s.Std.lt(i, 0) ? -t : 0 * t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._context.new_var(i), + n = s.Std.change(r); + return [this.f_0(n, s.Std.volume(this._context), n)] + } + } + }, { + name: "On Balance Volume", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + smoothedMA: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !1 + } + }, + inputs: { + smoothingLine: "SMA", + smoothingLength: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "smoothedMA", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + smoothedMA: { + title: "Smoothed MA", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "On Balance Volume", + shortDescription: "OBV", + is_price_study: !1, + inputs: [{ + id: "smoothingLine", + name: "Smoothing Line", + defval: "SMA", + type: "text", + options: ["SMA", "EMA", "WMA"] + }, { + id: "smoothingLength", + name: "Smoothing Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "On Balance Volume@tv-basicstudies-1", + scriptIdPart: "", + name: "On Balance Volume", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return s.Std.gt(e, 0) ? t : s.Std.lt(i, 0) ? -t : 0 * t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.close(this._context), + o = this._context.new_var(n), + a = s.Std.change(o), + l = this.f_0(a, s.Std.volume(this._context), a), + c = s.Std.cum(l, this._context); + this._context.setMinimumAdditionalDepth(r); + var h, u = this._context.new_var(c); + return "EMA" === i ? h = s.Std.ema(u, r, this._context) : "WMA" === + i ? h = s.Std.wma(u, r, this._context) : "SMA" === i && (h = s + .Std.sma(u, r, this._context)), [c, h] + } + } + }, { + name: "Parabolic SAR", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 3, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: .02, + in_1: .02, + in_2: .2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Parabolic SAR", + shortDescription: "SAR", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "start", + defval: .02, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_1", + name: "increment", + defval: .02, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_2", + name: "maximum", + defval: .2, + type: "float", + min: -1e12, + max: 1e12 + }], + id: "Parabolic SAR@tv-basicstudies-1", + scriptIdPart: "", + name: "Parabolic SAR", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2); + return [s.Std.sar(i, r, n, this._context)] + } + } + }, { + name: "Price Channel", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F50057" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F50057" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 20, + in_1: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Highprice Line", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Lowprice Line", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Centerprice Line", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Price Channel", + shortDescription: "PC", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Offset Length", + defval: 0, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Price Channel@tv-basicstudies-1", + scriptIdPart: "", + name: "Price Channel", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.high(this._context), + r = this._context.new_var(i), + n = s.Std.low(this._context), + o = this._context.new_var(n), + a = this._input(0), + l = this._input(1), + c = s.Std.highest(r, a, this._context), + h = s.Std.lowest(o, a, this._context); + return [{ + value: c, + offset: l + }, { + value: h, + offset: l + }, { + value: s.Std.avg(c, h), + offset: l + }] + } + } + }, { + name: "Price Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#009688" + } + }, + inputs: { + in_0: 10, + in_1: 21 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Price Oscillator", + shortDescription: "PPO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "shortlen", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "longlen", + defval: 21, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Price Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Price Oscillator", + format: { + type: "price", + precision: 2 + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return (e - t) / t * 100 + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._context.new_var(i), + a = s.Std.sma(o, r, this._context), + l = this._context.new_var(i), + c = s.Std.sma(l, n, this._context); + return [this.f_0(a, c)] + } + } + }, { + name: "Price Volume Trend", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "PVT", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Price Volume Trend", + shortDescription: "PVT", + is_price_study: !1, + is_hidden_study: !1, + id: "price_volume_trend@tv-basicstudies-1", + inputs: [], + scriptIdPart: "", + name: "Price Volume Trend", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._context.new_var(s.Std.close(this._context)); + return [s.Std.cum(s.Std.change(e) / e.get(1) * s.Std.volume(this + ._context), this._context)] + }, this.main = function(e, t) { + return this._context = e, this._input = t, [this.f_0()[0]] + } + } + }, { + name: "Rate Of Change", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "ROC", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Rate Of Change", + shortDescription: "ROC", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero Line", + isHidden: !1 + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }], + id: "rate_of_change@tv-basicstudies-1", + scriptIdPart: "", + name: "Rate Of Change", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_var(s.Std.close(this._context)), + r = this._input(0); + return [100 * (i.get(0) - i.get(r)) / i.get(r)] + } + } + }, { + name: "Relative Strength Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#7E57C2" + }, + smoothedMA: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !1 + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 70 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 30 + }], + filledAreasStyle: { + fill_0: { + color: "#7E57C2", + transparency: 90, + visible: !0 + } + }, + inputs: { + length: 14, + smoothingLine: "SMA", + smoothingLength: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "smoothedMA", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + smoothedMA: { + title: "Smoothed MA", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Relative Strength Index", + shortDescription: "RSI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "length", + name: "Length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "smoothingLine", + name: "Smoothing Line", + defval: "SMA", + type: "text", + options: ["SMA", "EMA", "WMA"] + }, { + id: "smoothingLength", + name: "Smoothing Length", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Relative Strength Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Relative Strength Index", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e) { + return s.Std.max(e, 0) + }, this.f_1 = function(e) { + return -s.Std.min(e, 0) + }, this.f_2 = function(e, t) { + return s.Std.eq(e, 0) ? 100 : s.Std.eq(t, 0) ? 0 : 100 - 100 / (1 + + t / e) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._input(2); + this._context.setMinimumAdditionalDepth(r + o); + var a, l = this._context.new_var(i), + c = s.Std.change(l), + h = this.f_0(c), + u = this._context.new_var(h), + d = s.Std.rma(u, r, this._context), + p = this.f_1(c), + _ = this._context.new_var(p), + m = s.Std.rma(_, r, this._context), + f = this.f_2(m, d), + g = this._context.new_var(f); + return "EMA" === n ? a = s.Std.ema(g, o, this._context) : "WMA" === + n ? a = s.Std.wma(g, o, this._context) : "SMA" === n && (a = s + .Std.sma(g, o, this._context)), [{ + value: f + }, { + value: a + }] + } + } + }, { + name: "Relative Vigor Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#009688" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F44336" + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "RVGI", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Relative Vigor Index", + shortDescription: "RVGI", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Relative Vigor Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Relative Vigor Index", + format: { + precision: 4, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e - t + }, this.f_1 = function(e, t) { + return e / t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this.f_0(s.Std.close(this._context), s.Std.open(this + ._context)), + n = this._context.new_var(r), + o = s.Std.swma(n, this._context), + a = this._context.new_var(o), + l = s.Std.sum(a, i, this._context), + c = this.f_0(s.Std.high(this._context), s.Std.low(this + ._context)), + h = this._context.new_var(c), + u = s.Std.swma(h, this._context), + d = this._context.new_var(u), + p = s.Std.sum(d, i, this._context), + _ = this.f_1(l, p), + m = this._context.new_var(_); + return [_, s.Std.swma(m, this._context)] + } + } + }, { + name: "Relative Volatility Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#7E57C2" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#7E57C2", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Relative Volatility Index", + shortDescription: "RVI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Relative Volatility Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Relative Volatility Index", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return s.Std.le(e, 0) ? 0 : t + }, this.f_1 = function(e, t) { + return s.Std.gt(e, 0) ? 0 : t + }, this.f_2 = function(e, t) { + return e / (e + t) * 100 + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0); + this._context.setMinimumAdditionalDepth(i + 12); + var r = s.Std.close(this._context), + n = this._context.new_var(r), + o = s.Std.stdev(n, i, this._context), + a = this._context.new_var(r), + l = s.Std.change(a), + c = this.f_0(l, o), + h = this._context.new_var(c), + u = s.Std.ema(h, 14, this._context), + d = this.f_1(l, o), + p = this._context.new_var(d), + _ = s.Std.ema(p, 14, this._context); + return [this.f_2(u, _)] + } + } + }, { + name: "SMI Ergodic Indicator/Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 1, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF5252" + } + }, + inputs: { + in_0: 5, + in_1: 20, + in_2: 5 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Indicator", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Oscillator", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "SMI Ergodic Indicator/Oscillator", + shortDescription: "SMIIO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "shortlen", + defval: 5, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "longlen", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "siglen", + defval: 5, + type: "integer", + min: 1, + max: 2e3 + }], + id: "SMI Ergodic Indicator/Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "SMI Ergodic Indicator/Oscillator", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return e - t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2); + this._context.setMinimumAdditionalDepth(i + r + n); + var o = s.Std.close(this._context), + a = this._context.new_var(o), + l = s.Std.tsi(a, i, r, this._context), + c = this._context.new_var(l), + h = s.Std.ema(c, n, this._context); + return [l, h, this.f_0(l, h)] + } + } + }, { + name: "Smoothed Moving Average", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#673AB7" + } + }, + inputs: { + in_0: 7, + in_1: "close" + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Smoothed Moving Average", + shortDescription: "SMMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 7, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }], + id: "smoothed_moving_average@tv-basicstudies-1", + scriptIdPart: "", + name: "Smoothed Moving Average", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._input(0), + t = s.Std[this._input(1)](this._context); + return [s.Std.smma(t, e, this._context)] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_0() + } + } + }, { + name: "Standard Deviation", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + id: "Standard Deviation@tv-basicstudies-1", + scriptIdPart: "", + name: "Standard Deviation", + description: "Standard Deviation", + shortDescription: "Standard Deviation", + is_price_study: !1, + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#009688" + } + }, + inputs: { + periods: 5, + deviations: 1 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + name: "Periods", + type: "integer" + }, { + id: "deviations", + name: "Deviations", + type: "float" + }], + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._context.new_var(s.Std.close(this._context)); + return [s.Std.stdev(n, i, this._context) * r] + } + } + }, { + name: "Stochastic", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14, + in_1: 1, + in_2: 3 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "%K", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "%D", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Stochastic", + shortDescription: "Stoch", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "K", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "D", + defval: 1, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_2", + name: "smooth", + defval: 3, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Stochastic@tv-basicstudies-1", + scriptIdPart: "", + name: "Stochastic", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2); + this._context.setMinimumAdditionalDepth(i + r + n); + var o = s.Std.close(this._context), + a = s.Std.high(this._context), + l = s.Std.low(this._context), + c = this._context.new_var(o), + h = this._context.new_var(a), + u = this._context.new_var(l), + d = s.Std.stoch(c, h, u, i, this._context), + p = this._context.new_var(d), + _ = s.Std.sma(p, r, this._context), + m = this._context.new_var(_); + return [_, s.Std.sma(m, n, this._context)] + } + } + }, { + name: "Stochastic RSI", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#FF6D00" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#2196F3", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14, + in_1: 14, + in_2: 3, + in_3: 3 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "%K", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "%D", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Stochastic RSI", + shortDescription: "Stoch RSI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "lengthRSI", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "lengthStoch", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_2", + name: "smoothK", + defval: 3, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_3", + name: "smoothD", + defval: 3, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Stochastic RSI@tv-basicstudies-1", + scriptIdPart: "", + name: "Stochastic RSI", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_1 = function(e, t, i) { + var r = i.new_var(s.Std.max(s.Std.change(e), 0)); + return s.Std.rma(r, t, i) + }, this.f_2 = function(e, t, i) { + var r = i.new_var(-s.Std.min(s.Std.change(e), 0)); + return s.Std.rma(r, t, i) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._input(1), + o = this._input(2), + a = this._input(3); + e.setMinimumAdditionalDepth(r + n + o + a); + var l = this._context.new_var(i), + c = s.Std.rsi(this.f_1(l, r, this._context), this.f_2(l, r, this + ._context)), + h = this._context.new_var(c), + u = this._context.new_var(c), + d = this._context.new_var(c), + p = s.Std.stoch(h, u, d, n, this._context), + _ = this._context.new_var(p), + m = s.Std.sma(_, o, this._context), + f = this._context.new_var(m); + return [m, s.Std.sma(f, a, this._context)] + } + } + }, { + name: "TRIX", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F44336" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 18 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "TRIX", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "TRIX", + shortDescription: "TRIX", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 18, + type: "integer", + min: 1, + max: 2e3 + }], + id: "TRIX@tv-basicstudies-1", + scriptIdPart: "", + name: "TRIX", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e) { + return s.Std.log(e) + }, this.f_1 = function(e) { + return 1e4 * e + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0); + e.setMinimumAdditionalDepth(3 * i); + var r = this.f_0(s.Std.close(this._context)), + n = this._context.new_var(r), + o = s.Std.ema(n, i, this._context), + a = this._context.new_var(o), + l = s.Std.ema(a, i, this._context), + c = this._context.new_var(l), + h = s.Std.ema(c, i, this._context), + u = this._context.new_var(h), + d = s.Std.change(u); + return [this.f_1(d)] + } + } + }, { + name: "Triple EMA", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Triple EMA", + shortDescription: "TEMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Triple EMA@tv-basicstudies-1", + scriptIdPart: "", + name: "Triple EMA", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return 3 * (e - t) + i + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0); + this._context.setMinimumAdditionalDepth(3 * i); + var r = s.Std.close(this._context), + n = this._context.new_var(r), + o = s.Std.ema(n, i, this._context), + a = this._context.new_var(o), + l = s.Std.ema(a, i, this._context), + c = this._context.new_var(l), + h = s.Std.ema(c, i, this._context); + return [this.f_0(o, l, h)] + } + } + }, { + name: "True Strength Indicator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#E91E63" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 25, + in_1: 13, + in_2: 13 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "True Strength Indicator", + shortDescription: "True Strength Indicator", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "long", + defval: 25, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_1", + name: "short", + defval: 13, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_2", + name: "siglen", + defval: 13, + type: "integer", + min: 1, + max: 4999 + }], + id: "True Strength Indicator@tv-basicstudies-1", + scriptIdPart: "", + name: "True Strength Indicator", + format: { + precision: 4, + type: "price" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2); + this._context.setMinimumAdditionalDepth(this._input(0) + this + ._input(1) + this._input(2)); + var o = s.Std.close(this._context), + a = this._context.new_var(o), + l = s.Std.tsi(a, r, i, this._context), + c = this._context.new_var(l); + return [l, s.Std.ema(c, n, this._context)] + } + } + }, { + name: "Trend Strength Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Trend Strength Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Trend Strength Index", + description: "Trend Strength Index", + shortDescription: "Trend Strength Index", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF5252" + } + }, + inputs: { + periods: 14 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + type: "integer", + name: "Periods" + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.invertedPeriod = 1 / this.period, this.sumX = (this + .period - 1) * this.period / 2, this.sumXX = (this.period - + 1) * this.period * (2 * this.period - 1) / 6, this + .invertedPeriodSumXSumX = this.invertedPeriod * this.sumX * this + .sumX + }, this.trendStrengthIndex = function() { + for (var e = this._context.new_var(s.Std.close(this._context)), t = + s.Std.sum(e, this.period, this._context), i = 0, r = 0, n = + 0; n < this.period; n++) { + var o = e.get(n); + r += (this.period - 1 - n) * o, i += o * o + } + var a = r - this.invertedPeriod * this.sumX * t, + l = (this.sumXX - this.invertedPeriodSumXSumX) * (i - this + .invertedPeriod * t * t); + return l < 0 ? 0 == a ? 0 : a > 0 ? 1 : -1 : a / (l = Math.sqrt(l)) + }, this.main = function(e, t) { + return this._context = e, this._input = t, [this + .trendStrengthIndex() + ] + } + } + }, { + name: "Typical Price", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + id: "TypicalPrice@tv-basicstudies-1", + scriptIdPart: "", + name: "Typical Price", + description: "Typical Price", + shortDescription: "Typical Price", + is_price_study: !0, + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF6D00" + } + }, + inputs: {} + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [], + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + return this._context = e, this._input = t, [s.Std.hlc3(this + ._context)] + } + } + }, { + name: "Ultimate Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#F44336" + } + }, + inputs: { + in_0: 7, + in_1: 14, + in_2: 28 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "UO", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Ultimate Oscillator", + shortDescription: "UO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length7", + defval: 7, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "length14", + defval: 14, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_2", + name: "length28", + defval: 28, + type: "integer", + min: 1, + max: 1e12 + }], + id: "ultimate_oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Ultimate Oscillator", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + var r = this._context.new_var(e), + n = this._context.new_var(t); + return [s.Std.sum(r, i, this._context) / s.Std.sum(n, i, this + ._context)] + }, this.f_1 = function() { + var e = this._input(0), + t = this._input(1), + i = this._input(2), + r = this._context.new_var(s.Std.close(this._context)), + n = s.Std.max(s.Std.high(this._context), r.get(1)), + o = this._context.new_var(s.Std.close(this._context)), + a = s.Std.min(s.Std.low(this._context), o.get(1)), + l = s.Std.close(this._context) - a, + c = n - a, + h = this.f_0(l, c, e), + u = this.f_0(l, c, t), + d = this.f_0(l, c, i); + return [100 * (4 * h[0] + 2 * u[0] + d[0]) / 7] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_1() + } + } + }, { + name: "Volatility Close-to-Close", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Volatility Close-to-Close@tv-basicstudies-1", + scriptIdPart: "", + name: "Volatility Close-to-Close", + description: "Volatility Close-to-Close", + shortDescription: "Volatility Close-to-Close", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#2196F3" + } + }, + inputs: { + periods: 10, + daysPerYear: 252 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + name: "Periods", + type: "integer", + defval: 10 + }, { + id: "daysPerYear", + name: "Days Per Year", + type: "integer", + defval: 252 + }], + format: { + precision: 2, + type: "percent" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.daysPerYear = this._input(1) + }, this.stdev = function(e, t, i) { + var r = this.variance(e, t, i); + return s.Std.sqrt(r) + }, this.variance = function(e, t, i) { + var r = s.Std.sma(e, t, i); + return this.variance2(e, r, t) + }, this.variance2 = function(e, t, i) { + var s, r, n = 0; + for (s = 0; s < i; s++) n += (r = e.get(s) - t) * r; + return n / (i - 1) + }, this.standardHistVol = function() { + var e = this._context.new_var(s.Std.close(this._context)), + t = this._context.new_var(s.Std.log(e.get() / e.get(1))); + return 100 * this.stdev(t, this.period, this._context) * s.Std.sqrt( + this.daysPerYear) + }, this.main = function(e, t) { + return this._context = e, this._input = t, [this.standardHistVol()] + } + } + }, { + name: "Volatility Zero Trend Close-to-Close", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Volatility Zero Trend Close-to-Close@tv-basicstudies-1", + scriptIdPart: "", + name: "Volatility Zero Trend Close-to-Close", + description: "Volatility Zero Trend Close-to-Close", + shortDescription: "Volatility Zero Trend Close-to-Close", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#2196F3" + } + }, + inputs: { + periods: 10, + daysPerYear: 252 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + name: "Periods", + type: "integer", + min: 0, + max: 1e4 + }, { + id: "daysPerYear", + name: "Days Per Year", + type: "integer" + }], + format: { + precision: 2, + type: "percent" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.daysPerYear = this._input(1) + }, this.volatliityZTCTC = function() { + this._context.setMinimumAdditionalDepth(this._input(0) + 1); + for (var e = this._context.new_var(s.Std.close(this._context)), t = + this._context.new_var(e.symbol.time), i = Math.sqrt((t.get( + 0) - t.get(1)) / 864e5 / this.daysPerYear), r = Math + .log(s.Std.close(this._context) / e.get(1)), n = this + ._context.new_var(r / i), o = this._context.new_var(Math + .pow(n, 2)), a = 0, l = 0; l < this.period; l++) a += o + .get(l); + return 100 * Math.sqrt(a / this.period) + }, this.main = function(e, t) { + return this._context = e, this._input = t, [this.volatliityZTCTC()] + } + } + }, { + name: "Volatility O-H-L-C", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !1, + id: "Volatility O-H-L-C@tv-basicstudies-1", + scriptIdPart: "", + name: "Volatility O-H-L-C", + description: "Volatility O-H-L-C", + shortDescription: "Volatility O-H-L-C", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF5252" + } + }, + inputs: { + periods: 10, + marketClosedPercentage: 0, + daysPerYear: 252 + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + type: "integer", + name: "Periods" + }, { + id: "marketClosedPercentage", + type: "float", + name: "Market Closed Percentage", + min: 0, + max: .999 + }, { + id: "daysPerYear", + type: "integer", + name: "Days Per Year" + }], + format: { + precision: 2, + type: "percent" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.marketClosedPercentage = this._input(1), this.daysPerYear = + this._input(2), this.secondsPerYear = 86400 * this.daysPerYear + }, this.square = function(e) { + return e * e + }, this.volatilityOHLC = function() { + var e = this._context.new_var(Math.log(s.Std.open(this._context))), + t = this._context.new_var(Math.log(s.Std.high(this._context))), + i = this._context.new_var(Math.log(s.Std.low(this._context))), + r = this._context.new_var(Math.log(s.Std.close(this._context))), + n = this._context.new_var(s.Std.close(this._context)), + o = this._context.new_var(n.symbol.time), + a = (o.get(0) - o.get(1)) / 1e3, + l = .5 * this.square(t.get() - i.get()); + l -= (Math.log(4) - 1) * this.square(r.get() - e.get()), this + .marketClosedPercentage > 0 && (l = .12 * this.square(e.get() - + r.get(1)) / this.marketClosedPercentage + .88 * l / (1 - + this.marketClosedPercentage)), l /= a, l *= this + .secondsPerYear; + var c = this._context.new_var(l); + return 100 * Math.sqrt(s.Std.sum(c, this.period, this._context) / + this.period) + }, this.main = function(e, t) { + return this._context = e, this._input = t, [this.volatilityOHLC()] + } + } + }, { + name: "Volatility Index", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + is_price_study: !0, + id: "Volatility Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Volatility Index", + description: "Volatility Index", + shortDescription: "Volatility Index", + plots: [{ + id: "plot_0", + type: "line" + }], + defaults: { + styles: { + plot_0: { + linestyle: 0, + visible: !0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + color: "#FF5252" + } + }, + inputs: { + periods: 10, + atrMult: 3, + method: "Wilder Smoothing" + } + }, + styles: { + plot_0: { + title: "Plot" + } + }, + inputs: [{ + id: "periods", + name: "Periods", + type: "integer" + }, { + id: "atrMult", + name: "ATR Mult", + type: "float" + }, { + id: "method", + name: "Method", + type: "text", + defval: "Exponential", + options: ["Exponential", "Wilder Smoothing"] + }], + format: { + type: "inherit" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._input = t, this.period = this._input(0), + this.atrMult = this._input(1), this.maMethod = this._input(2), + this.nextsar = null, this.position = null, this.sic = null, this + .bars = [], this.count = 0, this.lastSar = null, this._context + .setMinimumAdditionalDepth("Exponential" === this.maMethod ? 2 * + this.period + 2 : this.period) + }, this.computeATR = function() { + var e = s.Std.high(this._context) - s.Std.low(this._context), + t = s.Std.high(this._context) - this.bars[this.bars.length - 2], + i = this.bars[this.bars.length - 2] - s.Std.low(this._context); + return this.tr = Math.max(e, t, i), "Exponential" === this + .maMethod ? this.atr = s.Std.ema(this._context.new_var(this.tr), + this.period, this._context) : this.atr = this.tr / this + .period + (1 - 1 / this.period) * this.atr, + this.atr * this.atrMult + }, this.calculateVolatility = function() { + if (s.Std.close(this._context) === this.bars[this.bars.length - 1]) + return this.lastSar; + if (this.bars.push(s.Std.close(this._context)), 1 === this.count) + this.atr = s.Std.high(this._context) - s.Std.low(this._context), + this.sic = s.Std.close(this._context); + else if (this.count < this.period) { + var e = s.Std.high(this._context) - s.Std.low(this._context), + t = s.Std.high(this._context) - this.bars[this.bars.length - + 2], + i = this.bars[this.bars.length - 2] - s.Std.low(this + ._context); + this.atr += Math.max(e, t, i), s.Std.close(this._context) > this + .sic && (this.sic = s.Std.close(this._context)) + } else if (this.count === this.period) { + e = s.Std.high(this._context) - s.Std.low(this._context), t = s + .Std.high(this._context) - this.bars[this.bars.length - 2], + i = this.bars[this.bars.length - 2] - s.Std.low(this + ._context); + this.atr += Math.max(e, t, i), this.atr *= 1 / this.period, s + .Std.close(this._context) > this.sic && (this.sic = s.Std + .close(this._context)), this.position = "LONG", this + .nextsar = this.sic - this.atr * this.atrMult + } else { + var r = this.nextsar; + "LONG" === this.position ? s.Std.close(this._context) < r ? ( + this.position = "SHORT", this.sic = s.Std.close(this + ._context), this.nextsar = this.sic + this + .computeATR()) : (this.position = "LONG", this.sic = + Math.max(s.Std.close(this._context), this.sic), this + .nextsar = this.sic - this.computeATR()) : "SHORT" === + this.position && (s.Std.close(this._context) > r ? (this + .position = "LONG", this.sic = s.Std.close(this + ._context), this.nextsar = this.sic - this + .computeATR()) : (this.position = "SHORT", this + .sic = Math.min(s.Std.close(this._context), this + .sic), this.nextsar = this.sic + this + .computeATR())), this.lastSar = r + } + return this.count++, r + }, this.main = function(e, t) { + return this._context = e, this._input = t, this._context.select_sym( + 0), [this.calculateVolatility()] + } + } + }, { + name: "VWAP", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: 0, + transparency: 0, + visible: !0, + color: "#2196F3" + } + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "VWAP", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "VWAP", + shortDescription: "VWAP", + is_price_study: !0, + inputs: [], + id: "VWAP@tv-basicstudies-1", + scriptIdPart: "", + name: "VWAP", + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_1 = function(e) { + e.hist = null, e.add_hist() + }, this.init = function(e, t) { + this._isNewSession = null + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = e.new_var(), + r = e.new_var(), + n = this._context.symbol.time; + return n && (null === this._isNewSession && (this._isNewSession = s + .Std.createNewSessionCheck(e)), this._isNewSession(n) && + (this.f_1(i), this.f_1(r))), i.set(s.Std.nz(i.get(1)) + s + .Std.hlc3(this._context) * s.Std.volume(this._context)), r + .set(s.Std.nz(r.get(1)) + s.Std.volume(this._context)), [i.get( + 0) / r.get(0)] + } + } + }, { + name: "VWMA", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "VWMA", + shortDescription: "VWMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "len", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }], + id: "VWMA@tv-basicstudies-1", + scriptIdPart: "", + name: "VWMA", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.close(this._context), + r = this._input(0), + n = this._context.new_var(i); + return [s.Std.vwma(n, r, this._context)] + } + } + }, { + name: "Volume Oscillator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 5, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Volume Oscillator", + shortDescription: "Volume Osc", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "shortlen", + defval: 5, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_1", + name: "longlen", + defval: 10, + type: "integer", + min: 1, + max: 4999 + }], + id: "Volume Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Volume Oscillator", + format: { + precision: 2, + type: "percent" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return 100 * (e - t) / t + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = s.Std.volume(this._context), + o = this._context.new_var(n), + a = s.Std.ema(o, i, this._context), + l = this._context.new_var(n), + c = s.Std.ema(l, r, this._context); + return [this.f_0(a, c)] + } + } + }, { + name: "Vortex Indicator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#E91E63" + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "VI +", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_1: { + title: "VI -", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Vortex Indicator", + shortDescription: "VI", + is_price_study: !1, + is_hidden_study: !1, + id: "vortex_indicator@tv-basicstudies-1", + inputs: [{ + id: "in_0", + name: "Period", + defval: 14, + type: "integer", + min: 2, + max: 1e12 + }], + scriptIdPart: "", + name: "Vortex Indicator", + format: { + precision: 4, + type: "price" + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._input(0), + t = this._context.new_var(s.Std.low(this._context)), + i = this._context.new_var(s.Std.abs(s.Std.high(this._context) - + t.get(1))), + r = s.Std.sum(i, e, this._context), + n = this._context.new_var(s.Std.high(this._context)), + o = this._context.new_var(s.Std.abs(s.Std.low(this._context) - n + .get(1))), + a = s.Std.sum(o, e, this._context), + l = this._context.new_var(s.Std.atr(1, this._context)), + c = s.Std.sum(l, e, this._context); + return [r / c, a / c] + }, this.main = function(e, t) { + return this._context = e, this._input = t, this.f_0() + } + } + }, { + name: "Willams %R", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#7E57C2" + } + }, + bands: [{ + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -20 + }, { + color: "#787B86", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -80 + }], + filledAreasStyle: { + fill_0: { + color: "#7E57C2", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Williams %R", + shortDescription: "%R", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Willams %R@tv-basicstudies-1", + scriptIdPart: "", + name: "Willams %R", + format: { + precision: 2, + type: "price" + } + }, + constructor: function() { + this.f_0 = function(e, t, i) { + return 100 * (e - t) / (t - i) + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = s.Std.high(this._context), + n = this._context.new_var(r), + o = s.Std.highest(n, i, this._context), + a = s.Std.low(this._context), + l = this._context.new_var(a), + c = s.Std.lowest(l, i, this._context); + return [this.f_0(s.Std.close(this._context), o, c)] + } + } + }, { + name: "Williams Alligator", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#E91E63" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#66BB6A" + } + }, + inputs: { + in_0: 21, + in_1: 13, + in_2: 8, + in_3: 8, + in_4: 5, + in_5: 3 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Jaw", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Teeth", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lips", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Williams Alligator", + shortDescription: "Alligator", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Jaw Length", + defval: 21, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Teeth Length", + defval: 13, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "Lips Length", + defval: 8, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_3", + name: "Jaw Offset", + defval: 8, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_4", + name: "Teeth Offset", + defval: 5, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_5", + name: "Lips Offset", + defval: 3, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Williams Alligator@tv-basicstudies-1", + scriptIdPart: "", + name: "Williams Alligator", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = this._input(2), + o = this._input(3), + a = this._input(4), + l = this._input(5), + c = s.Std.hl2(this._context); + return [{ + value: s.Std.smma(c, i, this._context), + offset: o + }, { + value: s.Std.smma(c, r, this._context), + offset: a + }, { + value: s.Std.smma(c, n, this._context), + offset: l + }] + } + } + }, { + name: "Williams Fractals", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + plottype: "shape_triangle_down", + visible: !0, + location: "BelowBar", + transparency: 0, + color: "#F44336" + }, + plot_1: { + plottype: "shape_triangle_up", + visible: !0, + location: "AboveBar", + transparency: 0, + color: "#009688" + } + }, + inputs: { + in_0: 2 + } + }, + plots: [{ + id: "plot_0", + type: "shapes" + }, { + id: "plot_1", + type: "shapes" + }], + styles: { + plot_0: { + title: "Down fractals", + isHidden: !1 + }, + plot_1: { + title: "Up fractals", + isHidden: !1 + } + }, + description: "Williams Fractal", + shortDescription: "Fractals", + is_price_study: !0, + is_hidden_study: !1, + id: "Williams Fractals@tv-basicstudies-1", + inputs: [{ + id: "in_0", + name: "Periods", + defval: 2, + type: "integer", + min: 2, + max: 1e12 + }], + scriptIdPart: "", + name: "Williams Fractals", + isCustomIndicator: !0, + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function() { + for (var e = this._input(0), t = this._context.new_var(s.Std.high( + this._context)), i = !0, r = !0, n = !0, o = !0, a = !0, + l = !0, c = 1; c <= e; c++) i = s.Std.and(i, s.Std.lt(t.get( + e - c), t.get(e))), r = s.Std.and(r, s.Std.lt(t.get(e + c), + t.get(e))), n = s.Std.and(n, s.Std.and(s.Std.le(t.get(e + + 1), t.get(e)), s.Std.lt(t.get(e + c + 1), t.get(e)))), o = s + .Std.and(o, s.Std.and(s.Std.le(t.get(e + 1), t.get(e)), s.Std + .and(s.Std.le(t.get(e + 2), t.get(e)), s.Std.lt(t.get( + e + c + 2), t.get(e))))), a = s.Std.and(a, s.Std.and(s + .Std.le(t.get(e + 1), t.get(e)), s.Std.and(s.Std.le(t + .get(e + 2), t.get(e)), s.Std.and(s.Std.le(t + .get(e + 3), t.get(e)), s.Std.lt(t.get(e + + c + 3), t.get(e)))))), l = s.Std.and(l, s.Std.and(s.Std + .le(t.get(e + 1), t.get(e)), s.Std.and(s.Std.le(t.get( + e + 2), t.get(e)), s.Std.and(s.Std.le(t.get(e + + 3), t.get(e)), s.Std.and(s.Std.le(t.get(e + + 4), t.get(e)), s.Std.lt(t.get(e + c + + 4), t.get(e))))))); + var h = s.Std.or(r, s.Std.or(n, s.Std.or(o, s.Std.or(a, l)))), + u = s.Std.and(i, h), + d = this._context.new_var(s.Std.low(this._context)), + p = 1, + _ = 1, + m = 1, + f = 1, + g = 1, + b = 1; + for (c = 1; c <= e; c++) p = s.Std.and(p, s.Std.gt(d.get(e - c), d + .get(e))), _ = s.Std.and(_, s.Std.gt(d.get(e + c), d.get( + e))), m = s.Std.and(m, s.Std.and(s.Std.ge(d.get(e + 1), d + .get(e)), s.Std.gt(d.get(e + c + 1), d.get(e)))), f = s.Std + .and(f, s.Std.and(s.Std.ge(d.get(e + 1), d.get(e)), s.Std.and(s + .Std.ge(d.get(e + 2), d.get(e)), s.Std.gt(d.get(e + + c + 2), d.get(e))))), g = s.Std.and(g, s.Std.and(s.Std + .ge(d.get(e + 1), d.get(e)), s.Std.and(s.Std.ge(d.get( + e + 2), d.get(e)), s.Std.and(s.Std.ge(d.get(e + + 3), d.get(e)), s.Std.gt(d.get(e + c + 3), d + .get(e)))))), b = s.Std.and(b, s.Std.and(s.Std.ge(d.get( + e + 1), d.get(e)), s.Std.and(s.Std.ge(d.get(e + 2), + d.get(e)), s.Std.and(s.Std.ge(d.get(e + 3), d + .get(e)), s.Std.and(s.Std.ge(d.get(e + 4), d + .get(e)), s.Std.gt(d.get(e + c + 4), d + .get(e))))))); + var v = s.Std.or(_, s.Std.or(m, s.Std.or(f, s.Std.or(g, b)))); + return [s.Std.and(p, v), u] + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this.f_0(); + return [{ + value: i[0], + offset: -this._input(0) + }, { + value: i[1], + offset: -this._input(0) + }] + } + } + }, { + name: "Guppy Multiple Moving Average", + metainfo: { + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + description: "Guppy Multiple Moving Average", + shortDescription: "GMMA", + is_price_study: !0, + id: "Guppy Multiple Moving Average@tv-basicstudies-1", + _metainfoVersion: 52, + format: { + type: "inherit" + }, + defaults: { + inputs: { + traderEMA1Length: 3, + traderEMA2Length: 5, + traderEMA3Length: 8, + traderEMA4Length: 10, + traderEMA5Length: 12, + traderEMA6Length: 15, + investorEMA1Length: 30, + investorEMA2Length: 35, + investorEMA3Length: 40, + investorEMA4Length: 45, + investorEMA5Length: 50, + investorEMA6Length: 60 + }, + styles: { + traderEMA1: { + color: "#00FFFF", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 15, + visible: !0 + }, + traderEMA2: { + color: "#00FFFF", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 12, + visible: !0 + }, + traderEMA3: { + color: "#00FFFF", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 9, + visible: !0 + }, + traderEMA4: { + color: "#00FFFF", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 6, + visible: !0 + }, + traderEMA5: { + color: "#00FFFF", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 3, + visible: !0 + }, + traderEMA6: { + color: "#00FFFF", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0 + }, + investorEMA1: { + color: "#FF0000", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 15, + visible: !0 + }, + investorEMA2: { + color: "#FF0000", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 12, + visible: !0 + }, + investorEMA3: { + color: "#FF0000", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 9, + visible: !0 + }, + investorEMA4: { + color: "#FF0000", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 6, + visible: !0 + }, + investorEMA5: { + color: "#FF0000", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 3, + visible: !0 + }, + investorEMA6: { + color: "#FF0000", + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0 + } + } + }, + inputs: [{ + defval: 3, + id: "traderEMA1Length", + max: 1e3, + min: 1, + name: "Trader EMA 1 length", + type: "integer" + }, { + defval: 5, + id: "traderEMA2Length", + max: 1e3, + min: 1, + name: "Trader EMA 2 length", + type: "integer" + }, { + defval: 8, + id: "traderEMA3Length", + max: 1e3, + min: 1, + name: "Trader EMA 3 length", + type: "integer" + }, { + defval: 10, + id: "traderEMA4Length", + max: 1e3, + min: 1, + name: "Trader EMA 4 length", + type: "integer" + }, { + defval: 12, + id: "traderEMA5Length", + max: 1e3, + min: 1, + name: "Trader EMA 5 length", + type: "integer" + }, { + defval: 15, + id: "traderEMA6Length", + max: 1e3, + min: 1, + name: "Trader EMA 6 length", + type: "integer" + }, { + defval: 30, + id: "investorEMA1Length", + max: 1e3, + min: 1, + name: "Investor EMA 1 length", + type: "integer" + }, { + defval: 35, + id: "investorEMA2Length", + max: 1e3, + min: 1, + name: "Investor EMA 2 length", + type: "integer" + }, { + defval: 40, + id: "investorEMA3Length", + max: 1e3, + min: 1, + name: "Investor EMA 3 length", + type: "integer" + }, { + defval: 45, + id: "investorEMA4Length", + max: 1e3, + min: 1, + name: "Investor EMA 4 length", + type: "integer" + }, { + defval: 50, + id: "investorEMA5Length", + max: 1e3, + min: 1, + name: "Investor EMA 5 length", + type: "integer" + }, { + defval: 60, + id: "investorEMA6Length", + max: 1e3, + min: 1, + name: "Investor EMA 6 length", + type: "integer" + }], + plots: [{ + id: "traderEMA1", + type: "line" + }, { + id: "traderEMA2", + type: "line" + }, { + id: "traderEMA3", + type: "line" + }, { + id: "traderEMA4", + type: "line" + }, { + id: "traderEMA5", + type: "line" + }, { + id: "traderEMA6", + type: "line" + }, { + id: "investorEMA1", + type: "line" + }, { + id: "investorEMA2", + type: "line" + }, { + id: "investorEMA3", + type: "line" + }, { + id: "investorEMA4", + type: "line" + }, { + id: "investorEMA5", + type: "line" + }, { + id: "investorEMA6", + type: "line" + }], + styles: { + traderEMA1: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Trader EMA 1" + }, + traderEMA2: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Trader EMA 2" + }, + traderEMA3: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Trader EMA 3" + }, + traderEMA4: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Trader EMA 4" + }, + traderEMA5: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Trader EMA 5" + }, + traderEMA6: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Trader EMA 6" + }, + investorEMA1: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Investor EMA 1" + }, + investorEMA2: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Investor EMA 2" + }, + investorEMA3: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Investor EMA 3" + }, + investorEMA4: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Investor EMA 4" + }, + investorEMA5: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Investor EMA 5" + }, + investorEMA6: { + histogramBase: 0, + isHidden: !1, + joinPoints: !1, + title: "Investor EMA 6" + } + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._context.new_var(s.Std.close(this._context)), + r = this._input(0), + n = this._input(1), + o = this._input(2), + a = this._input(3), + l = this._input(4), + c = this._input(5), + h = s.Std.ema(i, r, this._context), + u = s.Std.ema(i, n, this._context), + d = s.Std.ema(i, o, this._context), + p = s.Std.ema(i, a, this._context), + _ = s.Std.ema(i, l, this._context), + m = s.Std.ema(i, c, this._context), + f = this._input(6), + g = this._input(7), + b = this._input(8), + v = this._input(9), + S = this._input(10), + y = this._input(11); + return [h, u, d, p, _, m, s.Std.ema(i, f, this._context), s.Std.ema( + i, g, this._context), s.Std.ema(i, b, this._context), s + .Std.ema(i, v, this._context), s.Std.ema(i, S, this + ._context), s.Std.ema(i, y, this._context) + ] + } + } + }] + }, + "2ijp": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("l4sv"), + r = i("8Uy/"); + class n { + constructor() { + this._lineRendererData = { + y: 0, + color: "rgba(0, 0, 0, 0)", + linewidth: 1, + linestyle: r.LINESTYLE_SOLID, + visible: !1 + }, this._lineRenderer = new s.HorizontalLineRenderer, this._invalidated = !0, + this._lineRenderer.setData(this._lineRendererData) + } + update() { + this._invalidated = !0 + } + renderer() { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._lineRenderer + } + } + }, + "2jXJ": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "supportedLineTools", (function() { + return s + })); + const s = { + cursor: { + name: "cursor", + onlySelectable: !0 + }, + dot: { + name: "dot", + onlySelectable: !0 + }, + arrow_cursor: { + name: "arrow", + onlySelectable: !0 + }, + eraser: { + name: "eraser", + onlySelectable: !0 + }, + measure: { + name: "measure", + onlySelectable: !0 + }, + zoom: { + name: "zoom", + onlySelectable: !0 + }, + brush: { + name: "LineToolBrush" + }, + highlighter: { + name: "LineToolHighlighter" + }, + text: { + name: "LineToolText" + }, + anchored_text: { + name: "LineToolTextAbsolute" + }, + note: { + name: "LineToolNote" + }, + anchored_note: { + name: "LineToolNoteAbsolute" + }, + signpost: { + name: "LineToolSignpost" + }, + callout: { + name: "LineToolCallout" + }, + balloon: { + name: "LineToolBalloon" + }, + arrow_up: { + name: "LineToolArrowMarkUp" + }, + arrow_down: { + name: "LineToolArrowMarkDown" + }, + arrow_left: { + name: "LineToolArrowMarkLeft" + }, + arrow_right: { + name: "LineToolArrowMarkRight" + }, + price_label: { + name: "LineToolPriceLabel" + }, + price_note: { + name: "LineToolPriceNote" + }, + arrow_marker: { + name: "LineToolArrowMarker" + }, + flag: { + name: "LineToolFlagMark" + }, + vertical_line: { + name: "LineToolVertLine" + }, + horizontal_line: { + name: "LineToolHorzLine" + }, + cross_line: { + name: "LineToolCrossLine" + }, + horizontal_ray: { + name: "LineToolHorzRay" + }, + trend_line: { + name: "LineToolTrendLine" + }, + info_line: { + name: "LineToolInfoLine" + }, + trend_angle: { + name: "LineToolTrendAngle" + }, + arrow: { + name: "LineToolArrow" + }, + ray: { + name: "LineToolRay" + }, + extended: { + name: "LineToolExtended" + }, + parallel_channel: { + name: "LineToolParallelChannel" + }, + disjoint_angle: { + name: "LineToolDisjointAngle" + }, + flat_bottom: { + name: "LineToolFlatBottom" + }, + pitchfork: { + name: "LineToolPitchfork" + }, + schiff_pitchfork_modified: { + name: "LineToolSchiffPitchfork" + }, + schiff_pitchfork: { + name: "LineToolSchiffPitchfork2" + }, + inside_pitchfork: { + name: "LineToolInsidePitchfork" + }, + pitchfan: { + name: "LineToolPitchfan" + }, + gannbox: { + name: "LineToolGannSquare" + }, + gannbox_square: { + name: "LineToolGannComplex" + }, + gannbox_fixed: { + name: "LineToolGannFixed" + }, + gannbox_fan: { + name: "LineToolGannFan" + }, + fib_retracement: { + name: "LineToolFibRetracement" + }, + fib_trend_ext: { + name: "LineToolTrendBasedFibExtension" + }, + fib_speed_resist_fan: { + name: "LineToolFibSpeedResistanceFan" + }, + fib_timezone: { + name: "LineToolFibTimeZone" + }, + fib_trend_time: { + name: "LineToolTrendBasedFibTime" + }, + fib_circles: { + name: "LineToolFibCircles" + }, + fib_spiral: { + name: "LineToolFibSpiral" + }, + fib_speed_resist_arcs: { + name: "LineToolFibSpeedResistanceArcs" + }, + fib_wedge: { + name: "LineToolFibWedge" + }, + fib_channel: { + name: "LineToolFibChannel" + }, + xabcd_pattern: { + name: "LineTool5PointsPattern" + }, + cypher_pattern: { + name: "LineToolCypherPattern" + }, + abcd_pattern: { + name: "LineToolABCD" + }, + triangle_pattern: { + name: "LineToolTrianglePattern" + }, + "3divers_pattern": { + name: "LineToolThreeDrivers" + }, + head_and_shoulders: { + name: "LineToolHeadAndShoulders" + }, + elliott_impulse_wave: { + name: "LineToolElliottImpulse" + }, + elliott_triangle_wave: { + name: "LineToolElliottTriangle" + }, + elliott_triple_combo: { + name: "LineToolElliottTripleCombo" + }, + elliott_correction: { + name: "LineToolElliottCorrection" + }, + elliott_double_combo: { + name: "LineToolElliottDoubleCombo" + }, + cyclic_lines: { + name: "LineToolCircleLines" + }, + time_cycles: { + name: "LineToolTimeCycles" + }, + sine_line: { + name: "LineToolSineLine" + }, + long_position: { + name: "LineToolRiskRewardLong" + }, + short_position: { + name: "LineToolRiskRewardShort" + }, + forecast: { + name: "LineToolPrediction" + }, + date_range: { + name: "LineToolDateRange" + }, + price_range: { + name: "LineToolPriceRange" + }, + date_and_price_range: { + name: "LineToolDateAndPriceRange" + }, + bars_pattern: { + name: "LineToolBarsPattern" + }, + ghost_feed: { + name: "LineToolGhostFeed" + }, + projection: { + name: "LineToolProjection" + }, + rectangle: { + name: "LineToolRectangle" + }, + rotated_rectangle: { + name: "LineToolRotatedRectangle" + }, + ellipse: { + name: "LineToolEllipse" + }, + triangle: { + name: "LineToolTriangle" + }, + polyline: { + name: "LineToolPolyline" + }, + path: { + name: "LineToolPath" + }, + curve: { + name: "LineToolBezierQuadro" + }, + double_curve: { + name: "LineToolBezierCubic" + }, + arc: { + name: "LineToolArc" + }, + icon: { + name: "LineToolIcon" + }, + regression_trend: { + name: "LineToolRegressionTrend" + }, + fixed_range_volume_profile: { + name: "LineToolFixedRangeVolumeProfile" + } + } + }, + "2jby": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "reorderCollection", (function() { + return S + })), i.d(t, "reorderDataSourcesStateZOrder", (function() { + return y + })), i.d(t, "reorderDataSourcesZOrder", (function() { + return w + })), i.d(t, "newLineToolZOrder", (function() { + return x + })), i.d(t, "newLineToolStateZOrder", (function() { + return T + })), i.d(t, "newStudyZOrder", (function() { + return I + })), i.d(t, "isReorderRequired", (function() { + return L + })), + i.d(t, "moveAtIndex", (function() { + return E + })), i.d(t, "moveAfterItem", (function() { + return k + })), i.d(t, "moveBeforeItem", (function() { + return D + })), i.d(t, "moveAfterSource", (function() { + return V + })), i.d(t, "moveBeforeSource", (function() { + return B + })), i.d(t, "moveAfterSourceState", (function() { + return R + })), i.d(t, "moveBeforeSourceState", (function() { + return N + })); + var s = i("CW80"), + r = i("3ClC"), + n = i("qJq3"), + o = i("s1Gx"), + a = i("Vs8b"), + l = i("Y7w9"); + + function c(e) { + return e instanceof n.Series + } + + function h(e) { + return Object(s.isLineTool)(e) && !e.isSpeciallyZOrderedSource() + } + + function u(e) { + return Object(r.isStudy)(e) && !e.isSpeciallyZOrderedSource() + } + + function d(e, t) { + return e.zorder - t.zorder + } + + function p(e, t) { + return e.zorder() - t.zorder() + } + + function _(e, t) { + Object(a.isMainSeriesState)(e) ? e.zorder = 0 : e.zorder = t + } + + function m(e, t) { + e.setZorder(t) + } + + function f(e) { + return e.zorder + } + + function g(e) { + return e.zorder() + } + + function b(e, t, i, s, r, n, o) { + let a = 0; + for (let l = t; l >= 0; --l) { + const t = e[l]; + void 0 !== o && o(t) || (n(t) ? (r(t, i), a = Math.max(a, M(i)), s = i - 1, i -= 1e4, + 0 === s && (i -= 1e4)) : (r(t, s), a = Math.max(a, O(s)), s -= 1)) + } + return a + } + + function v(e, t, i, s, r, n, o) { + let a = 0; + for (let l = t; l < e.length; ++l) { + const t = e[l]; + void 0 !== o && o(t) || (n(t) ? (r(t, i), a = Math.max(a, M(i)), s = i + 1, 0 === (i += + 1e4) && (s += 1e4)) : (r(t, s), a = Math.max(a, O(s)), s += 1)) + } + return a + } + + function S(e, t, i, s, r, n) { + let o = null; + const a = []; + for (const r of e) t(r) ? (a.push(r), o = r) : (i(r) || s(r)) && a.push(r); + a.sort(n), null !== o && r(o, 0); + const l = null === o ? -1 : a.indexOf(o), + c = b(a, l - 1, -1e4, -1, r, i), + h = v(a, l + 1, 1e4, 1, r, i); + return Math.max(c, h) < .7 + } + + function y(e) { + return S(e, a.isMainSeriesState, a.isStudyState, a.isLineToolState, _, d) + } + + function w(e) { + return S(e, c, u, h, m, p) + } + + function P(e, t) { + const i = Math.floor(e / 1e4); + let s = t.get(i); + return void 0 === s && (s = [], t.set(i, s)), s + } + + function C(e, t, i, s, r, n) { + let o = -1 / 0, + a = 1 / 0, + l = 0; + const c = new Map; + for (let s = 0; s < e.length; ++s) { + const n = e[s], + h = r(n); + t(n) ? (o = Math.max(o, h), P(h, c).push(n)) : i(n) && (h < 0 && (a = Math.min(a, h)), + l = Math.max(l, h)) + } + if (n) { + return Math.max(l, o) + 1 + } + if (o === -1 / 0) return a === 1 / 0 ? -1 : a - 1; + if (o > 0 || o % 1e4 < -1) return o + 1; + for (const e of P(o, c)) s(e, r(e) - 1); + return o + } + + function x(e, t) { + return C(e, h, u, m, g, t) + } + + function T(e, t) { + return C(e, a.isLineToolState, a.isStudyState, _, f, t) + } + + function I(e) { + let t = -1e4; + for (const i of e) u(i) && (t = Math.min(t, i.zorder() - 1e4)); + return 0 === t ? -1e4 : t + } + + function M(e) { + return Math.abs(e / o.specialZOrderBase) + } + + function O(e) { + return Math.abs(e % 1e4 / 1e4) + } + + function L(e, t) { + return null !== e && M(e) >= .7 || null !== t && O(t) > .7 + } + + function A(e, t) { + const i = 1e4 * ((s = e / 1e4) >= 0 ? Math.ceil(s) : Math.floor(s)); + var s; + return i === e ? i + 1e4 * t : i + } + + function E(e, t, i, s, r, n, a, c, h) { + if (s(t[0])) return void(i < e.length && c(e[i]) < 0 ? v(e, i, 1e4, 1, a, r, s) : b(e, Math + .max(0, Math.min(i - 1, e.length - 1)), -1e4, -1, a, r, s)); + const { + newItems: u, + movedItemsStartIndex: d + } = i > 0 ? Object(l.moveAfter)(e, t, i - 1) : Object(l.moveBefore)(e, t, 0), p = d, _ = d + + t.length - 1, m = p > 0 ? c(u[p - 1]) : c(u[p]) - 1, f = _ < e.length - 1 ? c(u[_ + + 1]) : c(u[_]) + 1; + if (m >= 0 && f > 0) v(u, p, A(m, 1), m + 1, a, r, s); + else if (f <= 0 && m < 0) b(u, _, A(f, -1), f - 1, a, r, s); + else { + let e = -o.specialZOrderBase; + for (const t of u) s(t) ? e = 1 : (a(t, e), e += 1); + S(u, s, r, n, a, h) + } + } + + function k(e, t, i, s, r, n, o, a, l) { + const c = e.indexOf(i) + 1; + E(e, t, c, s, r, n, o, a, l) + } + + function D(e, t, i, s, r, n, o, a, l) { + const c = e.indexOf(i); + E(e, t, c, s, r, n, o, a, l) + } + + function V(e, t, i) { + k(e, t, i, c, u, h, m, g, p) + } + + function B(e, t, i) { + D(e, t, i, c, u, h, m, g, p) + } + + function R(e, t, i) { + k(e, t, i, a.isMainSeriesState, a.isStudyState, a.isLineToolState, _, f, d) + } + + function N(e, t, i) { + D(e, t, i, a.isMainSeriesState, a.isStudyState, a.isLineToolState, _, f, d) + } + }, + "2kV1": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyStatusView", (function() { + return r + })); + var s = i("nBJD"); + class r extends s.a { + constructor(e) { + super(e.statusProvider()) + } + color() { + return this._statusProvider.color() + } + getSplitTitle() { + return this._statusProvider.getSplitTitle() + } + update() { + this._text = this._statusProvider.text() + } + } + }, + "2uTr": function(e, t, i) { + "use strict"; + + function s(e) { + return e + "…" + } + i.r(t), i.d(t, "appendEllipsis", (function() { + return s + })) + }, + "3/8U": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("HGP3"), + r = i("Tmoa"); + const n = Object(r.generateColor)(s.colorsPalette["color-tv-blue-500"], 75) + }, + "38az": function(e, t, i) { + "use strict"; + var s = i("k9/m").PlotRowSearchMode, + r = i("Tmoa").rgbaFromInteger; + + function n() { + this.backColorers = [] + } + + function o(e) { + n.call(this), this._series = e + } + + function a(e, t) { + n.call(this), this._study = e, this._plotIndex = t + } + n.prototype.barStyle = function(e, t, i) { + for (var s = {}, r = this.backColorers.length - 1; r >= 0; r--) this.backColorers[r] + .applyBarStyle(e, t, s, i); + return this.applyBarStyle(e, t, s, i), s + }, n.prototype.pushBackBarColorer = function(e) { + this.backColorers.push(e) + }, n.prototype.applyBarStyle = function(e, t, i) { + throw new Error("This function is supposed to be reimplemented in a subclass") + }, inherit(o, n), o.upColor = function(e, t) { + switch (e.style.value()) { + case TradingView.Series.STYLE_LINE: + return e.lineStyle.color.value(); + case TradingView.Series.STYLE_AREA: + return e.areaStyle.linecolor.value(); + case TradingView.Series.STYLE_BARS: + return e.barStyle.upColor.value(); + case TradingView.Series.STYLE_CANDLES: + return e.candleStyle.upColor.value(); + case TradingView.Series.STYLE_HOLLOW_CANDLES: + return e.hollowCandleStyle.upColor.value(); + case TradingView.Series.STYLE_HEIKEN_ASHI: + return e.haStyle.upColor.value(); + case TradingView.Series.STYLE_BASELINE: + return e.baselineStyle.topLineColor.value(); + case TradingView.Series.STYLE_HILO: + return e.hiloStyle.color.value() + } + throw new Error("Unknown series style") + }, o.downColor = function(e, t) { + switch (e.style.value()) { + case TradingView.Series.STYLE_LINE: + return e.lineStyle.color.value(); + case TradingView.Series.STYLE_AREA: + return e.areaStyle.linecolor.value(); + case TradingView.Series.STYLE_BARS: + return e.barStyle.downColor.value(); + case TradingView.Series.STYLE_CANDLES: + return e.candleStyle.downColor.value(); + case TradingView.Series.STYLE_HOLLOW_CANDLES: + return e.hollowCandleStyle.downColor.value(); + case TradingView.Series.STYLE_HEIKEN_ASHI: + return e.haStyle.downColor.value(); + case TradingView.Series.STYLE_BASELINE: + return e.baselineStyle.bottomLineColor.value(); + case TradingView.Series.STYLE_HILO: + return e.hiloStyle.color.value() + } + throw new Error("Unknown series style") + }, o.prototype._applyLineStyle = function(e, t, i, s, r) { + i.barColor = o.upColor(r) + }, o.prototype._applyAreaStyle = function(e, t, i, s, r) { + i.barColor = o.upColor(r) + }, o.prototype._applyBarStyle = function(e, t, i, s, r) { + var n = o.upColor(r), + a = o.downColor(r), + l = this.findBar(e, !1, s); + if (r.barStyle.barColorsOnPrevClose.value()) { + var c = this.findPrevBar(e, !1, s); + i.barColor = c[TradingView.CLOSE_PLOT] <= l[TradingView.CLOSE_PLOT] ? n : a, i + .barBorderColor = c[TradingView.CLOSE_PLOT] <= l[TradingView.CLOSE_PLOT] ? n : a + } else i.barColor = l[TradingView.OPEN_PLOT] <= l[TradingView.CLOSE_PLOT] ? n : a, i + .barBorderColor = l[TradingView.OPEN_PLOT] <= l[TradingView.CLOSE_PLOT] ? n : a + }, o.prototype._applyCandleStyle = function(e, t, i, s, r) { + var n, a = o.upColor(r, t), + l = o.downColor(r, t), + c = r.candleStyle.borderUpColor ? r.candleStyle.borderUpColor.value() : r + .candleStyle.borderColor.value(), + h = r.candleStyle.borderDownColor ? r.candleStyle.borderDownColor.value() : r + .candleStyle.borderColor.value(), + u = r.candleStyle.wickUpColor ? r.candleStyle.wickUpColor.value() : r.candleStyle + .wickColor.value(), + d = r.candleStyle.wickDownColor ? r.candleStyle.wickDownColor.value() : r + .candleStyle.wickColor.value(), + p = this.findBar(e, !1, s); + r.candleStyle.barColorsOnPrevClose.value() ? n = this.findPrevBar(e, !1, s)[TradingView + .CLOSE_PLOT] <= p[TradingView.CLOSE_PLOT] : n = p[TradingView.OPEN_PLOT] <= p[ + TradingView.CLOSE_PLOT]; + i.barColor = n ? a : l, i.barBorderColor = n ? c : h, i.barWickColor = n ? u : d + }, o.prototype._applyHollowCandleStyle = function(e, t, i, s, r) { + var n = o.upColor(r, t), + a = o.downColor(r, t), + l = r.hollowCandleStyle.borderUpColor ? r.hollowCandleStyle.borderUpColor.value() : + r.hollowCandleStyle.borderColor.value(), + c = r.hollowCandleStyle.borderDownColor ? r.hollowCandleStyle.borderDownColor + .value() : r.hollowCandleStyle.borderColor.value(), + h = r.hollowCandleStyle.wickUpColor ? r.hollowCandleStyle.wickUpColor.value() : r + .hollowCandleStyle.wickColor.value(), + u = r.hollowCandleStyle.wickDownColor ? r.hollowCandleStyle.wickDownColor.value() : + r.hollowCandleStyle.wickColor.value(), + d = this.findBar(e, !1, s); + this.findPrevBar(e, !1, s)[TradingView.CLOSE_PLOT] <= d[TradingView.CLOSE_PLOT] ? (i + .barColor = n, i.barBorderColor = l, i.barWickColor = h) : (i.barColor = a, i + .barBorderColor = c, i.barWickColor = u), i.isBarHollow = d[TradingView + .OPEN_PLOT] <= d[TradingView.CLOSE_PLOT] + }, o.prototype._applyHAStyle = function(e, t, i, s, r) { + var n, a = o.upColor(r, t), + l = o.downColor(r, t), + c = r.haStyle.borderUpColor.value(), + h = r.haStyle.borderDownColor.value(), + u = r.haStyle.wickUpColor.value(), + d = r.haStyle.wickDownColor.value(), + p = this.findBar(e, t, s); + r.haStyle.barColorsOnPrevClose.value() ? n = this.findPrevBar(e, t, s)[TradingView + .CLOSE_PLOT] <= p[TradingView.CLOSE_PLOT] : n = p[TradingView.OPEN_PLOT] <= p[ + TradingView.CLOSE_PLOT]; + i.barColor = n ? a : l, i.barBorderColor = n ? c : h, i.barWickColor = n ? u : d + }, o.prototype._applyBaseLineStyle = function(e, t, i, s, r) { + var n = this.findBar(e, t, s), + a = r.baselineStyle, + l = this._series.priceScale(), + c = Math.round(l.height() * (Math.abs(100 - a.baseLevelPercentage.value()) / 100)), + h = this._series.firstValue(), + u = l.coordinateToPrice(c, h); + n[TradingView.CLOSE_PLOT] > u ? i.barColor = o.upColor(r, t) : i.barColor = o.downColor( + r, t) + }, o.prototype._applyHiLoStyle = function(e, t, i, s, r) { + i.barColor = o.upColor(r, t), i.barBorderColor = r.hiloStyle.borderColor.value() + }, o.prototype.applyBarStyle = function(e, t, i, s) { + i || (i = {}), + i.barColor = null, i.barBorderColor = null, i.barWickColor = null, i.isBarHollow = + null, i.isBarUp = null, i.upColor = null, i.downColor = null, i.isTwoColorBar = + null, i.isMergedBar = null; + var r = this._series.properties(); + switch (r.style.value()) { + case TradingView.Series.STYLE_LINE: + this._applyLineStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_AREA: + this._applyAreaStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_BARS: + this._applyBarStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_CANDLES: + this._applyCandleStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_HOLLOW_CANDLES: + this._applyHollowCandleStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_HEIKEN_ASHI: + this._applyHAStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_BASELINE: + this._applyBaseLineStyle(e, t, i, s, r); + break; + case TradingView.Series.STYLE_HILO: + this._applyHiLoStyle(e, t, i, s, r) + } + return i + }, o.prototype.getSeriesBars = function(e) { + return e ? this._series.nsBars() : this._series.bars() + }, o.prototype._findBarFieldValue = function(e, t, i) { + var s = this.getSeriesBars(i).valueAt(e); + if (null !== s) return s[t] + }, o.prototype.findBar = function(e, t, i) { + return i ? i.value : this.getSeriesBars(t).valueAt(e) || [] + }, o.prototype.findPrevBar = function(e, t, i) { + if (i && i.previousValue) return i.previousValue; + var r = this._series.bars().search(e - 1, s.NearestLeft, TradingView.CLOSE_PLOT); + return null !== r ? r.value : [] + }, inherit(a, n), a.prototype.getBars = function() { + return this._study.series().bars() + }, a.prototype.firstColoredBar = function(e) { + for (var t = e, i = 0; i < this.backColorers.length; i++) t = Math.min(t, this + .backColorers[i].firstColoredBar(e)); + var s = this.getOffset(this._plotIndex); + t = Math.min(t, e + s); + var r = this.getBars().firstIndex(); + return Math.max(t, r) + }, a.prototype.getOffset = function() { + var e = this._study.metaInfo().plots[this._plotIndex]; + return this._study.offset(e.id) + }, a.prototype.applyBarStyle = function(e, t, i) { + if (i || (i = {}), t) return i; + var s = this._study.properties(); + if (!s.visible.value()) return i; + var n = this._study.metaInfo(), + o = this._study.data(); + if (!o || 0 === o.size()) return i; + var a = n.plots[this._plotIndex], + l = this.getOffset(); + if (this._study.getMinFirstBarIndexForPlot(a.id) > e + l) return i; + var c = s.styles[a.id]; + if (c.visible && !c.visible.value()) return i; + var h = o.valueAt(e - l); + if (null === h) return i; + var u = h[this._plotIndex + 1]; + if (null == u) return i; + if (u = Math.round(u), n.isRGB) i.barColor = r(u), i.upColor = i.barColor, i.downColor = + i.barColor; + else { + var d = n.plots[this._plotIndex].palette, + p = s.palettes[d], + _ = n.palettes[d].valToIndex ? n.palettes[d].valToIndex[u] : u, + m = p.colors[_].color.value(); + i.barColor = m, i.upColor = m.color, i.downColor = m.color + } + return i + }, t.SeriesBarColorer = o, t.StudyBarColorer = a + }, + "3ClC": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("0YCj"), + r = i.n(s), + n = i("GVHu"), + o = i("PL0c"), + a = i("cKqi"), + l = i("YzC7"), + c = i("TMWk"), + h = i("8sOK"); + class u extends n.Study { + constructor(e, t, i, s) { + super(e, t, i, s), this.properties().styles.vol_ma.visible.listeners() + .subscribe(this, () => this.invalidateTitleCache()) + } + base() { + return 1 + } + destroy() { + this.properties().styles.vol_ma.visible.listeners().unsubscribeAll(this), super + .destroy() + } + _titleInputs() { + const e = { + symbolsForDisplay: !0, + skipHiddenInputs: !0, + fakeInputsForDisplay: !0, + asObject: !1 + }; + return this.properties().styles.vol_ma.visible.value() ? this.inputs(e) : this + .inputs({ + ...e, + skippedInputs: ["length"] + }) + } + } + var d = i("Eyy1"), + p = i("Qb4w"); + class _ extends n.Study { + priceRange(e, t) { + let i = !1; + this.graphics().hhists().forEach((e, t) => { + i = i || this.properties().child("graphics").child("hhists").child( + t).child("showValues").value() + }); + const s = function(e, t, i, s) { + let r = null; + return e.forEach((e, s) => { + e.forEach(e => { + e.firstBarTime <= i && e.lastBarTime >= t && ( + null === r ? r = { + low: { + l: e.priceLow, + h: e.priceHigh + }, + high: { + h: e.priceHigh + } + } : (e.priceLow < r.low.l && (r.low.l = + e.priceLow, r.low.h = e + .priceHigh), r.high.h = Math + .max(r.high.h, e.priceHigh))) + }) + }), null === r ? null : s ? new p.PriceRange(r.low.l - .8 * (r.low + .h - r.low.l), r.high.h) : new p.PriceRange(r.low.l, r.high.h) + }(this.graphics().hhists(), e, t, i); + if (null === s) return null; + const r = Object(d.ensureNotNull)(this.priceScale()); + return r.isLog() ? new p.PriceRange(r.priceToLogical(s.minValue()), r + .priceToLogical(s.maxValue())) : s + } + } + + function m(e, t = "shift", i) { + return { + studyConstructor: e, + colorRotationMode: t, + colorRotationComparator: i + } + } + i.d(t, "isStudy", (function() { + return g + })), i.d(t, "isStudyStrategy", (function() { + return b + })), i.d(t, "isStudyStub", (function() { + return v + })), i.d(t, "isFundamentalStudy", (function() { + return S + })), i.d(t, "isESDStudy", (function() { + return y + })), i.d(t, "isFundamentalStudyMetaInfo", (function() { + return w + })), i.d(t, "createStudy", (function() { + return C + })), i.d(t, "studyColorRotationMode", (function() { + return x + })), i.d(t, "useSameColorRotationComparator", (function() { + return I + })); + const f = { + study_PivotPointsStandard: m(o.study_PivotPointsStandard), + study_Overlay: m(a.study_Overlay, "loop"), + study_Compare: m(l.a, "loop"), + study_Volume: m(u), + study_VbPVisible: m(class extends _ {}), + study_ScriptWithDataOffset: m(c.study_ScriptWithDataOffset) + }; + for (const e in f) f.hasOwnProperty(e) && (TradingView[e] = f[e].studyConstructor); + + function g(e) { + return e instanceof n.Study + } + + function b(e) { + return !1 + } + + function v(e) { + return e instanceof h.StudyStub + } + + function S(e) { + return e instanceof Fundamental + } + + function y(e) { + return !1 + } + + function w(e) { + return "study_Internal$STD;Fund_" === P(e) + } + + function P(e) { + const t = "study_" + (e.classId || e.shortId); + return t.startsWith("study_Internal$STD;Fund_") ? "study_Internal$STD;Fund_" : t + } + + function C(e, t, i, s, r) { + const o = P(s), + a = new(o in f ? f[o].studyConstructor : n.Study)(e, t, i, s); + return void 0 !== r && a.setId(r), a + } + + function x(e) { + const t = P(e); + return t in f ? f[t].colorRotationMode : void 0 === e.pine || r.a.isStandardPine(e.id) ? + 1 !== e.plots.length ? "shift" : "loop" : null + } + + function T(e, t) { + return e.id === t.id && (s = t, ((i = e).pine ? i.pine.version : void 0) === (s.pine ? s + .pine.version : void 0)); + var i, s + } + + function I(e) { + const t = P(e); + if (t in f) { + const e = f[t].colorRotationComparator; + if (void 0 !== e) return e + } + return T + } + }, + "3UA0": function(e, t) { + e.exports.tzData = { + "America/New_York": { + time: [-2717668562, -1633298400, -1615154400, -1601848800, -1583704800, -1570399200, + -1551650400, -1536530400, -1523224800, -1504476e3, -1491775200, -1473026400, + -1459720800, -1441576800, -1428271200, -1410127200, -1396821600, - + 1378677600, -1365372e3, -1347228e3, -1333922400, -1315173600, -1301868e3, - + 1283724e3, -1270418400, -1252274400, -1238968800, -1220824800, -1207519200, + -1189375200, -1176069600, -1157320800, -114462e4, -1125871200, -1112565600, + -1094421600, -1081116e3, -1062972e3, -1049666400, -1031522400, -1018216800, + -1000072800, -986767200, -968018400, -955317600, -936568800, -923263200, - + 905119200, -891813600, -880236e3, -76941e4, -765410400, -747266400, - + 733960800, -715816800, -702511200, -684367200, -671061600, -652917600, - + 639612e3, -620863200, -608162400, -589413600, -576108e3, -557964e3, - + 544658400, -526514400, -513208800, -495064800, -481759200, -463615200, - + 447285600, -431560800, -415836e3, -400111200, -384386400, -368661600, - + 352936800, -337212e3, -321487200, -305762400, -289432800, -273708e3, - + 257983200, -242258400, -226533600, -210808800, -195084e3, -179359200, - + 163634400, -147909600, -13158e4, -11646e4, -100130400, -84405600, -68680800, + -52956e3, -37231200, -21506400, -5781600, 9943200, 25668e3, 41392800, + 57722400, 73447200, 89172e3, 104896800, 120621600, 126669600, 152071200, + 162352800, 183520800, 199245600, 215575200, 230695200, 247024800, 262749600, + 278474400, 294199200, 309924e3, 325648800, 341373600, 357098400, 372823200, + 388548e3, 404877600, 419997600, 436327200, 452052e3, 467776800, 483501600, + 499226400, 514951200, 530676e3, 544586400, 562125600, 576036e3, 59418e4, + 607485600, 625629600, 638935200, 657079200, 670989600, 688528800, 702439200, + 719978400, 733888800, 752032800, 765338400, 783482400, 796788e3, 814932e3, + 828842400, 846381600, 860292e3, 877831200, 891741600, 909280800, 923191200, + 941335200, 954640800, 972784800, 986090400, 1004234400, 1018144800, + 1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600, + 1130637600, 1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, + 1225591200, 1236477600, 1257040800, 1268532e3, 1289095200, 1299981600, + 1320544800, 1331431200, 1351994400, 1362880800, 1383444e3, 1394330400, + 1414893600, 142578e4, 1446343200, 1457834400, 1478397600, 1489284e3, + 1509847200, 1520733600, 1541296800, 1552183200, 1572746400, 1583632800, + 1604196e3, 1615687200, 1636250400, 1647136800, 16677e5, 1678586400, + 1699149600, 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200, + 1793498400, 1804989600, 1825552800, 1836439200, 1857002400, 1867888800, + 1888452e3, 1899338400, 1919901600, 1930788e3 + ], + offset: [-17762, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, + -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 18e3, -14400, -18e3 + ] + }, + "America/Los_Angeles": { + time: [-2717668378, -1633298400, -1615154400, -1601848800, -1583704800, -880236e3, - + 769420800, -765410400, -687995940, -662680800, -620866800, -608162400, - + 589417200, -576108e3, -557967600, -544658400, -526518e3, -513208800, - + 495068400, -481759200, -463618800, -450309600, -431564400, -418255200, - + 400114800, -386805600, -368665200, -355356e3, -337215600, -323906400, - + 305766e3, -292456800, -273711600, -261007200, -242262e3, -226533600, - + 210812400, -195084e3, -179362800, -163634400, -147913200, -13158e4, - + 116463600, -100130400, -84405600, -68680800, -52956e3, -37231200, -21506400, + -5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3, + 104896800, 120621600, 126669600, 152071200, 162352800, 183520800, 199245600, + 215575200, 230695200, 247024800, 262749600, 278474400, 294199200, 309924e3, + 325648800, 341373600, 357098400, 372823200, 388548e3, 404877600, 419997600, + 436327200, 452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3, + 544586400, 562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, + 657079200, 670989600, 688528800, 702439200, 719978400, 733888800, 752032800, + 765338400, 783482400, 796788e3, 814932e3, 828842400, 846381600, 860292e3, + 877831200, 891741600, 909280800, 923191200, 941335200, 954640800, 972784800, + 986090400, 1004234400, 1018144800, 1035684e3, 1049594400, 1067133600, + 1081044e3, 1099188e3, 1112493600, 1130637600, 1143943200, 1162087200, + 1173578400, 1194141600, 1205028e3, 1225591200, 1236477600, 1257040800, + 1268532e3, 1289095200, 1299981600, 1320544800, 1331431200, 1351994400, + 1362880800, 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200, + 1457834400, 1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, + 1552183200, 1572746400, 1583632800, 1604196e3, 1615687200, 1636250400, + 1647136800, 16677e5, 1678586400, 1699149600, 1710036e3, 1730599200, + 1741485600, 1762048800, 1772935200, 1793498400, 1804989600, 1825552800, + 1836439200, 1857002400, 1867888800, 1888452e3, 1899338400, 1919901600, + 1930788e3 + ], + offset: [-28378, -28800, -25200, -28800, -25200, -28800, -25200, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800 + ] + }, + "America/Chicago": { + time: [-2717668236, -1633298400, -1615154400, -1601848800, -1583704800, -1563746400, + -1551650400, -1538949600, -1520200800, -1504476e3, -1491775200, -1473026400, + -1459720800, -1441576800, -1428271200, -1410127200, -1396821600, - + 1378677600, -1365372e3, -1347228e3, -1333922400, -1315173600, -1301868e3, - + 1283724e3, -1270418400, -1252274400, -1238968800, -1220824800, -1207519200, + -1189375200, -1176069600, -1157320800, -114462e4, -1125871200, -1112565600, + -1094421600, -1081116e3, -1067810400, -1045432800, -1031522400, -1018216800, + -1000072800, -986767200, -968018400, -955317600, -936568800, -923263200, - + 905119200, -891813600, -880236e3, -769413600, -765410400, -747266400, - + 733960800, -715816800, -702511200, -684367200, -671061600, -652917600, - + 639612e3, -620863200, -608162400, -589413600, -576108e3, -557964e3, - + 544658400, -526514400, -513208800, -495064800, -481759200, -463615200, - + 447285600, -431560800, -415836e3, -400111200, -384386400, -368661600, - + 352936800, -337212e3, -321487200, -305762400, -289432800, -273708e3, - + 257983200, -242258400, -226533600, -210808800, -195084e3, -179359200, - + 163634400, -147909600, -13158e4, -11646e4, -100130400, -84405600, -68680800, + -52956e3, -37231200, -21506400, -5781600, 9943200, 25668e3, 41392800, + 57722400, 73447200, 89172e3, 104896800, 120621600, 126669600, 152071200, + 162352800, 183520800, 199245600, 215575200, 230695200, 247024800, 262749600, + 278474400, 294199200, 309924e3, 325648800, 341373600, 357098400, 372823200, + 388548e3, 404877600, 419997600, 436327200, 452052e3, 467776800, 483501600, + 499226400, 514951200, 530676e3, 544586400, 562125600, 576036e3, 59418e4, + 607485600, 625629600, 638935200, 657079200, 670989600, 688528800, 702439200, + 719978400, 733888800, 752032800, 765338400, 783482400, 796788e3, 814932e3, + 828842400, 846381600, 860292e3, 877831200, 891741600, 909280800, 923191200, + 941335200, 954640800, 972784800, 986090400, 1004234400, 1018144800, + 1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600, + 1130637600, 1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, + 1225591200, 1236477600, 1257040800, 1268532e3, 1289095200, 1299981600, + 1320544800, 1331431200, 1351994400, 1362880800, 1383444e3, 1394330400, + 1414893600, 142578e4, 1446343200, 1457834400, 1478397600, 1489284e3, + 1509847200, 1520733600, 1541296800, 1552183200, 1572746400, 1583632800, + 1604196e3, 1615687200, 1636250400, 1647136800, 16677e5, 1678586400, + 1699149600, 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200, + 1793498400, 1804989600, 1825552800, 1836439200, 1857002400, 1867888800, + 1888452e3, 1899338400, 1919901600, 1930788e3 + ], + offset: [-21036, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, + -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, - + 21600, -18e3, -21600 + ] + }, + "America/Phoenix": { + time: [-2717670498, -1633298400, -1615154400, -1601848800, -1583704800, -880236e3, - + 820540740, -812678340, -796867140, -84405600, -68680800, 1924966800 + ], + offset: [-26898, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200 + ] + }, + "America/Toronto": { + time: [-2366755200, -1632088800, -1615154400, -1601771400, -1583712e3, -1567375200, + -1554681600, -1534716e3, -1524088800, -1503266400, -149238e4, -1471816800, - + 1460930400, -1440972e3, -1428876e3, -1409522400, -1397426400, -1378072800, - + 1365976800, -1346623200, -1333922400, -1315173600, -1301868e3, -1283724e3, - + 1270418400, -1252274400, -1238968800, -1220824800, -1207519200, -1188770400, + -1176069600, -1157320800, -1144015200, -1125871200, -1112565600, - + 1094421600, -1081116e3, -1062972e3, -1049666400, -1031522400, -1018216800, - + 1000072800, -986767200, -968018400, -955317600, -936568800, -880232400, - + 76941e4, -765410400, -747266400, -733960800, -715824e3, -702518400, - + 684374400, -671068800, -652924800, -634176e3, -620863200, -602719200, - + 589413600, -576108e3, -557964e3, -544658400, -526514400, -513208800, - + 495064800, -481759200, -463615200, -450309600, -431560800, -418255200, - + 400111200, -384386400, -368661600, -352936800, -337212e3, -321487200, - + 305762400, -289432800, -273708e3, -257983200, -242258400, -226533600, - + 210808800, -195084e3, -179359200, -163634400, -147909600, -13158e4, - + 11646e4, -100130400, -84405600, -68680800, -52956e3, -37231200, -21506400, - + 5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3, 104896800, + 120621600, 136346400, 152071200, 167796e3, 183520800, 199245600, 215575200, + 230695200, 247024800, 262749600, 278474400, 294199200, 309924e3, 325648800, + 341373600, 357098400, 372823200, 388548e3, 404877600, 419997600, 436327200, + 452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3, 544586400, + 562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, 657079200, + 670989600, 688528800, 702439200, 719978400, 733888800, 752032800, 765338400, + 783482400, 796788e3, 814932e3, 828842400, 846381600, 860292e3, 877831200, + 891741600, 909280800, 923191200, 941335200, 954640800, 972784800, 986090400, + 1004234400, 1018144800, 1035684e3, 1049594400, 1067133600, 1081044e3, + 1099188e3, 1112493600, 1130637600, 1143943200, 1162087200, 1173578400, + 1194141600, 1205028e3, 1225591200, 1236477600, 1257040800, 1268532e3, + 1289095200, 1299981600, 1320544800, 1331431200, 1351994400, 1362880800, + 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200, 1457834400, + 1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, 1552183200, + 1572746400, 1583632800, 1604196e3, 1615687200, 1636250400, 1647136800, + 16677e5, 1678586400, 1699149600, 1710036e3, 1730599200, 1741485600, + 1762048800, 1772935200, 1793498400, 1804989600, 1825552800, 1836439200, + 1857002400, 1867888800, 1888452e3, 1899338400, 1919901600, 1930788e3 + ], + offset: [-19052, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, + -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -14400, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, - + 14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3 + ] + }, + "America/Vancouver": { + time: [-2713910400, -1632088800, -1615154400, -880236e3, -769420800, -765410400, - + 747266400, -733960800, -715816800, -702511200, -684367200, -671061600, - + 652917600, -639612e3, -620863200, -608162400, -589413600, -576108e3, - + 557964e3, -544658400, -526514400, -513208800, -495064800, -481759200, - + 463615200, -450309600, -431560800, -418255200, -400111200, -386805600, - + 368661600, -355356e3, -337212e3, -323906400, -305762400, -292456800, - + 273708e3, -261007200, -242258400, -226533600, -210808800, -195084e3, - + 179359200, -163634400, -147909600, -13158e4, -11646e4, -100130400, - + 84405600, -68680800, -52956e3, -37231200, -21506400, -5781600, 9943200, + 25668e3, 41392800, 57722400, 73447200, 89172e3, 104896800, 120621600, + 136346400, 152071200, 167796e3, 183520800, 199245600, 215575200, 230695200, + 247024800, 262749600, 278474400, 294199200, 309924e3, 325648800, 341373600, + 357098400, 372823200, 388548e3, 404877600, 419997600, 436327200, 452052e3, + 467776800, 483501600, 499226400, 514951200, 530676e3, 544586400, 562125600, + 576036e3, 59418e4, 607485600, 625629600, 638935200, 657079200, 670989600, + 688528800, 702439200, 719978400, 733888800, 752032800, 765338400, 783482400, + 796788e3, 814932e3, 828842400, 846381600, 860292e3, 877831200, 891741600, + 909280800, 923191200, 941335200, 954640800, 972784800, 986090400, + 1004234400, 1018144800, 1035684e3, 1049594400, 1067133600, 1081044e3, + 1099188e3, 1112493600, 1130637600, 1143943200, 1162087200, 1173578400, + 1194141600, 1205028e3, 1225591200, 1236477600, 1257040800, 1268532e3, + 1289095200, 1299981600, 1320544800, 1331431200, 1351994400, 1362880800, + 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200, 1457834400, + 1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, 1552183200, + 1572746400, 1583632800, 1604196e3, 1615687200, 1636250400, 1647136800, + 16677e5, 1678586400, 1699149600, 1710036e3, 1730599200, 1741485600, + 1762048800, 1772935200, 1793498400, 1804989600, 1825552800, 1836439200, + 1857002400, 1867888800, 1888452e3, 1899338400, 1919901600, 1930788e3 + ], + offset: [-29548, -28800, -25200, -28800, -25200, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800 + ] + }, + "America/Argentina/Buenos_Aires": { + time: [-2372112e3, -1567468800, -1233446400, -1222992e3, -1205971200, -1194048e3, - + 117288e4, -1162512e3, -1141344e3, -1130976e3, -1109808e3, -109944e4, - + 1078272e3, -1067817600, -1046649600, -1036281600, -1015113600, -1004745600, + -983577600, -973209600, -952041600, -941587200, -931046400, -900892800, - + 890352e3, -83376e4, -82728e4, -752284800, -733795200, -197337600, - + 190857600, -184204800, -164505600, -152668800, -132969600, -121132800, - + 101433600, -86832e3, -71107200, -54777600, -39052800, -23328e3, -7603200, + 128131200, 136598400, 596937600, 605059200, 624412800, 636508800, 656467200, + 667958400, 687916800, 699408e3, 719366400, 731462400, 938908800, 952041600, + 1198972800, 1205625600, 1224374400, 1237075200, 1924981200 + ], + offset: [-14028, -15408, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -7200, - + 10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, - + 10800, -10800, -10800, -7200, -10800, -7200, -10800 + ] + }, + "America/El_Salvador": { + time: [-1546300800, 546998400, 559699200, 578448e3, 591148800, 1924970400], + offset: [-21408, -21600, -18e3, -21600, -18e3, -21600] + }, + "America/Sao_Paulo": { + time: [-1767225600, -1206968400, -1191369600, -1175385600, -1159833600, -633830400, + -622076400, -602294400, -59184e4, -570758400, -560217600, -539136e3, - + 53136e4, -195436800, -184204800, -155174400, -150076800, -128908800, - + 121132800, -99964800, -89596800, -68428800, -57974400, 499737600, 511228800, + 530582400, 540259200, 562118400, 571190400, 592963200, 602035200, 624412800, + 634694400, 656467200, 666748800, 687916800, 697593600, 719971200, 728438400, + 750816e3, 761702400, 782265600, 793152e3, 813715200, 823996800, 84456e4, + 856051200, 876096e3, 888710400, 908064e3, 919555200, 938908800, 951609600, + 970963200, 982454400, 1003017600, 1013904e3, 1036281600, 1045353600, + 1066521600, 1076803200, 1099353600, 1108857600, 1129420800, 1140307200, + 1162684800, 1172361600, 119232e4, 1203206400, 1224374400, 1234656e3, + 1255824e3, 1266710400, 1287273600, 129816e4, 1318723200, 1330214400, + 1350777600, 1361059200, 1382227200, 1392508800, 1413676800, 1424563200, + 1445126400, 1456012800, 1476576e3, 1487462400, 1508025600, 1518912e3, + 1541289600, 1550361600, 1924981200 + ], + offset: [-11188, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, + -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, - + 7200, -10800 + ] + }, + "America/Bogota": { + time: [-2707689600, -1739059200, 704851200, 733881600, 1924974e3], + offset: [-17776, -17776, -18e3, -14400, -18e3] + }, + "America/Caracas": { + time: [-2524521600, -1826755200, -157766400, 1197169200, 1462069800, 1924977600], + offset: [-16064, -16060, -16200, -14400, -16200, -14400] + }, + "Europe/Moscow": { + time: [-2840140800, -1688256e3, -165681e4, -1641340800, -1627956e3, -1618700400, - + 1596416400, -1593804521, -1589846400, -1542416400, -1539478800, -1525305600, + -1522713600, -1491177600, -1247529600, 354931200, 370742400, 386467200, + 402278400, 418003200, 433814400, 449625600, 465361200, 481082400, 496810800, + 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, + 622609200, 638330400, 654663600, 670384800, 686113200, 695786400, 701834400, + 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, + 828237600, 846385200, 859687200, 877834800, 891136800, 909284400, 922586400, + 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, + 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, + 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, + 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, 1414288800, + 1925002800 + ], + offset: [9017, 9017, 9079, 12679, 9079, 16279, 12679, 16279, 14400, 10800, 14400, + 18e3, 14400, 10800, 7200, 10800, 14400, 10800, 14400, 10800, 14400, 10800, + 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, + 10800, 14400, 10800, 10800, 7200, 10800, 14400, 10800, 14400, 10800, 14400, + 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, + 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, + 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, + 14400, 10800 + ] + }, + "Europe/Athens": { + time: [-2344636800, -1686095940, -1182988800, -1178150400, -906854400, -904867200, - + 85725e4, -844473600, -828230400, -812419200, -552355200, -541641600, + 166492800, 186195600, 198036e3, 213764400, 228880800, 244090800, 260330400, + 275457600, 291805200, 307418400, 323395200, 338947200, 354682800, 370411200, + 386132400, 401860800, 417582e3, 433310400, 449031600, 465364800, 481086e3, + 496814400, 512535600, 528264e3, 543985200, 559713600, 575434800, 591163200, + 606884400, 622612800, 638334e3, 654667200, 670388400, 686116800, 701838e3, + 717566400, 733287600, 749016e3, 764737200, 780465600, 796186800, 811915200, + 828241200, 846388800, 859690800, 877838400, 891140400, 909288e3, 92259e4, + 941342400, 954039600, 972792e3, 985489200, 1004241600, 1017543600, + 1035691200, 1048993200, 1067140800, 1080442800, 1099195200, 1111892400, + 1130644800, 1143342e3, 1162094400, 1174791600, 1193544e3, 1206846e3, + 1224993600, 1238295600, 1256443200, 1269745200, 1288497600, 1301194800, + 1319947200, 1332644400, 1351396800, 1364698800, 1382846400, 1396148400, + 1414296e3, 1427598e3, 1445745600, 1459047600, 14778e5, 1490497200, + 1509249600, 1521946800, 1540699200, 1554001200, 1572148800, 1585450800, + 1603598400, 1616900400, 1635652800, 164835e4, 1667102400, 1679799600, + 1698552e3, 1711854e3, 1730001600, 1743303600, 1761451200, 1774753200, + 1792900800, 1806202800, 1824955200, 1837652400, 1856404800, 1869102e3, + 1887854400, 1901156400, 1919304e3, 1932606e3 + ], + offset: [5692, 5692, 7200, 10800, 7200, 10800, 7200, 3600, 7200, 3600, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200 + ] + }, + "Europe/Belgrade": { + time: [-2713910400, -905821200, -85725e4, -844552800, -828219600, -812498400, - + 79677e4, -777938400, -766616400, 417578400, 433306800, 449028e3, 465361200, + 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, + 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, 686113200, + 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, + 811911600, 828237600, 846385200, 859687200, 877834800, 891136800, 909284400, + 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, + 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, + 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, + 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, + 1319943600, 1332640800, 1351393200, 1364695200, 1382842800, 1396144800, + 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600, + 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, + 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, + 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, + 1792897200, 1806199200, 1824951600, 1837648800, 1856401200, 1869098400, + 1887850800, 1901152800, 1919300400, 1932602400 + ], + offset: [4920, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Berlin": { + time: [-2422051200, -1693702800, -1680476400, -1663452e3, -1650142800, -1632002400, + -1618693200, -938901600, -85725e4, -844552800, -828219600, -812498400, - + 79677e4, -781048800, -776556e3, -765925200, -761173200, -748476e3, - + 733266e3, -717627600, -714603600, -71037e4, -701902800, -684972e3, - + 670453200, -654127200, -639003600, 323834400, 338958e3, 354679200, + 370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, 465361200, + 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, + 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, 686113200, + 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, + 811911600, 828237600, 846385200, 859687200, 877834800, 891136800, 909284400, + 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, + 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, + 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, + 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, + 1319943600, 1332640800, 1351393200, 1364695200, 1382842800, 1396144800, + 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600, + 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, + 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, + 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, + 1792897200, 1806199200, 1824951600, 1837648800, 1856401200, 1869098400, + 1887850800, 1901152800, 1919300400, 1932602400 + ], + offset: [3208, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 10800, 7200, 3600, 7200, 3600, 7200, 10800, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/London": { + time: [-3852662400, -1691964e3, -1680469200, -1664143200, -1650142800, -1633903200, + -1617483600, -1601848800, -1586034e3, -1570399200, -1552165200, -1538344800, + -152253e4, -15075e5, -1490562e3, -1473631200, -1460926800, -1442786400, - + 1428872400, -1410732e3, -1396213200, -1379282400, -1364763600, -1348437600, + -1333314e3, -1315778400, -1301259600, -1284328800, -126981e4, -1253484e3, - + 1238360400, -1221429600, -1206910800, -118998e4, -1175461200, -1159135200, - + 1143406800, -1126476e3, -1111957200, -1095631200, -1080507600, -1063576800, + -1049058e3, -1032127200, -1017608400, -1001282400, -986158800, -969228e3, - + 950475600, -942012e3, -904514400, -896043600, -875484e3, -864594e3, - + 844034400, -832539600, -812584800, -798066e3, -781048800, -772059600, - + 764802e3, -748476e3, -733352400, -719445600, -717026400, -706741200, - + 699483600, -687996e3, -668034e3, -654732e3, -636584400, -622072800, - + 605739600, -590623200, -57429e4, -558568800, -542235600, -527119200, - + 512600400, -496274400, -481150800, -46422e4, -449701200, -432165600, - + 417646800, -401320800, -386197200, -369266400, -354747600, -337816800, - + 323298e3, -306972e3, -291848400, -276732e3, -257979600, -245282400, - + 22653e4, -213228e3, -195080400, -182383200, -163630800, -150933600, - + 132181200, -119484e3, -100731600, -88034400, -68677200, -59004e3, -37238400, + 57726e3, 69818400, 89175600, 101268e3, 120625200, 132717600, 152074800, + 164167200, 183524400, 196221600, 214974e3, 227671200, 246423600, 259120800, + 278478e3, 290570400, 309927600, 32202e4, 341377200, 354675600, 372823200, + 386125200, 404272800, 417574800, 435722400, 449024400, 467776800, 481078800, + 499226400, 512528400, 530676e3, 543978e3, 562125600, 575427600, 593575200, + 606877200, 625629600, 638326800, 657079200, 670381200, 688528800, 701830800, + 719978400, 733280400, 751428e3, 76473e4, 782877600, 796179600, 814327200, + 828234e3, 846381600, 859683600, 877831200, 891133200, 909280800, 922582800, + 941335200, 954032400, 972784800, 985482e3, 1004234400, 1017536400, + 1035684e3, 1048986e3, 1067133600, 1080435600, 1099188e3, 1111885200, + 1130637600, 1143334800, 1162087200, 1174784400, 1193536800, 1206838800, + 1224986400, 1238288400, 1256436e3, 1269738e3, 1288490400, 1301187600, + 131994e4, 1332637200, 1351389600, 1364691600, 1382839200, 1396141200, + 1414288800, 1427590800, 1445738400, 1459040400, 1477792800, 149049e4, + 1509242400, 1521939600, 1540692e3, 1553994e3, 1572141600, 1585443600, + 1603591200, 1616893200, 1635645600, 1648342800, 1667095200, 1679792400, + 1698544800, 1711846800, 1729994400, 1743296400, 1761444e3, 1774746e3, + 1792893600, 1806195600, 1824948e3, 1837645200, 1856397600, 1869094800, + 1887847200, 1901149200, 1919296800, 1932598800 + ], + offset: [-75, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 0, 3600, 0, 3600, 7200, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, + 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 3600, + 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0 + ] + }, + "Europe/Luxembourg": { + time: [-2069712e3, -1692493200, -1680476400, -1662339600, -165015e4, -1632002400, - + 1618693200, -1612656e3, -1604278800, -1585515600, -1574038800, -1552255200, + -1539997200, -1520546400, -1507510800, -1490569200, -1473642e3, -1459116e3, + -1444006800, -142767e4, -1411866e3, -1396220400, -1379293200, -1364770800, - + 1348448400, -1333321200, -1316394e3, -1301266800, -1284339600, -126981e4, - + 1253484e3, -1238360400, -1221429600, -1206910800, -1191189600, -1175461200, + -1160344800, -1143406800, -1127685600, -1111957200, -1096840800, - + 1080507600, -1063576800, -1049058e3, -1033336800, -1017608400, -1002492e3, - + 986158800, -969228e3, -950475600, -942012e3, -935182800, -85725e4, - + 844552800, -828219600, -812498400, -797979600, -781048800, -766616400, - + 745452e3, -733266e3, 228880800, 244004400, 260330400, 276058800, 29178e4, + 307508400, 323834400, 338958e3, 354679200, 370407600, 386128800, 401857200, + 417578400, 433306800, 449028e3, 465361200, 481082400, 496810800, 512532e3, + 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, + 638330400, 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, + 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, + 859687200, 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, + 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, + 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, + 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, + 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, + 1351393200, 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, + 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, + 1540695600, 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, + 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, + 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, + 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, + 1919300400, 1932602400 + ], + offset: [1476, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 0, 3600, 0, 3600, 0, 3600, + 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600 + ] + }, + "Europe/Madrid": { + time: [-2177453684, -1631926800, -1616886e3, -1601168400, -158535e4, -1442451600, - + 142767e4, -1379293200, -1364770800, -1348448400, -1333321200, -1316390400, - + 1301266800, -1284339600, -1269817200, -1026954e3, -1017615600, -1001898e3, - + 999478800, -986083200, -951433200, -940208400, -873075600, -862614e3, - + 842835600, -828313200, -811386e3, -796863600, -779936400, -765414e3, - + 748486800, -733964400, -652323600, -639010800, 135126e3, 150253200, + 166575600, 181702800, 196815600, 212547600, 22887e4, 243997200, 260330400, + 276058800, 29178e4, 307508400, 323834400, 338958e3, 354679200, 370407600, + 386128800, 401857200, 417578400, 433306800, 449028e3, 465361200, 481082400, + 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600, + 606880800, 622609200, 638330400, 654663600, 670384800, 686113200, 701834400, + 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, + 828237600, 846385200, 859687200, 877834800, 891136800, 909284400, 922586400, + 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, + 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, + 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, + 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, + 1332640800, 1351393200, 1364695200, 1382842800, 1396144800, 1414292400, + 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, + 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, 1603594800, + 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, + 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, + 1806199200, 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, + 1901152800, 1919300400, 1932602400 + ], + offset: [-884, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 7200, 3600, 0, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Paris": { + time: [-2486678340, -1855958340, -1689814800, -1680393600, -1665363600, -1648339200, + -1635123600, -1616889600, -1604278800, -158544e4, -1574038800, -1552262400, + -1539997200, -1520553600, -1507510800, -1490572800, -1470618e3, -1459123200, + -1444006800, -1427673600, -1411952400, -1396224e3, -1379293200, -1364774400, + -1348448400, -1333324800, -1316394e3, -1301270400, -1284339600, -1269820800, + -1253494800, -1238371200, -1221440400, -1206921600, -1191200400, -1175472e3, + -1160355600, -1143417600, -1127696400, -1111968e3, -1096851600, -1080518400, + -1063587600, -1049068800, -1033347600, -1017619200, -1002502800, -986169600, + -969238800, -950486400, -942012e3, -932432400, -85725e4, -844552800, - + 828219600, -812498400, -800064e3, -796258800, -781048800, -766616400, + 196822800, 212547600, 228880800, 244004400, 260330400, 276058800, 29178e4, + 307508400, 323834400, 338958e3, 354679200, 370407600, 386128800, 401857200, + 417578400, 433306800, 449028e3, 465361200, 481082400, 496810800, 512532e3, + 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, + 638330400, 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, + 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, + 859687200, 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, + 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, + 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, + 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, + 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, + 1351393200, 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, + 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, + 1540695600, 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, + 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, + 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, + 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, + 1919300400, 1932602400 + ], + offset: [561, 561, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 7200, 3600, 7200, 3600, 7200, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Rome": { + time: [-3252096e3, -2403562204, -1690761600, -168048e4, -1664755200, -1648944e3, - + 163512e4, -1616889600, -1604275200, -1585526400, -1571011200, -1555286400, - + 932428800, -85725e4, -844552800, -828219600, -812498400, -798066e3, - + 781048800, -76671e4, -750895200, -733352400, -719452800, -70191e4, - + 689205600, -670453200, -114048e3, -103161600, -81993600, -71708400, - + 50544e3, -40258800, -18489600, -8204400, 1296e4, 23245200, 43804800, + 54694800, 75859200, 86749200, 107913600, 118198800, 138758400, 149648400, + 170812800, 181098e3, 202262400, 212547600, 233107200, 243997200, 265161600, + 276051600, 296611200, 307501200, 323834400, 338958e3, 354679200, 370407600, + 386128800, 401857200, 417578400, 433306800, 449028e3, 465361200, 481082400, + 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600, + 606880800, 622609200, 638330400, 654663600, 670384800, 686113200, 701834400, + 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, + 828237600, 846385200, 859687200, 877834800, 891136800, 909284400, 922586400, + 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, + 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, + 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, + 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, + 1332640800, 1351393200, 1364695200, 1382842800, 1396144800, 1414292400, + 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, + 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, 1603594800, + 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, + 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, + 1806199200, 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, + 1901152800, 1919300400, 1932602400 + ], + offset: [2996, 2996, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Warsaw": { + time: [-2840140800, -1717027200, -1693702800, -1680476400, -1663452e3, -1650142800, + -1632002400, -1618693200, -1600466400, -1587157200, -1501718400, -931730400, + -85725e4, -844552800, -828219600, -812498400, -796600800, -778723200, - + 762652800, -748483200, -733266e3, -715212e3, -701902800, -684972e3, - + 670453200, -654127200, -639003600, -397090800, -386805600, -371084400, - + 355356e3, -334191600, -323301600, -307580400, -291852e3, -271292400, - + 260402400, -239842800, -228952800, -208393200, -197503200, -176338800, - + 166053600, 228877200, 244000800, 260326800, 276055200, 291776400, 307504800, + 323830800, 338954400, 354675600, 370404e3, 386125200, 401853600, 417574800, + 433303200, 449024400, 465357600, 481078800, 496807200, 512528400, 528256800, + 543978e3, 559706400, 575431200, 591159600, 606880800, 622609200, 638330400, + 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, 749012400, + 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, 859687200, + 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, 972788400, + 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, 1067137200, + 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, 1162090800, + 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600, + 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, + 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, 1445742e3, + 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, 1540695600, + 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, 1635649200, + 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, 1729998e3, + 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, 1824951600, + 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400, + 1932602400 + ], + offset: [5040, 5040, 3600, 7200, 3600, 7200, 3600, 7200, 7200, 10800, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Istanbul": { + time: [-2840140800, -1869868800, -1693699200, -168048e4, -1570406400, -1552176e3, - + 1538352e3, -1522540800, -1507507200, -1490572800, -1440201600, -1428019200, + -1409702400, -1396483200, -931046400, -922665600, -917827200, -892425600, - + 875836800, -764726400, -744336e3, -733795200, -716428800, -701913600, - + 684979200, -670464e3, -654134400, -639014400, -62208e4, -60696e4, - + 590025600, -575510400, -235612800, -194832e3, -177724800, -165715200, + 107917200, 121226400, 133927200, 152676e3, 164685600, 184125600, 196221600, + 215575200, 228880800, 245815200, 260330400, 267926400, 428464800, 433908e3, + 468122400, 482806800, 496720800, 512528400, 528256800, 543978e3, 559706400, + 575427600, 591156e3, 606877200, 622605600, 638326800, 65466e4, 670381200, + 686109600, 701830800, 717559200, 733280400, 749008800, 764125200, 780458400, + 796179600, 811908e3, 828234e3, 846381600, 859683600, 877831200, 891133200, + 909280800, 922582800, 941335200, 954032400, 972784800, 985482e3, 1004234400, + 1017536400, 1035684e3, 1048986e3, 1067133600, 1080435600, 1099188e3, + 1111885200, 1130637600, 1143334800, 1162087200, 1174791600, 1193544e3, + 1206846e3, 1224993600, 1238295600, 1256443200, 1269745200, 1288497600, + 1301281200, 1319947200, 1332644400, 1351396800, 1364698800, 1382846400, + 1396234800, 1414296e3, 1427598e3, 1446955200, 1459047600, 1473206400, + 1925002800 + ], + offset: [6952, 7016, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 10800, 14400, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 10800 + ] + }, + "Europe/Zurich": { + time: [-3675196800, -2385244800, -904431600, -891122400, -872982e3, -859672800, + 354679200, 370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, + 465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, + 575431200, 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, + 686113200, 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, + 796183200, 811911600, 828237600, 846385200, 859687200, 877834800, 891136800, + 909284400, 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, + 101754e4, 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, + 1111888800, 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, + 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, + 1301191200, 1319943600, 1332640800, 1351393200, 1364695200, 1382842800, + 1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, + 1490493600, 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, + 1585447200, 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, + 1679796e3, 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, + 1774749600, 1792897200, 1806199200, 1824951600, 1837648800, 1856401200, + 1869098400, 1887850800, 1901152800, 1919300400, 1932602400 + ], + offset: [2048, 1786, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Australia/Sydney": { + time: [-2364076800, -1672531140, -1665352800, -883605600, -876088800, -860364e3, - + 844639200, -828309600, -813189600, 57722400, 68007600, 89172e3, 100062e3, + 120621600, 131511600, 152071200, 162961200, 183520800, 195015600, 215575200, + 226465200, 247024800, 257914800, 278474400, 289364400, 309924e3, 320814e3, + 341373600, 352263600, 372823200, 386737200, 404877600, 415767600, 436327200, + 447217200, 467776800, 478666800, 499226400, 511326e3, 530071200, 542775600, + 562125600, 57483e4, 59418e4, 606279600, 625629600, 636519600, 657079200, + 667969200, 688528800, 699418800, 719978400, 731473200, 752032800, 762922800, + 783482400, 794372400, 814932e3, 828241200, 846381600, 859690800, 877831200, + 891140400, 909280800, 92259e4, 941335200, 954039600, 967341600, 985489200, + 1004234400, 1017543600, 1035684e3, 1048993200, 1067133600, 1080442800, + 1099188e3, 1111892400, 1130637600, 1143946800, 1162087200, 1174791600, + 1193536800, 1207450800, 1223172e3, 1238900400, 1254621600, 127035e4, + 1286071200, 1301799600, 1317520800, 1333249200, 1349575200, 1365303600, + 1381024800, 1396753200, 1412474400, 1428202800, 1443924e3, 1459652400, + 1475373600, 1491102e3, 1506823200, 1522551600, 1538877600, 1554606e3, + 1570327200, 1586055600, 1601776800, 1617505200, 1633226400, 1648954800, + 1664676e3, 1680404400, 1696125600, 1712458800, 172818e4, 1743908400, + 1759629600, 1775358e3, 1791079200, 1806807600, 1822528800, 1838257200, + 1853978400, 1869706800, 1886032800, 1901761200, 1917482400, 1933210800 + ], + offset: [36292, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600 + ] + }, + "Australia/Brisbane": { + time: [-2366755200, -1672531140, -1665352800, -883605600, -876088800, -860364e3, - + 844639200, -828309600, -813189600, 57722400, 68007600, 625629600, 636519600, + 657079200, 667969200, 688528800, 699418800, 1925028e3 + ], + offset: [36728, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3 + ] + }, + "Australia/Adelaide": { + time: [-2364076800, -2230156800, -1672531140, -1665352800, -883605600, -876088800, - + 860364e3, -844639200, -828309600, -813189600, 57722400, 68007600, 89172e3, + 100062e3, 120621600, 131511600, 152071200, 162961200, 183520800, 195015600, + 215575200, 226465200, 247024800, 257914800, 278474400, 289364400, 309924e3, + 320814e3, 341373600, 352263600, 372823200, 384318e3, 404877600, 415767600, + 436327200, 447217200, 467776800, 478666800, 499226400, 511326e3, 530071200, + 542775600, 562125600, 57483e4, 59418e4, 606279600, 625629600, 637729200, + 657079200, 667969200, 688528800, 701233200, 719978400, 731473200, 752032800, + 764132400, 783482400, 796186800, 814932e3, 828241200, 846381600, 859690800, + 877831200, 891140400, 909280800, 92259e4, 941335200, 954039600, 972784800, + 985489200, 1004234400, 1017543600, 1035684e3, 1048993200, 1067133600, + 1080442800, 1099188e3, 1111892400, 1130637600, 1143946800, 1162087200, + 1174791600, 1193536800, 1207450800, 1223172e3, 1238900400, 1254621600, + 127035e4, 1286071200, 1301799600, 1317520800, 1333249200, 1349575200, + 1365303600, 1381024800, 1396753200, 1412474400, 1428202800, 1443924e3, + 1459652400, 1475373600, 1491102e3, 1506823200, 1522551600, 1538877600, + 1554606e3, 1570327200, 1586055600, 1601776800, 1617505200, 1633226400, + 1648954800, 1664676e3, 1680404400, 1696125600, 1712458800, 172818e4, + 1743908400, 1759629600, 1775358e3, 1791079200, 1806807600, 1822528800, + 1838257200, 1853978400, 1869706800, 1886032800, 1901761200, 1917482400, + 1933210800 + ], + offset: [33260, 32400, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, + 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, + 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, + 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, + 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, + 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, + 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, + 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, + 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, + 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, + 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, + 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800 + ] + }, + "Australia/ACT": { + time: [-2364076800, -1672531140, -1665352800, -883605600, -876088800, -860364e3, - + 844639200, -828309600, -813189600, 57722400, 68007600, 89172e3, 100062e3, + 120621600, 131511600, 152071200, 162961200, 183520800, 195015600, 215575200, + 226465200, 247024800, 257914800, 278474400, 289364400, 309924e3, 320814e3, + 341373600, 352263600, 372823200, 386737200, 404877600, 415767600, 436327200, + 447217200, 467776800, 478666800, 499226400, 511326e3, 530071200, 542775600, + 562125600, 57483e4, 59418e4, 606279600, 625629600, 636519600, 657079200, + 667969200, 688528800, 699418800, 719978400, 731473200, 752032800, 762922800, + 783482400, 794372400, 814932e3, 828241200, 846381600, 859690800, 877831200, + 891140400, 909280800, 92259e4, 941335200, 954039600, 967341600, 985489200, + 1004234400, 1017543600, 1035684e3, 1048993200, 1067133600, 1080442800, + 1099188e3, 1111892400, 1130637600, 1143946800, 1162087200, 1174791600, + 1193536800, 1207450800, 1223172e3, 1238900400, 1254621600, 127035e4, + 1286071200, 1301799600, 1317520800, 1333249200, 1349575200, 1365303600, + 1381024800, 1396753200, 1412474400, 1428202800, 1443924e3, 1459652400, + 1475373600, 1491102e3, 1506823200, 1522551600, 1538877600, 1554606e3, + 1570327200, 1586055600, 1601776800, 1617505200, 1633226400, 1648954800, + 1664676e3, 1680404400, 1696125600, 1712458800, 172818e4, 1743908400, + 1759629600, 1775358e3, 1791079200, 1806807600, 1822528800, 1838257200, + 1853978400, 1869706800, 1886032800, 1901761200, 1917482400, 1933210800 + ], + offset: [36292, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, + 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, + 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600 + ] + }, + "Asia/Almaty": { + time: [-1441152e3, -1247529600, 354931200, 370742400, 386467200, 402278400, + 418003200, 433814400, 449625600, 465361200, 481082400, 496810800, 512532e3, + 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, + 638330400, 654663600, 670384800, 686113200, 695786400, 701834400, 717562800, + 733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600, + 846385200, 859687200, 877834800, 891136800, 909284400, 922586400, 941338800, + 954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, + 1067137200, 1080439200, 1099191600, 1925013600 + ], + offset: [18468, 18e3, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, + 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, + 21600, 21600, 18e3, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, + 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, + 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600 + ] + }, + "Asia/Ashkhabad": { + time: [-1441152e3, -1247529600, 354931200, 370742400, 386467200, 402278400, + 418003200, 433814400, 449625600, 465361200, 481082400, 496810800, 512532e3, + 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, + 638330400, 654663600, 670384800, 686113200, 695786400, 192501e4 + ], + offset: [14012, 14400, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, + 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, + 18e3, 18e3, 14400, 18e3 + ] + }, + "Asia/Tokyo": { + time: [-2587678861, -683769600, -672274800, -654739200, -640825200, -620265600, - + 609375600, -588816e3, -577926e3, 1925024400 + ], + offset: [33539, 32400, 36e3, 32400, 36e3, 32400, 36e3, 32400, 36e3, 32400] + }, + "Asia/Taipei": { + time: [-2335219200, -1017792e3, -766191600, -745804800, -733795200, -716860800, - + 699580800, -683856e3, -670636800, -65232e4, -639100800, -620784e3, - + 607564800, -589248e3, -576028800, -562896e3, -541728e3, -528681600, - + 510192e3, -497145600, -478656e3, -465609600, -449798400, -433987200, - + 418176e3, -402451200, -38664e4, -370915200, -355104e3, -339379200, - + 323568e3, -302486400, -291945600, -270950400, -260409600, 134006400, + 149817600, 165542400, 181353600, 299635200, 307584e3, 1925020800 + ], + offset: [29160, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, + 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800 + ] + }, + "Asia/Singapore": { + time: [-2177452800, -2038176e3, -1167609600, -1073001600, -894153600, -879638400, - + 766972800, 378691200, 1925020800 + ], + offset: [24925, 24925, 25200, 26400, 26400, 27e3, 32400, 27e3, 28800] + }, + "Asia/Shanghai": { + time: [-2177452800, -1600646400, -1585872e3, -933638400, -922060800, -908841600, - + 888796800, -881020800, -767836800, -745804800, -733795200, -716860800, - + 699580800, -683856e3, -670636800, -65232e4, -649987200, 515556e3, 527047200, + 545191200, 558496800, 577245600, 589946400, 608695200, 622000800, 640144800, + 653450400, 671594400, 6849e5, 1925020800 + ], + offset: [29143, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, + 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800 + ] + }, + "Asia/Seoul": { + time: [-1948752e3, -1830384e3, -767318400, -681177600, -672192e3, -654739200, - + 640828800, -623376e3, -609379200, -588816e3, -577929600, -498096e3, - + 462672e3, -451699200, -429753600, -418262400, -399513600, -387417600, - + 368064e3, -355968e3, -336614400, -324518400, -305164800, -293068800, - + 264902400, 547610400, 560919600, 57906e4, 592369200, 1925024400 + ], + offset: [30472, 30600, 32400, 32400, 36e3, 32400, 36e3, 32400, 36e3, 32400, 36e3, + 32400, 30600, 34200, 30600, 34200, 30600, 34200, 30600, 34200, 30600, 34200, + 30600, 34200, 30600, 32400, 36e3, 32400, 36e3, 32400 + ] + }, + "Asia/Tehran": { + time: [-1704153600, -757382400, 247190400, 259286400, 277776e3, 283996800, + 290822400, 306547200, 322444800, 338515200, 673228800, 685497600, 701222400, + 71712e4, 732758400, 748656e3, 764294400, 780192e3, 795830400, 811728e3, + 827366400, 843264e3, 858988800, 874886400, 890524800, 906422400, 922060800, + 937958400, 953596800, 969494400, 985219200, 1001116800, 1016755200, + 1032652800, 1048291200, 1064188800, 1079827200, 1095724800, 1111449600, + 1127347200, 1206057600, 1221955200, 123768e4, 1253577600, 1269216e3, + 1285113600, 1300752e3, 1316649600, 1332288e3, 1348185600, 1363910400, + 1379808e3, 1395446400, 1411344e3, 1426982400, 144288e4, 1458518400, + 1474416e3, 1490140800, 1506038400, 1521676800, 1537574400, 1553212800, + 1569110400, 1584748800, 1600646400, 1616371200, 1632268800, 1647907200, + 1663804800, 1679443200, 1695340800, 1710979200, 1726876800, 1742601600, + 1758499200, 1774137600, 1790035200, 1805673600, 1821571200, 1837209600, + 1853107200, 1868745600, 1884643200, 1900368e3, 1916265600, 1931904e3 + ], + offset: [12344, 12344, 12600, 14400, 18e3, 14400, 12600, 16200, 12600, 16200, 12600, + 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, + 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, + 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, + 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, + 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, + 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, + 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600 + ] + }, + "Asia/Dubai": { + time: [-1577923200, 1925006400], + offset: [13272, 14400] + }, + "Asia/Kolkata": { + time: [-3645216e3, -3155673600, -2019686400, -891561600, -872035200, -862617600, - + 764121600, 1925011800 + ], + offset: [21208, 21200, 19270, 19800, 23400, 19800, 23400, 19800] + }, + "Asia/Hong_Kong": { + time: [-2056663398, -900882e3, -891547200, -884217600, -761176800, -747878400, - + 728508600, -717021e3, -697059e3, -683757e3, -668028600, -654726600, - + 636579e3, -623277e3, -605129400, -591827400, -573679800, -559773e3, - + 541625400, -528323400, -510179400, -498083400, -478729800, -466633800, - + 446675400, -435184200, -415225800, -403129800, -383776200, -371680200, - + 352326600, -340230600, -320877e3, -308781e3, -288822600, -277331400, - + 257373e3, -245881800, -225923400, -213827400, -194473800, -182377800, - + 163024200, -148509e3, -132784200, -117059400, -101334600, -85609800, - + 69280200, -53555400, -37830600, -22105800, -6381e3, 9343800, 25068600, + 40793400, 56518200, 72243e3, 88572600, 104297400, 120022200, 126070200, + 151471800, 167196600, 182921400, 198646200, 214371e3, 295414200, 309324600, + 1925020800 + ], + offset: [27402, 28800, 32400, 30600, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, + 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, + 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, + 28800, 32400, 28800, 32400, 28800 + ] + }, + "Asia/Bangkok": { + time: [-2840140800, -1570060800, 1925017200], + offset: [24124, 24124, 25200] + }, + "Asia/Chongqing": { + time: [-2177452800, -1600646400, -1585872e3, -933638400, -922060800, -908841600, - + 888796800, -881020800, -767836800, -745804800, -733795200, -716860800, - + 699580800, -683856e3, -670636800, -65232e4, -649987200, 515556e3, 527047200, + 545191200, 558496800, 577245600, 589946400, 608695200, 622000800, 640144800, + 653450400, 671594400, 6849e5, 1925020800 + ], + offset: [29143, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, + 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800 + ] + }, + "Asia/Jerusalem": { + time: [-2840140800, -1640995200, -933638400, -857347200, -844293600, -825811200, - + 812678400, -794188800, -779846400, -762645600, -748303200, -731116800, - + 681955200, -673228800, -667951200, -65232e4, -636415200, -62208e4, - + 608936400, -59184e4, -572475600, -558568800, -542840400, -527724e3, - + 514414800, -490838400, -482976e3, -459468e3, -451526400, -428544e3, - + 418251600, -400024800, -387417600, 142387200, 150854400, 167184e3, + 178675200, 334022400, 337654800, 452563200, 462243600, 482284800, 495590400, + 516758400, 526435200, 545443200, 558489600, 576633600, 589334400, 609897600, + 620784e3, 638323200, 651628800, 669772800, 683683200, 701827200, 715737600, + 733708800, 747187200, 765158400, 778032e3, 796608e3, 810086400, 826848e3, + 842832e3, 858902400, 874195200, 890352e3, 90504e4, 923018400, 936324e3, + 955677600, 970794e3, 986778e3, 1001293200, 1017363600, 1033952400, + 1048813200, 1065142800, 1081299600, 1095814800, 1112320800, 1128823200, + 1143770400, 1159668e3, 117522e4, 1189908e3, 1206669600, 1223172e3, + 1238119200, 1254016800, 1269568800, 1284256800, 1301623200, 1317520800, + 1333072800, 1348365600, 1364522400, 1382839200, 1395972e3, 1414288800, + 1427421600, 1445738400, 1458871200, 1477792800, 1490320800, 1509242400, + 1521770400, 1540692e3, 1553824800, 1572141600, 1585274400, 1603591200, + 1616724e3, 1635645600, 1648173600, 1667095200, 1679623200, 1698544800, + 1711677600, 1729994400, 1743127200, 1761444e3, 1774576800, 1792893600, + 1806026400, 1824948e3, 1837476e3, 1856397600, 1868925600, 1887847200, + 190098e4, 1919296800, 1932429600 + ], + offset: [8454, 8440, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 14400, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200 + ] + }, + "Asia/Kuwait": { + time: [-719625600, 1925002800], + offset: [11212, 10800] + }, + "Asia/Muscat": { + time: [-1577923200, 1925006400], + offset: [13272, 14400] + }, + "Asia/Qatar": { + time: [-1577923200, 76204800, 1925002800], + offset: [12368, 14400, 10800] + }, + "Asia/Riyadh": { + time: [-719625600, 1925002800], + offset: [11212, 10800] + }, + "Pacific/Auckland": { + time: [-3192393600, -1330293600, -1320012e3, -1300658400, -1287352800, -1269208800, + -1255903200, -1237759200, -1224453600, -1206309600, -1192399200, -117486e4, + -1160949600, -1143410400, -1125871200, -1112565600, -1094421600, -1081116e3, + -1062972e3, -1049666400, -1031522400, -1018216800, -1000072800, -986767200, + -968018400, -955317600, -936568800, -923263200, -757382400, 152676e3, + 162356400, 183520800, 195015600, 215575200, 226465200, 247024800, 257914800, + 278474400, 289364400, 309924e3, 320814e3, 341373600, 352263600, 372823200, + 384318e3, 404877600, 415767600, 436327200, 447217200, 467776800, 478666800, + 499226400, 510116400, 530676e3, 541566e3, 562125600, 573620400, 59418e4, + 60507e4, 623815200, 637729200, 655264800, 669178800, 686714400, 700628400, + 718164e3, 732682800, 749613600, 764132400, 781063200, 795582e3, 812512800, + 827031600, 844567200, 858481200, 876016800, 889930800, 907466400, 921985200, + 938916e3, 953434800, 970365600, 984884400, 100242e4, 1016334e3, 1033869600, + 1047783600, 1065319200, 1079838e3, 1096768800, 1111287600, 1128218400, + 1142737200, 1159668e3, 1174186800, 1191117600, 1207450800, 1222567200, + 1238900400, 1254016800, 127035e4, 1285466400, 1301799600, 1316916e3, + 1333249200, 1348970400, 1365303600, 138042e4, 1396753200, 1411869600, + 1428202800, 1443319200, 1459652400, 1474768800, 1491102e3, 1506218400, + 1522551600, 1538272800, 1554606e3, 1569722400, 1586055600, 1601172e3, + 1617505200, 1632621600, 1648954800, 1664071200, 1680404400, 1695520800, + 1712458800, 1727575200, 1743908400, 1759024800, 1775358e3, 1790474400, + 1806807600, 1821924e3, 1838257200, 1853373600, 1869706800, 1885428e3, + 1901761200, 1916877600, 1933210800 + ], + offset: [41944, 41400, 45e3, 41400, 43200, 41400, 43200, 41400, 43200, 41400, 43200, + 41400, 43200, 41400, 43200, 41400, 43200, 41400, 43200, 41400, 43200, 41400, + 43200, 41400, 43200, 41400, 43200, 41400, 43200, 43200, 46800, 43200, 46800, + 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, + 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, + 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, + 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, + 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, + 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, + 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, + 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, + 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, + 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800 + ] + }, + "Pacific/Chatham": { + time: [-3192393600, -757382400, 152678700, 162359100, 183523500, 195018300, + 215577900, 226467900, 247027500, 257917500, 278477100, 289367100, 309926700, + 320816700, 341376300, 352266300, 372825900, 384320700, 404880300, 415770300, + 436329900, 447219900, 467779500, 478669500, 499229100, 510119100, 530678700, + 541568700, 562128300, 573623100, 594182700, 605072700, 623817900, 637731900, + 655267500, 669181500, 686717100, 700631100, 718166700, 732685500, 749616300, + 764135100, 781065900, 795584700, 812515500, 827034300, 844569900, 858483900, + 876019500, 889933500, 907469100, 921987900, 938918700, 953437500, 970368300, + 984887100, 1002422700, 1016336700, 1033872300, 1047786300, 1065321900, + 1079840700, 1096771500, 1111290300, 1128221100, 1142739900, 1159670700, + 1174189500, 1191120300, 1207453500, 1222569900, 1238903100, 1254019500, + 1270352700, 1285469100, 1301802300, 1316918700, 1333251900, 1348973100, + 1365306300, 1380422700, 1396755900, 1411872300, 1428205500, 1443321900, + 1459655100, 1474771500, 1491104700, 1506221100, 1522554300, 1538275500, + 1554608700, 1569725100, 1586058300, 1601174700, 1617507900, 1632624300, + 1648957500, 1664073900, 1680407100, 1695523500, 1712461500, 1727577900, + 1743911100, 1759027500, 1775360700, 1790477100, 1806810300, 1821926700, + 1838259900, 1853376300, 1869709500, 1885430700, 1901763900, 1916880300, + 1933213500 + ], + offset: [44028, 44100, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, + 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, + 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, + 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, + 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, + 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, + 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, + 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, + 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, + 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, + 49500, 45900, 49500, 45900, 49500, 45900, 49500 + ] + }, + "Pacific/Fakaofo": { + time: [-2177452800, 1325203200, 1925038800], + offset: [-41096, -39600, 46800] + }, + "Pacific/Honolulu": { + time: [-2334139200, -1157320800, -1155470400, -880236e3, -769429800, -765410400, - + 712188e3, 1924956e3 + ], + offset: [-37886, -37800, -34200, -37800, -34200, -34200, -37800, -36e3] + }, + "America/Mexico_City": { + time: [-1514763396, -1343091600, -1234828800, -1220317200, -1207180800, -1191369600, + -975283200, -963187200, -917136e3, -907372800, -821923200, -810086400, - + 627523200, -613008e3, 828842400, 846381600, 860292e3, 877831200, 891741600, + 909280800, 923191200, 941335200, 954640800, 972784800, 989114400, + 1001815200, 1018144800, 1035684e3, 1049594400, 1067133600, 1081044e3, + 1099188e3, 1112493600, 1130637600, 1143943200, 1162087200, 1175392800, + 1193536800, 1207447200, 1224986400, 1238896800, 1256436e3, 1270346400, + 1288490400, 1301796e3, 131994e4, 1333245600, 1351389600, 13653e5, + 1382839200, 1396749600, 1414288800, 1428199200, 1445738400, 1459648800, + 1477792800, 1491098400, 1509242400, 1522548e3, 1540692e3, 1554602400, + 1572141600, 1586052e3, 1603591200, 1617501600, 1635645600, 1648951200, + 1667095200, 1680400800, 1698544800, 1712455200, 1729994400, 1743904800, + 1761444e3, 1775354400, 1792893600, 1806804e3, 1824948e3, 1838253600, + 1856397600, 1869703200, 1887847200, 1901757600, 1919296800, 1933207200 + ], + offset: [-23796, -25200, -21600, -25200, -21600, -25200, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, - + 18e3, -21600, -18e3, -21600, -18e3, -21600 + ] + }, + "Africa/Cairo": { + time: [-2185401600, -929836800, -923097600, -906163200, -892857600, -875836800, - + 857779200, -844300800, -825811200, -812678400, -794188800, -779846400, - + 762652800, -399081600, -38664e4, -368323200, -355104e3, -336783600, - + 323643600, -305161200, -292021200, -273625200, -260485200, -242089200, - + 228949200, -210553200, -197413200, -178930800, -165790800, -147394800, - + 134254800, -115858800, -102632400, -84322800, -71096400, -52700400, - + 39474e3, -21164400, -7938e3, 10371600, 23598e3, 41907600, 55134e3, 7353e4, + 86756400, 105066e3, 118292400, 136602e3, 149828400, 168138e3, 181364400, + 199760400, 212986800, 231296400, 244522800, 262832400, 276058800, 294368400, + 307594800, 325990800, 339217200, 357526800, 370753200, 396406800, 402289200, + 426819600, 433825200, 452221200, 465447600, 483757200, 496983600, 515293200, + 528519600, 546829200, 560055600, 578451600, 591678e3, 610419600, 623214e3, + 641523600, 65475e4, 673059600, 686286e3, 704682e3, 717908400, 736218e3, + 749444400, 767754e3, 780980400, 799027200, 812332800, 830476800, 843782400, + 861926400, 875232e3, 893376e3, 906681600, 925430400, 938736e3, 95688e4, + 970185600, 988329600, 1001635200, 1019779200, 1033084800, 1051228800, + 1064534400, 1083283200, 1096588800, 1114732800, 1128038400, 1146182400, + 1158883200, 1177632e3, 1189123200, 1209081600, 1219968e3, 1240531200, + 1250812800, 1272585600, 1281484800, 1284076800, 1285891200, 1400198400, + 1403827200, 1406851200, 1411689600, 1924999200 + ], + offset: [7509, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200 + ] + }, + "Africa/Johannesburg": { + time: [-2458166400, -2109283200, -860968800, -845244e3, -829519200, -813794400, + 1924999200 + ], + offset: [6720, 5400, 7200, 10800, 7200, 10800, 7200] + }, + "Asia/Kathmandu": { + time: [-1577923200, 504921600, 1925012700], + offset: [20476, 19800, 20700] + }, + "US/Mountain": { + time: [-2717668796, -1633298400, -1615154400, -1601848800, -1583704800, -1570399200, + -1551650400, -1538949600, -1534111200, -880236e3, -769417200, -765410400, - + 147909600, -13158e4, -11646e4, -100130400, -84405600, -68680800, -52956e3, - + 37231200, -21506400, -5781600, 9943200, 25668e3, 41392800, 57722400, + 73447200, 89172e3, 104896800, 120621600, 126669600, 152071200, 162352800, + 183520800, 199245600, 215575200, 230695200, 247024800, 262749600, 278474400, + 294199200, 309924e3, 325648800, 341373600, 357098400, 372823200, 388548e3, + 404877600, 419997600, 436327200, 452052e3, 467776800, 483501600, 499226400, + 514951200, 530676e3, 544586400, 562125600, 576036e3, 59418e4, 607485600, + 625629600, 638935200, 657079200, 670989600, 688528800, 702439200, 719978400, + 733888800, 752032800, 765338400, 783482400, 796788e3, 814932e3, 828842400, + 846381600, 860292e3, 877831200, 891741600, 909280800, 923191200, 941335200, + 954640800, 972784800, 986090400, 1004234400, 1018144800, 1035684e3, + 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600, 1130637600, + 1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, 1225591200, + 1236477600, 1257040800, 1268532e3, 1289095200, 1299981600, 1320544800, + 1331431200, 1351994400, 1362880800, 1383444e3, 1394330400, 1414893600, + 142578e4, 1446343200, 1457834400, 1478397600, 1489284e3, 1509847200, + 1520733600, 1541296800, 1552183200, 1572746400, 1583632800, 1604196e3, + 1615687200, 1636250400, 1647136800, 16677e5, 1678586400, 1699149600, + 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200, 1793498400, + 1804989600, 1825552800, 1836439200, 1857002400, 1867888800, 1888452e3, + 1899338400, 1919901600, 1930788e3 + ], + offset: [-25196, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, - + 21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, - + 25200 + ] + }, + "Europe/Helsinki": { + time: [-2890252800, -1535932800, -875664e3, -859762800, 354679200, 370407600, + 386128800, 401857200, 417582e3, 433310400, 449031600, 465364800, 481086e3, + 496814400, 512535600, 528264e3, 543985200, 559713600, 575434800, 591163200, + 606884400, 622612800, 638334e3, 654667200, 670388400, 686116800, 701838e3, + 717566400, 733287600, 749016e3, 764737200, 780465600, 796186800, 811915200, + 828241200, 846388800, 859690800, 877838400, 891140400, 909288e3, 92259e4, + 941342400, 954039600, 972792e3, 985489200, 1004241600, 1017543600, + 1035691200, 1048993200, 1067140800, 1080442800, 1099195200, 1111892400, + 1130644800, 1143342e3, 1162094400, 1174791600, 1193544e3, 1206846e3, + 1224993600, 1238295600, 1256443200, 1269745200, 1288497600, 1301194800, + 1319947200, 1332644400, 1351396800, 1364698800, 1382846400, 1396148400, + 1414296e3, 1427598e3, 1445745600, 1459047600, 14778e5, 1490497200, + 1509249600, 1521946800, 1540699200, 1554001200, 1572148800, 1585450800, + 1603598400, 1616900400, 1635652800, 164835e4, 1667102400, 1679799600, + 1698552e3, 1711854e3, 1730001600, 1743303600, 1761451200, 1774753200, + 1792900800, 1806202800, 1824955200, 1837652400, 1856404800, 1869102e3, + 1887854400, 1901156400, 1919304e3, 1932606e3 + ], + offset: [5989, 5989, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200 + ] + }, + "Europe/Stockholm": { + time: [-2871676800, -2208988800, -1692493200, -1680476400, 323834400, 338958e3, + 354679200, 370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, + 465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, + 575431200, 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, + 686113200, 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, + 796183200, 811911600, 828237600, 846385200, 859687200, 877834800, 891136800, + 909284400, 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, + 101754e4, 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, + 1111888800, 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, + 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, + 1301191200, 1319943600, 1332640800, 1351393200, 1364695200, 1382842800, + 1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, + 1490493600, 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, + 1585447200, 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, + 1679796e3, 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, + 1774749600, 1792897200, 1806199200, 1824951600, 1837648800, 1856401200, + 1869098400, 1887850800, 1901152800, 1919300400, 1932602400 + ], + offset: [4332, 3614, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Copenhagen": { + time: [-2524521600, -2398291200, -1692493200, -1680483600, -935107200, -85725e4, - + 844552800, -828219600, -812498400, -79677e4, -781048800, -769381200, - + 747007200, -736376400, -715212e3, -706741200, -683157600, -675291600, + 323834400, 338958e3, 354679200, 370407600, 386128800, 401857200, 417578400, + 433306800, 449028e3, 465361200, 481082400, 496810800, 512532e3, 528260400, + 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, 638330400, + 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, 749012400, + 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, 859687200, + 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, 972788400, + 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, 1067137200, + 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, 1162090800, + 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600, + 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, + 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, 1445742e3, + 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, 1540695600, + 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, 1635649200, + 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, 1729998e3, + 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, 1824951600, + 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400, + 1932602400 + ], + offset: [3020, 3020, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Atlantic/Reykjavik": { + time: [-1956614400, -1668214800, -1647212400, -1636678800, -161343e4, -1605142800, - + 1581894e3, -1539565200, -153135e4, -968029200, -952293600, -942012e3, - + 920239200, -909961200, -888789600, -877906800, -857944800, -846457200, - + 826495200, -815007600, -795045600, -783558e3, -762991200, -752108400, - + 731541600, -717634800, -700092e3, -686185200, -668642400, -654735600, - + 636588e3, -623286e3, -605743200, -591836400, -573688800, -559782e3, - + 542239200, -528332400, -510789600, -496882800, -47934e4, -465433200, - + 447890400, -433983600, -415836e3, -401929200, -384386400, -370479600, - + 352936800, -33903e4, -321487200, -307580400, -290037600, -276130800, - + 258588e3, -244681200, -226533600, -212626800, -195084e3, -181177200, - + 163634400, -149727600, -132184800, -118278e3, -100735200, -86828400, - + 68680800, -54774e3, 1924992e3 + ], + offset: [-5280, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, + 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, - + 3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, + 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0, - + 3600, 0, -3600, 0, -3600, 0, -3600, 0, -3600, 0 + ] + }, + "Europe/Tallinn": { + time: [-2840140800, -1638316800, -1632002400, -1618693200, -1593820800, -1535932800, + -927936e3, -892944e3, -85725e4, -844552800, -828219600, -812498400, - + 797644800, 354931200, 370742400, 386467200, 402278400, 418003200, 433814400, + 449625600, 465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, + 55971e4, 575431200, 591159600, 606880800, 622609200, 638330400, 654663600, + 670384800, 686113200, 701834400, 717562800, 733284e3, 749012400, 764733600, + 780462e3, 796183200, 811911600, 828237600, 846385200, 859687200, 877834800, + 891136800, 909288e3, 92259e4, 941342400, 1017543600, 1035691200, 1048993200, + 1067140800, 1080442800, 1099195200, 1111892400, 1130644800, 1143342e3, + 1162094400, 1174791600, 1193544e3, 1206846e3, 1224993600, 1238295600, + 1256443200, 1269745200, 1288497600, 1301194800, 1319947200, 1332644400, + 1351396800, 1364698800, 1382846400, 1396148400, 1414296e3, 1427598e3, + 1445745600, 1459047600, 14778e5, 1490497200, 1509249600, 1521946800, + 1540699200, 1554001200, 1572148800, 1585450800, 1603598400, 1616900400, + 1635652800, 164835e4, 1667102400, 1679799600, 1698552e3, 1711854e3, + 1730001600, 1743303600, 1761451200, 1774753200, 1792900800, 1806202800, + 1824955200, 1837652400, 1856404800, 1869102e3, 1887854400, 1901156400, + 1919304e3, 1932606e3 + ], + offset: [5940, 5940, 3600, 7200, 3600, 5940, 7200, 10800, 7200, 3600, 7200, 3600, + 7200, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, + 10800, 14400, 10800, 14400, 10800, 14400, 10800, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200 + ] + }, + "Europe/Riga": { + time: [-2840140800, -1632002400, -1618693200, -1601676e3, -1597266e3, -1377302400, - + 928022400, -899510400, -85725e4, -844552800, -828219600, -812498400, - + 79677e4, -795830400, 354931200, 370742400, 386467200, 402278400, 418003200, + 433814400, 449625600, 465361200, 481082400, 496810800, 512532e3, 528260400, + 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, 638330400, + 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, 749012400, + 764733600, 780462e3, 796183200, 811911600, 828237600, 843966e3, 859690800, + 877838400, 891140400, 909288e3, 92259e4, 941342400, 985489200, 1004241600, + 1017543600, 1035691200, 1048993200, 1067140800, 1080442800, 1099195200, + 1111892400, 1130644800, 1143342e3, 1162094400, 1174791600, 1193544e3, + 1206846e3, 1224993600, 1238295600, 1256443200, 1269745200, 1288497600, + 1301194800, 1319947200, 1332644400, 1351396800, 1364698800, 1382846400, + 1396148400, 1414296e3, 1427598e3, 1445745600, 1459047600, 14778e5, + 1490497200, 1509249600, 1521946800, 1540699200, 1554001200, 1572148800, + 1585450800, 1603598400, 1616900400, 1635652800, 164835e4, 1667102400, + 1679799600, 1698552e3, 1711854e3, 1730001600, 1743303600, 1761451200, + 1774753200, 1792900800, 1806202800, 1824955200, 1837652400, 1856404800, + 1869102e3, 1887854400, 1901156400, 1919304e3, 1932606e3 + ], + offset: [5794, 5794, 9394, 5794, 9394, 5794, 7200, 10800, 7200, 3600, 7200, 3600, + 7200, 3600, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, + 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200 + ] + }, + "Europe/Vilnius": { + time: [-2840140800, -1672531200, -1585094400, -1561248e3, -1553558400, -928195200, - + 900115200, -85725e4, -844552800, -828219600, -812498400, -802137600, + 354931200, 370742400, 386467200, 402278400, 418003200, 433814400, 449625600, + 465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, + 575431200, 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, + 686113200, 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, + 796183200, 811911600, 828237600, 846385200, 859687200, 877834800, 891140400, + 909284400, 922586400, 941338800, 1048993200, 1067140800, 1080442800, + 1099195200, 1111892400, 1130644800, 1143342e3, 1162094400, 1174791600, + 1193544e3, 1206846e3, 1224993600, 1238295600, 1256443200, 1269745200, + 1288497600, 1301194800, 1319947200, 1332644400, 1351396800, 1364698800, + 1382846400, 1396148400, 1414296e3, 1427598e3, 1445745600, 1459047600, + 14778e5, 1490497200, 1509249600, 1521946800, 1540699200, 1554001200, + 1572148800, 1585450800, 1603598400, 1616900400, 1635652800, 164835e4, + 1667102400, 1679799600, 1698552e3, 1711854e3, 1730001600, 1743303600, + 1761451200, 1774753200, 1792900800, 1806202800, 1824955200, 1837652400, + 1856404800, 1869102e3, 1887854400, 1901156400, 1919304e3, 1932606e3 + ], + offset: [6076, 5040, 5736, 3600, 7200, 3600, 10800, 7200, 3600, 7200, 3600, 7200, + 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, + 14400, 10800, 14400, 10800, 14400, 10800, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 7200, 3600, 7200, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, + 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, + 10800, 7200, 10800, 7200, 10800, 7200 + ] + }, + "America/Lima": { + time: [-2524521600, -1938556800, -1009843200, -1002067200, -986774400, -971049600, - + 955324800, -9396e5, 504921600, 512697600, 536457600, 544233600, 631152e3, + 638928e3, 757382400, 765158400, 1924974e3 + ], + offset: [-18492, -18516, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, + -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3 + ] + }, + "America/Santiago": { + time: [-2524521600, -1892678400, -1688428800, -1619222400, -1593820800, -1336003200, + -13176e5, -1304380800, -1286064e3, -1272844800, -1254528e3, -1241308800, - + 1222992e3, -1209772800, -1191369600, -1178150400, -870566400, -865296e3, - + 740534400, -736387200, -718070400, -713667600, -36633600, -23932800, - + 3369600, 7516800, 24451200, 37756800, 55900800, 69206400, 87955200, + 100656e3, 118195200, 132105600, 150854400, 163555200, 182304e3, 195609600, + 213753600, 227059200, 245203200, 258508800, 277257600, 289958400, 308707200, + 321408e3, 340156800, 353462400, 371606400, 384912e3, 403056e3, 416361600, + 434505600, 447811200, 46656e4, 479260800, 498009600, 510710400, 529459200, + 545184e3, 560908800, 574214400, 592358400, 605664e3, 624412800, 637113600, + 653443200, 668563200, 687312e3, 700617600, 718761600, 732067200, 750211200, + 763516800, 781660800, 794966400, 813715200, 826416e3, 845164800, 85968e4, + 876614400, 88992e4, 906854400, 923184e3, 939513600, 952819200, 971568e3, + 984268800, 1003017600, 1015718400, 1034467200, 1047168e3, 1065916800, + 1079222400, 1097366400, 1110672e3, 1128816e3, 1142121600, 1160870400, + 1173571200, 119232e4, 1206835200, 1223769600, 1237075200, 1255219200, + 1270339200, 1286668800, 1304812800, 1313884800, 1335657600, 1346544e3, + 1367107200, 1378598400, 1398556800, 1410048e3, 1463270400, 1471132800, + 149472e4, 1502582400, 1526169600, 1534032e3, 1554595200, 1567900800, + 1586044800, 1599350400, 1617494400, 16308e5, 1648944e3, 1662249600, + 1680393600, 1693699200, 1712448e3, 1725753600, 1743897600, 1757203200, + 1775347200, 1788652800, 1806796800, 1820102400, 1838246400, 1851552e3, + 1870300800, 1883001600, 1901750400, 1915056e3, 19332e5 + ], + offset: [-16966, -16966, -18e3, -16966, -14400, -16966, -14400, -18e3, -14400, - + 18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, - + 10800, -14400, -18e3, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, - + 14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, - + 10800 + ] + }, + "Asia/Bahrain": { + time: [-1577923200, 76204800, 1925002800], + offset: [12368, 14400, 10800] + }, + "Asia/Jakarta": { + time: [-3231273600, -1451693568, -117288e4, -876614400, -766022400, -683856e3, - + 620784e3, -189388800, 1925017200 + ], + offset: [25632, 25632, 26400, 27e3, 32400, 27e3, 28800, 27e3, 25200] + }, + "Africa/Lagos": { + time: [-1588464e3, 1924995600], + offset: [816, 3600] + }, + "Pacific/Norfolk": { + time: [-2177452800, -599616e3, 152071200, 162961200, 1443924e3, 1570327200, + 1586055600, 1601776800, 1617505200, 1633226400, 1648954800, 1664676e3, + 1680404400, 1696125600, 1712458800, 172818e4, 1743908400, 1759629600, + 1775358e3, 1791079200, 1806807600, 1822528800, 1838257200, 1853978400, + 1869706800, 1886032800, 1901761200, 1917482400, 1933210800 + ], + offset: [40312, 40320, 41400, 45e3, 41400, 39600, 43200, 39600, 43200, 39600, 43200, + 39600, 43200, 39600, 43200, 39600, 43200, 39600, 43200, 39600, 43200, 39600, + 43200, 39600, 43200, 39600, 43200, 39600, 43200 + ] + }, + "America/Juneau": { + time: [-3225169588, -2188987200, -880236e3, -769420800, -765410400, -21506400, - + 5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3, 104896800, + 120621600, 126669600, 152071200, 162352800, 183520800, 199245600, 215575200, + 230695200, 247024800, 262749600, 278474400, 294199200, 309924e3, 325648800, + 341373600, 357098400, 372823200, 388548e3, 404877600, 419997600, 436327200, + 438998400, 452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3, + 544586400, 562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, + 657079200, 670989600, 688528800, 702439200, 719978400, 733888800, 752032800, + 765338400, 783482400, 796788e3, 814932e3, 828842400, 846381600, 860292e3, + 877831200, 891741600, 909280800, 923191200, 941335200, 954640800, 972784800, + 986090400, 1004234400, 1018144800, 1035684e3, 1049594400, 1067133600, + 1081044e3, 1099188e3, 1112493600, 1130637600, 1143943200, 1162087200, + 1173578400, 1194141600, 1205028e3, 1225591200, 1236477600, 1257040800, + 1268532e3, 1289095200, 1299981600, 1320544800, 1331431200, 1351994400, + 1362880800, 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200, + 1457834400, 1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, + 1552183200, 1572746400, 1583632800, 1604196e3, 1615687200, 1636250400, + 1647136800, 16677e5, 1678586400, 1699149600, 1710036e3, 1730599200, + 1741485600, 1762048800, 1772935200, 1793498400, 1804989600, 1825552800, + 1836439200, 1857002400, 1867888800, 1888452e3, 1899338400, 1919901600, + 1930788e3 + ], + offset: [54139, -32261, -28800, -25200, -25200, -28800, -25200, -28800, -25200, - + 28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, - + 25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, - + 28800, -28800, -28800, -25200, -28800, -25200, -28800, -25200, -32400, - + 32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, - + 28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, - + 32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, - + 28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, - + 32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, - + 28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, - + 32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, - + 28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, - + 32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, - + 28800, -32400, -28800, -32400, -28800, -32400, -28800, -32400, -28800, - + 32400, -28800, -32400, -28800, -32400 + ] + }, + "Asia/Ho_Chi_Minh": { + time: [-2004048e3, -1851552e3, -852080400, -782614800, -767836800, -718070400, - + 457747200, -315622800, 171849600, 1925017200 + ], + offset: [25600, 25590, 25200, 28800, 32400, 25200, 28800, 25200, 28800, 25200] + }, + "Australia/Perth": { + time: [-2337897600, -1672531140, -1665352800, -883605600, -876088800, -860364e3, - + 844639200, 152071200, 162961200, 436327200, 447217200, 690343200, 699418800, + 1165111200, 1174791600, 1193536800, 1206846e3, 1224986400, 1238295600, + 1925020800 + ], + offset: [27804, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, + 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800 + ] + }, + "Europe/Malta": { + time: [-2403475200, -1690761600, -168048e4, -1664755200, -1648944e3, -163512e4, - + 1616889600, -1604275200, -1585526400, -1571011200, -1555286400, -932428800, + -85725e4, -844552800, -828219600, -812584800, -798066e3, -781048800, - + 76671e4, -750895200, -733352400, -719452800, -70191e4, -689205600, - + 670453200, -114048e3, -103161600, -81993600, -71708400, -50544e3, -40258800, + -18489600, -8204400, 1296e4, 23245200, 43804800, 54694800, 75859200, + 86749200, 102384e3, 118112400, 135734400, 148525200, 167191200, 180496800, + 198640800, 211946400, 230090400, 243396e3, 26154e4, 274845600, 292989600, + 306295200, 323316e3, 338349600, 354679200, 370407600, 386128800, 401857200, + 417578400, 433306800, 449028e3, 465361200, 481082400, 496810800, 512532e3, + 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, + 638330400, 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, + 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, + 859687200, 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, + 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, + 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, + 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, + 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, + 1351393200, 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, + 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, + 1540695600, 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, + 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, + 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, + 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, + 1919300400, 1932602400 + ], + offset: [3484, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Amsterdam": { + time: [-4260211200, -1693699200, -168048e4, -1663452e3, -1650142800, -1633212e3, - + 1617483600, -1601157600, -1586034e3, -1569708e3, -1554584400, -1538258400, - + 1523134800, -15075e5, -1490562e3, -1470175200, -1459112400, -1443996e3, - + 1427662800, -1406671200, -1396213200, -1376949600, -1364763600, -1345413600, + -1333314e3, -1313791200, -1301259600, -1282255200, -126981e4, -1250719200, - + 1238360400, -1219183200, -1206910800, -1186956e3, -1175461200, -1156024800, + -1143406800, -1124488800, -1111957200, -1092952800, -1080507600, - + 1061330400, -1049058e3, -1029189600, -1025740800, -1017608400, -998258400, - + 986158800, -966722400, -954104400, -935020800, -85725e4, -844552800, - + 828219600, -812498400, -79677e4, -781048800, -766616400, 228880800, + 244004400, 260330400, 276058800, 29178e4, 307508400, 323834400, 338958e3, + 354679200, 370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, + 465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, + 575431200, 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, + 686113200, 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, + 796183200, 811911600, 828237600, 846385200, 859687200, 877834800, 891136800, + 909284400, 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, + 101754e4, 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, + 1111888800, 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, + 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, + 1301191200, 1319943600, 1332640800, 1351393200, 1364695200, 1382842800, + 1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, + 1490493600, 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, + 1585447200, 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, + 1679796e3, 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, + 1774749600, 1792897200, 1806199200, 1824951600, 1837648800, 1856401200, + 1869098400, 1887850800, 1901152800, 1919300400, 1932602400 + ], + offset: [1172, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, + 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, + 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, + 4772, 1172, 4772, 1172, 4772, 1172, 4772, 1172, 4772, 4800, 1200, 4800, + 1200, 4800, 1200, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + }, + "Europe/Brussels": { + time: [-2840140800, -2450994150, -1740355200, -1693699200, -1680476400, -1663452e3, + -1650142800, -1632002400, -1618693200, -1613822400, -1604278800, - + 1585526400, -1574038800, -1552262400, -1539997200, -1520553600, -1507510800, + -1490572800, -1473642e3, -1459123200, -1444006800, -1427673600, -1411952400, + -1396224e3, -1379293200, -1364774400, -1348448400, -1333324800, -1316394e3, + -1301259600, -1284328800, -126981e4, -1253484e3, -1238360400, -1221429600, - + 1206910800, -1191189600, -1175461200, -1160344800, -1143406800, -1127685600, + -1111957200, -1096840800, -1080507600, -1063576800, -1049058e3, -1033336800, + -1017608400, -1002492e3, -986158800, -969228e3, -950475600, -942012e3, - + 934664400, -85725e4, -844552800, -828219600, -812498400, -798066e3, - + 781048800, -766616400, -745452e3, -733266e3, 228880800, 244004400, + 260330400, 276058800, 29178e4, 307508400, 323834400, 338958e3, 354679200, + 370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, 465361200, + 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, + 591159600, 606880800, 622609200, 638330400, 654663600, 670384800, 686113200, + 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, + 811911600, 828237600, 846385200, 859687200, 877834800, 891136800, 909284400, + 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, + 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, + 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, + 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, + 1319943600, 1332640800, 1351393200, 1364695200, 1382842800, 1396144800, + 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600, + 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, + 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, + 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, + 1792897200, 1806199200, 1824951600, 1837648800, 1856401200, 1869098400, + 1887850800, 1901152800, 1919300400, 1932602400 + ], + offset: [1050, 1050, 0, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 0, 3600, 0, 3600, + 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, + 3600, 7200, 3600 + ] + }, + "Europe/Lisbon": { + time: [-1830386205, -1689555600, -1677798e3, -1667437200, -1647734400, -1635814800, + -1616198400, -1604365200, -1584662400, -1572742800, -155304e4, -1541206800, + -1521504e3, -1442451600, -1426809600, -1379293200, -1364774400, -1348448400, + -1333324800, -1316394e3, -1301270400, -1284339600, -1269820800, -1221440400, + -1206921600, -1191200400, -1175472e3, -1127696400, -1111968e3, -1096851600, + -1080518400, -1063587600, -1049068800, -1033347600, -1017619200, - + 1002502800, -986169600, -969238800, -950486400, -942022800, -922665600, - + 906944400, -891129600, -877309200, -873680400, -864e6, -857952e3, - + 845859600, -842835600, -831340800, -825897600, -81441e4, -810781200, - + 799891200, -794448e3, -782960400, -779331600, -768441600, -762998400, - + 749091600, -733363200, -717631200, -701902800, -686181600, -670453200, - + 654732e3, -639003600, -591832800, -575499600, -559778400, -54405e4, - + 528328800, -512600400, -496879200, -481150800, -465429600, -449701200, - + 43398e4, -417646800, -401925600, -386197200, -370476e3, -354747600, - + 339026400, -323298e3, -307576800, -291848400, -276127200, -260398800, - + 244677600, -228344400, -212623200, -196894800, -181173600, -165445200, - + 149724e3, -133995600, -118274400, 212547600, 228268800, 243997200, + 260323200, 276051600, 291772800, 307504800, 323222400, 338954400, 354675600, + 370404e3, 386125200, 401853600, 417578400, 433303200, 449024400, 465357600, + 481078800, 496807200, 512528400, 528256800, 543978e3, 559706400, 575427600, + 591156e3, 606877200, 622605600, 638326800, 65466e4, 670381200, 686109600, + 701830800, 717559200, 733284e3, 749012400, 764733600, 780462e3, 796183200, + 811911600, 828237600, 846381600, 859683600, 877831200, 891133200, 909280800, + 922582800, 941335200, 954032400, 972784800, 985482e3, 1004234400, + 1017536400, 1035684e3, 1048986e3, 1067133600, 1080435600, 1099188e3, + 1111885200, 1130637600, 1143334800, 1162087200, 1174784400, 1193536800, + 1206838800, 1224986400, 1238288400, 1256436e3, 1269738e3, 1288490400, + 1301187600, 131994e4, 1332637200, 1351389600, 1364691600, 1382839200, + 1396141200, 1414288800, 1427590800, 1445738400, 1459040400, 1477792800, + 149049e4, 1509242400, 1521939600, 1540692e3, 1553994e3, 1572141600, + 1585443600, 1603591200, 1616893200, 1635645600, 1648342800, 1667095200, + 1679792400, 1698544800, 1711846800, 1729994400, 1743296400, 1761444e3, + 1774746e3, 1792893600, 1806195600, 1824948e3, 1837645200, 1856397600, + 1869094800, 1887847200, 1901149200, 1919296800, 1932598800 + ], + offset: [-2205, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 7200, 3600, 0, + 3600, 7200, 3600, 0, 3600, 7200, 3600, 0, 3600, 7200, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0 + ] + }, + "Europe/Dublin": { + time: [-2821651200, -1691964e3, -1680469200, -1664143200, -1650142800, -1633903200, + -1617483600, -1601848800, -1586034e3, -1570399200, -1552165200, -1538344800, + -152253e4, -15075e5, -1490562e3, -1473631200, -1460926800, -1442786400, - + 1428872400, -1410732e3, -1396213200, -1379282400, -1364763600, -1348437600, + -1333314e3, -1315778400, -1301259600, -1284328800, -126981e4, -1253484e3, - + 1238360400, -1221429600, -1206910800, -118998e4, -1175461200, -1159135200, - + 1143406800, -1126476e3, -1111957200, -1095631200, -1080507600, -1063576800, + -1049058e3, -1032127200, -1017608400, -1001282400, -986158800, -969228e3, - + 950475600, -942012e3, -733352400, -719445600, -699483600, -684972e3, - + 668034e3, -654732e3, -636584400, -622072800, -605739600, -590623200, - + 57429e4, -558568800, -542235600, -527119200, -512600400, -496274400, - + 481150800, -46422e4, -449701200, -432165600, -417646800, -401320800, - + 386197200, -369266400, -354747600, -337816800, -323298e3, -306972e3, - + 291848400, -276732e3, -257979600, -245282400, -22653e4, -213228e3, - + 195080400, -182383200, -163630800, -150933600, -132181200, -119484e3, - + 100731600, -88034400, -68677200, -59004e3, 57726e3, 69818400, 89175600, + 101268e3, 120625200, 132717600, 152074800, 164167200, 183524400, 196221600, + 214974e3, 227671200, 246423600, 259120800, 278478e3, 290570400, 309927600, + 32202e4, 341377200, 354675600, 372823200, 386125200, 404272800, 417574800, + 435722400, 449024400, 467776800, 481078800, 499226400, 512528400, 530676e3, + 543978e3, 562125600, 575427600, 593575200, 606877200, 625629600, 638326800, + 657079200, 670381200, 688528800, 701830800, 719978400, 733280400, 751428e3, + 76473e4, 782877600, 796179600, 814327200, 828234e3, 846381600, 859683600, + 877831200, 891133200, 909280800, 922582800, 941335200, 954032400, 972784800, + 985482e3, 1004234400, 1017536400, 1035684e3, 1048986e3, 1067133600, + 1080435600, 1099188e3, 1111885200, 1130637600, 1143334800, 1162087200, + 1174784400, 1193536800, 1206838800, 1224986400, 1238288400, 1256436e3, + 1269738e3, 1288490400, 1301187600, 131994e4, 1332637200, 1351389600, + 1364691600, 1382839200, 1396141200, 1414288800, 1427590800, 1445738400, + 1459040400, 1477792800, 149049e4, 1509242400, 1521939600, 1540692e3, + 1553994e3, 1572141600, 1585443600, 1603591200, 1616893200, 1635645600, + 1648342800, 1667095200, 1679792400, 1698544800, 1711846800, 1729994400, + 1743296400, 1761444e3, 1774746e3, 1792893600, 1806195600, 1824948e3, + 1837645200, 1856397600, 1869094800, 1887847200, 1901149200, 1919296800, + 1932598800 + ], + offset: [-1500, -1521, 2079, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, + 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, + 3600, 0, 3600, 0, 3600, 0 + ] + }, + "Europe/Oslo": { + time: [-2366755200, -1691881200, -1680566400, -927507600, -85725e4, -844552800, - + 828219600, -812498400, -79677e4, -781048800, -765320400, -340840800, - + 324507600, -308786400, -293058e3, -277336800, -261608400, -245887200, - + 230158800, -214437600, -198709200, -182988e3, -166654800, -147909600, - + 135205200, 323834400, 338958e3, 354679200, 370407600, 386128800, 401857200, + 417578400, 433306800, 449028e3, 465361200, 481082400, 496810800, 512532e3, + 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, + 638330400, 654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, + 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, + 859687200, 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, + 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, + 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, + 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, + 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, + 1351393200, 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, + 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, + 1540695600, 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, + 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, + 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, + 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, + 1919300400, 1932602400 + ], + offset: [2580, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, + 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600 + ] + } + } + }, + "3t3b": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "dateFormatProperty", (function() { + return a + })), i.d(t, "restoreDateFormatSettingsValue", (function() { + return l + })); + var s = i("Vdly"), + r = i("m/cY"), + n = i("e1ZQ"); + + function o() { + return s.getValue("date_format", Object(n.c)()) + } + const a = Object(r.a)(o()); + + function l() { + a.setValue(Object(n.c)()), s.remove("date_format") + } + s.onSync.subscribe(null, () => a.setValue(o())), a.listeners().subscribe(null, () => s.setValue( + "date_format", a.value())) + }, + "3u3j": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("Eyy1"), + r = i("RDU5"); + class n extends r.UndoCommand { + constructor(e, t, i) { + super(i), this._chartModel = e, this._sourceId = t.id(); + const r = Object(s.ensureNotNull)(t.priceScale()); + this._initialPriceScaleId = r.id(), this._initialPriceScaleState = Object(s + .ensureNotNull)(t.priceScale()).state(); + const n = Object(s.ensureNotNull)(e.paneForSource(t)); + this._initialPriceScalePosition = n.priceScalePosition(r), this + ._initialPriceScaleIndex = n.priceScaleIndex(r, this + ._initialPriceScalePosition), this._initialPaneIndex = e.panes() + .indexOf(n) + } + _newPriceScaleState(e) { + const t = { + ...this._initialPriceScaleState + }; + return delete t.m_isLockScale, delete t.id, delete t.m_topMargin, delete t + .m_bottomMargin, t + } + _originalPriceScaleState() { + return this._initialPriceScaleState + } + } + }, + "4GHa": function(e, t) { + e.exports = + '' + }, + "4TVt": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolPriceAxisView", (function() { + return o + })); + var s = i("Eyy1"), + r = i("KcY8"), + n = i("Ulff"); + class o extends r.a { + constructor(e, t) { + super(), this._active = !1, this._source = e, this._data = t + } + setActive(e) { + this._active = e + } + _updateRendererData(e, t, i) { + e.visible = !1; + const s = this._source.model(); + if (!s.timeScale() || s.timeScale().isEmpty()) return; + const r = this._source.priceScale(); + if (null === r || r.isEmpty()) return; + if (!s.selection().isSelected(this._source) && !this._source + .isForcedDrawPriceAxisLabel()) return; + if (null === s.timeScale().visibleBarsStrictRange()) return; + const o = this._source.priceAxisPoints(), + a = this._data.pointIndex; + if (o.length <= a) return; + const l = o[a]; + if (!isFinite(l.price)) return; + const c = this._source.ownerSource(), + h = null !== c ? c.firstValue() : null; + if (null === h) return; + let u = this._active ? n.a.active : n.a.common; + this._data.backgroundProperty ? u = this._data.backgroundProperty.value() : this + ._data.backgroundPropertyGetter && (u = this._data + .backgroundPropertyGetter()), i.background = u, i.borderColor = + "#2E84A6", i + .textColor = this.generateTextColor(u), i.coordinate = r.priceToCoordinate(l + .price, h), e.text = this._formatPrice(l.price, h), e.visible = !0 + } + _formatPrice(e, t) { + return Object(s.ensureNotNull)(this._source.priceScale()).formatPrice(e, t) + } + } + }, + "4bfY": function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "FzRY", 7)).then(({ + FibCirclesPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 2 + } + name() { + return "Fib Circles" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + static createProperties(e) { + var t = new r("linetoolfibcircles", e, !1, { + range: [1, 11] + }); + return l._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "6U6r"))) + .FibCirclesDefinitionsViewModel + } + _snapTo45DegreesAvailable() { + return !0 + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("trendline").child("linewidth")], i = [e.child("trendline") + .child("color") + ], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r).child( + "linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.LevelsCount = 11, t.LineToolFibCircles = l + }, + "4kQX": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TimeFormatter", (function() { + return n + })); + var s = i("iboI"), + r = i("kcTO"); + class n { + constructor(e) { + this._formatStr = e || "%h:%m:%s" + } + format(e) { + return s.customFormatters.timeFormatter ? s.customFormatters.timeFormatter.format( + e) : this._formatStr.replace("%h", Object(r.numberToStringWithLeadingZero)(e + .getUTCHours(), 2)).replace("%m", Object(r.numberToStringWithLeadingZero)(e + .getUTCMinutes(), 2)).replace("%s", Object(r.numberToStringWithLeadingZero)( + e.getUTCSeconds(), 2)) + } + formatLocal(e) { + return s.customFormatters.timeFormatter ? s.customFormatters.timeFormatter + .formatLocal ? s.customFormatters.timeFormatter.formatLocal(e) : s + .customFormatters.timeFormatter.format(e) : this._formatStr.replace("%h", + Object(r.numberToStringWithLeadingZero)(e.getHours(), 2)).replace("%m", + Object(r.numberToStringWithLeadingZero)(e.getMinutes(), 2)).replace("%s", + Object(r.numberToStringWithLeadingZero)(e.getSeconds(), 2)) + } + } + }, + "4miz": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })), i.d(t, "b", (function() { + return r + })); + class s { + constructor(e, t) { + this._visible = !0, this._title = e, this._value = t + } + title() { + return this._title + } + setTitle(e) { + this._title = e + } + text() { + return this._value + } + value() { + return this._value + } + setValue(e) { + this._value = e + } + visible() { + return this._visible + } + setVisible(e) { + this._visible = e + } + color() { + return this._color + } + setColor(e) { + this._color = e + } + } + class r { + constructor() { + this._items = [], this._header = "", this._title = "" + } + header() { + return this._header + } + title() { + return this._title + } + items() { + return this._items + } + update() {} + } + }, + "4o++": function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "MagnetMode", (function() { + return s + })), + function(e) { + e[e.WeakMagnet = 0] = "WeakMagnet", e[e.StrongMagnet = 1] = "StrongMagnet" + }(s || (s = {})) + }, + "4u8j": function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "ZJWf", 7)).then(({ + GannFanPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 2 + } + name() { + return "Gann Fan" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "ASG6"))) + .GannFanDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolgannfan", e, !1, { + range: [1, 9] + }); + return l._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [], i = [], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r) + .child("linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.LevelsCount = 9, t.LineToolGannFan = l + }, + "4vW/": function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "ColorType", (function() { + return s + })), + function(e) { + e.Solid = "solid", e.Gradient = "gradient" + }(s || (s = {})) + }, + "53h+": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "findSuitableResolutionToBuildFrom", (function() { + return a + })); + var s = i("LxhU"); + + function r(e) { + throw console.error(e), e + } + + function n(e, t) { + const i = t.multiplier(); + for (let s = e.length - 1; s >= 0; s--) { + const r = Number(e[s]); + if (i % r == 0) return `${r}${t.letter()}` + } + return null + } + + function o(e, t) { + const i = n(e, t); + if (null !== i) return i; + r(`Misconfiguration error: it is trying to request ${t.value()} but we cannot build it from lower resolution`) + } + + function a(e, t) { + const i = s.Interval.parse(e); + if ((i.isWeeks() || i.isMonths()) && t.has_weekly_and_monthly) { + let e = ["1"]; + i.isWeeks() && void 0 !== t.weekly_multipliers && (e = t.weekly_multipliers), i + .isMonths() && void 0 !== t.monthly_multipliers && (e = t.monthly_multipliers); + const s = n(e, i); + if (null !== s) return s + } + if (i.isDWM() && (void 0 === t.has_daily || t.has_daily)) return i.isDays() && void 0 !== t + .daily_multipliers ? o(t.daily_multipliers, i) : (void 0 === t.daily_multipliers || + t.daily_multipliers.includes("1") || r( + "Misconfiguration error: it is trying to request a resolution but symbol does not support it" + ), "1D"); + if (i.isDWM() && r( + `Misconfiguration error: it is trying to request ${i.value()} but we cannot build it from lower resolution` + ), i.isMinutes() && !t.has_intraday && r( + "Misconfiguration error: it is trying to request intraday resolution but symbol does not support it" + ), i.isSeconds() && !t.has_seconds && r( + "Misconfiguration error: it is trying to request seconds resolution but symbol does not support it" + ), i.isTicks()) return (!t.has_ticks || i.multiplier() > 1) && r( + `Misconfiguration error: it is trying to request ${i.multiplier()} ticks resolution but symbol does not support it` + ), "1T"; + const a = i.isSeconds() ? t.seconds_multipliers : t.intraday_multipliers; + return void 0 !== a ? o(a, i) : i.value() + } + }, + "54XG": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "FavoriteStudyTemplateService", (function() { + return r + })); + var s = i("ulZB"); + class r extends s.b { + constructor(e, t) { + super(e, t, "FAVORITE_STUDY_TEMPLATES_CHANGED", "StudyTemplates.quicks", []) + } + remove(e) { + this.set(this.get().filter(t => t !== e)) + } + } + }, + "585y": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor(e) { + this._value = null, this._series = e, this._series.dataEvents().dataUpdated() + .subscribe(this, this._onSeriesUpdated) + } + destroy() { + this._series.dataEvents().dataUpdated().unsubscribeAll(this) + } + volume(e, t) { + if (null !== this._value && this._value.from === e && this._value.to === t) + return this._value.value; + let i = 0; + const s = this._series.data().bars(), + r = s.firstIndex(), + n = s.lastIndex(); + if (null !== r && e < r && t < r || null !== n && e > n && t > n) i = NaN; + else { + const s = this._series.data().bars().rangeIterator(Math.min(e, t), Math.max(e, + t)); + for (; s.hasNext();) { + const e = s.next().value[5]; + if (void 0 === e) { + i = NaN; + break + } + i += e + } + } + return this._value = { + from: e, + to: t, + value: i + }, i + } + _onSeriesUpdated(e, t) { + if (null === this._value) return; + if (t) return void(this._value = null); + const i = this._series.data().bars().lastIndex(); + (null === i || i <= this._value.to) && (this._value = null) + } + } + }, + "5B3K": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyError", (function() { + return s + })); + class s extends Error { + constructor(e) { + super(e), this.studyError = !0 + } + } + }, + "5C6T": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PipFormatter", (function() { + return r + })); + var s = i("kcTO"); + class r extends s.PriceFormatter { + constructor(e, t, i, s) { + t || (t = 1), "forex" !== i && "cfd" !== i || !s ? (super(1), + this._isForex = !1) : (super(s), this._isForex = !0), this + ._pipPriceScale = e, this._pipMinMove = t, this._pipMinMove2 = s + } + format(e, t, i) { + let s = this._isForex ? this._pipMinMove2 : this._pipMinMove; + return void 0 === s && (s = NaN), super.format(e * this._pipPriceScale / s, t, + i) + } + } + }, + "5JMW": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isLineToolRiskReward", (function() { + return a + })), i.d(t, "LineDataSourceApi", (function() { + return c + })); + var s = i("Eyy1"), + r = i("ogJP"); + const n = new Map([ + ["LineToolRiskRewardLong", 2], + ["LineToolRiskRewardShort", 2], + ["LineToolBezierQuadro", 3], + ["LineToolBezierCubic", 4] + ]); + + function o(e) { + const t = n.get(e.toolname); + if (void 0 !== t) return t; + const i = e.pointsCount(); + return -1 === i ? e.points().length : i + } + + function a(e) { + return "LineToolRiskRewardLong" === e || "LineToolRiskRewardShort" === e + } + const l = ["alwaysShowStats", "entryPrice", "inputs.first bar time", "inputs.last bar time", + "interval", "linesWidths", "points", "snapTo45Degrees", "stopPrice", "symbol", + "symbolStateVersion", "currencyId", "unitId", "targetPrice", "zOrderVersion" + ]; + class c { + constructor(e, t, i) { + this._source = e, this._model = t, this._pointsConverter = i + } + isSelectionEnabled() { + return this._source.isSelectionEnabled() + } + setSelectionEnabled(e) { + this._source.setSelectionEnabled(e) + } + isSavingEnabled() { + return this._source.isSavedInChart() + } + setSavingEnabled(e) { + this._source.setSavingInChartEnabled(e) + } + isShowInObjectsTreeEnabled() { + return this._source.showInObjectTree() + } + setShowInObjectsTreeEnabled(e) { + this._source.setShowInObjectsTreeEnabled(e) + } + isUserEditEnabled() { + return this._source.userEditEnabled() + } + setUserEditEnabled(e) { + this._source.setUserEditEnabled(e) + } + bringToFront() { + this._model.bringToFront([this._source]) + } + sendToBack() { + this._model.sendToBack([this._source]) + } + getProperties() { + return this._source.properties().state(l, !0) + } + setProperties(e) { + this._setProps(this._source.properties(), e, "") + } + getPoints() { + let e = this._source.points(); + const t = o(this._source); + return e.length > t && (Object(s.assert)(a(this._source.toolname)), e = e.slice(0, + t)), this._pointsConverter.dataSourcePointsToPriced(e) + } + setPoints(e) { + if (this._source.isFixed()) return; + const t = o(this._source); + if (t !== e.length) throw new Error( + `Wrong points count. Required: ${t}, provided: ${e.length}`); + const i = this._pointsConverter.apiPointsToDataSource(e); + this._model.startChangingLinetool(this._source), this._model.changeLinePoints(this + ._source, i), this._model.endChangingLinetool(!0), this._source + .createServerPoints() + } + ownerSourceId() { + return Object(s.ensureNotNull)(this._source.ownerSource()).id() + } + changePoint(e, t) { + if (this._source.isFixed()) return; + const i = this._pointsConverter.apiPointsToDataSource([e])[0]; + this._model.startChangingLinetool(this._source, { + ...i + }, t), this._model.changeLinePoint({ + ...i + }), this._model.endChangingLinetool(!1), this._source.createServerPoints() + } + isHidden() { + return this._source.isSourceHidden() + } + getRawPoints() { + return this._source.points() + } + setRawPoint(e, t) { + this._model.startChangingLinetool(this._source, { + ...t + }, e), this._model.changeLinePoint({ + ...t + }), this._model.endChangingLinetool(!1) + } + move(e, t) { + this._model.startMovingSources([this._source], { + logical: e + }, null, new Map), this._model.moveSources({ + logical: t + }, new Map), this._model.endMovingSources(!1) + } + dataAndViewsReady() { + return this._source.dataAndViewsReady() + } + zorder() { + return this._source.zorder() + } + symbol() { + return this._source.properties().symbol.value() + } + currency() { + return this._source.properties().currencyId.value() + } + unit() { + return this._source.properties().unitId.value() + } + _setProps(e, t, i) { + for (const s in t) { + if (!t.hasOwnProperty(s)) continue; + const n = 0 === i.length ? s : `${i}.${s}`; + if (e.hasOwnProperty(s)) { + const i = t[s]; + Object(r.isHashObject)(i) ? this._setProps(e[s], i, n) : e[s].setValue(i) + } else console.warn(`Unknown property "${n}"`) + } + } + } + }, + "5VQP": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ContextMenuManager", (function() { + return s + })); + var s, r = i("tWVy"); + ! function(e) { + const t = []; + + function s() { + Object(r.b)() + } + e.createMenu = async function(e, r = {}, n) { + const o = new((await Promise.all([i.e("react"), i.e(6), i.e(11), i.e(21), i.e( + 22), i.e(24), i.e(28), i.e(48), i.e(52), i.e(60), i.e( + 0), i.e(5), i.e(54), i.e("context-menu-renderer")]).then(i.bind( + null, "cbq4"))).ContextMenuRenderer)(e, r, () => { + const e = t.indexOf(o); - 1 !== e && t.splice(e, 1), void 0 !== n && + n() + }, s); + return t.push(o), o + }, e.hideAll = s, e.getShown = function() { + for (let e = 0; e < t.length; e++) + if (t[e].isShown()) return t[e]; + return null + } + }(s || (s = {})) + }, + "5ZUI": function(e, t, i) { + "use strict"; + var s = i("WPQD").LineToolTrendLine, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Ray" + } + static createProperties(e) { + var t = new r("linetoolray", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolRay = n + }, + "5fI3": function(e, t, i) { + "use strict"; + + function s(e) { + return function(e) { + return "=" + JSON.stringify(e) + }(e) + } + + function r(e) { + return "=" === e[0] + } + + function n(e) { + if (!r(e)) return { + symbol: e + }; + try { + return JSON.parse(e.slice(1)) + } catch (t) { + return { + symbol: e + } + } + } + i.r(t), i.d(t, "encodeExtendedSymbolOrGetSimpleSymbolString", (function() { + return s + })), i.d(t, "isEncodedExtendedSymbol", (function() { + return r + })), i.d(t, "decodeExtendedSymbol", (function() { + return n + })) + }, + "5mo2": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("jCNj"), + r = i("Y7w9"), + n = i("txPx"), + o = i("OBgQ"); + const a = Object(n.getLogger)("Chart.Model.SessionSpec"); + + function l(e) { + return e >= 48 && e <= 57 + } + class c { + constructor() { + this.entries = [], this.firstDayOfWeek = s.MONDAY, this.weekEndsCount = -1, this + .maxTradingDayLength = 0 + } + parseSessions(e, t) { + var i; + if (this._clear(), this.timezone = e, "24x7" === (t = this._parseFirstDayOfWeek(t)) + .toLowerCase()) + for (const e of u) this.entries.push(c._createSessionEntry(e, 0, 0, 0, 0)); + else { + let e = !1; + const i = new Map; + for (const s of t.split("|")) { + const t = s.split(":"); + if (1 !== t.length && 2 !== t.length) { + a.logError("Bad session section: " + s); + continue + } + const r = 1 === t.length; + if (r) { + if (e) { + a.logError("Duplicated default section: " + s); + continue + } + e = !0 + } + const n = r ? h : c._parseWorkingDays(t[1]); + for (const e of n) r && i.has(e) || i.set(e, t[0]) + } + for (const e of u) { + const t = i.get(e); + if (void 0 !== t) + for (const i of t.split(",")) this.entries.push(c._parseSessionEntry(e, + i)) + } + } + this.entries.sort(p); + const s = new Map; + for (const e of this.entries) { + const t = e.dayOfWeek(); + s.set(t, e.length() + (null !== (i = s.get(t)) && void 0 !== i ? i : 0)) + } + this.maxTradingDayLength = 0, s.forEach(e => { + this.maxTradingDayLength = Math.max(this.maxTradingDayLength, e) + }), this.weekEndsCount = 7 - s.size + } + static parseHolidaysAndCorrections(e, t, i) { + const r = new Map, + n = new Map, + o = e => { + const t = this._parseDay(e), + i = t.toString(), + s = n.get(i); + return void 0 !== s ? s : (n.set(i, t), t) + }; + if ("" !== t) { + const e = []; + for (const i of t.split(",")) { + if (8 !== i.length) throw new Error("bad holiday date: " + i); + const t = o(i); + r.set(t, e) + } + } + if ("" === i) return r; + const a = s.get_timezone("Etc/UTC"); + for (const e of i.split(";")) { + const t = e.split(":"); + if (2 !== t.length) throw new Error("bad correction section: " + e); + const i = []; + if ("dayoff" !== t[0]) + for (const e of t[0].split(",")) i.push(this._parseSessionEntry(1, e)); + for (const e of t[1].split(",")) { + if (8 !== e.length) throw new Error("bad correction date: " + e); + const t = o(e), + n = s.get_day_of_week(s.get_cal(a, t.year, t.month - 1, t.day)), + l = []; + for (const e of i) l.push(new _(n, e.startOffset(), e.length())); + r.set(t, l) + } + } + return r + } + _clear() { + this.entries = [], this.timezone = "", this.firstDayOfWeek = s.MONDAY, this + .weekEndsCount = -1 + } + _parseFirstDayOfWeek(e) { + const t = e.split(";"); + if (t.length > 2) return a.logError( + "Only one `first day` specification expected @ session " + e), e; + if (1 === t.length) return e; + let i = 1; + let r = t[0].indexOf("-") >= 0 ? NaN : parseInt(t[0]); + return isNaN(r) && (i = 0, r = parseInt(t[1])), r < s.SUNDAY || r > s.SATURDAY ? (a + .logError(`Unexpected day index @ session: ${e}; day index ${r}`), e) : ( + this.firstDayOfWeek = r, t[i]) + } + static _parseDay(e) { + const t = parseInt(e.substring(0, 4)), + i = parseInt(e.substring(4, 6)), + s = parseInt(e.substring(6, 8)); + return new o.a(t, i, s) + } + static _parseSessionEntry(e, t) { + let i = t.split("-"); + 2 !== i.length && (a.logError("Bad sessions entry: " + t), i = ["0000", "0000"]); + let s = 0, + r = i[0]; + if (r.includes("F")) { + const e = r.split("F"); + r = e[0], s = "" !== e[1] ? parseInt(e[1]) : 1 + } + let n = 0, + o = i[1]; + if (o.includes("F")) { + const e = o.split("F"); + o = e[0], n = "" !== e[1] ? parseInt(e[1]) : 1 + } + if (!this._isCorrectSession(r) || !this._isCorrectSession(o)) throw new Error( + "Incorrect entry syntax: " + t); + const l = r, + h = o; + return this._createSessionEntry(e, c._minutesFromHHMM(l), c._minutesFromHHMM(h), s, + n) + } + static _isCorrectSession(e) { + return 4 === e.length && l(e.charCodeAt(0)) && l(e.charCodeAt(1)) && l(e.charCodeAt( + 2)) && l(e.charCodeAt(3)) + } + static _parseWorkingDays(e) { + const t = []; + for (let i = 0; i < e.length; i++) { + const s = +e[i]; - 1 === t.indexOf(s) && t.push(s) + } + return t + } + static _minutesFromHHMM(e) { + return s.get_minutes_from_hhmm(e) + } + static _createSessionEntry(e, t, i, r, n) { + 0 === i && (i = s.minutesPerDay), r === n && i <= t && (r += 1), r > 0 && (t -= r * + s.minutesPerDay), n > 0 && (i -= n * s.minutesPerDay); + return new _(e, t, i - t) + } + } + i.d(t, "workingDays", (function() { + return h + })), i.d(t, "workingDaysAndWeekEnds", (function() { + return u + })), i.d(t, "compareSessionEntries", (function() { + return p + })), i.d(t, "SessionEntry", (function() { + return _ + })), i.d(t, "EntryIndex", (function() { + return m + })), i.d(t, "SessionSpec", (function() { + return g + })); + const h = [s.MONDAY, s.TUESDAY, s.WEDNESDAY, s.THURSDAY, s.FRIDAY], + u = [s.SUNDAY, s.MONDAY, s.TUESDAY, s.WEDNESDAY, s.THURSDAY, s.FRIDAY, s.SATURDAY]; + + function d(e, t) { + return e.compareTo(t) < 0 + } + + function p(e, t) { + return e.compareTo(t) + } + class _ { + constructor(e, t, i) { + this._dayOfWeek = e, + this._start = t, this._length = i + } + start() { + return this._start + s.minutesPerDay * this.sessionStartDaysOffset() + } + startOffset() { + return this._start + } + sessionStartDaysOffset() { + return this._start >= 0 ? 0 : this._start % s.minutesPerDay == 0 ? -Math.ceil(this + ._start / s.minutesPerDay) : -Math.floor(this._start / s.minutesPerDay) + } + sessionEndDaysOffset() { + const e = this._start + this._length; + return e >= 0 ? 0 : e % s.minutesPerDay == 0 ? -Math.ceil(e / s.minutesPerDay) : - + Math.floor(e / s.minutesPerDay) + } + isOvernight() { + return this._start < 0 + } + dayOfWeek() { + return this._dayOfWeek + } + sessionStartDayOfWeek() { + let e = this._dayOfWeek - this.sessionStartDaysOffset(); + return e < s.SUNDAY && (e += 7), e + } + sessionEndDayOfWeek() { + let e = this.sessionStartDayOfWeek() + this.sessionEndDaysOffset(); + return e > s.SATURDAY && (e = 1), e + } + length() { + return this._length + } + weight() { + return this._dayOfWeek * s.minutesPerDay + this._start + } + compareTo(e) { + const t = this.weight(), + i = t + this._length, + s = e.weight(), + r = s + e._length; + return t <= s && s < i || s <= t && t < r ? 0 : t > s ? 1 : -1 + } + contains(e) { + const t = 60 * s.get_hours(e) + s.get_minutes(e); + let i = s.get_day_of_week(e) - this._dayOfWeek; + i > 0 && (i -= 7); + const r = i * s.minutesPerDay + t; + return r >= this._start && r < this._start + this._length + } + } + class m { + constructor(e, t, i) { + this.weekIndex = e, this.entryIndex = t, this.entries = i + } + getEntry() { + return this.entries[this.entryIndex] + } + } + + function f(e, t) { + const i = Object(r.lowerbound)(e, t, (e, t) => -1 === e.day.compareTo(t)); + return i === e.length ? null : e[i] + } + class g { + constructor(e = "Etc/UTC", t = "0000-0000", i = "", r = "") { + this._entries = [], this._firstDayOfWeek = s.MONDAY, this._entriesHash = new Map, + this._holidayAndCorrectionMap = new Map, this._holidaySessions = []; + const n = new c; + n.parseSessions(e, t), this._entries = n.entries, this._timezone = n.timezone, this + ._firstDayOfWeek = n.firstDayOfWeek, this._weekEndsCount = n.weekEndsCount, this + ._maxTradingDayLength = n.maxTradingDayLength; + const o = c.parseHolidaysAndCorrections(e, i, r), + a = s.get_timezone(e); + this._isThereCorrections = "" !== i || "" !== r, o.forEach((e, t) => { + this._holidayAndCorrectionMap.set(t.toString(), e), this + ._holidaySessions.push({ + day: t, + sessions: e + }); + const i = this.getWeekIndex(t.toCalendar(a)); + this._entriesHash.set(i, null) + }), this._holidaySessions.sort((e, t) => e.day.compareTo(t.day)) + } + entries() { + return this._entries + } + timezone() { + return this._timezone + } + firstDayOfWeek() { + return this._firstDayOfWeek + } + addSessionEntry(e, t, i, r, n) { + 0 === i && (i = s.minutesPerDay), r === n && i <= t && (r += 1), r > 0 && (t -= r * + s.minutesPerDay), n > 0 && (i -= n * s.minutesPerDay); + const o = i - t; + this._entries.push(new _(e, t, o)) + } + longestSessionLength() { + let e = 0, + t = 0; + for (const t of this._holidaySessions) t.sessions.forEach(t => { + e = Math.max(e, t.length()) + }); + return this._entries.forEach(e => { + t = Math.max(t, e.length()) + }), Math.max(e, t) + } + isWeekEnd(e) { + const t = Object(r.lowerbound)(this._entries, new _(e, 0, 0), (e, t) => e + .dayOfWeek() < t.dayOfWeek()); + return t > this._entries.length - 1 || this._entries[t].dayOfWeek() !== e + } + isCalWeekEnd(e) { + const t = s.get_day_of_week(e); + if (!this._isThereCorrections) return this.isWeekEnd(t); + const i = o.a.fromCalendar(e), + r = this._holidayAndCorrectionMap.get(i.toString()); + return void 0 === r ? this.isWeekEnd(t) : 0 === r.length + } + hasWeekEnds() { + return this.weekEndsCount() > 0 + } + weekEndsCount() { + return this._weekEndsCount + } + maxTradingDayLength() { + return this._maxTradingDayLength + } + holidaysFromYearStart(e) { + if (!this._isThereCorrections) return 0; + const t = s.get_timezone(this._timezone), + i = new o.a(s.get_year(e), s.JANUARY, 1), + r = o.a.fromCalendar(e); + let n = 0; + const a = this._selectHolidays(i, r); + for (let e = 0; e < a.length; e++) { + const i = a[e].day.toCalendar(t); + this.isWeekEnd(s.get_day_of_week(i)) ? n += 0 === a[e].sessions.length ? 0 : - + 1 : n += 0 === a[e].sessions.length ? 1 : 0 + } + return n + } + intradayCanBeBuiltFrom24x7(e) { + return this._entries.every(t => t.start() % e == 0 && t.length() % e == 0) + } + indexOfSession(e, t, i) { + const n = this._getEntriesForWeek(e); + let o = Object(r.lowerbound)(n, new _(t, i, 0), d); + if (o !== n.length) return new m(e, o, n); + let a = e; + const l = 7 - t + this._firstDayOfWeek - 1; + for (i = -(s.minutesPerDay - i + l * s.minutesPerDay);;) { + a++; + const e = this._getEntriesForWeek(a); + if (0 !== e.length) return o = Object(r.lowerbound)(e, new _(this + ._firstDayOfWeek, i, 0), d), new m(a, o, e) + } + } + findSession(e, t, i, s = 0) { + const r = this.indexOfSession(e, t, i), + n = r.entries; + let o = r.entryIndex; + if (0 !== s) { + const e = n[o].dayOfWeek(), + t = s > 0 ? 1 : -1; + for (;;) { + const i = o + t; + if (i < 0 || i >= n.length || n[i].dayOfWeek() !== e) break; + o = i + } + } + return new m(r.weekIndex, o, n) + } + getWeekIndex(e) { + if (!this._isThereCorrections) return 0; + const t = s.get_day_of_week(e) - s.SUNDAY, + i = s.get_timezone("Etc/UTC"), + r = s.get_cal(i, s.get_year(e), s.get_month(e), s.get_day_of_month(e) - t); + return Math.floor((r.getTime() + 621672192e5) / 1e3 / 86400 / 7) + } + correctTradingDay(e) { + const t = s.get_day_of_week(e), + i = 60 * s.get_hours(e) + s.get_minutes(e), + r = this.getWeekIndex(e), + n = this.findSession(r, t, i, 0), + o = n.getEntry().dayOfWeek() - t + 7 * (n.weekIndex - r); + return 0 !== o && s.add_date(e, o), e + } + alignToSessionStart(e, t = 0) { + const i = s.get_day_of_week(e), + r = 60 * s.get_hours(e) + s.get_minutes(e), + n = this.getWeekIndex(e), + o = this.findSession(n, i, r, t), + a = o.getEntry(), + l = a.dayOfWeek() - i + 7 * (o.weekIndex - n); + 0 !== l && s.add_date(e, l); + const c = a.startOffset(); + return s.set_hms(e, c / 60, c % 60, 0, 0, s.get_timezone(this._timezone)), a + .length() + } + businessDaysToCalendarDays(e, t) { + let i = this.getWeekIndex(e), + r = s.get_day_of_week(e), + n = 0, + o = 0; + for (; o < t;) { + const e = this._getEntriesForWeek(i); + let a = 0; + for (let i = r; i <= s.SATURDAY; i++) { + n++; + let s = !0; + for (; a < e.length && !(e[a].dayOfWeek() > i);) e[a].dayOfWeek() < i || + s && (s = !1, o++), a++; + if (o >= t) return n + } + i++, r = s.SUNDAY + } + return n + } + calendarDaysToBusinessDays(e, t) { + let i = this.getWeekIndex(e), + r = s.get_day_of_week(e), + n = 0, + o = 0; + for (; n < t;) { + const e = this._getEntriesForWeek(i); + let a = 0; + for (let i = r; i <= s.SATURDAY; i++) { + n++; + let s = !0; + for (; a < e.length && !(e[a].dayOfWeek() > i);) e[a].dayOfWeek() < i || + s && (s = !1, o++), a++; + if (n >= t) return o + } + i++, r = s.SUNDAY + } + return o + } + alignToNearestSessionStart(e, t) { + return this._alignToNearestSessionValue(e, t, this._entrySessionStart.bind(this)) + } + alignToNearestSessionEnd(e, t) { + return this._alignToNearestSessionValue(e, t, this._entrySessionEnd.bind(this)) + } + leftBorderOfDailyBar(e) { + const t = this._getEntriesForDay(e); + return 0 === t.length ? null : (t.sort(p), this._getLeftEntryBorder(e, t[0])) + } + bordersOfDailyBar(e) { + const t = this._getEntriesForDay(e); + if (0 === t.length) return null; + t.sort(p); + const i = this._getLeftEntryBorder(e, t[0]), + r = t[t.length - 1], + n = s.clone(e); + let o = 60 * (r.startOffset() + r.length()) - 1; + const a = Math.floor(o / 3600); + return o -= 3600 * a, s.set_hms(n, a, o / 60, o % 60, 0, s.get_timezone(this + ._timezone)), { + from: i, + to: n + } + } + getEntriesForWeekByCalendar(e) { + const t = this.getWeekIndex(e); + return this._getEntriesForWeek(t) + } + _getEntriesForWeek(e) { + let t = this._entriesHash.get(e); + if (void 0 === t) return this._entries; + if (null !== t) return t; + const i = s.get_timezone(this._timezone); + t = this._entries.slice(); + const r = this._weekIndexToCalendar(e), + n = this._weekIndexToCalendar(e + 1), + a = o.a.fromCalendar(r), + l = o.a.fromCalendar(n), + c = this._selectHolidays(a, l); + for (const e of c) { + const r = e.day.toCalendar(i), + n = s.get_day_of_week(r); + t = t.filter(e => e.dayOfWeek() !== n), t = t.concat(e.sessions) + } + return t.sort(p), this._entriesHash.set(e, t), t + } + _selectHolidays(e, t) { + const i = []; + let s = e; + for (;;) { + const e = f(this._holidaySessions, s); + if (null === e) return i; + if (!e.day.before(t)) return i; + i.push(e), s = e.day.addDays(1) + } + } + _weekIndexToCalendar(e) { + const t = 1e3 * (86400 * e * 7 + 86400) - 621672192e5, + i = s.get_cal_from_unix_timestamp_ms(s.get_timezone("Etc/UTC"), t), + r = s.get_timezone("Etc/UTC"); + return s.get_cal(r, s.get_year(i), s.get_month(i), s.get_day_of_month(i)) + } + _alignToNearestSessionValue(e, t, i) { + const r = s.get_day_of_week(e), + n = 60 * s.get_hours(e) + s.get_minutes(e), + o = this.getWeekIndex(e); + let a = this.findSession(o, r, n); + if (a.getEntry().contains(e) && o === a.weekIndex || 1 === t) return i(a, s.clone( + e), t); + let l = a.entryIndex - 1; + if (l < 0) { + let e = a.weekIndex, + t = a.entries; + for (; l < 0;) e--, t = this._getEntriesForWeek(e), l += t.length; + a = new m(e, l, t) + } else a = new m(a.weekIndex, l, a.entries); + return i(a, s.clone(e), t) + } + _entrySessionStart(e, t, i) { + return this._entrySessionValue(e, t, i, e => 60 * e.start()) + } + _entrySessionEnd(e, t, i) { + return this._entrySessionValue(e, t, i, e => 60 * (e.start() + e.length()) - 1) + } + _entrySessionValue(e, t, i, r) { + let n = s.get_day_of_week(t); + const o = e.getEntry(); + let a = o.dayOfWeek() - o.sessionStartDaysOffset(); + const l = this.getWeekIndex(t); + let c = e.weekIndex - l, + h = !1; + if (a < s.SUNDAY && (c <= 0 ? h = !0 : c--, a += 7), (c > 0 && i >= 0 || c < 0 && + i < 0) && s.add_date(t, 7 * c), !o.contains(t)) { + let e = a - n; + h && i < 0 && (e = -(7 - a + n)), s.add_date(t, e), n = s.get_day_of_week(t) + } + o.isOvernight() && n === o.dayOfWeek() && s.add_date(t, -o + .sessionStartDaysOffset()); + let u = r(o); + const d = Math.floor(u / 3600); + return u -= 3600 * d, s.set_hms(t, d, u / 60, u % 60, 0, s.get_timezone(this + ._timezone)), t + } + _getEntriesForDay(e) { + const t = s.get_day_of_week(e); + return this._getEntriesForWeek(this.getWeekIndex(e)).filter(e => e.dayOfWeek() === + t) + } + _getLeftEntryBorder(e, t) { + const i = s.clone(e), + r = t.startOffset(); + return s.set_hms(i, r / 60, r % 60, 0, 0, s.get_timezone(this._timezone)), i + } + } + }, + "5rJj": function(e, t, i) { + "use strict"; + (function(t) { + var s = i("ogJP").isSameType, + r = i("Ocx9").DefaultProperty; + + function n(e, t, i, s) { + this._map = Object.assign({}, this._map, s), t && (t = this.unpackLevels(t)), r + .call(this, e, t, i) + } + inherit(n, r), n.prototype.state = function(e, i) { + e = e || []; + var s = t.prototype.state.call(this, e); + return i ? s : this.packLevels(s) + }, n.prototype.clone = function() { + for (var e = this.state(), t = new n(this._defaultName, e), i = 0; i < this + ._exclusions.length; ++i) t.addExclusion(this._exclusions[i]); + return t + }, n.prototype.merge = function(e, i) { + return t.prototype.merge.call(this, this.unpackLevels(e), i) + }, n.prototype._map = { + prefixes: [""], + range: [0, 0], + names: ["coeff", "color", "visible", "linestyle", "linewidth"], + typecheck: { + pack: Object, + unpack: Array + } + }, n.prototype._packLvlTpl = function() { + return [] + }, n.prototype._unpackLvlTpl = function() { + return {} + }, n.prototype._packLvlFill = function(e, t, i, s) { + return s.push(i[t]), s + }, n.prototype._unpackLvlFill = function(e, t, i, s) { + return s[t] = i[e], s + }, n.prototype._iterateLevels = function(e, t) { + for (var i in this._map.prefixes) + for (var r = (this._map.prefixes[i] || "") + "level", n = this._map.range[ + 0]; n <= this._map.range[1]; n++) + if (e[r + n] && s(e[r + n], t.typecheck())) { + var o = t.tpl(); + for (var a in this._map.names) o = t.fill(a, this._map.names[a], e[ + r + n], o); + e[r + n] = o + } return e + }, n.prototype.packLevels = function(e) { + return this._iterateLevels(e, { + tpl: this._packLvlTpl, + fill: this._packLvlFill, + typecheck: this._map.typecheck.pack + }) + }, n.prototype.unpackLevels = function(e) { + return this._iterateLevels(e, { + tpl: this._unpackLvlTpl, + fill: this._unpackLvlFill, + typecheck: this._map.typecheck.unpack + }) + }, n.prototype.saveDefaults = function() { + TradingView.saveDefaults(this._defaultName, this.state(this._exclusions, !0)) + }, e.exports = n + }).call(this, i("tc+8")) + }, + "5vwb": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return n + })), i.d(t, "a", (function() { + return o + })); + var s = i("tqok"), + r = i("hsV8"); + + function n(e, t) { + for (const i of e.points) { + if (i.index >= t.length) return null; + if (t[i.index] === s.INVALID_TIME_POINT_INDEX) return null + } + return { + points: e.points.map(e => ({ + index: t[e.index], + offset: e.offset, + level: e.level + })) + } + } + + function o(e, t, i) { + return { + id: t, + points: e.points.map(e => ({ + ...e, + index: Object(r.ensureTimePointIndexIndex)(i.indexOf(e.index)) + })) + } + } + }, + "68at": function(e, t, i) { + "use strict"; + var s = i("5rJj"), + r = i("7ADh").LineToolFibWedgeBase, + n = i("j3hX").LineToolColorsProperty; + class o extends r { + constructor(e, t) { + super(e, t || o.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "jlk4", 7)).then(({ + ProjectionLinePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return 1 + } + name() { + return "Projection" + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "LzAw"))) + .ProjectionDefinitionsViewModel + } + static createProperties(e) { + var t = new s("linetoolprojection", e, !1, { + range: [1, 1] + }); + return o._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e), e.addChild("linesColors", new n([e.trendline.color])) + } + } + t.LineToolProjection = o + }, + "6I19": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return w + })), i.d(t, "c", (function() { + return P + })), i.d(t, "a", (function() { + return C + })); + var s = i("Eyy1"), + r = i("ivNn"), + n = i("eJTA"), + o = i("YFKU"), + a = i("qFKp"), + l = i("Tmoa"), + c = i("Ialn"), + h = i("k9/m"), + u = i("CW80"), + d = i("mMWL"), + p = i("GH0z"), + _ = i("38az"), + m = i("7qT/"), + f = i("xCUR"); + const g = a.CheckMobile.any(), + b = g && !0, + v = new p.PercentageFormatter, + S = window.t("n/a"), + y = `${S} (${S}%)`; + + function w(e, t) { + const i = Object(n.parseRgb)(t), + s = Object(n.parseRgb)(e); + return Object(n.distanceRgb)(i, s) < 70 ? Object(n.rgbToHexString)(Object(n.invertRgb)(i)) : + t + } + + function P(e) { + if (null === e) return null; + const t = e.properties().child("background"); + return void 0 === t ? null : t.value() + } + class C { + constructor(e, t) { + this._series = e, this._model = t, this._emptyValues = [{ + title: Object(o.t)("Open"), + visible: !1, + value: "", + index: 0, + id: "" + }, { + title: Object(o.t)("High"), + visible: !1, + value: "", + index: 1, + id: "" + }, { + title: Object(o.t)("Low"), + visible: !1, + value: "", + index: 2, + id: "" + }, { + title: Object(o.t)("Close"), + visible: !1, + value: "", + index: 3, + id: "" + }, { + title: "", + visible: !1, + value: "", + index: 4, + id: "" + }, { + title: "", + visible: !1, + value: "", + index: 5, + id: "" + }, { + title: Object(o.t)("Change"), + visible: !1, + value: "", + index: 6, + id: "" + }] + } + getItems() { + return this._emptyValues + } + getValues(e) { + const t = this._showLastPriceAndChangeOnly(), + i = this._emptyValues.map(e => ({ + ...e, + visible: !t + })); + i[0].value = S, i[1].value = S, i[2].value = S, i[3].value = S, i[6].value = y, i[5] + .visible = !1; + const n = i[4]; + if (n.value = S, n.visible = !1, this._model.timeScale().isEmpty() || 0 === this + ._series.bars().size() || this._series.priceScale().isEmpty()) return i; + Object(r.isNumber)(e) || (e = Object(s.ensureNotNull)(this._series.data().last()) + .index); + const o = this._series.nearestIndex(e, h.PlotRowSearchMode.NearestLeft); + if (void 0 === o) return i; + const a = this._series.data().valueAt(o), + u = P(this._series.model().paneForSource(this._series)); + if (null === a || null === u) return i; + const d = a[1], + p = a[2], + m = a[3], + g = a[4]; + if (null == d || null == p || null == m || null == g) return i; + const { + values: C + } = this._changesData(g, o, t), x = Object(f.a)(this._series); + if (Object(f.b)(this._series)) i[6].value = ""; + else if (void 0 !== C) { + const e = this._series.formatter(); + i[6].value = Object(c.forceLTRStr)( + `${e.format(C.change, !0)} (${v.format(C.percentChange, !0)})`) + } + t ? (i[5].value = x(g), i[5].visible = !0, i[6].visible = !0) : (i[0].value = x(d), + i[1].value = x(p), i[2].value = x(m), i[3].value = x(g), i[4].value = x(this + ._series.barFunction()(a))); + let T = null; + if (t && !b) T = void 0 === C || C.change >= 0 ? _.SeriesBarColorer.upColor(this + ._series.properties()) : _.SeriesBarColorer.downColor(this._series + .properties()); + else { + const e = this._series.barColorer().barStyle(o, !1); + T = w(u, null != e.barBorderColor ? e.barBorderColor : e.barColor) + } + T = Object(l.resetTransparency)(w(u, T)); + for (const e of i) e.color = T; + return i + } + _showLastPriceAndChangeOnly() { + return g && (null === this._model.crossHairSource().pane || Object(u.isLineToolName) + (d.tool.value()) || null !== this._model.lineBeingEdited()) + } + _changesData(e, t, i) { + var s; + if (i && !b) { + const e = this._series.quotes(); + if (null !== e) return { + values: { + change: e.change, + percentChange: e.change_percent + } + } + } else { + const i = this._series.data().search(t - 1, h.PlotRowSearchMode.NearestLeft), + r = null !== (s = null == i ? void 0 : i.value[4]) && void 0 !== s ? s : + null; + if (null !== r) return { + values: { + change: e - r, + percentChange: Object(m.a)(r, e) + } + } + } + return {} + } + } + }, + "6KAu": function(e, t, i) { + "use strict"; + + function s() { + return Promise.all([i.e("react"), i.e(1), i.e(3), i.e(16), i.e(93), i.e(0), i.e(2), i.e(15), + i.e("change-interval-dialog") + ]).then(i.bind(null, "iT0o")) + } + i.d(t, "a", (function() { + return s + })) + }, + "6ctS": function(e, t) { + e.exports = + '' + }, + "6sst": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "OverlayStudyPriceLineAxisView", (function() { + return r + })); + var s = i("TmNs"); + class r extends s.PriceLineAxisView { + constructor(e) { + super(), this._study = e + } + _value() { + return this._study.lastValueData("", !0) + } + _priceLineColor(e) { + return e + } + _lineWidth() { + return 1 + } + _isVisible() { + const e = this._study.model().properties().scalesProperties.showSeriesLastValue + .value(); + return this._study.properties().childs().showPriceLine.value() && e + } + } + }, + "6vtU": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "setAdditionalSymbolInfoFields", (function() { + return r + })), i.d(t, "getAdditionalSymbolInfoFields", (function() { + return n + })); + let s = []; + + function r(e) { + s = e + } + + function n() { + return s + } + }, + "704P": function(e, t, i) { + "use strict"; + (function(e) { + var s = i("Ss5c").LineDataSource, + r = i("jkoZ"), + n = i("Ocx9").DefaultProperty, + o = i("k9/m").PlotRowSearchMode, + a = i("s1Gx").sortSourcesPreOrdered.LineToolExecution; + class l { + constructor(e, t) { + this._pane = e, this._timeScale = t + } + static recreateOrderedByBarsSourcesCache(e) { + l.clearOrderedByBarsSourcesCache(); + for (var t = l.prototype, i = e.sourcesByGroup().all(), s = 0; s < i + .length; ++s) { + var r = i[s]; + if (r._adapter && void 0 !== r._adapter._index) { + var n = t._cachedByBarIndexOrderedExecutions[r._adapter._index]; + t._cachedByBarIndexOrderedExecutions[r._adapter._index] = n || [], t + ._cachedByBarIndexOrderedExecutions[r._adapter._index].push(r) + } + } + } + static clearOrderedByBarsSourcesCache() { + l.prototype._cachedByBarIndexOrderedExecutions = {} + } + getXYCoordinate(e, t, i) { + var s = 0, + r = e.getDirection(), + n = "buy" === r, + a = this._pane.model().mainSeries(); + if (a.bars) { + var l = n ? 10 : -10, + c = a.bars().search(i, o.NearestLeft); + if (null !== c) { + i = c.index; + var u = n ? c.value[TradingView.LOW_PLOT] : c.value[TradingView + .HIGH_PLOT], + d = a.priceScale(), + p = a.firstValue(); + s = d.priceToCoordinate(u, p) + l + } + } + e._index = i; + var _ = t.visibleBarsStrictRange(); + if (!isFinite(i) || null === _ || i > _.lastBar() || i < _.firstBar()) + return { + x: -1, + y: -1 + }; + for (var m = this._cachedByBarIndexOrderedExecutions[i] || this._pane + .sourcesByGroup().all(), f = m.length - 1; f >= 0; --f) { + var g = m[f]; + if (g instanceof h && g._adapter._index === i && g._adapter + .getDirection() === r) { + if (g === e._line) break; + var b = g._adapter._height(); + s = n ? s + b : s - b + } + } + return { + x: t.indexToCoordinate(i), + y: s + } + } + } + l.prototype._cachedByBarIndexOrderedExecutions = {}; + class c { + constructor(e) { + this._line = e + } + _height() { + var e = this.getArrowHeight(), + t = this.getArrowSpacing(); + this.getText() && r.fontHeight(this.getFont()); + return e + t + 0 + 10 + } + getIndex() { + return this._line._model.timeScale().baseIndex() - this._line.points()[0] + .index + } + setIndex(e) { + var t = this._line._model.timeScale().baseIndex() - Math.abs(e); + this._line.startMoving({ + logical: this._line.points()[0] + }); + var i = TradingView.merge({}, this._line.points()[0]); + return i.index = t, this._line.move({ + logical: i + }), this._line.endMoving(), this + } + getTime() { + return this._unixtime + } + setTime(e) { + return this._unixtime = e, this._line.restorePoints([{ + offset: 0, + price: this.getPrice(), + time_t: this._unixtime + }], []), this._line.createServerPoints(), this + } + getPrice() { + return this._line.points().length > 0 ? this._line.points()[0].price : this + ._line._timePoint.length > 0 ? this._line._timePoint[0].price : void 0 + } + setPrice(e) { + return this._line.points().length > 0 && (this._line.points()[0].price = e), + this._line._timePoint.length > 0 && (this._line._timePoint[0].price = + e), this + } + getText() { + return this._line.properties().text.value() + } + setText(e) { + return this._line.properties().text.setValue(e || ""), this._line + .updateAllViewsAndRedraw(), this + } + getArrowHeight() { + return this._line.properties().arrowHeight.value() + } + setArrowHeight(e) { + return this._line.properties().arrowHeight.setValue(e || 5), this + } + getArrowSpacing() { + return this._line.properties().arrowSpacing.value() + } + setArrowSpacing(e) { + return this._line.properties().arrowSpacing.setValue(e || 1), this + } + getDirection() { + return this._line.properties().direction.value() + } + setDirection(e) { + return this._line.properties().direction.setValue(e || "buy"), this + } + getArrowColor() { + var e = this._line.properties(); + return "buy" === this.getDirection() ? e.arrowBuyColor.value() : e + .arrowSellColor.value() + } + setArrowColor(e) { + return "buy" === this.getDirection() ? this.setArrowBuyColor(e) : this + .setArrowSellColor(e), this + } + setArrowBuyColor(e) { + return this._line.properties().arrowBuyColor.setValue(e), this + } + setArrowSellColor(e) { + return this._line.properties().arrowSellColor.setValue(e), this + } + getTextColor() { + return r.getColorFromProperties(this._line.properties().textColor, this + ._line.properties().textTransparency) + } + setTextColor(e) { + return r.setColorToProperties(e, this._line.properties().textColor, this + ._line.properties().textTransparency), this + } + getFont() { + return r.getFontFromProperties(this._line.properties().fontFamily, this + ._line.properties().fontSize, this._line.properties().fontBold, this + ._line.properties().fontItalic) + } + setFont(e) { + return r.setFontToProperties(e, this._line.properties().fontFamily, this + ._line.properties().fontSize, this._line.properties().fontBold, this + ._line.properties().fontItalic), this + } + setTooltip(e) { + return null == e ? e = "" : e += "", this._line.properties().tooltip + .setValue(e), this + } + getTooltip() { + return this._line.properties().tooltip.value() + } + remove() { + this._line._model.removeSource(this._line), delete this._line + } + getPoints() { + return this._line.points() + } + } + class h extends s { + constructor(e, t) { + super(e, t || h.createProperties()), this._adapter = new c(this), this + .customization.forcePriceAxisLabel = !1, this.customization + .disableErasing = !0, this.customization.showInObjectTree = !1, this + .setSelectionEnabled(!1), i.e("lt-pane-views").then(i.t.bind(null, + "tjxb", 7)).then(({ + ExecutionPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + zorder() { + return a + } + isSpeciallyZOrderedSource() { + return !0 + } + pointsCount() { + return h.POINTS_COUNT + } + name() { + return "Execution" + } + hasContextMenu() { + return !1 + } + state() { + return null + } + updateAllViews() { + return this._isVisible() ? s.prototype.updateAllViews.call(this) : null + } + priceAxisViews(e, t) { + return this._isVisible() ? s.prototype.priceAxisViews.call(this, e, t) : + null + } + _isVisible() { + return this._model.properties().tradingProperties.showExecutions.value() + } + paneViews() { + return TradingView.printing && !e.enabled("snapshot_trading_drawings") ? + null : this._model.properties().tradingProperties.showExecutions + .value() ? s.prototype.paneViews.call(this) : null + } + userEditEnabled() { + return !1 + } + showInObjectTree() { + return !1 + } + cloneable() { + return !1 + } + copiable() { + return !1 + } + isSynchronizable() { + return !1 + } + static createProperties(e) { + var t = new n("linetoolexecution", e, !1, !1); + return h._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + h.POINTS_COUNT = 1, t.ExecutionsPositionController = l, t.LineToolExecution = h + }).call(this, i("Kxc7")) + }, + "7ADh": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolFibWedgeBase", (function() { + return o + })); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("Ss5c"); + class o extends n.LineDataSource { + pointsCount() { + return 3 + } + hasEditableCoordinates() { + return !1 + } + setPoint(e, t) { + if (super.setPoint(e, t), !this._recursiveGuard) try { + if (this._recursiveGuard = !0, 2 === e) { + const e = this.pointToScreenPoint(this._points[0])[0]; + let t = this.pointToScreenPoint(this._points[1])[0]; + const i = this.pointToScreenPoint(this._points[2])[0].subtract(e) + .length(); + let s = t.subtract(e); + s.length() <= 0 && (s = new r.Point(1, 0)), t = e.add(s.normalized() + .scaled(i)); + const n = this.screenPointToPoint(t), + o = this._pointsProperty.childs().points[1]; + o.childs().price.setValue(n.price), o.childs().bar.setValue(n.index) + } else { + const e = this.pointToScreenPoint(this._points[0])[0], + t = this.pointToScreenPoint(this._points[1])[0]; + let i = this.pointToScreenPoint(this._points[2])[0]; + const s = t.subtract(e).length(); + let n = i.subtract(e); + n.length() <= 0 && (n = new r.Point(1, 0)), i = e.add(n.normalized() + .scaled(s)); + const o = this.screenPointToPoint(i), + a = this._pointsProperty.childs().points[2]; + a.childs().price.setValue(o.price), a.childs().bar.setValue(o.index) + } + } finally { + this._recursiveGuard = !1 + } + } + addPoint(e) { + if (2 === this._points.length) { + const t = this.pointToScreenPoint(this._points[0])[0], + i = this.pointToScreenPoint(this._points[1])[0]; + let r = this.pointToScreenPoint(e)[0]; + const n = i.subtract(t).length(), + o = r.subtract(t).normalized(); + r = t.add(o.scaled(n)); + const a = Object(s.ensureNotNull)(this.ownerSource()), + l = Object(s.ensureNotNull)(a.firstValue()), + c = Object(s.ensureNotNull)(this.priceScale()).coordinateToPrice(r.y, + l); + e = { + index: Math.round(this._model.timeScale().coordinateToIndex(r.x)), + price: c + } + } + return n.LineDataSource.prototype.addPoint.call(this, e) + } + } + }, + "7ETO": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("ocLq"); + class r { + main(e) { + const t = e.new_var(s.Std.open(e)), + i = e.new_var(s.Std.close(e)), + r = t.get(1), + n = i.get(1), + o = s.Std.ohlc4(e), + a = s.Std.na(t.get(1)) ? (s.Std.open(e) + s.Std.close(e)) / 2 : (r + n) / 2; + t.set(a), i.set(o); + const l = s.Std.max(s.Std.high(e), s.Std.max(a, o)), + c = s.Std.min(s.Std.low(e), s.Std.min(a, o)), + h = s.Std.volume(e), + u = e.symbol; + return [u.time, a, l, c, o, h, u.updatetime, u.isBarClosed] + } + } + + function n(e) { + if (0 === e.type.indexOf("BarSetHeikenAshi@tv-basicstudies-")) return new r; + const t = "unknown builder type: " + e.type; + throw console.error(t), new Error(t) + } + i.d(t, "getChartStyleStudy", (function() { + return n + })) + }, + "7Fue": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return n + })); + const s = ["horizlines", "vertlines", "lines", "hlines", "textmarks", "shapemarks", + "backgrounds", "polygons", "trendchannels", "hhists", "dwglabels", "dwglines", + "dwgboxes", "dwgtables", "dwgtablecells" + ]; + + function r(e) { + return !s.some(t => e[t]().size > 0) + } + + function n(e) { + const t = new Map; + return e.forEach((e, i) => { + e.forEach(e => { + const s = { + ...e, + styleId: i + }, + r = e.firstBarTime; + let n = t.get(r); + void 0 === n && (n = new Set, t.set(r, n)), n.add(s) + }) + }), t + } + }, + "7KDR": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "Action", (function() { + return l + })), i.d(t, "ActionAsync", (function() { + return c + })), i.d(t, "Separator", (function() { + return h + })), i.d(t, "Loader", (function() { + return u + })); + var s = i("zRdu"), + r = i("aIyQ"), + n = i.n(r), + o = i("/3z9"), + a = i("e3/o"); + class l { + constructor(e, t = a.guid()) { + this.type = s.a.Action, this._destroyed = !1, this._binding = null, this.id = t, + this._onUpdate = new n.a, this._options = e, this.update(e) + } + execute() { + this._options.checkable && this.update({ + checked: !this._options.checked + }), this._options.onExecute && this._options.onExecute(this) + } + getLabel() { + return this._options.label || "" + } + getSubItems() { + return this._options.subItems || [] + } + isDisabled() { + return !0 === this._options.disabled + } + isActive() { + return !0 === this._options.active + } + isCheckable() { + return !0 === this._options.checkable + } + isChecked() { + return !0 === this._options.checked + } + getPayload() { + return this._options.payload + } + update(e) { + this._destroyed || (this._unbindShortcut(), e.hotkeyHash && (this._options + .shortcutHint = Object(o.humanReadableHash)(e.hotkeyHash)), this + ._options = Object.assign(this._options, e), this._bindShortcut(), this + ._onUpdate.fire(this)) + } + onUpdate() { + return this._onUpdate + } + getState() { + return { + label: this.getLabel(), + disabled: this.isDisabled(), + active: this.isActive(), + subItems: this.getSubItems(), + checkable: this.isCheckable(), + checked: this.isChecked(), + doNotCloseOnClick: this._options.doNotCloseOnClick || !1, + shortcutHint: this._options.shortcutHint, + hint: this._options.hint, + icon: this._options.icon, + iconChecked: this._options.iconChecked, + toolbox: this._options.toolbox, + showToolboxOnHover: this._options.showToolboxOnHover || !1, + statName: this._options.statName, + name: this._options.name, + fullWidthLabel: this._options.fullWidthLabel, + invisibleHotkey: this._options.invisibleHotkey + } + } + getBinding() { + return this._binding + } + setBinding(e) { + this._binding = e + } + destroy() { + this._destroyed = !0, this._onUpdate.destroy(), null !== this._binding && this + ._binding.destroy(), this._unbindShortcut() + } + options() { + return this._options + } + _bindShortcut() { + if (!this._options.hotkeyGroup || !this._options.hotkeyHash) return; + const e = "string" == typeof this._options.label ? this._options.label : this + ._options.name; + this._hotkeyAction = this._options.hotkeyGroup.add({ + hotkey: this._options.hotkeyHash, + desc: e, + handler: () => this.execute(), + isDisabled: () => this.isDisabled() + }) + } + _unbindShortcut() { + this._hotkeyAction && (this._hotkeyAction.destroy(), delete this._hotkeyAction) + } + } + class c extends l { + constructor(e, t) { + super({}, t), this.type = s.a.ActionAsync, this._loader = e, this._loaded = !1 + } + loadOptions() { + return this._loadingPromise || (this._loadingPromise = this._loader().then(e => { + this.update(e), this._loaded = !0 + })), + this._loadingPromise + } + isLoaded() { + return this._loaded + } + } + class h { + constructor(e, t = a.guid()) { + this.type = s.a.Separator, this.id = t, this._hint = e + } + getHint() { + return this._hint + } + } + class u { + constructor(e = a.guid()) { + this.type = s.a.Loader, this.id = e + } + } + }, + "7MWe": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PriceScaleChangeUndoCommand", (function() { + return a + })); + var s = i("Eyy1"), + r = i("txPx"), + n = i("RDU5"); + const o = Object(r.getLogger)("Chart.ChartUndoModel"); + class a extends n.UndoCommand { + constructor(e, t, i, s, r) { + super("Scale price", !1), this._newPriceScaleState = null, this._model = e, this + ._paneIndex = e.panes().indexOf(t), this._priceScaleId = i.id(), this + ._state = s, this._timestamp = r ? performance.now() : null + } + undo() { + if (null !== this._newPriceScaleState) return void o.logDebug( + "PriceScaleChangeUndoCommand.undo: Command is already undone"); + const [e, t] = this._paneAndScale(); + this._newPriceScaleState = t.state(), this._model.restorePriceScaleState(e, t, + this._state) + } + redo() { + if (null === this._newPriceScaleState) return void o.logDebug( + "PriceScaleChangeUndoCommand.redo: Command is not undone"); + const [e, t] = this._paneAndScale(); + this._model.restorePriceScaleState(e, t, this._newPriceScaleState), this + ._newPriceScaleState = null + } + canMerge(e) { + return e instanceof a && null !== this._timestamp && null !== e._timestamp && + null === this._newPriceScaleState && e._model === this._model && e + ._paneIndex === this._paneIndex && e._priceScaleId === this._priceScaleId && + Math.abs(e._timestamp - this._timestamp) < 1e3 + } + merge(e) { + this._timestamp = e._timestamp + } + _paneAndScale() { + const e = this._model.panes()[this._paneIndex], + t = Object(s.ensureNotNull)(e.getPriceScaleById(this._priceScaleId)); + return [e, t] + } + } + }, + "7RN7": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return s + })), i.d(t, "a", (function() { + return r + })); + const s = 52, + r = 5 + }, + "7dm8": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return n + })), i.d(t, "c", (function() { + return o + })), i.d(t, "d", (function() { + return a + })), i.d(t, "e", (function() { + return l + })); + var s = i("ocLq"); + class r { + init(e, t) { + e.new_sym(t(1), s.Std.period(e)), this._source = t(0), this._scaleFactor1 = 1, this + ._scaleFactor2 = 1 + } + main(e, t) { + const i = e.symbol.time, + r = s.Std[this._source](e); + e.select_sym(1); + const n = s.Std[this._source](e), + o = e.new_unlimited_var(n), + a = e.new_unlimited_var(e.symbol.time); + if (e.select_sym(0), isNaN(i)) return null; + let l = a.indexOf(i); - 1 !== l && a.get(l) !== i && (l = -1); + const c = l < 0 ? NaN : o.get(l); + return [this._doCalculation(this._scaleFactor1, r, this._scaleFactor2, c)] + } + } + const n = { + styles: { + plot1: { + linestyle: 0, + linewidth: 2, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#800080" + } + }, + precision: 2, + inputs: { + source: "close", + symbol2: "" + } + }, + o = [{ + defval: "close", + id: "source", + name: "Source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"], + type: "text" + }, { + id: "symbol2", + name: "Symbol", + type: "symbol", + confirm: !0 + }], + a = [{ + id: "plot1", + type: "line" + }], + l = { + plot1: { + title: "Plot", + histogramBase: 0 + } + } + }, + "7ktv": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PriceDataSource", (function() { + return a + })); + var s = i("fgLi"), + r = i("aIyQ"), + n = i.n(r), + o = i("/tGj"); + class a extends s.DataSource { + constructor(e) { + super(), this._formatterChanged = new n.a, this._priceStepChanged = new n.a, + this._currencyChanged = new n.a, this._unitChanged = new n.a, this + ._priceRangeReadyChanged = new n.a, this._metaInfo = null, this._priceStep = + null, this._priceRangeReady = !0, this._model = e + } + barColorer() { + return null + } + base() { + return 0 + } + model() { + return this._model + } + currencyChanged() { + return this._currencyChanged + } + isCurrencySource() { + return !0 + } + unitChanged() { + return this._unitChanged + } + isUnitSource() { + return !0 + } + priceRange(e, t) { + return null + } + isDraggable() { + return !this._metaInfo || !this._metaInfo.linkedToSeries + } + priceLineColor(e) { + return e + } + formatterChanged() { + return this._formatterChanged + } + priceStep(e) { + return this._priceStep + } + priceStepChanged() { + return this._priceStepChanged + } + hasStateForAlert() { + return !1 + } + isIncludedInAutoScale() { + return !0 + } + correctScaleMargins(e) { + return e + } + priceRangeReady() { + return this._priceRangeReady + } + priceRangeReadyChanged() { + return this._priceRangeReadyChanged + } + disablePriceRangeReady() { + const e = this.priceScale(); + null === e || e.isAutoScale() || e.mainSource() !== this || (this + ._priceRangeReady = !1, e.recalculatePriceRangeOnce()), this + ._priceRangeReadyChanged.fire(!1) + } + _enablePriceRangeReady() { + this._priceRangeReady = !0, this._priceRangeReadyChanged.fire(!0) + } + _onSourceCurrencyChanged() { + Object(o.isSymbolSource)(this) || this._currencyChanged.fire() + } + _onSourceUnitChanged() { + Object(o.isSymbolSource)(this) || this._unitChanged.fire() + } + _onSourcePriceRangeReadyChanged(e) { + Object(o.isSymbolSource)(this) || e || this.disablePriceRangeReady() + } + } + }, + "7nsU": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "showConfirmInputsDialog", (function() { + return r + })); + var s = i("YFKU"); + async function r(e, t, r, n, o = "default") { + let a = !1, + l = !1; + try { + const s = await Promise.all([i.e("redux"), i.e("react"), i.e(1), i.e(3), i.e(4), i + .e(6), i.e(8), i.e(9), i.e(12), i.e(13), i.e(14), i.e(16), i.e(17), i.e( + 19), i.e(21), i.e(23), i.e(26), i.e(33), i.e(34), i.e(35), i.e(36), + i.e(39), i.e(50), i.e(59), i.e(95), i.e(0), i.e(2), i.e(5), i.e(7), i.e( + 10), i.e(15), i.e(18), i.e(20), i.e(25), i.e(30), i.e(31), i.e(32), + i.e(37), i.e(46), i.e(55), i.e("new-confirm-inputs-dialog") + ]).then(i.bind(null, "T4SC")); + a = await s.selectInputValuesOnChart(e, t, o) + } catch (e) { + l = !0 + } + l ? n() : a ? r(t.defaults.inputs || {}) : Promise.all([i.e("redux"), i.e("react"), i.e( + 1), i.e(3), i.e(4), i.e(6), i.e(8), i.e(9), i.e(12), i.e(13), i.e(14), i + .e(16), i.e(17), i.e(19), i.e(21), i.e(23), i.e(26), i.e(33), i.e(34), i.e( + 35), i.e(36), i.e(39), i.e(50), i.e(59), i.e(95), i.e(0), i.e(2), i.e( + 5), i.e(7), i.e(10), i.e(15), i.e(18), i.e(20), i.e(25), i.e(30), i.e( + 31), i + .e(32), i.e(37), i.e(46), i.e(55), i.e("new-confirm-inputs-dialog") + ]).then(i.bind(null, "iqv3")).then(i => { + const a = new i.ConfirmInputsDialogRenderer(function(e) { + if ("symbol" === e) return Object(s.t)("Add Symbol"); + return Object(s.t)("Confirm Inputs") + }(o), t, e.model(), o, r, n); + return a.show(), a + }) + } + }, + "7qI1": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolRectangle", (function() { + return c + })); + var s = i("aO4+"), + r = i("Ocx9"), + n = i("tc+8"), + o = i.n(n), + a = i("Ss5c"), + l = i("j3hX"); + class c extends a.LineDataSource { + constructor(e, t) { + const s = t || c.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "GW0y")).then(({ + RectanglePaneView: t + }) => { + const i = [new t(this, e)]; + this._setPaneViews(i) + }) + } + pointsCount() { + return 2 + } + textColorsProperty() { + return this.properties().childs().showLabel.value() ? super + .textColorsProperty() : null + } + properties() { + return super.properties() + } + name() { + return "Rectangle" + } + setPoint(e, t, i) { + if (e < 2 && super.setPoint(e, t, i), i && i.shift()) { + const i = this._getAnchorPointForIndex(e); + if (e >= 4) return this._correctMiddlePoints(e, t, i), void this + .normalizePoints(); + this._snapPoint45Degree(t, i) + } + switch (e) { + case 2: + this._points[1].price = t.price, this._points[0].index = t.index; + break; + case 3: + this._points[0].price = t.price, this._points[1].index = t.index; + break; + case 4: + this._points[0].index = t.index; + break; + case 5: + this._points[1].index = t.index; + break; + case 6: + this._points[0].price = t.price; + break; + case 7: + this._points[1].price = t.price + } + this.normalizePoints() + } + getPoint(e) { + return e < 2 ? super.getPoint(e) : this._getAnchorPointForIndex(e) + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e + } + static createProperties(e) { + const t = new r.DefaultProperty("linetoolrectangle", e); + return c._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "K4wI")).then( + e => e.RectangleDefinitionsViewModel) + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + _snapPoint45Degree(e, t, i) { + const s = this.m_priceScale, + r = this.ownerSource(); + if (null === s || null === r) return; + const n = r.firstValue(); + if (null === n) return; + const o = this._model.timeScale(), + a = this.pointToScreenPoint(e)[0], + l = this.pointToScreenPoint(t)[0], + c = a.x - l.x, + h = a.y - l.y, + u = c < 0 ? -1 : 1, + d = h < 0 ? -1 : 1, + p = Math.max(Math.abs(c), Math.abs(h)), + _ = Math.round(o.coordinateToIndex(l.x + p * u)), + m = Math.abs(o.indexToCoordinate(_) - l.x), + f = s.coordinateToPrice(l.y + m * d, n); + e.index = _, e.price = f + } + _correctMiddlePoints(e, t, i) { + e < 6 ? this._correctRightLeftMiddlePoint(e, t, i) : this + ._correctTopBottomMiddlePoint(e, t, i) + } + _correctRightLeftMiddlePoint(e, t, i) { + const r = this.pointToScreenPoint(t)[0], + n = this.pointToScreenPoint(i)[0], + o = this.pointToScreenPoint(this._points[0])[0], + a = this.pointToScreenPoint(this._points[1])[0]; + let l = r.x - n.x; + if (0 === l) return; + const c = o.x < a.x ? 1 : -1, + h = o.y < a.y ? 1 : -1; + switch (l *= c, e) { + case 4: { + const e = a.y - h * l / 2, + t = this.screenPointToPoint(new s.Point(a.x, e)); + this._points[1].price = t.price; + const i = this.screenPointToPoint(new s.Point(o.x + c * l, o.y + h * l / + 2)); + this._points[0].price = i.price, this._points[0].index = i.index; + break + } + case 5: { + const e = o.y - h * l / 2, + t = this.screenPointToPoint(new s.Point(o.x, e)); + this._points[0].price = t.price; + const i = this.screenPointToPoint(new s.Point(a.x + c * l, a.y + h * l / + 2)); + this._points[1].price = i.price, this._points[1].index = i.index; + break + } + } + } + _correctTopBottomMiddlePoint(e, t, i) { + const r = this.m_priceScale, + n = this.ownerSource(); + if (null === r || null === n) return; + const o = this._model.timeScale(), + a = n.firstValue(); + if (null === a) return; + const l = this.pointToScreenPoint(t)[0], + c = this.pointToScreenPoint(i)[0], + h = this.pointToScreenPoint(this._points[0])[0], + u = this.pointToScreenPoint(this._points[1])[0], + d = l.y - c.y, + p = d < 0 ? -1 : 1, + _ = h.x < u.x ? 1 : -1, + m = h.y < u.y ? 1 : -1; + switch (e) { + case 6: { + const e = Math.floor(u.x - _ * d / 2), + t = this.screenPointToPoint(new s.Point(e, u.y)), + i = Math.abs(this._points[1].index - t.index), + n = _ * m * p * Math.ceil(i / 2); + if (0 === n) return; + this._points[1].index = this._points[1].index - n; + const l = p * Math.abs(o.indexToCoordinate(this._points[1].index) - u + .x); + this._points[0].price = r.coordinateToPrice(h.y + l, a), this._points[0] + .index = this._points[0].index + n; + break + } + case 7: { + const e = Math.floor(h.x - _ * d / 2), + t = this.screenPointToPoint(new s.Point(e, h.y)), + i = Math.abs(this._points[0].index - t.index), + n = _ * m * p * Math.ceil(i / 2); + if (0 === n) return; + this._points[0].index = this._points[0].index - n; + const l = p * Math.abs(o.indexToCoordinate(this._points[0].index) - h + .x); + this._points[1].price = r.coordinateToPrice(u.y + l, a), this._points[1] + .index = this._points[1].index + n; + break + } + } + } + _snapTo45DegreesAvailable() { + return !0 + } + static _configureProperties(e) { + a.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new o.a("")), e.addExclusion("text"), e.addChild("linesColors", + new l.LineToolColorsProperty([e.childs().color])), e.addChild( + "textsColors", new l.LineToolColorsProperty([e.childs().textColor], e + .childs().showLabel)) + } + _getAnchorPointForIndex(e) { + const t = this.points(), + i = t[0], + s = t[1]; + let r = 0, + n = 0; + switch (e) { + case 0: + r = i.price, n = i.index; + break; + case 1: + r = s.price, n = s.index; + break; + case 2: + r = s.price, n = i.index; + break; + case 3: + r = i.price, n = s.index; + break; + case 4: + r = (s.price + i.price) / 2, n = i.index; + break; + case 5: + r = (s.price + i.price) / 2, n = s.index; + break; + case 6: + r = i.price, n = (s.index + i.index) / 2; + break; + case 7: + r = s.price, n = (s.index + i.index) / 2 + } + return { + index: n, + price: r + } + } + } + }, + "7qT/": function(e, t, i) { + "use strict"; + + function s(e, t) { + return 100 * (t - e) / Math.abs(e) + } + i.d(t, "a", (function() { + return s + })) + }, + "8LSp": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor() { + this._stable = [], this._variable = null, this._owner = null + } + addStable(e) { + e.setOwner(this), this._stable.push(e) + } + setVariable(e) { + this._variable = e, null !== this._variable && this._variable.setOwner(this) + } + primitivesData(e) { + const t = []; + return this._forEach(i => t.push(...i.primitivesData(e))), t + } + deleteErasedItems() { + this._forEach(e => e.deleteErasedItems()) + } + markPostedItems() { + this._forEach(e => e.markPostedItems()) + } + isNaN() { + return this._all(e => e.isNaN()) + } + dirty() { + null !== this._owner && this._owner.dirty() + } + setOwner(e) { + this._owner = e + } + _forEach(e) { + for (const t of this._stable) e(t); + null !== this._variable && e(this._variable) + } + _all(e) { + for (const t of this._stable) + if (!e(t)) return !1; + return null === this._variable || e(this._variable) + } + } + }, + "8OdW": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "MINUTE_SPAN", (function() { + return s + })), i.d(t, "HOUR_SPAN", (function() { + return r + })), i.d(t, "DAY_SPAN", (function() { + return n + })), i.d(t, "WEEK_SPAN", (function() { + return o + })), i.d(t, "MONTH_SPAN", (function() { + return a + })), i.d(t, "YEAR_SPAN", (function() { + return l + })), i.d(t, "DEFAULT_BAR_SPACING", (function() { + return c + })); + const s = 20, + r = 30, + n = 40, + o = 50, + a = 60, + l = 70, + c = 6 + }, + "8Uy/": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LINESTYLE_SOLID", (function() { + return s + })), i.d(t, "LINESTYLE_DOTTED", (function() { + return r + })), i.d(t, "LINESTYLE_DASHED", (function() { + return n + })), i.d(t, "LINESTYLE_LARGE_DASHED", (function() { + return o + })), + i.d(t, "LINESTYLE_SPARSE_DOTTED", (function() { + return a + })), i.d(t, "LINESTYLE_SMALL_DASHED", (function() { + return l + })); + const s = 0, + r = 1, + n = 2, + o = 3, + a = 4, + l = 5 + }, + "8gnj": function(e, t, i) { + "use strict"; + var s = i("LxhU").Interval, + r = i("OLhd").isAlignmentEnabled, + n = i("7ETO").getChartStyleStudy, + o = i("5fI3").decodeExtendedSymbol, + a = i("53h+").findSuitableResolutionToBuildFrom, + l = function() { + var e = i("ocLq"), + t = e.StudyEngine, + l = e.BarBuilder, + c = e.BarSet; + + function h(e) { + this.host = e, this.cache = {} + } + + function u(e) { + throw console.error(e), e + } + h.prototype.getCache = function(e) { + return this.cache[e] + }, h.prototype.putCache = function(e, t) { + this.cache[e] = t + }, h.prototype.subscribe = function(e, t, i, s, r, n, o, a, l, c) { + var h = l(o), + u = function(e, t, i, s, r, n, o, a) { + var l = r.has_empty_bars ? "_" : ""; + return n + e + s + (t || "") + (i || "") + l + "_" + o.countBack + "_" + + o.to + "_" + Boolean(a) + }(e, t, i, s, o, a, h, c), + d = this.getCache(u); + return d || (d = this.createItem(e, t, i, s, o, h, a, c), this.putCache(u, d)), + d.listeners.addListener(r, n), { + key: u, + listener: r + } + }, h.prototype.unsubscribe = function(e) { + var t = this.getCache(e.key); + t && t.listeners.removeListener(e.listener) + }, h.prototype.removeUnused = function() { + var e = []; + for (var t in this.cache) { + if (this.cache[t]) 0 === this.cache[t].listeners.listenersCount() && e.push( + t) + } + if (0 !== e.length) { + for (var i = 0; i < e.length; i++) { + var s = e[i], + r = this.cache[s]; + this.cache[s] = null, r.stop() + } + this.removeUnused() + } + }, h.prototype.rebuildFrom = function(e, t) { + return a(e, t) + }; + var d = s.parse("1M").inMilliseconds(0); + h.prototype.createItem = function(e, t, i, a, c, h, f, g) { + var b = new m, + v = o(e), + S = "string" != typeof v.symbol ? v.symbol : v; + t = S["currency-id"] || t, i = S["unit-id"] || i; + var y = S.symbol, + w = S.session && "extended" !== S.session; + if ("type" in v) { + var P = Object.assign({}, c); + return c.has_empty_bars && (P.has_empty_bars = !1), new _(b, y, t, i, a, n( + v), P, h, f) + } + g && !r() && u("Internal error: rebuilding is requested but it is disabled."), ! + g && c.has_empty_bars && u( + 'Misconfiguration error: attempt to request data for symbol with "has_empty_bars" flag, but "disable_resolution_rebuild" featureset is enabled' + ); + var C, x, T = this.rebuildFrom(a, c); + if (!s.isTicks(a) && (!s.isEqual(a, T) || g)) { + r() || u( + 'Misconfiguration error: remove "disable_resolution_rebuild" featureset or provide ' + + a + " data by yourself"); + var I = c.has_empty_bars; + P = Object.assign({}, c); + c.has_empty_bars && (P.has_empty_bars = !1); + var M = Math.ceil((C = s.parse(a), x = s.parse(T), C.kind() === x.kind() ? C + .multiplier() / x.multiplier() : (C.isMonths() ? C + .multiplier() * d : C.inMilliseconds()) / (x.isMonths() ? x + .multiplier() * d : x.inMilliseconds()))); + return h = Object.assign({}, h, { + countBack: h.countBack * M + }), new _(b, y, t, i, T, new l(a, I), P, h, f) + } + return new p(b, y, { + currency: t, + unit: i + }, a, w, this.host, c, h) + }; + var p = function(e, t, i, s, r, n, o, a) { + this.listeners = e, this.host = n; + var l = this; + this.host.resolve(t, i, (function(e) { + r && e.regular_session && (e.session = e.regular_session), l + .subs = l.host.subscribe(e, s, a, (function(e) { + l.listeners.fire(e) + }), (function(e) { + l.listeners.onError(e) + })) + }), (function(e) { + l.listeners.onError(e) + })) + }; + p.prototype.stop = function() { + this.subs && this.host.unsubscribe(this.subs) + }; + var _ = function(e, i, s, r, n, o, a, l, c) { + this.listeners = e, this.isRecalculated = !1, this.symbolInfo = a; + var h = this; + this.engine = new t({ + tickerid: i, + currencyCode: s, + unitId: r, + period: n, + body: o, + sessionId: c, + symbolInfo: a, + dataRange: l, + forceAlignBars: !1, + recalc: function(e, t) { + h._recalc(t) + }, + out: function(e, t) { + h._out(e, t) + }, + nonseriesOut: function(e, t) { + h._nonseriesOut(e, t) + }, + setNoMoreData: function() { + h.barset && (h.barset.endOfData = !0) + }, + onErrorCallback: function(e) { + h.listeners.onError(e) + } + }) + }; + _.prototype.stop = function() { + this.engine ? this.engine.stop() : console.error("Internal library error 0x1") + }, _.prototype._recalc = function(e) { + this.isRecalculated && console.error("recalc called twice!"), this.barset || ( + this.barset = new c(this.symbolInfo)), e && (this.barset + .firstLoadedTimeMs = e.firstLoadedTimeMs, this.barset.endOfData = e + .endOfData), this.listeners.fire(this.barset), this.isRecalculated = !0 + }, _.prototype._nonseriesOut = function(e, t) { + var i = Object.assign({}, t); + i.nonseries = !0, i.data = t.bars, delete i.bars, i.barsetSize = this.barset ? + this.barset.count() : 0, i.lastBar = this.barset ? this.barset.bar(this + .barset.count() - 1) : null, this.listeners.fire(i, !0) + }, _.prototype._out = function(e, t) { + var i = t[0]; + if (!isNaN(i)) { + var s = { + time: i, + open: t[1], + high: t[2], + low: t[3], + close: t[4], + volume: t[5], + updatetime: t[6] + }, + r = t[7]; + this.barset || (this.barset = new c(e.info)); + var n = t[8]; + if (n instanceof Array) + for (var o = 0; o < n.length; o++) { + var a = t[9], + l = n[o], + h = { + time: l, + open: a, + high: a, + low: a, + close: a, + volume: 0, + updatetime: l + }; + this.barset.add(h, !0), this.isRecalculated && this.listeners.fire( + this.barset) + } + this.barset.add(s, r), this.barset.isBarClosed = r, this.isRecalculated && + this.listeners.fire(this.barset) + } + }; + var m = function() { + this.listeners = [] + }; + return m.prototype.listenersCount = function() { + return this.listeners.reduce((function(e, t) { + return e + (t ? 1 : 0) + }), 0) + }, m.prototype.addListener = function(e, t) { + this.listeners.push({ + dataListener: e, + onErrorCallback: t + }), this.barset && e(this.barset), this.errorMsg && t(this.errorMsg) + }, m.prototype.removeListener = function(e) { + var t = this.listeners.filter((function(t) { + return t.dataListener === e + })); + if (0 !== t.length) { + var i = this.listeners.indexOf(t[0]); + delete this.listeners[i] + } + }, m.prototype.onError = function(e) { + this.errorMsg = e || "unspecified error"; + for (var t = this.listeners, i = t.length, s = 0; s < i; s++) { + var r = t[s]; + r && r.onErrorCallback && r.onErrorCallback(e) + } + }, m.prototype.fire = function(e, t) { + t || (this.barset = e); + for (var i = this.listeners, s = i.length, r = 0; r < s; r++) { + var n = i[r]; + n && n.dataListener(e) + } + }, { + setupFeed: function(t) { + h.instance = new h(t), e.setupFeed(h.instance) + }, + unsubscribeUnused: function() { + h.instance.removeUnused() + } + } + }(); + e.exports = l + }, + "8pII": function(e) { + e.exports = JSON.parse( + '{"content":{"chartProperties":{"scalesProperties":{"textColor":"#B2B5BE","lineColor":"rgba(240, 243, 250, 0.12)","backgroundColor":"#ffffff"},"paneProperties":{"vertGridProperties":{"color":"rgba(240, 243, 250, 0.06)"},"horzGridProperties":{"color":"rgba(240, 243, 250, 0.06)"},"crossHairProperties":{"color":"#9598A1"},"background":"#131722","backgroundGradientStartColor":"#181C27","backgroundGradientEndColor":"#131722","backgroundType":"gradient"}},"sessions":{"graphics":{"backgrounds":{"outOfSession":{"color":"#2962FF","transparency":92},"preMarket":{"color":"#FF9800","transparency":92},"postMarket":{"color":"#2962FF","transparency":92}},"vertlines":{"sessBreaks":{"color":"#4985e7","style":2,"width":1}}}},"mainSourceProperties":{"baseLineColor":"#5d606b","candleStyle":{"borderColor":"#378658","upColor":"#26a69a","wickColor":"#B5B5B8","wickUpColor":"#26a69a","wickDownColor":"#ef5350","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350"},"haStyle":{"borderColor":"#378658","upColor":"#26a69a","wickColor":"#B5B5B8","wickUpColor":"#26a69a","wickDownColor":"#ef5350","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350"},"barStyle":{"downColor":"#ef5350","upColor":"#26a69a"},"pnfStyle":{"downColor":"#ef5350","upColor":"#26a69a","upColorProjection":"#336854","downColorProjection":"#7f323f"},"baselineStyle":{"baselineColor":"rgba( 117, 134, 150, 1)","topFillColor1":"rgba( 38, 166, 154, 0.28)","topFillColor2":"rgba( 38, 166, 154, 0.05)","bottomFillColor1":"rgba( 239, 83, 80, 0.05)","bottomFillColor2":"rgba( 239, 83, 80, 0.28)","topLineColor":"rgba( 38, 166, 154, 1)","bottomLineColor":"rgba( 239, 83, 80, 1)"},"areaStyle":{"transparency":100,"color1":"rgba(41, 98, 255, 0.28)","color2":"#2962FF","linecolor":"#2962FF","linewidth":2,"linestyle":0},"renkoStyle":{"upColor":"#26a69a","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350","upColorProjection":"#336854","downColorProjection":"#7f323f","borderUpColorProjection":"#336854","borderDownColorProjection":"#7f323f","wickUpColor":"#26a69a","wickDownColor":"#ef5350"},"lineStyle":{"color":"#2962FF","linewidth":2,"linestyle":0},"kagiStyle":{"downColor":"#ef5350","upColor":"#26a69a","upColorProjection":"#336854","downColorProjection":"#7f323f"},"pbStyle":{"upColor":"#26a69a","downColor":"#ef5350","borderUpColor":"#26a69a","borderDownColor":"#ef5350","upColorProjection":"#336854","downColorProjection":"#7f323f","borderUpColorProjection":"#336854","borderDownColorProjection":"#7f323f"},"rangeStyle":{"upColor":"#26a69a","downColor":"#ef5350","upColorProjection":"#336854","downColorProjection":"#7f323f"}}}}' + ) + }, + "8sOK": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("2kV1"), + r = i("7ktv"), + n = i("kcTO"), + o = i("aIyQ"), + a = i.n(o), + l = i("tc+8"), + c = i.n(l), + h = i("ww0J"); + class u extends h.a { + text() { + return this._source.isActualInterval() ? + `${this._source.title()} ${this.sourceStatusText()}` : this._source.title() + } + } + var d = i("bmVy"); + i.d(t, "StudyStub", (function() { + return m + })); + class p { + getItems() { + return [] + } + getValues(e) { + return [] + } + } + const _ = new a.a; + class m extends r.PriceDataSource { + constructor(e, t, i) { + super(e), this._priceStep = .01, this._status = { + type: d.StudyStatusType.Undefined + }, this._statusChanged = new a.a, this._formatter = new n.PriceFormatter( + 100), this._origState = t, this._title = i; + this._properties = new c.a({ + visible: !0 + }), this._statusView = new s.StudyStatusView(this) + } + properties() { + return this._properties + } + statusView() { + return this._statusView + } + legendView() { + return null + } + state(e) { + return this._origState + } + setStatus(e) { + this._status = e, this._statusChanged.fire() + } + formatter() { + return this._formatter + } + title() { + return this._title + } + titleInParts() { + return [this._title] + } + isFailed() { + return this._status.type === d.StudyStatusType.Error + } + isLoading() { + return this._status.type === d.StudyStatusType.Loading + } + setFailed(e) { + this.setStatus({ + type: d.StudyStatusType.Error, + errorDescription: { + error: e + } + }), this._model.updateSource(this) + } + isSymbolInvalid() { + return !1 + } + isActualInterval() { + return !0 + } + onIsActualIntervalChange() { + return _ + } + start() {} + status() { + return this._status + } + onStatusChanged() { + return this._statusChanged + } + firstValue() { + return null + } + currency() { + return null + } + sessionId() { + return this._model.mainSeries().sessionId() + } + sessionIdChanged() { + return this._model.mainSeries().sessionIdChanged() + } + unit() { + return null + } + symbolSource() { + return this._model.mainSeries() + } + valuesProvider() { + return new p + } + statusProvider(e) { + return new u(this, this._model.properties().scalesProperties.textColor) + } + } + }, + "8woN": function(e, t, i) { + "use strict"; + var s = i("Kxc7"), + r = [{ + d: "E-Mini S&P 500", + t: "ES" + }, { + d: "E-Mini Nasdaq 100", + t: "NQ" + }, { + d: "Gold", + t: "GC" + }, { + d: "Silver", + t: "SI" + }, { + d: "Crude Oil WTI", + t: "CL" + }, { + d: "Natural Gas", + t: "NG" + }, { + d: "Australian Dollar", + t: "6A" + }, { + d: "Australian Dollar (Floor)", + t: "AD" + }, { + d: "Euro FX", + t: "6E" + }, { + d: "Euro FX (Floor)", + t: "EC" + }, { + d: "Corn", + t: "ZC" + }, { + d: "Corn (Floor)", + t: "C" + }, { + d: "Eurodollar", + t: "GE" + }, { + d: "Eurodollar (Floor)", + t: "ED" + }], + n = function() { + var e = [{ + pattern: "(", + ctor: o + }, { + pattern: ")", + ctor: a + }, { + pattern: "+", + ctor: c + }, { + pattern: "-", + ctor: h + }, { + pattern: "*", + ctor: u + }, { + pattern: "/", + ctor: d + }, { + pattern: "^", + ctor: p + }, { + pattern: /\d+(?:\.\d*|(?![a-zA-Z0-9_!:.&]))|\.\d+/, + ctor: g + }, { + pattern: /\./, + ctor: S + }, { + pattern: s.enabled("charting_library_base") ? + /[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF^][a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!:.&]*|'.+?'/ : + /[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF][a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!|:.&]*|'.+?'/, + ctor: f + }, { + pattern: /'[^']*/, + ctor: v + }, { + pattern: /[\0-\x20\s]+/, + ctor: n + }]; + + function t(e, t) { + var i = function() {}; + return i.prototype = t.prototype, e.prototype = new i, e + } + + function i() {} + + function n(e) { + this.value = e + } + + function o() {} + + function a() {} + + function l() {} + + function c() {} + + function h() {} + + function u() {} + + function d() {} + + function p() {} + i.prototype.toString = function() { + return this.value + }, t(n, i), t(o, i), o.prototype.value = "(", t(a, i), a.prototype.value = ")", t(l, + i), t(c, l), c.prototype.value = "+", c.prototype.precedence = 0, c.prototype + .commutative = !0, t(h, l), h.prototype.value = "-", h.prototype.precedence = 0, h + .prototype.commutative = !1, t(u, l), u.prototype.value = "*", u.prototype + .precedence = 1, u.prototype.commutative = !0, t(d, l), d.prototype.value = "/", d + .prototype.precedence = 1, d.prototype.commutative = !1, t(p, l), + p.prototype.value = "^", p.prototype.precedence = 2, p.prototype.commutative = !1; + var _ = /^'?(?:([A-Z0-9_]+):)?(.*?)'?$/i, + m = /[+\-/*]/; + + function f(e) { + this.value = e + } + + function g(e) { + this.value = e + } + + function b(e) { + this.value = e + } + + function v() { + f.apply(this, arguments) + } + + function S() { + g.apply(this, arguments) + } + t(f, i), f.prototype.toString = function() { + if (this.hasOwnProperty("_ticker")) { + var e = m.test(this._ticker) ? "'" : ""; + return e + (this._exchange ? this._exchange + ":" : "") + this._ticker + e + } + return this.value + }, f.prototype.parse = function() { + var e = _.exec(this.value); + e[1] && (this._exchange = e[1]), this._ticker = e[2] + }, f.prototype.parseAsFutures = function() { + this.hasOwnProperty("_ticker") || this.parse(); + for (var e = function(e) { + return r.some((function(t) { + return t.t === e + })) + }, t = 2; t >= 1; --t) { + var i = this._ticker.slice(0, t); + if (e(i)) { + this._root = i, this._contract = this._ticker.slice(t); + break + } + } + }, f.prototype.exchange = function(e) { + if (this.hasOwnProperty("_ticker") || this.parse(), !(arguments.length > 0)) + return this._exchange; + null == e ? delete this._exchange : this._exchange = e + "" + }, f.prototype.ticker = function(e) { + if (this.hasOwnProperty("_ticker") || this.parse(), !(arguments.length > 0)) + return this._ticker; + null == e ? delete this._ticker : this._ticker = e + "", delete this._root, + delete this._contract + }, f.prototype.root = function(e) { + if (this.hasOwnProperty("_root") || this.parseAsFutures(), !(arguments.length > + 0)) return this._root; + null == e ? delete this._root : (this._root = e + "", this._root && (this + ._ticker = this._root + (this._contract || ""))) + }, f.prototype.contract = function(e) { + if (this.hasOwnProperty("_contract") || this.parseAsFutures(), !(arguments + .length > 0)) return this._root; + null == e ? delete this._contract : (this._contract = e + "", this._root && ( + this._ticker = this._root + this._contract)) + }, t(g, i), g.prototype.toString = function() { + return this.hasOwnProperty("_normalizedValue") ? this._normalizedValue : this + .value + }, g.prototype.parse = function() { + this._normalizedValue = this.value.replace(/^0+|\.0*$/g, "").replace( + /(\.\d*?)0+$/, "$1").replace(/^(\.|$)/, "0$1") + }, b.prototype.toString = function() { + return this.value + }, t(v, f), v.prototype.isIncomplete = !0, v.prototype.incompleteSuggest = + function() { + if ("'" !== this.value) return String("'") + }, t(S, g), S.prototype.isIncomplete = !0; + var y = new RegExp(e.map((function(e) { + return "(" + ("string" == typeof e.pattern ? e.pattern.replace( + /[\^$()[\]{}*+?|\\]/g, "\\$&") : e.pattern.source) + ")" + })).concat(".").join("|"), "g"); + + function w(t, i) { + var s, r = []; + e: for (; s = y.exec(t);) { + for (var o = e.length; o--;) + if (s[o + 1]) { + if (e[o].ctor) { + var a = new e[o].ctor(s[o + 1]); + a._offset = s.index, r.push(a) + } + continue e + } var l = new b(s[0]); + l._offset = s.index, r.push(l) + } + if (i && i.recover) { + var c; + for (o = r.length; o--;) { + var h = r[o]; + if (h instanceof g || h instanceof f) { + if (void 0 !== c) { + var u = new f(""), + d = r.splice(o, c - o + 1, u); + u.value = d.map((function(e) { + return e.value + })).join("") + } + c = o + } else h instanceof n || (c = void 0) + } + } + return r + } + + function P(e) { + for (var t = [], i = 0; i < e.length; i++) e[i] instanceof n || t.push(e[i]); + return t + } + + function C(e) { + e = P(e); + for (var t, i = [], s = [], r = 0; r < e.length; r++) { + var n = e[r]; + if (n instanceof l) s.length && s[s.length - 1].minPrecedence > n.precedence && + (s[s.length - 1].minPrecedence = n.precedence); + else if (n instanceof o) s.push(t = { + minPrecedence: 1 / 0, + openBraceIndex: r + }); + else if (n instanceof a) { + var c = e[(t = s.pop()).openBraceIndex - 1], + h = e[r + 1]; + h instanceof l && !(h.precedence <= t.minPrecedence) || !(!( + c instanceof l) || c.precedence < t.minPrecedence || c + .precedence === t.minPrecedence && c.commutative) || (i.unshift(t + .openBraceIndex), i.push(r), s.length && s[s.length - 1] + .minPrecedence > t.minPrecedence && (s[s.length - 1].minPrecedence = + t.minPrecedence)) + } + } + for (r = i.length; r--;) e.splice(i[r], 1); + return e + } + + function x(e) { + if ("string" != typeof e) throw new TypeError("expression must be a string"); + return (e = w(e)).filter((function(e) { + return e instanceof f + })).map((function(e) { + return e.exchange() + })).filter((function(e) { + return e + })) + } + + function T(e) { + return 1 !== (e = x(e)).length ? null : e[0] + } + + function I(e, t) { + return (e = x(e)).some((function(e) { + return t.includes((e || "").toUpperCase()) + })) + } + + function M(e) { + return e.join("") + } + return { + tokenize: w, + validate: function(e) { + if (s.enabled("charting_library_base")) return { + currentState: "var" + }; + for (var t = "init", i = { + warnings: [], + errors: [], + isEmpty: !0 + }, r = [], c = 0; c < e.length; c++) { + if (!((u = e[c]) instanceof n)) { + if (delete i.isEmpty, u.isIncomplete) { + var h = { + status: "incomplete", + reason: "incomplete_token", + offset: u._offset, + token: u + }; + if (u.incompleteSuggest && (h.recover = { + append: u.incompleteSuggest() + }), i.warnings.push(h), c !== e.length - 1) { + h.status = "error"; + continue + } + } + if (u instanceof f || u instanceof g) { + if ("var" === t) { + i.errors.push({ + status: "error", + reason: "unexpected_token", + offset: u._offset, + token: u + }); + continue + } + t = "var" + } else if (u instanceof l) { + if ("var" !== t) { + i.errors.push({ + status: "error", + reason: "unexpected_token", + offset: u._offset, + token: u + }); + continue + } + t = "operator" + } else if (u instanceof o) { + if ("var" === t) { + i.errors.push({ + status: "error", + reason: "unexpected_token", + offset: u._offset, + token: u + }); + continue + } + r.push(u), t = "init" + } else if (u instanceof a) { + if ("var" !== t) { + i.errors.push({ + status: "error", + reason: "unexpected_token", + offset: u._offset, + token: u + }); + continue + } + r.pop() || i.errors.push({ + status: "error", + reason: "unbalanced_brace", + offset: u._offset, + token: u, + recover: { + prepend: new o + } + }), t = "var" + } else u instanceof b && i.errors.push({ + status: "error", + reason: "unparsed_entity", + offset: u._offset, + token: u + }) + } + } + for (i.braceBalance = r.length, "var" !== t && i.warnings.push({ + status: "incomplete" + }); r.length;) { + var u; + h = { + status: "incomplete", + reason: "unbalanced_brace", + offset: (u = r.pop())._offset, + token: u + }; + "var" === t && (h.recover = { + append: new a + }), i.warnings.push(h) + } + return i.currentState = t, 0 === i.warnings.length && delete i.warnings, + 0 === i.errors.length && delete i.errors, i + }, + factorOutBraces: C, + normalizeTokens: function(e) { + for (var t = 0; t < e.length; t++) e[t].parse && e[t].parse(); + return e + }, + flip: function(e) { + var t = function(e) { + for (var t, i = 0, s = 0, r = 0; r < e.length; r++) { + var c = e[r]; + if (!(c instanceof n)) switch (i) { + case 0: + if (!(c instanceof g && 1 == +c.value)) return !1; + i = 1; + break; + case 1: + if (!(1 === i && c instanceof d)) return !1; + i = 2, t = r + 1; + break; + case 2: + if (c instanceof o) i = 3, s = 1; + else if (c instanceof l) return !1; + break; + case 3: + c instanceof o ? s++ : c instanceof a && --s <= 0 && + (i = 2) + } + } + return e.slice(t) + }(e); + return C(t || [new g("1"), new d, new o].concat(e).concat(new a)) + }, + hasBatsSymbols: function(e) { + return I(e, ["BATS"]) + }, + hasEodSymbols: function(e) { + return (e = T(e)) && -1 !== e.toUpperCase().indexOf("_EOD") + }, + hasChxjpySymbols: function(e) { + return I(e, ["CHXJPY"]) + }, + hasFreeDelaySymbols: function(e) { + return I(e, pro.getProductsByType(pro.PRODUCT_TYPES.exchange).map((function( + e) { + return e.exchange.toUpperCase() + "_DLY" + }))) + }, + getExchange: T, + getExchanges: x, + isExchange: function(e, t) { + return !!(e = T(e)) && e.substr(0, t.length) === t + }, + SymbolToken: f, + IncompleteSymbolToken: v, + NumberToken: g, + BinaryOperatorToken: l, + OpenBraceToken: o, + CloseBraceToken: a, + ticker: function(e) { + return new f(e).ticker() + }, + shortName: function(e) { + if ("string" != typeof e) throw new TypeError( + "expression must be a string"); + var t = C(P(w(e))); + return t.forEach((function(e) { + e instanceof f && e.exchange(null) + })), M(t) + }, + normalize: function(e) { + if ("string" != typeof e) throw new TypeError( + "expression must be a string"); + return M(C(P(w(e)))) + } + } + }(); + e.exports = n + }, + "96Yh": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "lineToolEntityInfo", (function() { + return o + })), i.d(t, "studyEntityInfo", (function() { + return a + })), i.d(t, "seriesEntityInfo", (function() { + return l + })), i.d(t, "entityForDataSource", (function() { + return c + })); + var s = i("3ClC"), + r = i("2jXJ"), + n = i("CW80"); + + function o(e) { + return { + id: e.id(), + name: (t = e.toolname, Object.keys(r.supportedLineTools).find(e => r.supportedLineTools[ + e].name === t) || null) + }; + var t + } + + function a(e) { + return { + id: e.id(), + name: e.metaInfo().description + } + } + + function l(e) { + return { + id: e.id(), + name: "Main Series" + } + } + + function c(e, t) { + return t === e.mainSeries() ? l(e.mainSeries()) : Object(s.isStudy)(t) ? a(t) : Object(n + .isLineTool)(t) ? o(t) : null + } + }, + "972a": function(e, t, i) { + "use strict"; + var s, r, n, o; + i.d(t, "c", (function() { + return s + })), i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return o + })), + function(e) { + e.AboveBar = "AboveBar", e.BelowBar = "BelowBar", e.Top = "Top", e.Bottom = "Bottom", e + .Right = "Right", e.Left = "Left", e.Absolute = "Absolute", e.AbsoluteUp = + "AbsoluteUp", e.AbsoluteDown = "AbsoluteDown" + }(s || (s = {})), + function(e) { + e.Left = "left", e.Center = "center", e.Right = "right" + }(r || (r = {})), + function(e) { + e.Top = "top", e.Middle = "middle", e.Bottom = "bottom" + }(n || (n = {})), + function(e) { + e[e.Solid = 0] = "Solid", e[e.Dotted = 1] = "Dotted", e[e.Dashed = 2] = "Dashed" + }(o || (o = {})) + }, + "99ZO": function(e, t, i) { + "use strict"; + var s, r; + i.r(t), i.d(t, "WeekDays", (function() { + return s + })), i.d(t, "Months", (function() { + return r + })), + function(e) { + e[e.SUNDAY = 1] = "SUNDAY", e[e.MONDAY = 2] = "MONDAY", e[e.TUESDAY = 3] = "TUESDAY", e[ + e.WEDNESDAY = 4] = "WEDNESDAY", e[e.THURSDAY = 5] = "THURSDAY", e[e.FRIDAY = + 6] = "FRIDAY", e[e.SATURDAY = 7] = "SATURDAY" + }(s || (s = {})), + function(e) { + e[e.JANUARY = 0] = "JANUARY", e[e.FEBRUARY = 1] = "FEBRUARY", e[e.MARCH = 2] = "MARCH", + e[e.APRIL = 3] = "APRIL", e[e.MAY = 4] = "MAY", e[e.JUNE = 5] = "JUNE", e[e.JULY = + 6] = "JULY", e[e.AUGUST = 7] = "AUGUST", e[e.SEPTEMBER = 8] = "SEPTEMBER", e[e + .OCTOBER = 9] = "OCTOBER", e[e.NOVEMBER = 10] = "NOVEMBER", e[e.DECEMBER = 11] = + "DECEMBER" + }(r || (r = {})) + }, + "9Jkk": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("XlJ7"), + n = i("x0JF"), + o = i("Y7w9"), + a = i("Zp/P"), + l = i("VdBB"), + c = i("cPgM"); + class h extends c.ScaledPaneRenderer { + constructor() { + super(...arguments), + this._data = null, this._barWidth = null + } + setData(e) { + this._data = e, this._barWidth = Math.max(1, Math.round(Object(a + .optimalHiLoWidth)(e.barSpacing))) + } + hitTest(e) { + if (null === this._data || null === this._barWidth) return null; + const t = this._data.bars, + i = .5 * this._data.barSpacing; + if (0 === t.length) return null; + if (e.x < t[0].time - i) return null; + if (e.x > t[t.length - 1].time + i) return null; + const s = t[Object(o.lowerbound)(t, e.x - i, (e, t) => e.time < t)]; + if (e.x < s.time - i || e.x > s.time + i) return null; + const r = Object(a.interactionTolerance)().series + this._barWidth / 2, + n = Math.min(s.high, s.low), + c = Math.max(s.high, s.low), + h = this._data.fontSize; + return n - r - h <= e.y && e.y <= n + r || c - r <= e.y && e.y <= c + r + h ? + new l.HitTestResult(l.HitTestResult.REGULAR) : null + } + _drawImpl(e) { + if (null === this._data || null === this._barWidth) return; + e.save(), e.translate(.5, .5), e.textAlign = "center", e.fillStyle = this._data + .labelColor, e.font = Object(r.makeFont)(this._data.fontSize, this._data + .font); + const t = this._data.bars, + i = this._data.inverted; + for (let s = 0; s < t.length; ++s) { + const r = t[s], + n = Math.min(r.high, r.low), + o = Math.max(r.high, r.low); + e.fillText(i ? r.lowLabel : r.highLabel, r.time, n - this._data + .labelsPadding), e.fillText(i ? r.highLabel : r.lowLabel, r.time, + o + this._data.labelsPadding + this._data.fontSize) + } + e.restore() + } + } + var u = i("/hKg"), + d = i("Zy3/"), + p = i("vq8G"), + _ = i("u+0B"), + m = i("zDbI"); + + function f(e) { + return null != e + } + i.d(t, "SeriesHiLoPaneView", (function() { + return g + })); + class g extends n.SeriesBarCandlesPaneView { + constructor(e, t) { + super(e, t), this._widthsCache = new _.TextWidthCache, this._labelsRenderer = + new h, this._candlesRenderer = new u.PaneRendererCandles, this._canvas = + document.createElement("canvas"), this._context = Object(s.ensureNotNull)( + this._canvas.getContext("2d")); + const i = e.properties(); + this._context.font = Object(r.makeFont)(i.hiloStyle.fontSize.value(), m + .CHART_FONT_FAMILY) + } + renderer(e, t, i) { + if (this._invalidated) { + const e = this._series().formatter(), + t = this._needLabels(); + this._updateImpl(this._barUpdater.bind(this, e, t)), this._invalidated = !1 + } + const s = this._series().properties().hiloStyle, + r = this._model().timeScale().barSpacing(), + n = this._needLabels() && this._bars().every(e => e.highLabelWidth <= r && e + .lowLabelWidth <= r), + o = { + bars: this._bars(), + wickVisible: !1, + bodyVisible: s.drawBody.value(), + barSpacing: r, + borderVisible: s.showBorders.value(), + barWidth: Object(a.optimalHiLoWidth)(r), + font: m.CHART_FONT_FAMILY, + fontSize: s.fontSize.value(), + labelColor: s.labelColor.value(), + inverted: this._series().priceScale().isInverted(), + labelsPadding: 3 + }, + l = new d.CompositeRenderer; + return this._candlesRenderer.setData(o), l.append(this._candlesRenderer), n && ( + this._labelsRenderer.setData(o), l.append(this._labelsRenderer)), this + ._model().selection().isSelected(this._series()) && this + ._isMarkersEnabled && l.append(new p.SelectionRenderer(this + ._selectionData)), l + } + topPixelMargin() { + return this._margin() + } + bottomPixelMargin() { + return this._margin() + } + _margin() { + const e = this._series().properties().hiloStyle; + return e.showLabels.value() ? e.fontSize.value() + 6 : 0 + } + _barUpdater(e, t, i, s) { + const r = i[2], + n = i[3]; + return !(!f(r) || !f(n)) && (s.high = s.open = r, s.low = s.close = n, t && (s + .highLabel = e.format(r), + s.highLabelWidth = this._getLabelWidth(s.highLabel), s.lowLabel = e + .format(n), s.lowLabelWidth = this._getLabelWidth(s.lowLabel)), !0) + } + _needLabels() { + const e = this._model().timeScale().barSpacing(); + return this._series().properties().hiloStyle.showLabels.value() && e > 5 + } + _getLabelWidth(e) { + return this._widthsCache.measureText(this._context, e) + } + } + }, + "9QkW": function(e, t, i) { + "use strict"; + var s = i("7ADh").LineToolFibWedgeBase, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "1SUO", 7)).then(({ + FibWedgePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + isSynchronizable() { + return !1 + } + levelsCount() { + return l.LevelsCount + } + name() { + return "Fib Wedge" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + static createProperties(e) { + var t = new r("linetoolfibwedge", e, !1, { + range: [1, 11] + }); + return l._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "6mGk"))) + .FibWedgeDefinitionsViewModel + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("trendline").child("linewidth")], i = [e.child("trendline") + .child("color") + ], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r).child( + "linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.LevelsCount = 11, t.LineToolFibWedge = l + }, + "9dnG": function(e, t) { + e.exports = + '' + }, + "9iCb": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "applyOverridesToStudy", (function() { + return h + })), i.d(t, "applyOverridesToStudyDefaults", (function() { + return u + })); + var s = i("Eyy1"), + r = i("23IT"), + n = i("txPx"); + const o = Object(n.getLogger)("Chart.Model.StudyPropertiesOverrider"); + var a, l; + + function c(e, t, i, s) { + const r = i.split("."); + if (0 === r.length || 0 === r[0].length) return; + const n = function(e) { + const t = e.split(":"); + return { + name: t[0], + type: 2 === t.length ? t[1] : null + } + }(r[0]), + c = n.name, + h = n.type, + u = null !== h, + d = !u || "band" === h, + p = !u || "area" === h, + _ = !u || "input" === h, + m = !u || "plot" === h ? l.getPlotIdByTitle(e, c) : null, + f = d ? l.getBandIndexByName(e, c) : null, + g = p ? l.getFilledAreaIdByTitle(e, c) : null, + b = _ ? l.getInputByName(e, c) : null, + v = t.hasOwnProperty(c); + if ((null !== m ? 1 : 0) + (null !== f ? 1 : 0) + (null !== g ? 1 : 0) + (null !== b ? 1 : + 0) + (v ? 1 : 0) > 1) return void o.logWarn( + `Study '${e.description}' has ambiguous identifier '${c}'`); + const S = r[1]; + if (null !== m) { + if (1 === r.length) return void o.logWarn( + `Path of sub-property of '${c}' plot for study '${e.description}' must be not empty` + ); + const i = r.slice(1); + a.applyPlotProperty(e, t, m, i, s) + } else if (null !== b) a.applyInputValue(t, b, s); + else if (null !== f) { + if (void 0 === S) return void o.logWarn( + `Property name of '${c}' band for study '${e.description}' must be set`); + a.applyBandProperty(t, f, S, s) + } else if (null !== g) { + if (void 0 === S) return void o.logWarn( + `Property name of '${c}' area for study '${e.description}' must be set`); + a.applyFilledAreaProperty(t, g, S, s) + } else v ? a.setRootProperty(t, r, s) : o.logWarn( + `Study '${e.description}' has no plot or input '${c}'`) + } + + function h(e, t) { + const i = e.properties(), + s = i.state(); + for (const i in t) t.hasOwnProperty(i) && c(e.metaInfo(), s, i, t[i]); + i.mergeAndFire(s) + } + + function u(e, t, i) { + for (const s in e) { + if (!e.hasOwnProperty(s)) continue; + const r = s.indexOf("."); + if (-1 === r) continue; + const n = s.substr(0, r), + a = l.getMetaInfoByDescription(t, n); + if (null === a) { + o.logWarn("There is no such study " + n); + continue + } + const h = i(a); + null !== h ? c(a, h, s.substr(r + 1), e[s]) : o.logWarn( + "Cannot apply overrides for study " + n) + } + }! function(e) { + const t = { + line: r.LineStudyPlotStyle.Line, + histogram: r.LineStudyPlotStyle.Histogram, + cross: r.LineStudyPlotStyle.Cross, + area: r.LineStudyPlotStyle.Area, + columns: r.LineStudyPlotStyle.Columns, + circles: r.LineStudyPlotStyle.Circles, + line_with_breaks: r.LineStudyPlotStyle.LineWithBreaks, + area_with_breaks: r.LineStudyPlotStyle.AreaWithBreaks + }; + e.applyPlotProperty = function(e, i, n, a, l) { + if (void 0 === i.styles) return void o.logWarn("Study does not have styles"); + const c = a[0]; + if ("color" === c) { + return void + + function(e, t, i, r, n) { + if (void 0 !== e.styles) + if (null === t && !isNaN(r) && r > 0) o.logWarn( + "Study plot does not have color #" + r); + else { + if (0 === r || isNaN(r)) { + Object(s.ensureDefined)(e.styles[i]).color = String(n), r = 0 + } + null !== t && (Object(s.ensureDefined)(t.colors[r]).color = String( + n)) + } + else o.logWarn("Study does not have styles") + }(i, function(e, t, i) { + if (void 0 === e.plots) return null; + for (const s of e.plots) { + if (!Object(r.isColorerPlot)(s) || void 0 === t.palettes) continue; + const e = t.palettes[s.palette]; + if (s.target === i && void 0 !== e) return e + } + return null + }(e, i, n), n, a.length > 1 ? parseInt(a[1]) : NaN, l) + } + const h = i.styles[n]; + if (void 0 !== h && h.hasOwnProperty(c)) { + if ("plottype" === c) { + const e = t[String(l)]; + if (void 0 === e) return void o.logWarn("Unsupported plot type for plot: " + + l); + l = e + } + h[c] = l + } else o.logWarn(`Study plot does not have property '${c}'`) + }, e.applyBandProperty = function(e, i, s, r) { + if (void 0 === e.bands) return void o.logWarn("Study does not have bands"); + const n = e.bands[i]; + if (void 0 !== n && n.hasOwnProperty(s)) { + if ("plottype" === s) { + const e = t[String(r)]; + if (void 0 === e) return void o.logWarn("Unsupported plot type for band: " + + r); + r = e + } + n[s] = r + } else o.logWarn(`Study band does not have property '${s}'`) + }, e.applyFilledAreaProperty = function(e, t, i, s) { + if (void 0 === e.filledAreasStyle) return void o.logWarn( + "Study does not have areas"); + const r = e.filledAreasStyle[t]; + void 0 !== r && r.hasOwnProperty(i) ? r[i] = s : o.logWarn( + `Study area does not have property '${i}'`) + }, e.applyInputValue = function(e, t, i) { + void 0 !== e.inputs && e.inputs.hasOwnProperty(t) ? e.inputs[t] = i : o.logWarn( + `Study does not have input '${t}'`) + }, e.setRootProperty = function(e, t, i) { + if (0 === t.length) return; + let s = e; + for (const e of t.slice(0, -1)) { + if (null == s || !s.hasOwnProperty(e)) break; + s = s[e] + } + const r = t[t.length - 1]; + null != s && s.hasOwnProperty(r) ? s[r] = i : o.logWarn( + "Study does not have property " + t.join(".")) + } + }(a || (a = {})), + function(e) { + e.getInputByName = function(e, t) { + if (void 0 === e.inputs) return null; + t = t.toLowerCase(); + for (const i of e.inputs) + if (i.name.toLowerCase() === t) return i.id; + return null + }, e.getPlotIdByTitle = function(e, t) { + if (void 0 === e.styles) return null; + t = t.toLowerCase(); + for (const i in e.styles) { + const s = e.styles[i]; + if ((void 0 !== s && void 0 !== s.title ? s.title : i).toLowerCase() === t) + return i + } + return null + }, e.getFilledAreaIdByTitle = function(e, t) { + if (void 0 === e.filledAreas) return null; + t = t.toLowerCase(); + for (const i of e.filledAreas) + if (i.title.toLowerCase() === t) return i.id; + return null + }, e.getBandIndexByName = function(e, t) { + if (void 0 === e.bands) return null; + t = t.toLowerCase(); + for (let i = 0; i < e.bands.length; ++i) + if (e.bands[i].name.toLowerCase() === t) return i; + return null + }, e.getMetaInfoByDescription = function(e, t) { + t = t.toLowerCase(); + for (const i of e) + if (i.description.toLowerCase() === t || i.shortDescription.toLowerCase() === t) + return i; + return null + } + }(l || (l = {})) + }, + "9nLJ": function(e, t, i) { + "use strict"; + (function(t, s) { + var r = i("PT1i").linking, + n = (i("jofe").createDeferredPromise, i("Q19o")), + o = i("VNzU").layouts, + a = i("FQhm"), + l = i("5VQP").ContextMenuManager, + c = i("mMWL"), + h = i("pPtI"), + u = i("zUrt").backend, + d = i("txPx"), + p = i("fZEr").showWarning, + _ = i("fZEr").showConfirm, + m = i("2jXJ"), + f = i("sJA2").ThemesApi, + g = i("ZjKI").CLOSE_POPUPS_AND_DIALOGS_COMMAND, + b = i("LxhU").Interval, + v = i("Ocx9").saveDefaultProperties, + S = i("htUT").ChartChangesWatcher, + y = i("xt3Q").TradingViewApiBase, + w = i("0YCj"), + P = i("pZDF").getStudyInputsInfo; + e.exports = class extends y { + constructor(e) { + const { + chartWidgetCollection: i, + chartApiInstance: s = null, + saveChartService: r, + loadChartService: n, + alertsDispatcher: o, + supportTicketData: a, + favoriteServices: l, + studyMarket: c = null, + financialsDialog: h = null + } = e; + super({ + chartApiInstance: s, + chartWidgetCollection: i, + studyMarket: c, + financialsDialog: h, + saveChartService: r, + loadChartService: n + }), this._chartApiInstance = s, this._loadChartService = n, this + ._alertsDispatcher = o, this._supportTicketData = a, this + ._favoriteServices = l, this._proxyWatchListChangedDelegate = null, + this._lockDrawingsWatchedValue = null, this + ._hideDrawingsWatchedValue = null, this + ._hideIndicatorsWatchedValue = null, this + ._magnetEnabledWatchedValue = null, this._magnetModeWatchedValue = + null, this._replayApi = null, this._chartChangesWatcher = null, this + ._hasChartChangesWatchedValue = null, this._getDataSourceHub = + function() { + return i.activeChartWidget.value().model().model() + }, this._chartWidgetCollection.getResizerDetacher = function() { + return i.activeChartWidget.value().getResizerDetacher() + }, this._alertService = this._alertsDispatcher ? new(void 0)(this + ._alertsDispatcher, this._getDataSourceHub) : null, this + ._activeChangedChangedDelegate = new t, this._chartWidgetCollection + .activeChartWidget.subscribe(function() { + this._activeChangedChangedDelegate.fire() + }.bind(this)), this._chartWidgets = new WeakMap, this + ._activateChart = function(e) { + i.activeChartWidget.setValue(e) + } + } + subscribe(e, t) { + a.subscribe(e, t) + } + unsubscribe(e, t) { + a.unsubscribe(e, t) + } + onContextMenu(e) { + a.subscribe("onContextMenu", (function(t) { + t.callback(e(t.unixtime, t.price)) + })) + } + onGrayedObjectClicked(e) { + a.subscribe("onGrayedObjectClicked", e) + } + activeChart() { + return this._getChartWidgetApi(this._chartWidgetCollection + .activeChartWidget.value()) + } + _getChartWidgetApi(e) { + var t = this._chartWidgets.get(e); + return void 0 === t && (t = new n(e, this._activateChart.bind(null, e)), + this._chartWidgets.set(e, t)), t + } + onActiveChartChanged() { + return this._activeChangedChangedDelegate + } + changeSymbol(e, t, i) { + r.interval.setValue(b.normalize(t)), r.symbol.setValue(e), i && this + .activeChart().onDataLoaded().subscribe(null, i, !0) + } + setLayout(e) { + this._chartWidgetCollection.setLayout(e) + } + layout() { + return this._chartWidgetCollection.layout.value() + } + layoutName() { + return this._chartWidgetCollection.metaInfo.name.value() + } + layoutNameWatchedValue() { + return this._chartWidgetCollection.metaInfo.name.readonly() + } + layoutSettingsDrawer() { + throw new Error("not implemented") + } + chartsCount() { + return o[this.layout()].count + } + viewMode() { + throw new Error("not implemented") + } + viewModeWatchedValue() { + throw new Error("not implemented") + } + setForceFullscreenMode() { + throw new Error("not implemented") + } + setMultichartMode() { + throw new Error("not implemented") + } + setActiveChart(e) { + throw new Error("not implemented") + } + chart(e) { + if (void 0 === e && (e = 0), e < 0 || e >= this.chartsCount()) + throw Error("Incorrect index: " + e); + return this._getChartWidgetApi(this._chartWidgetCollection.getAll()[e]) + } + getSymbolInterval(e) { + var t = { + symbol: r.symbol.value(), + interval: r.interval.value() + }; + return e && e(t), t + } + saveChart(e) { + if (this._saveChartService) { + var t = this; + this._saveChartService.whenReadyToSave((function() { + var i = t._saveChartService.saveToJSON(); + return e && e(JSON.parse(i.content)) + })) + } + } + loadChart(e) { + this._chartApiInstance.disconnect(), this._chartWidgetCollection + .loadContent(e.json), this._chartWidgetCollection + .purgeUnusedWidgets(), e.extendedData && (this + ._chartWidgetCollection.metaInfo.id.setValue(e.extendedData + .uid), this._chartWidgetCollection.metaInfo.uid.setValue(e + .extendedData.uid), this._chartWidgetCollection.metaInfo + .name.setValue(e.extendedData.name)), this._chartApiInstance + .connect(), r.symbol.setValue(this.activeChart().symbol()), a.emit( + "chart_loaded") + } + getStudiesList() { + return this._chartApiInstance.allStudiesMetadata().filter((function(e) { + return !e.is_hidden_study + })).map((function(e) { + return e.description + })) + } + getStudyInputs(e) { + { + const t = w.findStudyMetaInfoByDescription(this._chartApiInstance + .allStudiesMetadata(), e); + return P(t) + } + } + getSavedCharts(e) { + u.getCharts().then(e) + } + loadChartFromServer(e) { + u.loadChart(e) + } + saveChartToServer(e, t, i) { + this._saveChartService && this._saveChartService.saveChartSilently(e, t, + i) + } + setAutosave(e) { + this._saveChartService && this._saveChartService.autoSaveEnabled() + .setValue(e) + } + removeChartFromServer(e, t) { + u.removeChart(e).then(t) + } + getIntervals() { + var e = [], + t = h.getCustomResolutions(); + return null !== this._chartApiInstance && (e = this._chartApiInstance + .defaultResolutions()), h.mergeResolutions(e, t) + } + closePopupsAndDialogs() { + for (var e = document.querySelectorAll("._tv-dialog-title-close"), t = + 0; t < e.length; t++) e[t].click(); + l.hideAll(), a.emit(g) + } + selectLineTool(e) { + m.supportedLineTools[e] && (e = m.supportedLineTools[e].name, c.tool + .value() !== e && c.tool.setValue(e)) + } + selectedLineTool() { + for (var e = Object.keys(m.supportedLineTools), t = c.tool.value(), i = + 0; i < e.length; ++i) + if (m.supportedLineTools[e[i]].name === t) return e[i]; + return "" + } + lockAllDrawingTools() { + return null === this._lockDrawingsWatchedValue && (this + ._lockDrawingsWatchedValue = new s(c.lockDrawings().value()), + this._lockDrawingsWatchedValue.subscribe((function(e) { + c.lockDrawings().setValue(e) + })), c.lockDrawings().subscribe(this, (function() { + this._lockDrawingsWatchedValue.setValue(c + .lockDrawings().value()) + }))), this._lockDrawingsWatchedValue + } + hideAllDrawingTools() { + return null === this._hideDrawingsWatchedValue && (this + ._hideDrawingsWatchedValue = new s(c.hideAllDrawings().value()), + this._hideDrawingsWatchedValue.subscribe((function(e) { + c.hideAllDrawings().setValue(e) + })), c.hideAllDrawings().subscribe(this, (function() { + this._hideDrawingsWatchedValue.setValue(c + .hideAllDrawings().value()) + }))), this._hideDrawingsWatchedValue + } + hideAllIndicators() { + return null === this._hideIndicatorsWatchedValue && (this + ._hideIndicatorsWatchedValue = new s(c.hideAllIndicators() + .value()), this._hideIndicatorsWatchedValue.subscribe(( + function(e) { + c.hideAllIndicators().setValue(e) + })), c.hideAllIndicators().subscribe(this, (function() { + this._hideIndicatorsWatchedValue.setValue(c + .hideAllIndicators().value()) + }))), this._hideIndicatorsWatchedValue + } + magnetEnabled() { + return null === this._magnetEnabledWatchedValue && (this + ._magnetEnabledWatchedValue = new s(c.properties().magnet + .value()), this._magnetEnabledWatchedValue.subscribe(( + function( + e) { + v(!0), c.properties().magnet.setValue(e), v(!1) + })), c.properties().magnet.subscribe(this, (function() { + this._magnetEnabledWatchedValue.setValue(c + .properties().magnet.value()) + }))), this._magnetEnabledWatchedValue + } + magnetMode() { + return null === this._magnetModeWatchedValue && (this + ._magnetModeWatchedValue = new s(c.properties().magnetMode + .value()), this._magnetModeWatchedValue.subscribe((function( + e) { + v(!0), c.properties().magnetMode.setValue(e), v(!1) + })), c.properties().magnetMode.subscribe(this, (function() { + this._magnetModeWatchedValue.setValue(c.properties() + .magnetMode.value()) + }))), this._magnetModeWatchedValue + } + mainSeriesPriceFormatter() { + return this._chartWidgetCollection.activeChartWidget.value().model() + .mainSeries().priceScale().formatter() + } + showNoticeDialog(e) { + p({ + title: (e = e || {}).title, + text: e.body || "", + onClose: e.callback + }) + } + showConfirmDialog(e) { + if (!(e = e || {}).callback) throw Error("callback must be exist"); + var t = e.callback; + + function i(e) { + t && (t(e), t = null) + } + _({ + title: e.title, + text: e.body || "", + onClose: function() { + i(!1) + }, + onConfirm: function(e) { + i(!0), e.dialogClose() + } + }) + } + logs() { + return { + getLogHistory: d.getLogHistory, + enable: d.loggingOn, + disable: d.loggingOff + } + } + watchlist() { + throw new Error("not implemented") + } + setWatchlistApiPromise(e) { + throw new Error("not implemented") + } + news() { + throw new Error("not implemented") + } + setNewsApiPromise(e) { + throw new Error("not implemented") + } + showLoadChartDialog() { + var e = this._loadChartService; + e && e.showLoadDialog() + } + showSaveAsChartDialog() { + var e = this._saveChartService; + e && window.runOrSignIn((function() { + e.saveChartAs() + }), { + source: "Save as chart dialogue" + }) + } + drawOnAllCharts(e) { + return c.drawOnAllCharts().setValue(e) + } + themes() { + return new f({ + chartWidgetCollection: this._chartWidgetCollection + }) + } + undoRedoState() { + return this._chartWidgetCollection.undoHistory.state() + } + clearUndoHistory() { + return this._chartWidgetCollection.undoHistory.clearStack() + } + undo() { + return this._chartWidgetCollection.undoHistory.undo() + } + redo() { + return this._chartWidgetCollection.undoHistory.redo() + } + trading() { + throw new Error("Not implemented") + } + waitTrading() { + throw new Error("Not implemented") + } + symbolSearch() { + throw new Error("Not implemented") + } + saveChartOrShowTitleDialog(e, t, i) { + throw new Error("Not implemented") + } + showRenameChartDialog() { + throw new Error("Not implemented") + } + setUserInfo(e) { + throw new Error("Not implemented") + } + connect() { + throw new Error("Not implemented") + } + disconnect() { + throw new Error("Not implemented") + } + loginRequired() { + throw new Error("Not implemented") + } + onConnectionStatusChanged(e) { + throw new Error("Not implemented") + } + isConnected() { + throw new Error("Not implemented") + } + showCreateAlertDialog() { + throw new Error("Not implemented") + } + alertService() { + throw new Error("Not implemented") + } + publishChart(e) { + throw new Error("Not implemented") + } + setPublishChartOptions(e) { + throw new Error("Not implemented") + } + showSupportDialog() { + throw new Error("Not implemented") + } + openMobileChartPicker() { + throw new Error("Not implemented") + } + closeMobileChartPicker() { + throw new Error("Not implemented") + } + replayApi() { + throw new Error("Not implemented") + } + takeScreenshot() { + return this._chartWidgetCollection.takeScreenshot() + } + setSymbolSearchUI(e) { + throw new Error("Not implemented") + } + setIntervalLinkingEnabled(e) { + this._chartWidgetCollection.lock.interval.setValue(e) + } + setTimeFrame(e) { + this._chartWidgetCollection.setTimeFrame(e) + } + symbolSync() { + return this._chartWidgetCollection.lock.symbol + } + intervalSync() { + return this._chartWidgetCollection.lock.interval + } + crosshairSync() { + return this._chartWidgetCollection.lock.crosshair + } + timeSync() { + return this._chartWidgetCollection.lock.trackTime + } + startFullscreen() { + return this._chartWidgetCollection.startFullscreen() + } + exitFullscreen() { + return this._chartWidgetCollection.exitFullscreen() + } + takeClientScreenshot(e) { + return this._chartWidgetCollection.clientSnapshot(e) + } + getFavoriteIntervalsService() { + throw new Error("not implemented") + } + getFavoriteChartStylesService() { + throw new Error("not implemented") + } + getLinetoolsFavoritesStore() { + throw new Error("not implemented") + } + supportTicketData() { + return this._supportTicketData + } + hasChartChanges() { + return null === this._chartChangesWatcher && null === this + ._hasChartChangesWatchedValue && (this._chartChangesWatcher = new S( + this._chartWidgetCollection.undoHistory, window.saver, a), + this._hasChartChangesWatchedValue = new s(this + ._chartChangesWatcher.hasChanges()), this + ._chartChangesWatcher.getOnChange().subscribe(this, ( + function() { + this._hasChartChangesWatchedValue.setValue(this + ._chartChangesWatcher.hasChanges()) + }))), this._hasChartChangesWatchedValue + } + } + }).call(this, i("aIyQ"), i("hY0g")) + }, + "9uLv": function(e, t, i) { + "use strict"; + var s = i("K9GE"); + i.d(t, "a", (function() { + return s.a + })), i.d(t, "b", (function() { + return s.b + })), i.d(t, "c", (function() { + return s.c + })) + }, + "9zVu": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "DrawingToolbarBootloader", (function() { + return a + })); + var s = i("OiSa"), + r = i("7RN7"), + n = i("cZRT"), + o = i("YuHv"); + class a extends n.a { + constructor(e) { + super(), this._opts = e, s.isDrawingToolbarVisible.value() && (this._opts + .resizerBridge.negotiateWidth(r.b), this._opts.resizerBridge.container + .value().appendChild(Object(o.a)())) + } + _startLoading() { + return Promise.all([i.e("react"), i.e(1), i.e(4), i.e(6), i.e(11), i.e(12), i.e( + 24), i.e(29), i.e(67), i.e(70), i.e(77), i.e(0), i.e(5), i.e(7), + i.e(10), i.e("line-tools-icons"), i.e(53), i.e(57), i.e( + "drawing-toolbar") + ]).then(i.bind(null, "5f7t")).then(e => new e.DrawingToolbarRenderer(this + ._opts.resizerBridge.container.value(), { + ...this._opts + })) + } + } + }, + AE9l: function(e, t, i) {}, + "AWC/": function(e, t, i) { + e.exports = { + container: "container-e6Js9pSl", + inner: "inner-e6Js9pSl", + "border-left": "border-left-e6Js9pSl", + "border-right": "border-right-e6Js9pSl", + "border-top": "border-top-e6Js9pSl", + "border-bottom": "border-bottom-e6Js9pSl", + "top-right-radius": "top-right-radius-e6Js9pSl", + "top-left-radius": "top-left-radius-e6Js9pSl", + "bottom-right-radius": "bottom-right-radius-e6Js9pSl", + "bottom-left-radius": "bottom-left-radius-e6Js9pSl" + } + }, + "Aba+": function(e, t, i) {}, + ApcL: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("ogJP"), + r = i("vTIA"); + var n = i("txPx"), + o = i("oXaB"), + a = i("wZIs"), + l = i("sDZI"), + c = i("FIi8"), + h = i("4vW/"); + i.d(t, "gridPreferencesDefault", (function() { + return d + })), i.d(t, "crossHairPreferencesDefault", (function() { + return p + })), i.d(t, "legendPreferencesDefault", (function() { + return _ + })), i.d(t, "priceScalePreferencesDefault", (function() { + return m + })), i.d(t, "panePreferencesDefault", (function() { + return f + })), i.d(t, "scalesPreferencesBaseDefault", (function() { + return g + })), i.d(t, "scalesPreferencesToApplyDefault", (function() { + return b + })), i.d(t, "chartEventsSourceBreaksPreferencesDefault", (function() { + return v + })), i.d(t, "chartEventsSourcePreferencesDefault", (function() { + return S + })), i.d(t, "timeScalePreferencesDefault", (function() { + return y + })), i.d(t, "statusViewPreferencesDefault", (function() { + return w + })), i.d(t, "highLowAvgPreferencesDefault", (function() { + return P + })), i.d(t, "mainSeriesPreferencesDefault", (function() { + return C + })), i.d(t, "chartPreferencesBaseDefault", (function() { + return x + })), i.d(t, "chartPreferencesToApplyDefault", (function() { + return T + })), i.d(t, "chartPreferencesToRestoreDefault", (function() { + return I + })), i.d(t, "createPreferencesObject", (function() { + return M + })), i.d(t, "preferencesByWhiteList", (function() { + return O + })), i.d(t, "defaultsPreferencesByWhiteList", (function() { + return L + })); + const u = Object(n.getLogger)("Chart.ApplyPreferencesToAllCharts"), + d = { + color: "", + style: 0 + }, + p = { + color: "", + style: 0, + transparency: 0, + width: 0 + }, + _ = { + showStudyArguments: !1, + showStudyTitles: !1, + showStudyValues: !1, + showSeriesTitle: !1, + showSeriesOHLC: !1, + showLegend: !1, + showBarChange: !0, + showBackground: !0, + backgroundTransparency: 0, + wrapText: !1 + }, + m = { + autoScale: !1, + autoScaleDisabled: !1, + lockScale: !1, + percentage: !1, + percentageDisabled: !1, + log: !1, + logDisabled: !1, + alignLabels: !1, + isInverted: !1, + indexedTo100: !1 + }, + f = { + backgroundType: h.ColorType.Solid, + background: "", + backgroundGradientStartColor: "", + backgroundGradientEndColor: "", + topMargin: 0, + bottomMargin: 0, + rightOffset: 0, + horzGridProperties: Object(c.deepExtend)({}, d), + vertGridProperties: Object(c.deepExtend)({}, d), + crossHairProperties: Object(c.deepExtend)({}, p), + legendProperties: Object(c.deepExtend)({}, _), + axisProperties: Object(c.deepExtend)({}, m) + }, + g = { + lineColor: "", + textColor: "", + fontSize: 0, + scaleSeriesOnly: !1, + showSeriesLastValue: !1, + seriesLastValueMode: o.PriceAxisLastValueMode.LastValueAccordingToScale, + showSeriesPrevCloseValue: !1, + showStudyLastValue: !1, + showSymbolLabels: !1, + showStudyPlotLabels: !1, + showBidAskLabels: !1, + showPrePostMarketPriceLabel: !0, + showFundamentalLastValue: !1, + showFundamentalNameLabel: !1, + showCurrency: !0, + showUnit: !0 + }, + b = { + ...g + }, + v = { + color: "", + visible: !1, + style: 0, + width: 0 + }, + S = { + visible: !1, + futureOnly: !1, + breaks: Object(c.deepExtend)({}, v) + }, + y = { + defaultRightOffset: 0 + }, + w = { + fontSize: 16, + showExchange: !0, + showInterval: !0, + symbolTextSource: "description" + }, + P = { + highLowPriceLinesVisible: !1, + highLowPriceLabelsVisible: !1, + averageClosePriceLineVisible: !1, + averageClosePriceLabelVisible: !1 + }, + C = { + style: 0, + minTick: 0, + showPriceLine: !1, + priceLineWidth: 0, + priceLineColor: "", + showPrevClosePriceLine: !1, + showCountdown: !0, + prevClosePriceLineWidth: 0, + sessionId: "regular", + prevClosePriceLineColor: "", + esdShowDividends: !1, + esdShowSplits: !1, + esdShowEarnings: !1, + esdShowBreaks: !1, + dividendsAdjustment: !1, + statusViewStyle: Object(c.deepExtend)({}, w), + priceAxisProperties: Object(c.deepExtend)({}, m), + highLowAvgPrice: Object(c.deepExtend)({}, P), + candleStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + drawWick: !1, + drawBorder: !1, + drawBody: !0, + borderColor: "", + borderUpColor: "", + borderDownColor: "", + wickColor: "", + wickUpColor: "", + wickDownColor: "", + barColorsOnPrevClose: !1 + }), + hollowCandleStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + drawWick: !1, + drawBorder: !1, + drawBody: !0, + borderColor: "", + borderUpColor: "", + borderDownColor: "", + wickColor: "", + wickUpColor: "", + wickDownColor: "" + }), + barStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + barColorsOnPrevClose: !1, + dontDrawOpen: !1, + thinBars: !0 + }), + lineStyle: Object(c.deepExtend)({}, { + color: "", + linestyle: 0, + linewidth: 0, + styleType: 0 + }), + areaStyle: Object(c.deepExtend)({}, { + color1: "", + color2: "", + linecolor: "", + linestyle: 0, + linewidth: 0, + transparency: 0 + }), + baselineStyle: Object(c.deepExtend)({}, { + topFillColor1: "", + topFillColor2: "", + bottomFillColor1: "", + bottomFillColor2: "", + topLineColor: "", + bottomLineColor: "", + topLineWidth: 0, + bottomLineWidth: 0, + transparency: 0, + baseLevelPercentage: 0 + }), + hiloStyle: Object(c.deepExtend)({}, { + color: "", + showBorders: !1, + borderColor: "", + showLabels: !1, + labelColor: "", + fontSize: 0, + drawBody: !0 + }), + haStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + drawWick: !1, + drawBorder: !1, + drawBody: !0, + borderColor: "", + borderUpColor: "", + borderDownColor: "", + wickColor: "", + wickUpColor: "", + wickDownColor: "", + showRealLastPrice: !1, + barColorsOnPrevClose: !1, + inputs: {} + }), + renkoStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + borderUpColor: "", + borderDownColor: "", + upColorProjection: "", + downColorProjection: "", + borderUpColorProjection: "", + borderDownColorProjection: "", + wickUpColor: "", + wickDownColor: "", + inputs: { + boxSize: 0, + style: "", + atrLength: 0, + wicks: !1, + sources: "", + source: "" + } + }), + pbStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + borderUpColor: "", + borderDownColor: "", + upColorProjection: "", + downColorProjection: "", + borderUpColorProjection: "", + borderDownColorProjection: "", + inputs: { + source: "", + lb: 0 + } + }), + kagiStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + upColorProjection: "", + downColorProjection: "", + inputs: { + style: "", + atrLength: 0, + reversalAmount: 0 + } + }), + pnfStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + upColorProjection: "", + downColorProjection: "", + inputs: { + reversalAmount: 0, + boxSize: 0, + style: "", + atrLength: 0 + } + }), + rangeStyle: Object(c.deepExtend)({}, { + upColor: "", + downColor: "", + upColorProjection: "", + downColorProjection: "", + thinBars: !1, + inputs: { + range: 0, + phantomBars: !1 + } + }) + }, + x = { + priceScaleSelectionStrategyName: "auto", + timeScale: Object(c.deepExtend)({}, y), + mainSeries: Object(c.deepExtend)({}, C), + sessions: Object(c.deepExtend)({}, l.sessionsPreferencesDefault), + paneProperties: Object(c.deepExtend)({}, f), + chartEventsSourceProperties: Object(c.deepExtend)({}, S), + tradingProperties: Object(c.deepExtend)({}, r.tradingPreferencesDefault) + }, + T = { + timezone: "", + scalesProperties: Object(c.deepExtend)({}, b), + ...x + }, + I = { + scalesProperties: Object(c.deepExtend)({}, g), + ...x + }; + + function M(e, t, i, r, n = !0) { + if (void 0 === t[e]) return u.logDebug( + `We haven't had this property ${r}.${e} yet, please, remove it from whiteList`), + null; + if (Object(s.isObject)(i[e])) { + const s = Object.keys(i[e]); + let o = ""; + return s.map(s => ({ + [s]: M(s, t[e], i[e], `${r}.${e}`, n) + })).reduce((e, t) => (o = Object.keys(t)[0], e[o] = t[o], e), {}) + } + return n ? t[e].value() : t[e] + } + + function O(e, t, i = T) { + const s = { + timezone: "", + priceScaleSelectionStrategyName: "auto", + timeScale: { + defaultRightOffset: e.timeScale().defaultRightOffsetProperty().value() + }, + mainSeries: {}, + sessions: {}, + paneProperties: {}, + scalesProperties: {}, + chartEventsSourceProperties: {}, + tradingProperties: {} + }, + r = ["timeScale", "mainSeries", "sessions"], + n = i.mainSeries, + o = Object.keys(i), + a = Object.keys(n), + l = t.properties(), + c = e.properties(), + h = i.sessions, + u = Object.keys(h), + d = e.sessions().properties(); + return a.forEach(e => { + s.mainSeries[e] = M(e, l, n, "mainSeries") + }), u.forEach(e => { + s.sessions[e] = M(e, d, h, "sessions") + }), o.forEach(e => { + r.includes(e) || (s[e] = M(e, c, i, "preferences")) + }), s + } + + function L(e, t, i = I) { + const s = { + timeScale: { + defaultRightOffset: e.timeScale().rightOffsetDefaultValue() + }, + mainSeries: {}, + sessions: Object(c.deepExtend)({}, l.sessionsPreferencesDefault), + paneProperties: {}, + scalesProperties: {}, + chartEventsSourceProperties: {}, + tradingProperties: {}, + priceScaleSelectionStrategyName: "auto" + }, + r = ["timeScale", "mainSeries", "sessions"], + n = i.mainSeries, + o = Object.keys(i), + h = Object.keys(n), + u = Object(a.factoryDefaults)("chartproperties.mainSeriesProperties"), + d = Object(a.factoryDefaults)("chartproperties"); + return h.forEach(e => { + s.mainSeries[e] = M(e, u, n, "mainSeries", !1) + }), o.forEach(e => { + r.includes(e) || (s[e] = M(e, d, i, "preferences", !1)) + }), s + } + }, + Az04: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("GEp6").distanceToLine, + n = i("Ss5c").LineDataSource, + o = i("Ocx9").DefaultProperty, + a = i("j3hX").LineToolColorsProperty; + class l extends n { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "lZ9F", 7)).then(({ + RotatedRectanglePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + startChanging(e, t) { + if (super.startChanging(e, t), 0 === e || 1 === e) { + var i = this._getPaneViews()[0], + s = i._points[0], + n = i._points[1], + o = i._points[2]; + this._distance = r(s, n, o).distance + } + } + setPoint(e, t, i) { + if (super.setPoint(e, t, i), 0 === e || 1 === e) { + var r = this._getPaneViews()[0]; + r.update(); + var n = r._points[0], + o = r._points[1].subtract(n), + a = new s(o.y, -o.x).normalized().scaled(this._distance), + l = n.add(a), + c = this.screenPointToPoint(l); + this._points[2] = c + } + } + endChanging(e, t) { + delete this._distance, super.endChanging(e, t) + } + pointsCount() { + return 3 + } + name() { + return "Rotated Rectangle" + } + hasEditableCoordinates() { + return !1 + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Zd1D"))) + .GeneralFiguresDefinitionsViewModel + } + _snapTo45DegreesAvailable() { + return !0 + } + static createProperties(e) { + var t = new o("linetoolrotatedrectangle", e); + return l._configureProperties(t), t + } + static _configureProperties(e) { + n._configureProperties(e), e.addChild("linesColors", new a([e.color])) + } + } + t.LineToolRotatedRectangle = l + }, + "B4/o": function(e, t, i) { + "use strict"; + (function(e) { + var s = i("QIuV").LineToolTrading, + r = i("4TVt").LineToolPriceAxisView, + n = i("jkoZ"), + o = i("Ss5c").LineDataSource, + a = i("Ocx9").DefaultProperty, + l = i("s1Gx").sortSourcesPreOrdered.LineToolOrder; + + function c(e) { + return null == e ? e = "" : e += "", e + } + class h { + constructor(e) { + this._line = e, this._data = { + bodyText: "order", + quantityText: "0" + }, this._editable = !0, this._cancellable = !0, this._mode = "", this + ._direction = "buy", this._active = !0 + } + setMode(e) { + return this._mode = e, this._line.updateAllViewsAndRedraw(), this + } + setDirection(e) { + return this._direction = e, this._line.updateAllViewsAndRedraw(), this + } + setActive(e) { + return this._active = e, this._line.updateAllViewsAndRedraw(), this + } + setEditable(e) { + return this._editable = e, this._line.updateAllViewsAndRedraw(), this + } + getEditable() { + return this._editable + } + setCancellable(e) { + return this._cancellable = e, this._line.updateAllViewsAndRedraw(), this + } + getCancellable() { + return this._cancellable + } + hasMoveCallback() { + return this.isFunction(this._onMoveCallback) + } + hasModifyCallback() { + return this.isFunction(this._onModifyCallback) + } + getPrice() { + return this._line.points().length > 0 ? this._line.points()[0].price : this + ._line._timePoint.length > 0 ? this._line._timePoint[0].price : void 0 + } + setPrice(e) { + if (this._line.points().length > 0) { + var t = this._line.points()[0]; + t.price = e, this._line._points[0] = t, this._line.normalizePoints(), + this._line.updateAllViewsAndRedraw() + } + return this._line._timePoint.length > 0 && (this._line._timePoint[0].price = + e), this + } + getText() { + return this._data.bodyText + } + setText(e) { + return this._data.bodyText = e || "", this._line.updateAllViewsAndRedraw(), + this + } + setTooltip(e) { + return this._line.properties().tooltip.setValue(c(e)), this + } + getTooltip() { + return this._line.properties().tooltip.value() + } + setModifyTooltip(e) { + return this._line.properties().modifyTooltip.setValue(c(e)), this + } + getModifyTooltip() { + return this._line.properties().modifyTooltip.value() + } + setCancelTooltip(e) { + return this._line.properties().cancelTooltip.setValue(c(e)), this + } + getCancelTooltip() { + return this._line.properties().cancelTooltip.value() + } + getQuantity() { + return this._data.quantityText + } + setQuantity(e) { + return this._data.quantityText = e || "", this._line + .updateAllViewsAndRedraw(), this + } + getExtendLeft() { + var e = this._line.properties().extendLeft.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .extendLeft.value() : e + } + setExtendLeft(e) { + return this._line.properties().extendLeft.setValue(e), this + } + getLineLength() { + var e = this._line.properties().lineLength.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .lineLength.value() : e + } + setLineLength(e) { + return this._line.properties().lineLength.setValue(Math.max(0, Math.min(e, + 100))), this + } + getLineColor() { + var e = this._line.properties(); + return "buy" === this._direction ? this._active ? e.lineActiveBuyColor + .value() : e.lineInactiveBuyColor.value() : this._active ? e + .lineActiveSellColor.value() : e.lineInactiveSellColor.value() + } + setLineColor(e) { + return "buy" === this._direction ? this._active ? this + .setLineActiveBuyColor(e) : this.setLineInactiveBuyColor(e) : this + ._active ? this.setLineActiveSellColor(e) : this + .setLineInactiveSellColor(e), this + } + setLineActiveBuyColor(e) { + return this._line.properties().lineActiveBuyColor.setValue(e), this + } + setLineInactiveBuyColor(e) { + return this._line.properties().lineInactiveBuyColor.setValue(e), this + } + setLineActiveSellColor(e) { + return this._line.properties().lineActiveSellColor.setValue(e), this + } + setLineInactiveSellColor(e) { + return this._line.properties().lineInactiveSellColor.setValue(e), this + } + getLineStyle() { + var e = this._line.properties().lineStyle.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .lineStyle.value() : e + } + setLineStyle(e) { + return this._line.properties().lineStyle.setValue(e), this + } + getLineWidth() { + var e = this._line.properties().lineWidth.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .lineWidth.value() : e + } + setLineWidth(e) { + return this._line.properties().lineWidth.setValue(e), this + } + getBodyBorderColor() { + var e = this._line.properties(); + return "buy" === this._direction ? this._active ? e.bodyBorderActiveBuyColor + .value() : e.bodyBorderInactiveBuyColor.value() : this._active ? e + .bodyBorderActiveSellColor.value() : e.bodyBorderInactiveSellColor + .value() + } + setBodyBorderColor(e) { + return "buy" === this._direction ? this._active ? this + .setBodyBorderActiveBuyColor(e) : this.setBodyBorderInactiveBuyColor( + e) : this._active ? this.setBodyBorderActiveSellColor(e) : this + .setBodyBorderInactiveSellColor(e), this + } + setBodyBorderActiveBuyColor(e) { + return this._line.properties().bodyBorderActiveBuyColor.setValue(e), this + } + setBodyBorderInactiveBuyColor(e) { + return this._line.properties().bodyBorderInactiveBuyColor.setValue(e), this + } + setBodyBorderActiveSellColor(e) { + return this._line.properties().bodyBorderActiveSellColor.setValue(e), this + } + setBodyBorderInactiveSellColor(e) { + return this._line.properties().bodyBorderInactiveSellColor.setValue(e), this + } + getBodyBackgroundColor() { + return n.getColorFromProperties(this._line.properties().bodyBackgroundColor, + this._line.properties().bodyBackgroundTransparency) + } + setBodyBackgroundColor(e) { + return n.setColorToProperties(e, this._line.properties() + .bodyBackgroundColor, this._line.properties() + .bodyBackgroundTransparency), this + } + getBodyTextColor() { + var e = this._line.properties(); + return "limit" === this._mode ? this._active ? e.bodyTextActiveLimitColor + .value() : e.bodyTextInactiveLimitColor.value() : "stop" === this + ._mode ? this._active ? e.bodyTextActiveStopColor.value() : e + .bodyTextInactiveStopColor.value() : "buy" === this._direction ? this + ._active ? e.bodyTextActiveBuyColor.value() : e.bodyTextInactiveBuyColor + .value() : this._active ? e.bodyTextActiveSellColor.value() : e + .bodyTextInactiveSellColor.value() + } + setBodyTextColor(e) { + return "limit" === this._mode ? this._active ? this + .setBodyTextActiveLimitColor(e) : this.setBodyTextInactiveLimitColor( + e) : "stop" === this._mode ? this._active ? this + .setBodyTextActiveStopColor(e) : this.setBodyTextInactiveStopColor(e) : + "buy" === this._direction ? this._active ? this + .setBodyTextActiveBuyColor(e) : this.setBodyTextInactiveBuyColor(e) : + this._active ? this.setBodyTextActiveSellColor(e) : this + .setBodyTextInactiveSellColor(e), this + } + setBodyTextInactiveLimitColor(e) { + return this._line.properties().bodyTextInactiveLimitColor.setValue(e), this + } + setBodyTextActiveLimitColor(e) { + return this._line.properties().bodyTextActiveLimitColor.setValue(e), this + } + setBodyTextInactiveStopColor(e) { + return this._line.properties().bodyTextInactiveStopColor.setValue(e), this + } + setBodyTextActiveStopColor(e) { + return this._line.properties().bodyTextActiveStopColor.setValue(e), this + } + setBodyTextInactiveBuyColor(e) { + return this._line.properties().bodyTextInactiveBuyColor.setValue(e), this + } + setBodyTextActiveBuyColor(e) { + return this._line.properties().bodyTextActiveBuyColor.setValue(e), this + } + setBodyTextInactiveSellColor(e) { + return this._line.properties().bodyTextInactiveSellColor.setValue(e), this + } + setBodyTextActiveSellColor(e) { + return this._line.properties().bodyTextActiveSellColor.setValue(e), this + } + getBodyFont() { + return n.getFontFromProperties(this._line.properties().bodyFontFamily, this + ._line.properties().bodyFontSize, this._line.properties() + .bodyFontBold, this._line.properties().bodyFontItalic) + } + setBodyFont(e) { + return n.setFontToProperties(e, this._line.properties().bodyFontFamily, this + ._line.properties().bodyFontSize, this._line.properties() + .bodyFontBold, this._line.properties().bodyFontItalic), this + } + getQuantityBorderColor() { + var e = this._line.properties(); + return "buy" === this._direction ? this._active ? e + .quantityBorderActiveBuyColor.value() : e.quantityBorderInactiveBuyColor + .value() : this._active ? e.quantityBorderActiveSellColor.value() : e + .quantityBorderInactiveSellColor.value() + } + setQuantityBorderColor(e) { + return "buy" === this._direction ? this._active ? this + .setQuantityBorderActiveBuyColor(e) : this + .setQuantityBorderInactiveBuyColor(e) : this._active ? this + .setQuantityBorderActiveSellColor(e) : this + .setQuantityBorderInactiveSellColor(e), this + } + setQuantityBorderActiveBuyColor(e) { + return this._line.properties().quantityBorderActiveBuyColor.setValue(e), + this + } + setQuantityBorderInactiveBuyColor(e) { + return this._line.properties().quantityBorderInactiveBuyColor.setValue(e), + this + } + setQuantityBorderActiveSellColor(e) { + return this._line.properties().quantityBorderActiveSellColor.setValue(e), + this + } + setQuantityBorderInactiveSellColor(e) { + return this._line.properties().quantityBorderInactiveSellColor.setValue(e), + this + } + getQuantityBackgroundColor() { + var e = this._line.properties(); + return "buy" === this._direction ? this._active ? e + .quantityBackgroundActiveBuyColor.value() : e + .quantityBackgroundInactiveBuyColor.value() : this._active ? e + .quantityBackgroundActiveSellColor.value() : e + .quantityBackgroundInactiveSellColor.value() + } + setQuantityBackgroundColor(e) { + return "buy" === this._direction ? this._active ? this + .setQuantityBackgroundActiveBuyColor(e) : this + .setQuantityBackgroundInactiveBuyColor(e) : this._active ? this + .setQuantityBackgroundActiveSellColor(e) : this + .setQuantityBackgroundInactiveSellColor(e), this + } + setQuantityBackgroundActiveBuyColor(e) { + return this._line.properties().quantityBackgroundActiveBuyColor.setValue(e), + this + } + setQuantityBackgroundInactiveBuyColor(e) { + return this._line.properties().quantityBackgroundInactiveBuyColor.setValue( + e), this + } + setQuantityBackgroundActiveSellColor(e) { + return this._line.properties().quantityBackgroundActiveSellColor.setValue( + e), this + } + setQuantityBackgroundInactiveSellColor(e) { + return this._line.properties().quantityBackgroundInactiveSellColor.setValue( + e), this + } + getQuantityTextColor() { + return n.getColorFromProperties(this._line.properties().quantityTextColor, + this._line.properties().quantityTextTransparency) + } + setQuantityTextColor(e) { + return n.setColorToProperties(e, this._line.properties().quantityTextColor, + this._line.properties().quantityTextTransparency), this + } + getQuantityFont() { + return n.getFontFromProperties(this._line.properties().quantityFontFamily, + this._line.properties().quantityFontSize, this._line.properties() + .quantityFontBold, this._line.properties().quantityFontItalic) + } + setQuantityFont(e) { + return n.setFontToProperties(e, this._line.properties().quantityFontFamily, + this._line.properties().quantityFontSize, this._line.properties() + .quantityFontBold, this._line.properties().quantityFontItalic), this + } + getCancelButtonBorderColor() { + var e = this._line.properties(); + return "buy" === this._direction ? this._active ? e + .cancelButtonBorderActiveBuyColor.value() : e + .cancelButtonBorderInactiveBuyColor.value() : this._active ? e + .cancelButtonBorderActiveSellColor.value() : e + .cancelButtonBorderInactiveSellColor.value() + } + setCancelButtonBorderColor(e) { + return "buy" === this._direction ? this._active ? this + .setCancelButtonBorderActiveBuyColor(e) : this + .setCancelButtonBorderInactiveBuyColor(e) : this._active ? this + .setCancelButtonBorderActiveSellColor(e) : this + .setCancelButtonBorderInactiveSellColor(e), this + } + setCancelButtonBorderActiveBuyColor(e) { + return this._line.properties().cancelButtonBorderActiveBuyColor.setValue(e), + this + } + setCancelButtonBorderInactiveBuyColor(e) { + return this._line.properties().cancelButtonBorderInactiveBuyColor.setValue( + e), this + } + setCancelButtonBorderActiveSellColor(e) { + return this._line.properties().cancelButtonBorderActiveSellColor.setValue( + e), this + } + setCancelButtonBorderInactiveSellColor(e) { + return this._line.properties().cancelButtonBorderInactiveSellColor.setValue( + e), this + } + getCancelButtonBackgroundColor() { + return n.getColorFromProperties(this._line.properties() + .cancelButtonBackgroundColor, this._line.properties() + .cancelButtonBackgroundTransparency) + } + setCancelButtonBackgroundColor(e) { + return n.setColorToProperties(e, this._line.properties() + .cancelButtonBackgroundColor, this._line.properties() + .cancelButtonBackgroundTransparency), this + } + getCancelButtonIconColor() { + var e = this._line.properties(); + return "buy" === this._direction ? this._active ? e + .cancelButtonIconActiveBuyColor.value() : e + .cancelButtonIconInactiveBuyColor.value() : this._active ? e + .cancelButtonIconActiveSellColor.value() : e + .cancelButtonIconInactiveSellColor.value() + } + setCancelButtonIconColor(e) { + return "buy" === this._direction ? this._active ? this + .setCancelButtonIconActiveBuyColor(e) : this + .setCancelButtonIconInactiveBuyColor(e) : this._active ? this + .setCancelButtonIconActiveSellColor(e) : this + .setCancelButtonIconInactiveSellColor(e), this + } + setCancelButtonIconActiveBuyColor(e) { + return this._line.properties().cancelButtonIconActiveBuyColor.setValue(e), + this + } + setCancelButtonIconInactiveBuyColor(e) { + return this._line.properties().cancelButtonIconInactiveBuyColor.setValue(e), + this + } + setCancelButtonIconActiveSellColor(e) { + return this._line.properties().cancelButtonIconActiveSellColor.setValue(e), + this + } + setCancelButtonIconInactiveSellColor(e) { + return this._line.properties().cancelButtonIconInactiveSellColor.setValue( + e), this + } + block() { + this._blocked = !0, this._line.updateAllViewsAndRedraw() + } + unblock() { + this._blocked = !1, this._line.updateAllViewsAndRedraw() + } + getBlocked() { + return this._blocked + } + isFunction(e) { + return "function" == typeof e + } + onCancel(e, t) { + return t ? this.isFunction(t) && (this._onCancelData = e, this + ._onCancelCallback = t) : this.isFunction(e) && (this + ._onCancelCallback = e), this + } + callOnCancel() { + this.isFunction(this._onCancelCallback) && this._onCancelCallback.call(this, + this._onCancelData) + } + isOnCancelCallbackPresent() { + return this.isFunction(this._onCancelCallback) + } + onModify(e, t) { + return t ? this.isFunction(t) && (this._onModifyData = e, this + ._onModifyCallback = t) : this.isFunction(e) && (this + ._onModifyCallback = e), this + } + callOnModify() { + this.isFunction(this._onModifyCallback) && this._onModifyCallback.call(this, + this._onModifyData) + } + onMove(e, t) { + return t ? this.isFunction(t) && (this._onMoveData = e, this + ._onMoveCallback = t) : this.isFunction(e) && (this + ._onMoveCallback = e), this + } + callOnMove() { + this.isFunction(this._onMoveCallback) && this._onMoveCallback.call(this, + this._onMoveData) + } + onContextMenu(e, t) { + return t ? this.isFunction(t) && (this._onContextMenuData = e, this + ._onContextMenuCallback = t) : this.isFunction(e) && (this + ._onContextMenuCallback = e), this + } + shouldShowContextMenu() { + return this.isFunction(this._onContextMenuCallback) + } + callOnContextMenu() { + if (this.isFunction(this._onContextMenuCallback)) return this + ._onContextMenuCallback.call(this, this._onContextMenuData) + } + remove() { + this._line._model.removeSource(this._line), delete this._line + } + } + class u extends s { + constructor(e, t) { + super(e, t || u.createProperties()), this._adapter = new h(this), this + .setSelectionEnabled(!0), i.e("lt-pane-views").then(i.bind(null, + "LMGK")).then(({ + OrderPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + zorder() { + return l + } + isSpeciallyZOrderedSource() { + return !0 + } + setPoint(e, t, i) { + this._points[e] = t, this.normalizePoints() + } + addPoint(e, t) { + return this._points.push(e), this._lastPoint = null, this.normalizePoints(), + this.createServerPoints(), !0 + } + name() { + return "Order" + } + endMoving(e) { + var t = this._startMovingPoint && this._currentMovingPoint && this + ._startMovingPoint.logical.price !== this._currentMovingPoint.logical + .price; + super.endMoving(), !e && t && this._adapter.callOnMove() + } + createPriceAxisView(e) { + var t = { + pointIndex: e, + backgroundPropertyGetter: () => this._adapter.getLineColor() + }; + return this._priceAxisView = new r(this, t), this._priceAxisView + } + paneViews() { + return TradingView.printing && !e.enabled("snapshot_trading_drawings") ? + null : this._model.properties().tradingProperties.showOrders.value() ? o + .prototype.paneViews.call(this) : null + } + priceAxisViews(t, i) { + return TradingView.printing && !e.enabled("snapshot_trading_drawings") ? + null : this._model.properties().tradingProperties.showOrders.value() ? o + .prototype.priceAxisViews.call(this, t, i) : null + } + adapter() { + return this._adapter + } + hasContextMenu() { + return this._adapter.shouldShowContextMenu() + } + contextMenuItems() { + return this._adapter.callOnContextMenu() + } + movable() { + return Boolean(this._adapter._onMoveCallback) + } + static createProperties(e) { + var t = new a("linetoolorder", e, !1, !1); + return u._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolOrder = u + }).call(this, i("Kxc7")) + }, + BBCR: function(e, t) { + e.exports = + '' + }, + BOPY: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("f6yo").pointInCircle, + n = i("VdBB").HitTestResult, + o = i("zDbI").CHART_FONT_FAMILY, + a = i("cPgM").ScaledPaneRenderer; + class l extends a { + constructor(e, t) { + super(), this._barWidth = e.barWidth, this._plates = e.plates, this._tooltip = e + .tooltip, this._model = t + } + _drawImpl(e) { + e.save(); + for (var t = 0; t < this._plates.length; t++) + if (this._plates[t].highlightByAuthor) { + this._highlightByAuthor = !0; + break + } this._plates.forEach(this._drawItem.bind(this, e)), this._tooltip.draw(this + ._plates.map(function(e) { + return this._plateTransform(e) + }.bind(this)), e), this._tooltip.endDraw(), e.restore() + } + _drawItem(e, t) { + e.save(), this._highlightByAuthor && !t.highlightByAuthor && (e.globalAlpha = .4); + var i = this._dotTransform(t); + i.mine ? this._drawTriangle(e, i) : this._drawDot(e, i), e.restore() + } + _commonTransform(e) { + var t = Math.max(1.4 * e.minSize, this._barWidth + 4), + i = { + up: -1, + down: 1 + } [e.direction] * (e.yInverted ? -1 : 1) * (t * (e.order + .6) + .25 * t), + s = e.y + i, + r = TradingView.clone(e.overridedTheme || this.themes[e.theme]); + return r.dotBorderWidth = e.hovered || e.highlightByAuthor ? 4 : 2, { + id: e.id, + theme: r, + themeName: e.theme, + x: Math.round(e.x + 1), + y: Math.round(s), + yInverted: e.yInverted, + pinned: e.pinned, + hovered: e.hovered + } + } + _dotTransform(e) { + var t = this._commonTransform(e); + return t.radius = Math.max(e.minSize / 2, .4 * this._barWidth), t.label = e.label, t + .labelFontColor = e.labelFontColor, t.labelFontSize = Math.ceil(Math.max(10, + Math.min(t.radius, 20))), this._model.updateDotData(e, t) + } + _plateTransform(e) { + var t = this._commonTransform(e); + return this._model.updatePlateData(e, t) + } + _drawTriangle(e, t) { + e.strokeStyle = t.theme.border, e.fillStyle = t.theme.background, e.lineWidth = t + .theme.dotBorderWidth; + var i = t, + s = t.radius, + r = Math.cos(Math.PI / 6) * s, + n = Math.sin(Math.PI / 6) * s; + e.translate(i.x, i.y), "up" === t.direction !== t.yInverted && e.rotate(Math.PI), t + .public || (e.lineWidth /= 2), e.beginPath(), e.moveTo(0, -s), e.lineTo(r, n), e + .lineTo(-r, n), e.lineTo(0, -s), e.closePath(), e.stroke(), t.public && e.fill() + } + _drawDot(e, t) { + e.strokeStyle = t.theme.border, e.fillStyle = t.theme.background, e.lineWidth = t + .theme.dotBorderWidth, e.beginPath(), e.arc(t.x, t.y, t.radius, 0, 2 * Math.PI, + !0), e.closePath(), e.stroke(), e.fill(), t.label && t.radius >= 7 && (e + .textAlign = "center", e.textBaseline = "middle", e.font = "bold " + t + .labelFontSize + "px " + o, e.fillStyle = t.labelFontColor, e.fillText(t + .label, t.x, t.y)) + } + hitTest(e) { + for (var t, i = this._plates.length - 1; i >= 0; --i) + if (t = this._hitTestDot(this._plates[i], e)) return t; + return null + } + _hitTestDot(e, t) { + var i = this._dotTransform(e), + o = new s(i.x, i.y); + return r(t, o, Math.max(i.radius, 8)) ? new n(n.REGULAR, e) : null + } + } + l.prototype.themes = { + green: { + border: "#78C143", + background: "#8DDD54" + }, + red: { + border: "#CC4545", + background: "#ED5A5A" + }, + neutral: { + border: "#EAC300", + background: "#FFD400" + }, + yellow: { + border: "#EAC300", + background: "#FFD400" + }, + blue: { + border: "#047ACE", + background: "#0496FF" + } + }, t.BarsMarksContainerPaneView = class { + constructor(e, t) { + this.source = e, this._rendererFactory = t + } + update() {} + renderer(e, t) { + return this._rendererFactory(this.source) + } + }, t.BarsMarksContainerRenderer = l + }, + BZtw: function(e, t, i) { + "use strict"; + var s = i("Eyy1"), + r = i("ogJP"), + n = i("5fI3"), + o = i("LxhU"), + a = i("XPit"), + l = i("hsV8"), + c = i("YWnQ"), + h = i("aIyQ"), + u = i.n(h); + class d { + constructor() { + this._loading = new u.a, this._completed = new u.a, this._error = new u.a, this + ._symbolError = new u.a, this._symbolResolved = new u.a, this._seriesError = + new u.a, this._symbolNotPermitted = new u.a, this._symbolGroupNotPermitted = + new u.a, this._chartTypeNotPermitted = new u.a, this + ._intradaySpreadNotPermitted = new u.a, this._intradayExchangeNotPermitted = + new u.a, this._customIntervalNotPermitted = new u.a, this + ._secondsIntervalNotPermitted = new u.a, this._tickMarksRangeChanged = new u.a, + this._barReceived = new u.a, this._seriesTimeFrame = new u.a, this + ._dataUpdated = new u.a + } + destroy() { + this._loading.destroy(), this._completed.destroy(), this._error.destroy(), this + ._symbolError.destroy(), this._symbolResolved.destroy(), this._seriesError + .destroy(), this._symbolNotPermitted.destroy(), this._symbolGroupNotPermitted + .destroy(), this._chartTypeNotPermitted.destroy(), this + ._intradaySpreadNotPermitted.destroy(), this._intradayExchangeNotPermitted + .destroy(), this._customIntervalNotPermitted.destroy(), this + ._secondsIntervalNotPermitted.destroy(), this._tickMarksRangeChanged.destroy(), + this._barReceived.destroy(), this._seriesTimeFrame.destroy(), this._dataUpdated + .destroy() + } + loading() { + return this._loading + } + completed() { + return this._completed + } + error() { + return this._error + } + symbolError() { + return this._symbolError + } + symbolResolved() { + return this._symbolResolved + } + seriesError() { + return this._seriesError + } + symbolNotPermitted() { + return this._symbolNotPermitted + } + symbolGroupNotPermitted() { + return this._symbolGroupNotPermitted + } + chartTypeNotPermitted() { + return this._chartTypeNotPermitted + } + intradaySpreadNotPermitted() { + return this._intradaySpreadNotPermitted + } + intradayExchangeNotPermitted() { + return this._intradayExchangeNotPermitted + } + customIntervalNotPermitted() { + return this._customIntervalNotPermitted + } + secondsIntervalNotPermitted() { + return this._secondsIntervalNotPermitted + } + tickMarksRangeChanged() { + return this._tickMarksRangeChanged + } + barReceived() { + return this._barReceived + } + seriesTimeFrame() { + return this._seriesTimeFrame + } + dataUpdated() { + return this._dataUpdated + } + fireCompleted(e, t) { + this._completed.fire(e, t) + } + fireLoading(e) { + this._loading.fire(e) + } + fireError() { + this._error.fire() + } + fireSymbolError(e) { + this._symbolError.fire(e), this.fireError() + } + fireSymbolResolved(e) { + this._symbolResolved.fire(e) + } + fireSeriesError(e) { + this._seriesError.fire(e), this.fireError() + } + fireSymbolNotPermitted(e) { + this._symbolNotPermitted.fire(e), this.fireError() + } + fireSymbolGroupNotPermitted(e) { + this._symbolGroupNotPermitted.fire(e), this.fireError() + } + fireChartTypeNotPermitted(e) { + this._chartTypeNotPermitted.fire(e), this.fireError() + } + fireIntradaySpreadNotPermitted() { + this._intradaySpreadNotPermitted.fire(), this.fireError() + } + fireIntradayExchangeNotPermitted() { + this._intradayExchangeNotPermitted.fire(), this.fireError() + } + fireCustomIntervalNotPermitted() { + this._customIntervalNotPermitted.fire(), this.fireError() + } + fireSecondsIntervalNotPermitted() { + this._secondsIntervalNotPermitted.fire(), this.fireError() + } + fireTickMarksRangeChanged(e) { + this._tickMarksRangeChanged.fire(e) + } + fireBarReceived(e) { + this._barReceived.fire(e) + } + fireSeriesTimeFrame(e, t, i, s, r) { + this._seriesTimeFrame.fire(e, t, i, s, r) + } + fireDataUpdated(e, t) { + this._dataUpdated.fire(e, t) + } + } + var p = i("txPx"); + i.d(t, "a", (function() { + return b + })); + const _ = Object(p.getLogger)("Chart.SeriesDataSource"); + var m; + ! function(e) { + e[e.Idle = 0] = "Idle", e[e.AwaitingConnection = 1] = "AwaitingConnection", e[e + .AwaitingFirstDataUpdate = 2] = "AwaitingFirstDataUpdate", e[e.Active = 3] = + "Active" + }(m || (m = {})); + let f = 1; + let g = 1; + class b { + constructor(e, t, i) { + var r; + this._instanceId = null, this._symbolInstanceId = null, this._symbol = null, this + ._resolution = null, this._timeFrame = null, this._data = new a.SeriesData, this + ._dataEvents = new d, this._status = m.Idle, this._turnaroundCounter = 1, this + ._boundOnGatewayIsConnectedChanged = this._onGatewayIsConnectedChanged.bind( + this), this._ongoingDataUpdate = Promise.resolve(), this._gateway = e, this + ._turnaroundPrefix = t, this._createSeriesParams = (r = null != i ? i : { + count: 300 + }).startDate ? r.endDate || r.count ? r.endDate ? ["from_to", r.startDate, r + .endDate + ] : ["bar_count", r.startDate, Object(s.ensure)(r.count)] : ["from_to", r + .startDate + ] : r.count || 300, this._gateway.isConnected().subscribe(this + ._boundOnGatewayIsConnectedChanged) + } + destroy() { + this.stop(), this._gateway.isConnected().unsubscribe(this + ._boundOnGatewayIsConnectedChanged) + } + modifySeries(e, t, i = null, n = !1) { + n && (_.logNormal( + "Due to force flag clearing symbol & resolution to force re-requesting data." + ), this._symbol = null, this._resolution = null); + const a = this._symbol, + l = this._resolution; + if (this._symbol = e, this._resolution = t, null === this._instanceId) return void( + this._timeFrame = i); + const c = !Object(r.deepEquals)(a, e)[0], + h = null === l || !o.Interval.isEqual(l, t); + (c || h || null !== i) && (this._timeFrame = null, (c || h) && this + ._turnaroundCounter++, c && this._resolveSymbol(), this._gateway.modifySeries( + this._instanceId, this.turnaround(), Object(s.ensureNotNull)(this + ._symbolInstanceId), this._resolution, i, this._onMessage.bind(this))) + } + requestMoreData(e) { + null !== this._instanceId && this._gateway.requestMoreData(this._instanceId, e, this + ._onMessage.bind(this)) + } + requestMoreTickmarks(e) { + null !== this._instanceId && this._gateway.requestMoreTickmarks(this._instanceId, e, + this._onMessage.bind(this)) + } + isStarted() { + return this._status !== m.Idle + } + isActive() { + return this._status === m.Active + } + start() { + this.isStarted() ? _.logNormal( + "start: data source is already started, nothing to do") : (Object(s.assert)( + null !== this._symbol, "symbol must be set before start"), Object(s + .assert)(null !== this._resolution, + "resolution must be set before start"), this._gateway.isConnected() + .value() ? this._createSeries() : this._changeStatusTo(m.AwaitingConnection) + ) + } + stop() { + this.isStarted() ? (null !== this._instanceId && (this._gateway.removeSeries(this + ._instanceId), this._instanceId = null), this._changeStatusTo(m.Idle)) : _ + .logNormal("stop: data source is already stopped, nothing to do") + } + instanceId() { + return this._instanceId + } + data() { + return this._data + } + clearData() { + this.isStarted() ? this._enqueueUpdate(() => this._clearDataImpl()) : this + ._clearDataImpl() + } + dataEvents() { + return this._dataEvents + } + turnaround() { + return `${this._turnaroundPrefix}${this._turnaroundCounter}` + } + symbolInstanceId() { + return this._symbolInstanceId + } + moveData(e) { + this._enqueueUpdate(() => this._data.moveData(e)) + } + _clearDataImpl() { + this._data.clear() + } + _resolveSymbol() { + null !== this._symbol && (this._symbolInstanceId = "sds_sym_" + f++, this._gateway + .resolveSymbol(this._symbolInstanceId, Object(n + .encodeExtendedSymbolOrGetSimpleSymbolString)(this._symbol), this + ._onMessage.bind(this))) + } + _changeStatusTo(e) { + Object(s.assert)(this._status !== e, + "Source and destination status should be distinct"), _.logNormal( + `Status changed from ${m[this._status]} to ${m[e]}`), this._status = e + } + _createSeries() { + Object(s.assert)(this._status !== m.Active, + 'Status should not be "Active" when creating a study'), this._instanceId = + "sds_" + g++, this._resolveSymbol(), this._gateway.createSeries(this + ._instanceId, this.turnaround(), Object(s.ensureNotNull)(this + ._symbolInstanceId), Object(s.ensureNotNull)(this._resolution), this + ._createSeriesParams, this._timeFrame, this._onMessage.bind(this)), this + ._timeFrame = null, this._changeStatusTo(m.AwaitingFirstDataUpdate) + } + _onGatewayIsConnectedChanged(e) { + e ? this._onGatewayConnected() : this._onGatewayDisconnected() + } + _onGatewayConnected() { + this._status === m.AwaitingConnection && this._createSeries() + } + _onGatewayDisconnected() { + this._status !== m.Idle && this._status !== m.AwaitingConnection && (this + ._instanceId = null, this._changeStatusTo(m.AwaitingConnection)), this + ._turnaroundCounter = 1 + } + _onMessage(e) { + this._enqueueUpdate(() => this._onMessageImpl(e)) + } + async _onMessageImpl(e) { + switch (e.method) { + case "symbol_resolved": { + const [t, i] = e.params; + if (t !== this._symbolInstanceId) { + _.logNormal( + `Resolve for old symbol, expected: ${this._symbolInstanceId}, actual ${e.params[0]}` + ); + break + } + this._onSymbolResolved(i); + break + } + case "symbol_error": + if (e.params[0] !== this._symbolInstanceId) { + _.logNormal( + `Symbol error for old symbol, expected: ${this._symbolInstanceId}, actual ${e.params[0]}` + ); + break + } + this._onSymbolError(e); + break; + case "series_timeframe": { + const [t, i, s, r, n, o, a] = e.params; + if (!this._checkTurnaround(t, i)) { + _.logNormal( + `Time frame for old data, expected: ${this._symbolInstanceId} (${this.turnaround()}), actual ${t} (${i})` + ); + break + } + this._onSeriesTimeFrame(s, r, n, o, a); + break + } + case "series_error": { + const [t, i] = e.params; + if (!this._checkTurnaround(t, i)) { + _.logNormal( + `Series error for old data, expected: ${this._symbolInstanceId} (${this.turnaround()}), actual ${t} (${i})` + ); + break + } + this._onSeriesError(e.params[2]); + break + } + case "series_loading": { + const [t, i] = e.params; + if (!this._checkTurnaround(t, i)) break; + this._onSeriesLoading(e.time); + break + } + case "series_completed": { + const [t, i, s] = e.params; + if (!this._checkTurnaround(t, s)) { + _.logNormal( + `Series completed for old data, expected: ${this._symbolInstanceId} (${this.turnaround()}), actual ${t} (${s})` + ); + break + } + this._onSeriesCompleted(i, e.time); + break + } + case "data_update": + if (!this._checkTurnaround(e.params.customId, e.params.turnaround)) { + _.logNormal( + `Data update for old data, expected: ${this._symbolInstanceId} (${this.turnaround()}), actual ${e.params.customId} (${e.params.turnaround})` + ); + break + } + await this._onDataUpdate(e.params.plots, e.params.nonseries, e.params + .lastBar); + break; + case "clear_data": + if (e.params.turnaround !== this.turnaround()) { + _.logNormal( + `Clear data for old data, expected: ${this.turnaround()}, actual ${e.params.turnaround}` + ); + break + } + this._clearDataImpl(), this._dataEvents.fireDataUpdated(void 0, !1) + } + } + _onSeriesError(e) { + let t, i; + if ("string" == typeof e) i = { + error: e + }, t = e; + else if (i = e, e.ctx) { + const i = {}; + Object.entries(e.ctx).forEach(([e, t]) => { + i[e] = t.toString() + }), t = e.error.format(i) + } else t = e.error; + if (t.startsWith("study_not_auth:")) { + const e = t.split(":", 2)[1].split("@", 2)[0]; + ["BarSetRenko", "BarSetPriceBreak", "BarSetKagi", "BarSetPnF"].includes(e) ? + this._dataEvents.fireChartTypeNotPermitted(e) : "BarSetSpread" === e ? this + ._dataEvents.fireIntradaySpreadNotPermitted() : "BarSetRange" === e && this + ._dataEvents.fireCustomIntervalNotPermitted() + } else "resolution_not_entitled" === t ? this._dataEvents + .fireIntradayExchangeNotPermitted() : "custom_resolution" === t ? this + ._dataEvents.fireCustomIntervalNotPermitted() : "seconds_not_entitled" === t && + this._dataEvents.fireSecondsIntervalNotPermitted(); + this._dataEvents.fireSeriesError(i) + } + _onSeriesTimeFrame(e, t, i, s, r) { + this._dataEvents.fireSeriesTimeFrame(e, t, i, null == s || s, r) + } + _onSymbolError(e) { + if (e.params[1] === c.permissionDenied) switch (e.params[2]) { + case c.SymbolErrorPermissionDeniedReason.Symbol: + this._dataEvents.fireSymbolNotPermitted(e.params[3]); + break; + case c.SymbolErrorPermissionDeniedReason.GroupPermission: + this._dataEvents.fireSymbolGroupNotPermitted(e.params[3]); + break; + default: + this._dataEvents.fireSymbolNotPermitted(e.params[2]) + } + this._dataEvents.fireSymbolError(e.params[1]) + } + _onSymbolResolved(e) { + this._dataEvents.fireSymbolResolved(e) + } + async _onDataUpdate(e, t, i) { + this._onDataUnpacked(e, i, await async function(e) { + if (void 0 === e) return { + projectionPlots: [], + boxSize: null + }; + if ("" === e.d || "nochange" === e.indexes) return null; + const t = await Object(l.unpackNonSeriesData)(e.d); + if (null === t || t.indexes_replace) return null; + const i = e.indexes, + { + bars: s, + price: r, + boxSize: n, + reversalAmount: o + } = t.data, + a = (s || []).map(e => { + let t; + return "factor" in e ? t = e.factor : + "additionalPrice" in e && (t = e.additionalPrice), { + index: i[e.time], + value: [0, e.open, e.high, e.low, e.close, e + .volume, t + ] + } + }); + return { + lastPrice: r, + projectionPlots: a, + reversalAmount: o, + boxSize: n + } + }(t)) + } + _enqueueUpdate(e) { + return this._ongoingDataUpdate = this._ongoingDataUpdate.then(e, e), this + ._ongoingDataUpdate + } + _onDataUnpacked(e, t, i) { + if (this._status === m.Idle) return; + this._status === m.AwaitingFirstDataUpdate && (this._changeStatusTo(m.Active), this + ._clearDataImpl()); + const s = this._data.bars().size(), + r = this._data.bars().firstIndex(), + n = this._data.bars().merge(e); + null !== i && (this._data.nsBars().clear(), this._data.nsBars().merge(i + .projectionPlots), this._data.lastProjectionPrice = i.lastPrice, + null !== i.boxSize && (this._data.boxSize = i.boxSize), this._data + .reversalAmount = i.reversalAmount); + const o = null === r || null !== n && n.index < r; + this._dataEvents.fireDataUpdated(t, o), s !== this._data.bars().size() && null !== + n && this._dataEvents.fireBarReceived(n) + } + _onSeriesLoading(e) { + this._dataEvents.fireLoading(e) + } + _onSeriesCompleted(e, t) { + this._dataEvents.fireCompleted(e, t) + } + _checkTurnaround(e, t) { + return this._instanceId === e && (void 0 === t || t === this.turnaround()) + } + } + }, + Bt3k: function(e, t, i) { + "use strict"; + + function s(e, t) { + this.tooltips = {}, this.tooltipFactory = e, this.source = t + } + + function r(e, t) { + this.renderer = e, this._tooltip = t, this.visible = !1 + } + s.prototype.findOrCreateTooltip = function(e) { + var t = this.tooltips[e.id]; + return null == t && (e.hovered || e.pinned) && (t = this._createTooltip(), this + .tooltips[e.id] = t), t + }, s.prototype.showPlate = function(e, t) { + var i = this.findOrCreateTooltip(e); + null != i && (i._drawPlate(e, t), i.plateData = e) + }, s.prototype.draw = function(e, t) { + this.hoveredId = null; + for (var i = 0; i < e.length; i++) e[i].hovered && (this.hoveredId = e[i].id); + e.forEach(function(e) { + this.showPlate(e, t) + }.bind(this)) + }, s.prototype.endDraw = function() { + for (var e in this.tooltips) + if (this.tooltips.hasOwnProperty(e)) { + var t = this.tooltips[e]; + t.toggleVisibility(), this.hoveredId && t.plateData.id !== this.hoveredId && !t + .plateData.pinned && (t.remove(), delete this.tooltips[e]) + } + }, s.prototype.removeAll = function() { + for (var e in this.tooltips) { + if (this.tooltips.hasOwnProperty(e)) this.tooltips[e].remove() + } + this.tooltips = {} + }, s.prototype.removeTooltip = function(e) { + delete this.tooltips[e] + }, s.prototype._createTooltip = function() { + return new r(this, this.tooltipFactory()) + }, r.prototype._drawPlate = function(e, t) { + var i = this; + this.visible = !0, this._tooltip.setSource(this.renderer.source), this._tooltip + .showPlate(e, t), e.hovered || e.pinned || this._tooltip.hide((function() { + i.renderer.removeTooltip(e.id) + })) + }, r.prototype.remove = function() { + this._tooltip._removeLayout() + }, r.prototype.toggleVisibility = function() { + this._tooltip._toggleLayout(this.visible), this.visible = !1 + }, t.TooltipRenderer = s + }, + CCPt: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"); + + function r(e, t, i) { + return new Promise(s => { + i && e.classList.remove(i), e.classList.add(t); + const r = i => { + i.target === e && i.animationName === t && (e.removeEventListener(i + .type, r), s(i)) + }; + e.addEventListener("animationend", r, !1), e.addEventListener( + "webkitAnimationEnd", r, !1), e.addEventListener("MSAnimationEnd", r, ! + 1) + }) + } + + function n(e) { + return r(e, "tv-transition--fade-in", "tv-transition--fade-out") + } + i.d(t, "UserDefinedBarsMarksTooltip", (function() { + return o + })); + class o extends class { + constructor() { + this._source = null, this._tooltipHovered = !1, this._layout = null, this + ._container = null, this._context = null, this._plateArrowSize = 14 + } + showPlate(e, t) { + if (this._currentId !== e.id || !this._layout || null === this._layout.parentNode) { + this._currentId = e.id, this._createLayout(); + const i = Object(s.ensureNotNull)(this._layout); + this._getContainer(t).appendChild(i), i.addEventListener("mouseenter", () => { + this._tooltipHovered = !0, n(Object(s.ensureNotNull)(this._layout)) + }), i.addEventListener("mouseleave", () => { + this._tooltipHovered = !1 + }) + } + const i = Object(s.ensureNotNull)(this._layout); + let r = Math.round(e.barWidth / 2); + r > 15 && (r = 15), r < 10 && (r = 10), this._updatePlate(e); + const o = t.canvas.getBoundingClientRect(), + a = e.x - i.offsetWidth < this._plateArrowSize; + let l = o.width - e.x + Math.round(e.barWidth / 2 + r); + a && (l -= i.offsetWidth + 2 * this._plateArrowSize); + const c = o.height, + h = Math.min(Math.max(e.y, 20), c - i.offsetHeight - 10) + "px"; + i.classList.toggle("right", a), i.style.display = "block", i.style.top = h, i.style + .right = l + "px", i.style.fontSize = r + "px" + } + hide(e) { + const t = Object(s.ensureNotNull)(this._layout); + var i; + this._tooltipHovered ? n(t) : (i = t, r(i, "tv-transition--fade-out", + "tv-transition--fade-in")).then(() => { + t.remove(), e() + }) + } + setSource(e) { + this._source = e + } + _getContainer(e) { + return this._container && this._context === e || (this._context = e, this + ._container = e.canvas.parentElement), Object(s.ensureNotNull)(this + ._container) + } + _removeLayout() { + var e; + this._tooltipHovered || null === (e = this._layout) || void 0 === e || e.remove() + } + _toggleLayout(e) { + Object(s.ensureNotNull)(this._layout).style.visibility = e ? "visible" : "hidden" + } + } { + constructor() { + super(...arguments), this._layoutText = null + } + _createLayout() { + this._layout = document.createElement("div"), this._layout.classList.add( + "bar-mark-tooltip"), this._layoutText = document.createElement("div"), this + ._layoutText.classList.add("text"), this._layout.appendChild(this._layoutText) + } + _updatePlate(e) { + this._currentId = e.id; + const t = Object(s.ensureNotNull)(this._layout); + t.style.borderColor = e.theme.border, t.style.marginTop = e.tooltipMargin + "px"; + const i = Object(s.ensureNotNull)(this._layoutText); + i.innerHTML = e.text, t.appendChild(i) + } + } + }, + CHw2: function(e, t, i) { + "use strict"; + var s = i("WPQD").LineToolTrendLine, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Extended Line" + } + static createProperties(e) { + var t = new r("linetoolextended", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolExtended = n + }, + CJIV: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("p1SQ").LineToolHorzLinePriceAxisView, + n = i("tc+8"), + o = i("Ocx9").DefaultProperty; + class a extends s { + constructor(e, t) { + super(e, t || a.createProperties()), this._priceAxisView = new r(this), i.e( + "lt-pane-views").then(i.t.bind(null, "1oDZ", 7)).then(({ + HorzRayPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Horizontal Ray" + } + priceAxisViews(e, t) { + return this.isSourceHidden() ? null : t === this.priceScale() && this.properties() + .showPrice.value() && this._model.paneForSource(this) === e ? [this + ._priceAxisView + ] : null + } + updateAllViews() { + super.updateAllViews(), this._priceAxisView.update() + } + canHasAlert() { + return !0 + } + _getAlertPlots() { + var e = this._points[0], + t = { + index: e.index + 1, + price: e.price + }; + return [this._linePointsToAlertPlot([e, t], null, !1, !0)] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "e0H+"))) + .HorizontalRayDefinitionsViewModel + } + template() { + var e = s.prototype.template.call(this); + return e.text = this.properties().childs().text.value(), e + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + static createProperties(e) { + var t = new o("linetoolhorzray", e); + return a._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e), e.hasChild("text") || e.addChild("text", new n("")), e + .addExclusion("text") + } + } + t.LineToolHorzRay = a + }, + CLNU: function(e, t, i) { + (function(e) { + TradingView.cleanButAmpersand = function(e, t) { + var i = t ? ["&"] : ["&"]; + return TradingView.clean(e, t, i) + }, TradingView.strip_tags = function(e) { + return e && e.replace ? e.replace(/(<([^>]+)>)/gi, "") : e + }, TradingView.encodeSpread = function(e) { + return encodeURIComponent(e) + }, TradingView.clean = function(e, t, i) { + var s = [ + ["&", "&"], + ["<", "<"], + [">", ">"], + ['"', """], + ["'", "'"], + ["'", "'"] + ], + r = e; + if (!e || !e.replace) return r; + for (var n = 0; n < s.length; n++) { + var o = s[n][0], + a = s[n][1]; + i && i.indexOf && -1 !== i.indexOf(t ? a : o) || (r = t ? r.replace( + new RegExp(a, "g"), o) : r.replace(new RegExp(o, "g"), a)) + } + return r + }, e && e.exports && (e.exports = { + clean: TradingView.clean, + cleanButAmpersand: TradingView.cleanButAmpersand, + stripTags: TradingView.strip_tags + }) + }).call(this, i("YuTi")(e)) + }, + CPmC: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return n + })); + const s = new WeakMap; + + function r(e, t) { + const i = s.get(e); + return i instanceof Function ? i(t) : i && i[t] + } + + function n(e, t, i) { + if (i instanceof Function) return void s.set(e, i); + const r = s.get(e), + n = void 0 === r || r instanceof Function ? {} : r; + n[t] = i, s.set(e, n) + } + }, + CW80: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("MSvv"), + o = i("Ss5c"), + a = i("OH2X"), + l = i("gf4d"), + c = i("USzt"), + h = i("cBZt"); + const u = Object(h.studyIdString)("VbPFixed", "tv-basicstudies"); + class d extends c.a { + constructor(e, t, i, s) { + const r = i || e.studyMetaInfoRepository().findByIdSync({ + type: "java", + studyId: u + }); + super(e, t, r, s) + } + calcIsActualSymbol() { + n.StudyLineDataSource.prototype.calcIsActualSymbol.apply(this) + } + boundToSymbol() { + return !0 + } + isSynchronizable() { + return this.priceScale() === this._model.mainSeries().priceScale() + } + static studyId() { + return u + } + static createProperties(e) { + const t = super._createPropertiesFromStudyIdAndState(u, e); + return c.a._configureProperties(t), t + } + } + var p = i("e92V"), + _ = i("QIuV"); + i.d(t, "setNewToolProperties", (function() { + return g + })), i.d(t, "unsetNewToolProperties", (function() { + return b + })), i.d(t, "getNewToolProperties", (function() { + return v + })), i.d(t, "createLineTool", (function() { + return S + })), i.d(t, "prepareLineToolPropertiesByOwnerSource", (function() { + return y + })), i.d(t, "createLineToolProperties", (function() { + return w + })), i.d(t, "createStudyLineToolProperties", (function() { + return P + })), i.d(t, "supportsPhantomMode", (function() { + return C + })), i.d(t, "isLineTool", (function() { + return x + })), i.d(t, "isStudyLineTool", (function() { + return T + })), i.d(t, "isTrading", (function() { + return I + })), i.d(t, "tryFindStudyLineToolNameByStudyId", (function() { + return M + })), i.d(t, "cloneLineTool", (function() { + return O + })), i.d(t, "lineToolByLinkKey", (function() { + return L + })), i.d(t, "isLineToolName", (function() { + return p.isLineToolName + })), i.d(t, "isStudyLineToolName", (function() { + return p.isStudyLineToolName + })), i.d(t, "isLineDrawnWithPressedButton", (function() { + return p.isLineDrawnWithPressedButton + })); + + function m(e) { + for (const t of Object.keys(e)) TradingView[t] = e[t] + } + m(a), m({ + LineToolRegressionTrend: l.LineToolRegressionTrend, + LineToolVbPFixed: c.a, + LineToolFixedRangeVolumeProfile: d + }); + let f = null; + + function g(e, t) { + return null !== f && f.tool === e && f.toolData === t || (f = { + properties: w(e), + tool: e, + toolData: t + }), f.properties + } + + function b() { + f = null + } + + function v(e) { + return null !== f && f.tool === e ? f.properties : null + } + + function S(e, t, i, r, n) { + let o; + if (Object(s.assert)(Object(p.isLineToolName)(e), "Unknown line tool: " + e), n || i || (i = + v(e) || void 0), "LineToolVbPFixed" === e) o = new c.a(t, i, Object(s.ensureDefined) + (r), t.mainSeries()); + else if ("LineToolFixedRangeVolumeProfile" === e) o = new d(t, i, Object(s.ensureDefined)( + r), t.mainSeries()); + else if ("LineToolRegressionTrend" === e) o = new l.LineToolRegressionTrend(t, i, Object(s + .ensureDefined)(r)); + else { + o = new(Object(s.ensureDefined)(a[e]))(t, i, n) + } + return o.toolname = e, b(), o + } + + function y(e, t) { + const i = Object(s.ensureNotNull)(t.symbolSource()); + e.childs().symbol.setValue(i.symbol()), e.childs().currencyId.setValue(i.currency()), e + .childs().unitId.setValue(i.unit()), e.childs().symbolStateVersion.setValue(2), e + .childs().zOrderVersion.setValue(2) + } + + function w(e, t) { + if (Object(s.assert)(Object(p.isLineToolName)(e), e + " should be name of the line tool"), + "LineToolVbPFixed" === e) return c.a.createProperties(t); + if ("LineToolFixedRangeVolumeProfile" === e) return d.createProperties(t); + if ("LineToolRegressionTrend" === e) return l.LineToolRegressionTrend.createProperties(t); + return Object(s.ensureDefined)(a[e]).createProperties(t) + } + + function P(e, t, i, r, n) { + if (Object(s.assert)(Object(p.isStudyLineToolName)(e), e + + " should be name of the study line tool"), "LineToolVbPFixed" === e) return c.a + .createPropertiesFromStudyMetaInfoAndState(t, i, r, n); + if ("LineToolFixedRangeVolumeProfile" === e) return d + .createPropertiesFromStudyMetaInfoAndState(t, i, r, n); + if ("LineToolRegressionTrend" === e) return l.LineToolRegressionTrend + .createPropertiesFromStudyMetaInfoAndState(t, i, r, n); + throw new Error("Property creation is not implemented for study line tool " + e) + } + + function C(e) { + Object(s.assert)(Object(p.isLineToolName)(e), e + " should be name of the line tool"); + const t = a[e]; + return void 0 !== t && Boolean(t.supportPhantomMode) + } + + function x(e) { + return e instanceof o.LineDataSource + } + + function T(e) { + return e instanceof n.StudyLineDataSource + } + + function I(e) { + return e instanceof _.LineToolTrading + } + + function M(e) { + let t = null; + return e === l.LineToolRegressionTrend.studyId() ? t = "LineToolRegressionTrend" : e === c.a + .studyId() ? t = "LineToolVbPFixed" : e === d.studyId() && (t = + "LineToolFixedRangeVolumeProfile"), t + } + + function O(e, t, i, n) { + const o = t.toolname, + a = w(t.toolname, t.properties().state()); + a.childs().visible.setValue(!0); + const l = Object(s.ensureNotNull)(t.ownerSource()), + c = S(o, e, a); + void 0 !== n && c.setId(n), c.setOwnerSource(l), c.toolname = o; + const h = c.clonePositionOffset(), + u = t.fixedPoints(); + (i ? u.map(e => e.add(new r.Point(h.xCoordOffset, h.yCoordOffset))) : u).forEach(e => c + .addFixedPoint(e)); + const d = t.normalizedPoints(), + p = i ? function(e, t, i) { + const r = Object(s.ensureNotNull)(t.priceScale()), + n = Object(s.ensureNotNull)(t.firstValue()); + return e.map(e => { + const t = e.price, + s = r.priceToCoordinate(t, n) + i.yCoordOffset, + o = r.coordinateToPrice(s, n); + return { + time_t: e.time_t, + price: o, + offset: e.offset + i.barOffset + } + }) + }(d, l, h) : d, + _ = t.points(); + return c.restorePoints(p, _), c.cloneData && c.cloneData(t), c.checkAlert && c.checkAlert(), + c + } + + function L(e, t) { + return e.dataSources().find(e => x(e) && e.linkKey().value() === t) || null + } + }, + Cf1E: function(e, t, i) { + "use strict"; + + function s(e) { + if (void 0 === e) return ""; + if (e instanceof Error) { + let t = e.message; + return e.stack && (t += " " + e.stack), t + } + return "string" == typeof e ? e.toString() : JSON.stringify(e) + } + i.d(t, "a", (function() { + return s + })) + }, + CsKN: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SetScaleRatioPropertiesCommand", (function() { + return n + })); + var s = i("RDU5"), + r = i("Ocx9"); + class n extends s.UndoCommand { + constructor(e, t, i, s) { + super(i), this._property = e, this._newValue = t, this._model = s, this + ._priceScale = this._model.mainSeries().priceScale(), this._oldValue = this + ._property.value(), this._oldMode = this._priceScale.mode() + } + redo() { + this._oldValue = this._property.value(), this._oldMode = this._priceScale + .mode(), Object(r.saveDefaultProperties)(!0), this._priceScale.setMode({ + autoScale: !1, + percentage: !1, + log: !1 + }), this._property.setValue(this._newValue), Object(r.saveDefaultProperties) + (!1), this._model.recalculateAllPanes(), this._model.lightUpdate() + } + undo() { + Object(r.saveDefaultProperties)(!0), this._property.setValue(this._oldValue), + this._priceScale.setMode(this._oldMode), Object(r.saveDefaultProperties)(! + 1), this._model.recalculateAllPanes(), this._model.lightUpdate() + } + } + }, + CwKc: function(e, t) { + e.exports = + '' + }, + CxTi: function(e, t, i) { + e.exports = { + css_value_currency_label_top: "6", + css_value_currency_label_radius: "4", + css_value_currency_label_text_horizontal_padding: "4", + css_value_border_color_light: "#D1D4DC", + css_value_border_color_dark: "#363A45", + "price-axis-currency-label-wrapper": "price-axis-currency-label-wrapper-25tFaE37", + "price-axis-currency-label": "price-axis-currency-label-25tFaE37", + readonly: "readonly-25tFaE37", + multiline: "multiline-25tFaE37", + "price-axis-currency-label-dropdown": "price-axis-currency-label-dropdown-25tFaE37", + "price-axis-currency-label-text": "price-axis-currency-label-text-25tFaE37", + "price-axis-currency-label-arrow-down": "price-axis-currency-label-arrow-down-25tFaE37" + } + }, + DVnF: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("Ss5c"); + class r extends s.LineDataSource { + constructor() { + super(...arguments), this._finished = !1 + } + pointsCount() { + return -1 + } + finished() { + return this._finished + } + finish() { + this._finished = !0, this._lastPoint = null, this.normalizePoints(), this + .createServerPoints() + } + hasEditableCoordinates() { + return !1 + } + addPoint(e, t, i) { + if (this._finished) return !0; + if (this._lastPoint = null, this._points.length > 0) { + const t = this._points[this._points.length - 1], + i = this.pointToScreenPoint(t)[1]; + if (this.pointToScreenPoint(e)[1].subtract(i).length() < 2) return this + ._finished + } + return super.addPoint(e), this._finished + } + restorePoints(e, t, i) { + super.restorePoints(e, t, i), this._finished = !0 + } + } + }, + Daqx: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + const s = ["Z", "Y", "X", "W", "V", "U", "T", "S"], + r = ["A", "B", "C", "D", "E", "F", "G", "H"]; + class n { + constructor(e) { + this.label = e + } + equals(e) { + return null !== e && this.label === e.label + } + } + + function o(e, t) { + const i = "left" === e ? s : r; + return new n(t < i.length ? i[t] : "") + } + }, + Dq3s: function(e) { + e.exports = JSON.parse( + '{"4":["v",["h",0,2],["h",1,3]],"6":["v",["h",0,2,4],["h",1,3,5]],"8":["v",["h",0,2,4,6],["h",1,3,5,7]],"2h":["h",0,1],"2v":["v",0,1],"2-1":["v",["h",0,2],1],"3s":["h",0,["v",1,2]],"3h":["h",0,1,2],"3v":["v",0,1,2],"1-2":["v",0,["h",1,2]],"3r":["h",["v",0,1],2],"4h":["h",0,1,2,3],"4v":["v",0,1,2,3],"4s":["h",0,["v",1,2,3]],"1-3":["v",0,["h",1,2,3]],"2-2":["v",["h",0,1],["v",2,3]],"1-4":["v",0,["h",1,2,3,4]],"5s":["h",0,["v",1,2,3,4]],"6c":["v",["h",0,1],["h",2,3],["h",4,5]],"8c":["v",["h",0,1],["h",2,3],["h",4,5],["h",6,7]],"s":0}' + ) + }, + E3Wt: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("YFKU"), + n = i("RDU5"); + class o extends n.UndoCommand { + constructor(e, t) { + super(""), this._chartModel = e, this._targetIndex = t + } + redo() { + const e = this._chartModel.createPane(this._targetIndex, void 0, this._paneId); + this._paneId = e.id() + } + undo() { + const e = Object(s.ensureDefined)(this._paneId), + t = this._chartModel.panes().find(t => t.id() === e); + void 0 !== t && this._chartModel.removePane(t) + } + createdPaneId() { + return this._paneId + } + } + var a = i("txPx"), + l = i("25b6"), + c = i("qHEz"); + const h = Object(a.getLogger)("Clipboard"); + class u { + constructor(e) { + this._e = e + } + write(e) { + return Object(c.a)(this._toRaw(e), this._e) + } + _toRaw(e) { + const t = { + files: [] + }; + t.text = e.text, void 0 !== e.app ? t.html = this._serializeAppData(e.app, e.text) : + e.html && (t.html = e.html); + for (const i of e.files || []) t.files.push(i); + return t + } + _serializeAppData(e, t) { + return `${t ? Object(l.b)(t.slice(0, 256)) : "📈"}` + } + } + class d { + constructor(e) { + this._e = e + } + async read() { + this._e && 0 === this._e.eventPhase && (h.logWarn( + "Cannot use an already dispatched ClipboardEvent for reading"), this + ._e = null); + const e = this._e ? this._readUsingEvent(this._e) : await this._readUsingApi(); + return this._fromRaw(e) + } + _readUsingEvent(e) { + const t = Object(s.ensure)(e.clipboardData); + e.preventDefault(); + const i = { + files: [] + }; + for (let e = 0; e < t.files.length; e++) i.files.push(t.files[e]); + for (let e = 0; e < t.items.length; e++) { + const s = t.items[e]; + "string" === s.kind && ("text/plain" === s.type ? i.text = t.getData(s.type) : + "text/html" === s.type ? i.html = t.getData(s.type) : i.files.push( + new Blob([t.getData(s.type)], { + type: s.type + }))) + } + return i + } + async _readUsingApi() { + if (!navigator.clipboard || !navigator.clipboard.read) throw new DOMException( + "ClipboardApi is not supported", "NotSupportedError"); + let e, t; + const i = [], + s = await navigator.clipboard.read(); + for (const r of s) + for (const s of r.types) "text/html" === s ? e = r.getType(s).then(this + ._readBlobAsText) : "text/plain" === s ? t = r.getType(s).then(this + ._readBlobAsText) : i.push(r.getType(s)); + return { + text: await t, + html: await e, + files: await Promise.all(i) + } + } + _fromRaw(e) { + const t = {}; + if (void 0 !== e.text && (t.text = e.text), void 0 !== e.html) { + const i = this._parseAppData(e.html); + i ? t.app = i : t.html = e.html + } + return e.files.length > 0 && (t.files = e.files), t + } + _parseAppData(e) { + if (-1 === e.slice(0, 1024).indexOf("data-tradingview-clip")) return; + const t = (new DOMParser).parseFromString(e, "text/html").querySelector( + "[data-tradingview-clip]"); + return t ? t.getAttribute("data-tradingview-clip") || "" : void 0 + } + _readBlobAsText(e) { + return new Promise((t, i) => { + const s = new FileReader; + s.onloadend = () => { + t(s.result) + }, s.onerror = () => { + i(s.error) + }, s.readAsText(e) + }) + } + } + var p = i("d700"); + + function _(e) { + const t = e.target; + return null !== t && 1 === t.nodeType && Object(p.b)(t) + } + + function m(e) { + const t = e.target; + if (null === t) return !1; + const i = (t.ownerDocument || t).getSelection(); + return null !== i && !i.isCollapsed + } + class f extends class { + constructor(e) { + this._callbacks = Object.assign({}, e), this._boundOnCopy = this._onCopyEv.bind( + this), this._boundOnCut = this._onCutEv.bind(this), this._boundOnPaste = + this._onPasteEv.bind(this) + } + listen() { + document.addEventListener("copy", this._boundOnCopy), document.addEventListener( + "cut", this._boundOnCut), document.addEventListener("paste", this + ._boundOnPaste) + } + async peek() { + if ("granted" !== (await navigator.permissions.query({ + name: "clipboard-read" + })).state) throw new Error("clipboard-read is not granted"); + return new d(null).read() + } + uiRequestCopy(e) { + this._callbacks.copyRequested && this._callbacks.copyRequested(new u(null), e) + } + uiRequestCut(e) { + this._callbacks.cutRequested && this._callbacks.cutRequested(new u(null), e) + } + uiRequestPaste(e) { + this._callbacks.pasteRequested && this._callbacks.pasteRequested(new d(null), e) + } + destroy() { + document.removeEventListener("copy", this._boundOnCopy), document + .removeEventListener("cut", this._boundOnCut), document.removeEventListener( + "paste", this._boundOnPaste) + } + _onCopyEv(e) { + e.defaultPrevented || this._callbacks.copyRequested && this._callbacks + .copyRequested(new u(e)) + } + _onCutEv(e) { + e.defaultPrevented || this._callbacks.cutRequested && this._callbacks.cutRequested( + new u(e)) + } + _onPasteEv(e) { + e.defaultPrevented || this._callbacks.pasteRequested && this._callbacks + .pasteRequested(new d(e)) + } + } { + _onCopyEv(e) { + if (!_(e) && !m(e)) return super._onCopyEv(e) + } + _onCutEv(e) { + if (!_(e) && !m(e)) return super._onCutEv(e) + } + _onPasteEv(e) { + if (!_(e)) return super._onPasteEv(e) + } + } + i.d(t, "applyIndicatorsToAllChartsImpl", (function() { + return g + })), i.d(t, "applyIndicatorToAllChartsImpl", (function() { + return b + })), i.d(t, "lineToolsAndGroupsDTOsImpl", (function() { + return S + })), i.d(t, "getStateForChartImpl", (function() { + return y + })), i.d(t, "getAsyncStateForChartImpl", (function() { + return w + })), i.d(t, "resetLineToolsInvalidatedImpl", (function() { + return P + })), i.d(t, "applyLineToolUpdateNotificationImpl", (function() { + return C + })), i.d(t, "createClipboardHandler", (function() { + return x + })), i.d(t, "setBrokerImpl", (function() { + return T + })), i.d(t, "chartsSymbolsImpl", (function() { + return I + })); + Object(r.t)( + "Please give us a clipboard writing permission in your browser or press {keystroke}"); + + function g(e, t) { + const i = t.model().model().studyTemplate(); + e.undoHistory.beginUndoMacro("Apply Indicators to Entire Layout"); + for (let s = 0; s < e.chartWidgetsDefs.length; s++) { + const r = e.chartWidgetsDefs[s].chartWidget; + r !== t && (r.hasModel() && r.model().applyStudyTemplate(i, "")) + } + e.undoHistory.endUndoMacro() + } + + function b(e, t, i, r, n) { + e.undoHistory.beginUndoMacro(n); + for (let a = 0; a < e.chartWidgetsDefs.length; a++) { + const l = e.chartWidgetsDefs[a].chartWidget; + if (l !== t && l.hasModel()) { + const t = l.model(); + let a; + if (r.isOnMainPane) a = Object(s.ensureNotNull)(t.model().paneForSource(l.model() + .model().mainSeries())); + else { + const i = new o(t.model(), r.paneIndex); + e.undoHistory.pushUndoCommand(i); + const n = Object(s.ensureDefined)(i.createdPaneId()); + a = Object(s.ensureDefined)(t.model().panes().find(e => e.id() === n)) + } + const c = t.pasteSourceFromClip(a, i, !0); + if (c && 1 === c.length) { + const e = c[0]; + if (r.asCompare) { + const i = Object(s.ensureNotNull)(t.mainSeries().priceScale()); + t.moveToScale(e, Object(s.ensureDefined)(a), i, n), t.setPriceScaleMode({ + percentage: !0 + }, i, "") + } + } + t.model().lightUpdate() + } + } + e.undoHistory.endUndoMacro() + } + + function v(e) { + let t = 1; + for (; e.has("" + t);) t++; + return "" + t + } + + function S(e) { + const t = new Map, + i = e.chartsCountToSave(), + s = new Set; + for (let r = 0; r < i; r++) + if (r < e.chartWidgetsDefs.length) { + const i = e.chartWidgetsDefs[r].chartWidget, + n = i.id(), + o = i.lineToolsAndGroupsDTO(); + t.set(n, o), s.add(n) + } else { + const i = e.savedChartWidgetOptions[r - e.chartWidgetsDefs.length].content; + i.chartId || (i.chartId = v(s)), + t.set(i.chartId, extractLineToolsDTOFromChartState(i)), s.add(i.chartId) + } return t + } + + function y(e, t, i, s, r, n) { + if (t < e.chartWidgetsDefs.length) { + const o = e.chartWidgetsDefs[t].chartWidget; + return t < e.actualLayoutCount() || o.shouldBeSavedEvenIfHidden() ? o.state(i, s, r, + n) : null + } + const o = e.savedChartWidgetOptions[t - e.chartWidgetsDefs.length].content; + return o + } + + function w(e, t) { + return t < e.chartWidgetsDefs.length ? e.chartWidgetsDefs[t].chartWidget.asyncState() : + Promise.resolve({}) + } + + function P(e, t, i) { + const s = e.chartsCountToSave(); + for (let r = 0; r < s; r++) + if (r < e.chartWidgetsDefs.length) { + const s = e.chartWidgetsDefs[r].chartWidget, + n = s.id(), + o = i.get(n); + s.resetLineToolsInvalidated(t, o) + } else 0 + } + + function C(e, t, i) { + var s; + null === (s = e.map(e => e.chartWidget).find(e => e.id() === t)) || void 0 === s || s + .applyLineToolUpdateNotification(i) + } + + function x(e) { + return new f({ + copyRequested: (t, i) => { + e.activeChartWidget.value().model().clipboardCopy(t, i) + }, + cutRequested: (t, i) => { + e.activeChartWidget.value().model().clipboardCut(t, i) + }, + pasteRequested: (t, i) => { + (i ? i.model().undoModel() : e.activeChartWidget.value().model()) + .clipboardPaste(t, i) + } + }) + } + + function T(e, t) { + 0 + } + + function I(e) { + const t = {}; + return e.chartWidgetsDefs.map(e => e.chartWidget).forEach(e => t[e.id()] = function(e) { + var t, i; + const s = {}, + r = e.model().mainSeries(), + n = r.properties(), + o = r.symbolInfo(); + s.resolution = r.properties().interval.value(), s.symbol_type = null !== o && o + .type || "", s.exchange = null !== o && o.exchange || "", s + .listed_exchange = null !== o && o.listed_exchange || ""; + const a = null !== (t = null == o ? void 0 : o.legs) && void 0 !== t ? t : []; + if (null !== o && r.isSpread()) { + const e = a[0]; + let t = o.base_name[0]; + t = t.split(":")[1], s.symbol = e, s.short_name = t, s.expression = o + .full_name + } else s.symbol = null !== o && o.ticker || n.symbol.value(), s.short_name = n + .shortName.value(); + const l = null !== (i = null == o ? void 0 : o.base_name) && void 0 !== i ? i : + []; + return s.legs = a.map((e, t) => ({ + symbol: e, + pro_symbol: l[t] + })), s + }(e)), t + } + }, + E6p6: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "SessionStage", (function() { + return s + })), + function(e) { + e[e.PRE_SESSION = -1] = "PRE_SESSION", e[e.POST_SESSION = -2] = "POST_SESSION", e[e + .LASTBAR_SESSION = -3] = "LASTBAR_SESSION" + }(s || (s = {})) + }, + EJcV: function(e, t, i) { + "use strict"; + var s = i("rQHv"), + r = i("ocLq"), + n = i("8gnj"), + o = i("XRI5").SymbolExtrapolator, + a = i("ViuT").SessionTimeScale, + l = i("gzUS").PointsetsManager, + c = i("IiTo"), + h = i("OLhd").createDwmAligner, + u = i("LxhU").Interval, + d = i("FQhm"), + p = i("TlGQ").visitObject, + _ = i("ogJP").isObject; + i("2cgs"), i("MrEN"); + var m = i("WIS0").DatafeedRequestsCachedProcessor, + f = i("+6ja").timezoneIsAvailable, + g = i("OLhd").isAlignmentEnabled, + b = i("5fI3"), + v = b.isEncodedExtendedSymbol, + S = b.decodeExtendedSymbol, + y = i("n5al").extractSymbolNameFromSymbolInfo, + w = i("dUJ+").replaceGraphicsTimesWithTimePointIndexIndex, + P = i("Kxc7"); + + function C(e) { + var t = e.findIndex((function(e) { + return -5e6 !== e.index + })); + return -1 === t ? [] : 0 === t ? e : e.slice(t) + } + + function x(e, t) { + return e + "_" + t + } + var T = function(e) { + var t = this; + this._studiesCache = {}, this._objectsDataCache = {}, this._studiesNonSeriesTimes = {}, + this._metainfoCache = [], this._barsCoefficientsCache = {}, this._externalDatafeed = + e, + e.getVolumeProfileResolutionForPeriod && r + .overwriteVolumeProfileResolutionForPeriodGetter((function(t, i, s, r) { + return e.getVolumeProfileResolutionForPeriod(t, i, s, r) + })), this._datafeedConfiguration = null, this._marketStatusWatchers = {}, this + ._resolveRequests = {}, this._resolvePromisesBySymbolId = new Map, this + ._symbolIdToSymbolRequestString = new Map, this._callbacks = {}, this + ._serverTimeOffset = 0, t._logMessage("Datafeed settings received: {0}".format(JSON + .stringify(window.configurationData))), t._datafeedConfiguration = t + ._adoptConfigurationData(window.configurationData), t._fireEvent( + "configuration_received"), t._externalDatafeed.getServerTime && t + ._externalDatafeed.getServerTime((function(e) { + t._serverTimeOffset = e - (new Date).valueOf() / 1e3 + })), this._invalidatedPointsetSessions = new Set, this._refreshPointsetsTimerId = + null, this._pointsetsManagers = {}, this._quotesInfo = [], this._depthInfo = [], + this._endOfData = {}, this._computeStudyCounter = 0, this._symbolExtrapolators = {}, + this._timeScales = {}, this._cachedDatafeed = new m(e, this.serverTimeOffset.bind( + this), this._datafeedConfiguration.reset_cache_timeout), n.setupFeed({ + resolve: function(e, i, s, r) { + t._resolveSymbolByName(e, i, s, r) + }, + subscribe: function(e, i, s, r, n) { + return t._cachedDatafeed.subscribe(e, i, s, function(e, i, s) { + var r = new c.SessionInfo(e.timezone, e.session, e + .session_holidays, e.corrections), + n = c.newBarBuilder(i, r, r); + return function(e) { + if (e && e.count()) { + var i = 1e3 * t.getCurrentUTCTime(); + n.moveTo(i), n.indexOfBar(i) >= 0 && e + .setLastBarClosed(!1) + } + s(e) + } + }(e, i, r), n) + }, + unsubscribe: function(e) { + return t._cachedDatafeed.unsubscribe(e) + } + }) + }; + + function I(e, t) { + return e + "_" + t + } + + function M(e, t, i) { + return e + (t ? "_#_" + t : "") + (i ? "_#_" + i : "") + } + T.prototype._getSymbolExtrapolator = function(e, t, i) { + var s = u.normalize(i), + r = function(e, t, i) { + return e + "," + t.full_name + "," + i + }(e, t, s), + n = this._symbolExtrapolators[r]; + return void 0 === n && (n = new o(t, s), this._symbolExtrapolators[r] = n), n + }, T.prototype._barsCoefficients = function(e, t) { + if (void 0 === S(e).type) return {}; + var i = e + t; + return this._barsCoefficientsCache[i] || (this._barsCoefficientsCache[i] = {}), this + ._barsCoefficientsCache[i] + }, T.prototype.destroy = function() { + this._cachedDatafeed.destroy(), this._externalDatafeed = null, Object.keys(this + ._pointsetsManagers).forEach((function(e) { + this._pointsetsManagers[e].destroy() + }), this), this._pointsetsManagers = {} + }, T.prototype.purgeCache = function() { + this._endOfData = {}, this._resolveRequests = {}, this._objectsDataCache = {}, this + ._studiesNonSeriesTimes = {}, this._studiesCache = {}, this + ._resolvePromisesBySymbolId.clear(), this._symbolIdToSymbolRequestString.clear(), + Object.keys(this._pointsetsManagers).forEach((function(e) { + this._pointsetsManagers[e].destroy() + }), this), this._pointsetsManagers = {}, Object.keys(this._timeScales).forEach(( + function(e) { + this._timeScales[e].destroy() + }), this), this._timeScales = {}, Object.keys(this._symbolExtrapolators) + .forEach((function(e) { + this._symbolExtrapolators[e].destroy() + }), this), this._symbolExtrapolators = {} + }, T.prototype.purgeDataCache = function() { + this._cachedDatafeed.purgeCache() + }, T.prototype._logMessage = function(e) { + P.enabled("charting_library_debug_mode") && console.log(e) + }, + T.prototype.on = function(e, t) { + return this._callbacks.hasOwnProperty(e) || (this._callbacks[e] = []), this._callbacks[ + e].push(t), this + }, T.prototype._fireEvent = function(e, t, i) { + if (this._callbacks.hasOwnProperty(e)) { + for (var s = this._callbacks[e], r = 0; r < s.length; ++r) s[r](t); + i || (this._callbacks[e] = []) + } + }, T.prototype._adoptConfigurationData = function(e) { + var t = TradingView.merge({}, e), + i = t.supported_resolutions; + if (!i || 0 === i.length) return t.supported_resolutions = void 0, t; + for (var s = [], r = 0; r < i.length; r++) { + var n = i[r]; + if (-1 !== s.indexOf(n)) throw new Error("Duplicating resolution `" + n + "`"); + s.push(n) + } + return t.supported_resolutions = s, t + }, T.prototype.supportedResolutions = function() { + return this._datafeedConfiguration.supported_resolutions + }, T.prototype.supportedCurrencies = function() { + return this._datafeedConfiguration.currency_codes || [] + }, T.prototype.supportedUnits = function() { + return this._datafeedConfiguration.units || [] + }, T.prototype.supportedSymbolsTypes = function() { + return this._datafeedConfiguration.symbols_types || [] + }, T.prototype.supportedExchangesList = function() { + return this._datafeedConfiguration.exchanges || [] + }, T.prototype.symbolsGrouping = function() { + return this._datafeedConfiguration.symbols_grouping || { + futures: /$a/ + } + }, T.prototype._findStudyObject = function(e) { + e.endsWith("!") && (e = e.slice(0, -1)); + var t = e.split("@")[0], + i = JSServer.studyLibrary.filter((function(i) { + return i.metainfo.id === e || i.metainfo.shortDescription === t + })); + return 0 === i.length ? null : i[0] + }, T.prototype.getMarks = function(e, t, i, s, r) { + var n = { + red: 6, + green: 5, + blue: 4, + yellow: 3 + }; + if (this._externalDatafeed.getMarks && this._datafeedConfiguration.supports_marks) { + this._logMessage( + "Requesting bars marks: symbol {0}, resolution {1}, range [{2} ... {3}]" + .format(e.full_name, r, new Date(1e3 * t).toUTCString(), new Date(1e3 * i) + .toUTCString())); + var o = this; + this._externalDatafeed.getMarks(e, t, i, (function(t) { + var i = t.map((function(e) { + return e.time = parseInt(e.time), e + })); + o._logMessage( + "Received bars marks: symbol {0}, resolution {1}, marks {2}" + .format(e.full_name, r, JSON.stringify(i))); + var a = h(r, e), + l = P.enabled("two_character_bar_marks_labels"), + c = i.map((function(e) { + return e.tickmark = null !== a ? a + .timeToSessionStart(1e3 * e.time) / 1e3 : e + .time, e.direction = n[e.color], e.onClicked = + function() { + d.emit("onMarkClick", e.id) + }, e.label = !!e.label && (l ? e.label.slice(0, + 2) : e.label[0]), e + })); + s(c) + }), r) + } + }, T.prototype.getTimescaleMarks = function(e, t, i, s, r) { + if (this._externalDatafeed.getTimescaleMarks && this._datafeedConfiguration + .supports_timescale_marks) { + this._logMessage( + "Requesting timescale marks: symbol {0}, resolution {1}, range [{2} ... {3}]" + .format(e.full_name, r, new Date(1e3 * t).toUTCString(), new Date(1e3 * i) + .toUTCString())); + var n = this; + this._externalDatafeed.getTimescaleMarks(e, t, i, (function(t) { + n._logMessage( + "Received timescale marks: symbol {0}, resolution {1}, marks {2}" + .format(e.full_name, r, JSON.stringify(t))); + var i = h(r, e), + o = t.map((function(e) { + return e.tickmark = null !== i ? i + .timeToSessionStart(1e3 * e.time) / 1e3 : e + .time, e + })); + s(o) + }), r) + } + }, T.prototype.getSeriesLastBarTime = function(e, t) { + var i = this._getSeriesData(e, t); + return null === i || 0 === i.length ? null : i[i.length - 1].timeMs + }, T.prototype.getSeriesInterval = function(e, t) { + var i = this._studiesCache[e][t]; + return i ? i.resolution : null + }, T.prototype.getSeriesSymbolInfo = function(e, t) { + var i = this._studiesCache[e][t]; + return i ? i.symbolInfo : null + }, T.prototype.getSeriesInterval = function(e, t) { + var i = this._studiesCache[e][t]; + return i ? i.resolution : null + }, T.prototype.getSeriesSymbolInfo = function(e, t) { + var i = this._studiesCache[e][t]; + return i ? i.symbolInfo : null + }, T.prototype._getSeriesData = function(e, t) { + return this._objectsDataCache[I(e, t)] || null + }, T.prototype._computeStudy = async function(e, t, i, s, n, o, a, l, c, d) { + var p = !0, + _ = []; + null !== l && (this._objectsDataCache[l] = null); + var m = this._computeStudyCounter++; + + function f(e, t) { + if (e < c()) return -5e6; + if (0 === t) return 0; + var i = _[t - 1].index; + return -5e6 === i ? 0 : i + 1 + } + var b = new Map; + var v = !1, + S = this, + y = function() { + return S._studiesCache[e] && S._studiesCache[e][n] && S._studiesCache[e][n] + .activeResolve === m + }; + S._studiesCache[e][n].activeResolve = m; + var w, C, T = this._resolvePromisesBySymbolId.get(x(e, i)); + if (void 0 === T) throw new Error("This should never happen"); + try { + var I = await T; + w = I.symbolInfo, C = I.requestedSymbol + } catch (e) { + return void(y() && d.onSymbolErrorCallback(e)) + } + y() && function(i, c) { + if (!u.parse(s).isIntraday() || i.has_intraday) { + if (u.isDWM(s) && void 0 !== a.to) { + var m = h(s, i); + null !== m && (a.to = m.timeToExchangeTradingDay(a.to)) + } + try { + var y = new r.StudyEngine({ + tickerid: c, + symbolInfo: i, + period: s, + body: t, + sessionId: e, + onErrorCallback: d.onErrorCallback, + dataRange: a, + forceAlignBars: !P.enabled( + "disable_sameinterval_aligning") && g(), + input: function(e) { + return o[e] + }, + out: function(e, t) { + ! function(e, t, i) { + for (var s = e.time, r = "number" == + typeof t ? [t] : t, n = 0; n < r + .length; ++n) { + var o = r[n]; + o && "object" == typeof o && (b.set(n, o + .offset), o = o.value), + "number" == typeof o && isNaN(o) && + (o = void 0), r[n] = o + } + var a = _.length - 1, + l = a < 0 || s > _[a].timeMs; + l ? _.push({ + index: f(s, _.length), + value: [s / 1e3].concat(r), + timeMs: s + }) : (_[a].index = f(s, a), _[a] + .value = [s / 1e3].concat(r), _[a] + .timeMs = s), p || d + .onRealtimeCallback([_[_.length - 1]], + l, _.length, b, i) + }(e, t, i) + }, + nonseriesOut: function(e, t) { + d.onNonSeriesDataUpdate(t, i) + }, + setNoMoreData: function() { + v = !0 + }, + recalc: function(e, s) { + p = !1, _.endOfData = v, t.error && null !== t + .error() || (null !== l && (S + ._objectsDataCache[l] = _), d + .onDataReadyCallback(_, b, i, s)) + } + }); + if (!S._studiesCache[e] || !S._studiesCache[e][n]) throw Error( + "This should never happen"); + S._studiesCache[e][n].engine = y + } catch (e) { + if (!e.studyError) throw e; + d.onErrorCallback(e.message) + } + } else d.onErrorCallback( + "Unsupported resolution. Did you forget to set has_intraday to true?" + ) + }(w, C) + }, T.prototype._createStudy = function(e, t, i, s, r, n, o, a) { + var l = this; + + function c(e, t, i) { + e = C(e), l._timeScales[s].fillIndexesInRows(e), TradingView + .ChartapiMessagerInstances[s].onDataUpdate(r, n, e, t), TradingView + .ChartapiMessagerInstances[s].onStudyCompleted(r, n) + } + + function h(e) { + var t = {}; + if (0 !== e.size) { + var i = {}, + n = l._studiesCache[s][r].metainfo; + e.forEach((function(e, t) { + i[n.plots[t].id] = e + })), t.data = { + offsets: i + } + } + return t + } + a = function(e) { + if (Array.isArray(e)) return e; + for (var t = [], i = l._studiesCache[s][r].metainfo.inputs, n = 0; n < i + .length; n++) t[n] = e[i[n].id]; + return t + }(a), TradingView.ChartapiMessagerInstances[s].onStudyLoading(r, n); + var u = null, + d = !1; + l._computeStudy(s, i, e, t, r, a, this._seriesDataRange(s, o), null, (function() { + if (null === u) { + var e = l._getSeriesData(s, o)[0]; + if (void 0 === e) return 1 / 0; + u = e.timeMs + } + return u + }), { + onDataReadyCallback: function(e, t, i) { + d && 0 === e.length || c(e, h(t)) + }, + onRealtimeCallback: function(e, t, i, o, a) { + e = C(e), l._timeScales[s].fillIndexesInRows(e), TradingView + .ChartapiMessagerInstances[s].onDataUpdate(r, n, e, h(o)) + }, + onSymbolErrorCallback: function() { + TradingView.ChartapiMessagerInstances[s].onStudyError(r, n, + "error in series") + }, + onErrorCallback: function(e) { + TradingView.ChartapiMessagerInstances[s].onStudyError(r, n, e) + }, + onNonSeriesDataUpdate: function(e, t) { + switch (d = !0, e.type) { + case "projection": + break; + case "study_graphics": + var i = { + data: e.data, + indexes: [] + }, + n = w(i); + l._studiesNonSeriesTimes[s][r] = n, i.indexes = l + ._timeScales[s].convertTimesToIndexes(n), c([], i); + break; + case "non_series_data": + n = function(e) { + var t = {}; + p(e, (function(e) { + _(e) && Object.keys(e).forEach(( + function(i) { + i.endsWith( + "__t" + ) && + (t[e[i]] = ! + 0) + })) + }), { + visitInstances: !0 + }); + var i = Object.keys(t).map(Number).sort(( + function(e, t) { + return e - t + })); + return i.forEach((function(e, i) { + t[e] = i + })), Object.assign(e, p(e, (function(e) { + return _(e) && Object.keys( + e).forEach(( + function(i) { + i.endsWith( + "__t" + ) && + (e[i.slice(0, + - + 3 + )] = + t[e[ + i + ]] + ) + })), e + }), { + visitInstances: !0 + })), i + }(i = { + data: e.data, + indexes: [] + }); + l._studiesNonSeriesTimes[s][r] = n, i.indexes = l + ._timeScales[s].convertTimesToIndexes(n), c([], i); + break; + default: + console.warn( + "unsupported non-series data type for study " + + e.type) + } + } + }) + }, T.prototype.onSessionSeriesError = function(e) { + this.stopSources(e); + var t = this._mainSeriesRecord(e); + null !== t && (t.error = !0), this._applyTimeScaleUpdate(e, this._timeScales[e] + .clearTimeScale()) + }, T.prototype.modifySeries = function(e, t, i, s, r) { + var n = this._mainSeriesRecord(e); + if (null === n || n.guid !== t) { + if (null !== n && n.error) return this._studiesCache[e][t].symbolId = i, this + ._studiesCache[e][t].resolution = s, void(this._studiesCache[e][t] + .turnaround = r); + for (var o in this._stopSourcesTree(e, t), this.createSeries(e, t, r, i, s, { + countBack: 0 + }, !0), this._studiesCache[e]) { + var a = this._studiesCache[e][o]; + if (a && "study" === a.type && a.parentId === t) { + this._studiesNonSeriesTimes[e][o] = null; + var l = this._studiesCache[e][a.parentId]; + this._createStudy(l.symbolId, l.resolution, a.studyObject, e, o, a + .turnaround, a.parentId, a.inputs) + } + } + } else this._modifyMainSeries(e, i, s, r) + }, T.prototype._modifyMainSeries = function(e, t, i, s) { + this.stopSources(e); + var r = this._mainSeriesRecord(e); + for (var n in this._studiesCache[e]) { + (o = this._studiesCache[e][n]) && "series" === o.type && (o.guid === r.guid ? + this.createSeries(e, r.guid, s, t, i, { + countBack: 0 + }, !0) : this.createSeries(e, o.guid, o.turnaround, o.symbolId, i, { + countBack: 0 + }, !0)) + } + for (var n in this._studiesCache[e]) { + var o; + if ((o = this._studiesCache[e][n]) && "study" === o.type) { + this._studiesNonSeriesTimes[e][n] = null; + var a = this._studiesCache[e][o.parentId]; + this._createStudy(a.symbolId, a.resolution, o.studyObject, e, n, o + .turnaround, o.parentId, o.inputs) + } + } + this._applyTimeScaleUpdate(e, this._timeScales[e].clearTimeScale()) + }, T.prototype.stopSources = function(e) { + for (var t in this._studiesCache[e]) { + var i = this._studiesCache[e][t]; + i && "series" === i.type && this._stopSourcesTree(e, t) + } + }, T.prototype._stopSourcesTree = function(e, t) { + for (var i in this._studiesCache[e]) { + var s = this._studiesCache[e][i]; + s && (("series" === s.type && i === t || "study" === s.type && s.parentId === + t) && (s.engine && s.engine.isStarted() && s.engine.stop(), s + .activeResolve = -1)) + } + n.unsubscribeUnused() + }, T.prototype._recreateSourcesForDataRange = function(e, t) { + var i = []; + for (var s in this._studiesCache[e]) { + (r = this._studiesCache[e][s]) && "series" === r.type && !this._isEndOfData(e, + s, r.turnaround) && (this._stopSourcesTree(e, s), i.push(s)) + } + for (var s in i.forEach((function(i) { + this._startSourcesTree(e, i, Object.assign({}, t)) + }), this), this._studiesCache[e]) { + var r; + "series" === (r = this._studiesCache[e][s]).type && this._isEndOfData(e, s, r + .turnaround) && TradingView.ChartapiMessagerInstances[e] + .onSeriesCompleted(s, r.turnaround, r.engine.runner.host.symbolInfo + .data_status) + } + this._updateTimeScaleState(e) + }, T.prototype._startSourcesTree = function(e, t, i) { + var s = this._studiesCache[e][t]; + for (var r in this.createSeries(e, t, s.turnaround, s.symbolId, s.resolution, i, ! + 0), this._studiesCache[e]) { + var n = this._studiesCache[e][r]; + n && "study" === n.type && n.parentId === t && this._createStudy(s.symbolId, s + .resolution, n.studyObject, e, r, n.turnaround, n.parentId, n.inputs) + } + }, T.prototype.removeStudy = function(e, t) { + this._studiesCache[e] && this._studiesCache[e][t] && this._studiesCache[e][t] + .engine && (this._studiesCache[e][t].engine.stop(), n.unsubscribeUnused()), + delete this._studiesCache[e][t], delete this._studiesNonSeriesTimes[e][t] + }, T.prototype.removeSeries = function(e, t) { + this._stopSourcesTree(e, t), delete this._studiesCache[e][t], this + ._updateMainTsBuilder(e), this._timeScales[e].isCompleted() && this._timeScales[ + e].setCompleted(!1); + var i = this._timeScales[e].setSeriesBarsTimes(t, []); + this._applyTimeScaleUpdate(e, i), this._updateTimeScaleState(e) + }, T.prototype.modifyStudy = function(e, t, i, s) { + var r = this._studiesCache[e][t]; + if (!r) throw Error("This should never happen"); + var o = this._studiesCache[e][r.parentId]; + r.inputs = s, r.turnaround = i, r.engine && (r.engine.stop(), n + .unsubscribeUnused()), this._studiesNonSeriesTimes[e][t] = null, this + ._createStudy(o + .symbolId, o.resolution, r.studyObject, e, t, i, r.parentId, s) + }, T.prototype.createStudy = function(e, t, i, s, r, n) { + var o = this._studiesCache[e][i], + a = this._findStudyObject(r); + if (null === a) return console.warn("Study does not exist: " + r), void TradingView + .ChartapiMessagerInstances[e].onStudyError(t, s, "unknown study name"); + var l = new a.constructor; + this._studiesCache[e] = this._studiesCache[e] || {}, this._studiesCache[e][t] = { + studyObject: l, + guid: t, + type: "study", + inputs: n, + metainfo: a.metainfo, + turnaround: s, + parentId: i + }, this._studiesNonSeriesTimes[e][t] = null, this._createStudy(o.symbolId, o + .resolution, l, e, t, s, i, n) + }, T.prototype.sessionTimeScale = function(e) { + return this._timeScales[e] || null + }, T.prototype.isTimeScaleExtendedTo = function(e, t) { + var i = this._mainSeriesRecord(e); + if (u.isDWM(i.resolution) && null != i.symbolInfo) { + var s = h(i.resolution, i.symbolInfo); + null !== s && (t = s.timeToSessionStart(t)) + } + var r = this._timeScales[e].indexOfTime(t); + return null !== r && r.index >= 0 + }, T.prototype.ensureExtendedTo = function(e, t, i) { + if (!this._studiesCache[t][e]) throw Error("This should never happen"); + var s = this; + setTimeout((function() { + s._recreateSourcesForDataRange(t, { + to: i + }) + }), 0) + }, T.prototype.extendSeriesRange = function(e, t) { + var i = this._timeScales[e].firstSeriesBarTime(); + if (null !== i) { + var s = this._mainSeriesRecord(e); + if (u.isDWM(s.resolution) && null != s.symbolInfo) { + var r = h(s.resolution, s.symbolInfo); + null !== r && (i = r.timeToExchangeTradingDay(i)) + } + var n = this._symbolIdToSymbolRequestString.get(x(e, s.symbolId)), + o = this._barsCoefficients(n, s.resolution), + a = o.barsCoefficient || 1; + if (!o.barsCoefficient) { + var l = this._getSeriesData(e, s.guid); + null !== l && (o.expectedBarsCount = l.length + t) + } + var c = this; + setTimeout((function() { + c._recreateSourcesForDataRange(e, { + to: i, + countBack: (t + 2) * a + }) + }), 0) + } else this._logMessage("Nothing to extend - there is no points on time scale") + }, T.prototype.seriesTurnaround = function(e, t) { + return this._studiesCache[e] && this._studiesCache[e][t] && this._studiesCache[e][t] + .turnaround + }, T.prototype._seriesDataRange = function(e, t) { + var i = this._studiesCache[e][t]; + return null !== i.firstLoadedTimeMs ? { + to: i.firstLoadedTimeMs, + countBack: 0 + } : i.dataRange + }, T.prototype._applyTimeScaleUpdate = function(e, t) { + if (null !== t) { + var i = []; + for (var s in this._studiesCache[e]) { + var r = this._studiesCache[e][s]; + if (r && "study" === r.type) { + var n = this._studiesNonSeriesTimes[e][s]; + if (n) { + var o = { + indexes: this._timeScales[e].convertTimesToIndexes(n), + data: { + indexes_replace: !0 + } + }; + i.push({ + objId: s, + turnaround: r.turnaround, + data: [], + nonSeriesData: o + }) + } + } + } + TradingView.ChartapiMessagerInstances[e].onTimescaleUpdate(t, i), Promise + .resolve().then(function() { + var t = this._mainSeriesRecord(e); + if (null !== t && null != t.symbolInfo) { + var i = this._getSymbolExtrapolator(e, t.symbolInfo, t + .resolution); + this._pointsetsManagers[e].getUpdatesForSymbol(t.symbolInfo + .full_name, t.resolution, i, this._timeScales[e]) + .forEach((function(t, i) { + TradingView.ChartapiMessagerInstances[e] + .onPointsetDataUpdate(i, null, t) + })) + } + }.bind(this)) + } + }, T.prototype._updateMainTsBuilder = function(e) { + var t = this._mainSeriesRecord(e); + if (null !== t && null != t.symbolInfo) { + var i = this._getSymbolExtrapolator(e, t.symbolInfo, t.resolution); + this._timeScales[e].setMainSymbolExtrapolator(i) + } + }, T.prototype._updateTimeScaleState = function(e) { + var t = !0, + i = !0; + for (var s in this._studiesCache[e]) { + var r = this._studiesCache[e][s]; + "series" === r.type && (i = i && this._isEndOfData(e, s, r.turnaround), t = t && + r.completed) + } + this._timeScales[e].isCompleted() !== t && (this._timeScales[e].setCompleted(t), + t && TradingView.ChartapiMessagerInstances[e].onTimescaleCompleted(i)) + }, T.prototype._mainSeriesRecord = function(e) { + var t = null, + i = null; + for (var s in this._studiesCache[e]) { + var r = this._studiesCache[e][s]; + if ("series" === r.type && (null === t && (t = r), r.isMain)) { + i = r; + break + } + } + return null === i && (i = t), null !== i && (i.isMain = !0), i + }, T.prototype._seriesCount = function(e) { + var t = 0; + for (var i in this._studiesCache[e]) { + "series" === this._studiesCache[e][i].type && (t += 1) + } + return t + }, T.prototype._prepareSeriesNonSeriesData = function(e, t, i) { + var s = i.data[i.data.length - 1], + r = this._getSeriesData(e, t), + n = null === r ? [] : i.data; + return { + data: { + data: { + reversalAmount: i.reversalAmount, + boxSize: i.boxSize, + price: s ? s[4] : i.price, + bars: n.map((function(e, t) { + return { + time: t, + open: e[1], + high: e[2], + low: e[3], + close: e[4], + volume: e[5], + factor: e[6], + additionalPrice: e[6] + } + })) + } + }, + indexes: this._timeScales[e].convertTimesToIndexes(n.map((function(e) { + var t = e[0] || 0; + return t < 0 ? r[r.length + t].timeMs : i.projectionTime + t + }))) + } + }, T.prototype.createSeries = function(e, t, i, s, n, o, a) { + this._setEndOfData(e, t, i, !1); + var l = new r.OHLCV; + this._studiesCache[e] = this._studiesCache[e] || {}; + var c = this._getSeriesData(e, t), + h = this._studiesCache[e][t], + d = this._seriesCount(e), + p = this._mainSeriesRecord(e); + if (!h || u.isEqual(h.resolution, n) && h.symbolId === s) void 0 !== o.countBack && + null !== c && 0 !== c.length && (o.to = c[0].timeMs), h && null != h + .firstLoadedTimeMs ? o.to = void 0 !== o.to ? Math.min(h.firstLoadedTimeMs, o + .to) : h.firstLoadedTimeMs : h || 0 === d || null !== p && (null != p + .firstLoadedTimeMs ? (o.to = p.firstLoadedTimeMs, o.countBack = 0) : o = + Object.assign({}, p.dataRange)); + else if (1 === d) void 0 !== o.countBack && null !== c && (o.countBack += c.length); + else { + var _ = this._timeScales[e].firstSeriesBarTime(); + (void 0 === o.to || null !== _ && _ < o.to) && (o.to = _, o.countBack = 0) + } + if (void 0 === o.countBack && (o.countBack = 0), void 0 === o.to && 0 === o + .countBack && (o.countBack = 100), this._studiesCache[e][t] = { + symbolId: s, + resolution: n, + studyObject: l, + guid: t, + type: "series", + turnaround: i, + dataRange: o, + firstLoadedTimeMs: null, + symbolInfo: null, + isMain: h && h.isMain || 0 === d, + completed: !1 + }, null === p || p.guid === t || !p.error) { + this._updateMainTsBuilder(e), this._updateTimeScaleState(e), TradingView + .ChartapiMessagerInstances[e].onSeriesLoading(t, i); + var m = this; + this._computeStudy(e, l, s, n, t, [], o, I(e, t), (function() { + return -1 / 0 + }), { + onDataReadyCallback: function(r, o, l, c) { + var h = m._studiesCache[e][t]; + if (!h) throw Error("This should never happen"); + if (h.symbolInfo = l, h.firstLoadedTimeMs = c + .firstLoadedTimeMs, h.completed = !0, m + ._updateMainTsBuilder(e), a && m._pointsetsManagers[e] + .invalidatePointsetsForSymbol(l.full_name, n), 0 !== r + .length) { + var u = m._symbolIdToSymbolRequestString.get(x(e, s)), + d = m._barsCoefficients(u, n); + d.expectedBarsCount && d.barsCount && (d + .barsCoefficient = Math.min(Math.max(d + .barsCoefficient || 1, parseInt(d + .expectedBarsCount / (r.length - d + .barsCount) + .5)), 100)), d + .barsCount = r.length, m._clearSeriesData(e, t) + } else !c.endOfData && h.isMain && setTimeout((function() { + m._studiesCache[e] && m + ._recreateSourcesForDataRange(e, { + countBack: 10 + }) + }), 0); + f(l), c.endOfData && (m._logMessage( + "Series has no more data on server: {0}".format( + l.full_name)), m._setEndOfData(e, t, i)), 0 === + r.length && m._clearSeriesData(e, t), TradingView + .ChartapiMessagerInstances[e].onSeriesCompleted(t, i, l + .data_status), m._updateTimeScaleState(e) + }, + onRealtimeCallback: function(s, r, n, o, a) { + f(a, s), m._timeScales[e].fillIndexesInRows(s); + var l = s[s.length - 1]; + if (r) { + if (!m._studiesCache[e][t]) throw Error( + "This should never happen"); + m._logMessage("New bar arrived: symbol {0}, bar {1}" + .format(a.full_name, JSON.stringify(l))) + } else m._logMessage("Last bar update: symbol {0}, bar {1}" + .format(a.full_name, JSON.stringify(l))), + TradingView.ChartapiMessagerInstances[e].onDataUpdate(t, + i, s, null); + m._fireEvent("realtime_tick", s[s.length - 1], !0) + }, + onSymbolErrorCallback: function(t) { + m._logMessage("Series symbol resolve error"), TradingView + .ChartapiMessagerInstances[e].onSymbolError(s, t || + "resolve error"), g(t || "resolve error") + }, + onErrorCallback: function(e) { + m._logMessage("Series error: " + e), g(e) + }, + onNonSeriesDataUpdate: function(s, r) { + if ("projection" !== s.type) throw new Error( + "unexpected non-series data type for series " + + s.type); + var n = m._getSeriesData(e, t); + if (null !== n) f(r, 0 === n.length ? void 0 : [n[n.length - + 1]], s); + else { + s = m._prepareSeriesNonSeriesData(e, t, s); + TradingView.ChartapiMessagerInstances[e].onDataUpdate(t, + i, [], s) + } + } + }) + } + + function f(s, r, o) { + var a = []; + if (void 0 !== o) { + var l = (o.data || []).reduce((function(e, t) { + return Math.max(e, t[0] || 0) + }), -1); + if (null != o.projectionTime) + for (var c = 0; c <= l; ++c) a.push(o.projectionTime + c) + } + var h = null, + u = null, + d = s ? m._getSymbolExtrapolator(e, s, n) : null; + if (void 0 !== r) { + var p = r.map((function(e) { + return e.timeMs + })).concat(a); + null !== d && d.replaceBarsTimesTail(p, r.length), u = m._timeScales[e] + .replaceSeriesBarsTimesTail(t, p), h = r + } else { + var _ = m._getSeriesData(e, t) || [], + f = _.map((function(e) { + return e.timeMs + })).concat(a); + null !== d && d.setBarsTimes(f, _.length), u = m._timeScales[e] + .setSeriesBarsTimes(t, f), h = _ + } + if (m._applyTimeScaleUpdate(e, u), 0 !== h.length || void 0 !== o) { + m._timeScales[e].fillIndexesInRows(h); + var g = void 0 !== o ? m._prepareSeriesNonSeriesData(e, t, o) : null; + TradingView.ChartapiMessagerInstances[e].onDataUpdate(t, i, h, g) + } + } + + function g(s) { + var r = m._studiesCache[e][t]; + r.completed = !0, TradingView.ChartapiMessagerInstances[e].onSeriesError(t, i, + s), P.enabled("clear_bars_on_series_error") && (r.isMain ? m + .onSessionSeriesError(e) : m._clearSeriesData(e, t)) + } + }, T.prototype._clearSeriesData = function(e, t) { + var i = {}; + for (var s in i[t] = { + turnaround: this._studiesCache[e][t].turnaround + }, this._studiesCache[e]) { + var r = this._studiesCache[e][s]; + "study" === r.type && r.parentId === t && (i[s] = { + turnaround: r.turnaround + }) + } + TradingView.ChartapiMessagerInstances[e].onClearData(i) + }, T.prototype.requestMoreTickmarks = function(e, t) { + var i = this._timeScales[e]; + i.setMinFutureBarsCount(i.minFutureBarsCount() + t); + var s = i.firstFutureBarIndex(), + r = i.tickMarks(s); + TradingView.ChartapiMessagerInstances[e].onTickmarksUpdated(s, r) + }, T.prototype.chartCreateSession = function(e) { + this._pointsetsManagers[e] = new l, this._timeScales[e] = new a, this + ._studiesNonSeriesTimes[e] = {} + }, T.prototype.chartDeleteSession = function(e) { + this._pointsetsManagers[e].destroy(), delete this._pointsetsManagers[e], this + ._timeScales[e].destroy(), delete this._timeScales[e], delete this + ._studiesNonSeriesTimes[e] + }, T.prototype.removePointset = function(e, t) { + this._pointsetsManagers[e].removePointset(t) + }, T.prototype.createPointset = async function(e, t, i, s, r) { + var n, o = this._resolvePromisesBySymbolId.get(x(e, i)); + try { + n = (await o).symbolInfo + } catch (e) { + return + } + var a = this._getSymbolExtrapolator(e, n, s); + if (this._pointsetsManagers[e].createPointset(t, n.full_name, s, r, a), null === + this._refreshPointsetsTimerId) { + var l = this; + this._refreshPointsetsTimerId = setTimeout((function() { + l._refreshPointsetsTimerId = null, l._refreshPointsets(l + ._invalidatedPointsetSessions), l + ._invalidatedPointsetSessions.clear() + }), 0) + } + this._invalidatedPointsetSessions.add(e) + }, T.prototype._refreshPointsets = function(e) { + var t = this; + e.forEach((function(e) { + var i = t._studiesCache[e]; + if (null != i) { + var s = null; + for (var r in i) { + var n = i[r]; + if ("series" === n.type) { + s = n; + break + } + } + if (null !== s && null != s.symbolInfo) { + var o = t._getSymbolExtrapolator(e, s.symbolInfo, s + .resolution); + t._pointsetsManagers[e].getUpdatesForSymbol(s.symbolInfo + .full_name, s.resolution, o, t._timeScales[e]) + .forEach((function(t, i) { + TradingView.ChartapiMessagerInstances[e] + .onPointsetDataUpdate(i, null, t) + })) + } + } + })) + }, T.prototype.studiesMetadata = function() { + return 0 === this._metainfoCache.length && (this._metainfoCache = JSServer + .studyLibrary.map((function(e) { + return e.metainfo + })), this._metainfoCache.push({ + palettes: {}, + inputs: [], + plots: [{ + id: "open", + type: "line" + }, { + id: "high", + type: "line" + }, { + id: "low", + type: "line" + }, { + id: "close", + type: "line" + }, { + id: "volume", + type: "line" + }], + graphics: {}, + _metainfoVersion: 48, + description: "Unnamed Study", + format: { + type: "inherit" + }, + is_hidden_study: !0, + is_price_study: !1, + shortDescription: "Unnamed Study", + description_localized: "Unnamed Study", + id: "BarSetHeikenAshi@tv-prostudies", + shortId: "BarSetHeikenAshi", + packageId: "tv-basicstudies", + version: "13", + fullId: "BarSetHeikenAshi@tv-basicstudies-13", + productId: "tv-basicstudies", + name: "BarSetHeikenAshi@tv-basicstudies" + })), this._metainfoCache + }, T.prototype.searchSymbols = function(e, t, i, s) { + this._logMessage( + "Symbol search requested: search string `{0}`, exchange: `{1}`, type `{2}`" + .format(e, t, i)); + var r = this; + this._externalDatafeed.searchSymbols(e, t, i, (function(e) { + r._logMessage("Symbol search response: {0}".format(JSON + .stringify(e))), s(e) + })) + }, T.prototype.resolveSymbol = function(e, t, i) { + var s = this; + this._symbolIdToSymbolRequestString.set(x(e, t), i), this + ._resolvePromisesBySymbolId.set(x(e, t), new Promise((function(r, n) { + s._resolveSymbolImpl(i, (function(s) { + TradingView.ChartapiMessagerInstances[e] + .onSymbolResolved(t, s), r({ + symbolInfo: s, + requestedSymbol: i + }) + }), (function(i) { + TradingView.ChartapiMessagerInstances[e] + .onSymbolError(t, i), n(i) + })) + }))) + }, T.prototype._resolveSymbolImpl = function(e, t, i) { + v(e) || console.error( + "Expect to get symbol encoded string, but got the following instead: " + + e); + var s = S(e), + r = "string" == typeof s.symbol ? s : s.symbol, + n = r.symbol, + o = r["currency-id"], + a = r["unit-id"]; + this._resolveSymbolByName(n, { + currency: o, + unit: a + }, t, i) + }, T.prototype._resolveSymbolByName = function(e, t, i, s) { + var r, n = t && t.currency, + o = t && t.unit, + a = M(e, n, o); + if (this._resolveRequests[a]) r = this._resolveRequests[a]; + else { + r = this._resolveSymbolInternal(e, n || void 0, o || void 0), this + ._resolveRequests[a] = r; + var l = this; + r.then((function(t) { + l._resolveRequests[M(e, t.currency_id, t.unit_id)] = r, l + ._resolveRequests[M(y(t, null), t.currency_id, t + .unit_id)] = r, l._resolveRequests[M(y(t, null), n, + o)] = r + })).catch((function() {})) + } + r.then(i).catch(s) + }, T.prototype._resolveSymbolInternal = function(e, t, i) { + var s = this; + return new Promise(function(r, n) { + this._logMessage("Symbol resolve requested: `{0}` ".format(e)); + var o = !0; + this._externalDatafeed.resolveSymbol(e, (function(t) { + o && console.warn( + "`resolveSymbol` should return result asynchronously. Use `setTimeout` with 0 interval to execute the callback function." + ), s._logMessage( + "Symbol resolved: `{0}`, SymbolInfo in server response {1}" + .format(e, JSON.stringify(t))), + function(e) { + if (e.base_name || (e.base_name = [e.name]), + e.legs || (e.legs = [e.name]), e + .exchange || (e.exchange = e[ + "exchange-listed"]), e.full_name || + (e.full_name = e.symbol || (e.exchange ? + e.exchange + ":" + e.name : e + .name)), e.pro_name || (e.pro_name = + e.full_name), e.data_status || (e + .data_status = "streaming"), e + .ticker || (e.ticker = e.symbol || e + .name), !e.session && e[ + "session-regular"] && (e.session = + e["session-regular"]), !e.minmov && + e.minmovement && (e.minmov = e + .minmovement), e.currency_code && (e + .currency_id = e.currency_code), e + .original_currency_code && (e + .original_currency_id = e + .original_currency_code), e + .holidays && (e.session_holidays = e + .holidays), e.supported_resolutions) + for (var t = 0; t < e + .supported_resolutions.length; t++ + ) { + var i = u.parse(e + .supported_resolutions[t]); + i.isValid() && (e + .supported_resolutions[t] = + i.value()) + } + }(t), + function(e) { + function t(e) { + console.warn("SymbolInfo validation: " + + e) + } + if (e.has_empty_bars && !g() && t( + 'both has_empty_bars field and featureset "disable_resolution_rebuild" are enabled and may cause data issues (see #3329)' + ), (void 0 === e.minmov || e + .minmov <= 0) && t( + "minmov must be positive"), ( + void 0 === e.pricescale || e + .pricescale <= 0) && t( + "pricescale must be positive"), + void 0 !== e.name && 0 !== e.name + .length || t( + "name must be non-empty string"), + void 0 !== e.session && 0 !== e.session + .length || t( + "session must be non-empty string"), + void 0 !== e.holidays && t( + "field holidays is deprecated, use session_holidays instead" + ), void 0 === e.timezone || 0 === e + .timezone.length ? t( + "timezone must be non-empty string" + ) : "exchange" !== e.timezone && f(e + .timezone) || "UTC" !== e + .timezone && t( + 'unsupported timezone "{0}"'.format( + e.timezone)), void 0 !== e + .intraday_multipliers) { + var i = e.intraday_multipliers; + if (Array.isArray(i)) + for (var s = 0; s < i.length; ++s) + "string" != typeof i[s] && t( + 'intraday_multipliers[{0}] = "{1}" must be string (now: {2})' + .format(s + 1, i[s], + typeof i[s])); + else t( + "intraday_multipliers must be array" + ) + }(e.supported_resolutions || []).filter(( + function(e) { + return !u.isValid(e) + })).forEach((function(e) { + t("supported_resolutions field contains invalid value: " + + e) + })) + }(t), s._logMessage( + "Symbol info after post-processing: `{0}`, SymbolInfo {1}" + .format(e, JSON.stringify(t))), r(t) + }), (function(t) { + s._logMessage( + "Symbol resolve failed: `{0}`, reason: `{1}`" + .format(e, t)), n(t) + }), { + currencyCode: t, + unitId: i + }), o = !1 + }.bind(this)) + }, T.prototype._createMarketStatusWatchers = function(e, t) { + void 0 === this._marketStatusWatchers[e] && (this._marketStatusWatchers[ + e] = {}); + var i = this; + t.forEach((function(t) { + void 0 === i._marketStatusWatchers[e][t] && (i + ._marketStatusWatchers[e][t] = new s(i + ._resolveSymbolByName.bind(i), e, t)) + })) + }, T.prototype._removeMarketStatusWatchers = function(e) { + var t = this; + Object.keys(this._marketStatusWatchers[e] || {}).forEach((function(i) { + t._marketStatusWatchers[e][i].stop() + })), this._marketStatusWatchers[e] = {} + }, + T.prototype._stopQuotesSubscription = function(e) { + this._quotesInfo[e].listenerGUID && (this._externalDatafeed.unsubscribeQuotes( + this._quotesInfo[e].listenerGUID), this._quotesInfo[e] + .listenerGUID = void 0), this._removeMarketStatusWatchers(e) + }, T.prototype._startQuotesSubscription = function(e) { + var t = {}, + i = this; + + function s(t, s) { + var r = i._marketStatusWatchers[e][t.n]; + t.symbolname = t.n, t.status = t.s, t.values = t.v, t.values.change = t.v + .ch, t.values.last_price = t.v.lp, t.values.change_percent = t.v.chp, t + .values.current_session = t.v.cs || r && r.marketStatus(), t.values + .pricescale = s.pricescale, t.values.minmov = s.minmov, t.values + .minmove2 = s.minmove2 || 0, t.values.fractional = s.fractional || !1, + r && t.v.cs && r.stop(), TradingView.ChartapiMessagerInstances[e] + .onQuotesData([e].concat([t])) + } + + function r(e) { + e.forEach((function(e) { + void 0 !== t[e.n] ? null !== t[e.n] && s(e, t[e.n]) : i + ._resolveSymbolByName(e.n, null, (function(i) { + t[e.n] = i, s(e, i) + }), (function() { + t[e.n] = null + })) + })) + } + var n = this._quotesInfo[e].symbols; + 0 !== n.length && (this._externalDatafeed.getQuotes && !P.enabled( + "charting_library") ? this._externalDatafeed.getQuotes(n, (function( + t) { + i._quotesInfo[e] && (r(t), i._quotesInfo[e].listenerGUID = + e, i._externalDatafeed.subscribeQuotes(n, i + ._quotesInfo[e].fastSymbols, r, i._quotesInfo[e] + .listenerGUID)) + }), (function(e) {})) : !this._externalDatafeed.getQuotes && P.enabled( + "trading_terminal") && setTimeout((function() { + r(n.map((function(e) { + return { + n: e, + s: "ok", + v: {} + } + }))) + })), this._createMarketStatusWatchers(e, n)) + }, T.prototype._restartQuotesSubscription = function(e) { + this._stopQuotesSubscription(e), this._startQuotesSubscription(e) + }, T.prototype.quoteCreateSession = function(e) { + this._quotesInfo[e] = { + symbols: [], + fastSymbols: [], + listenerGUID: void 0 + } + }, T.prototype.quoteDeleteSession = function(e) { + this._stopQuotesSubscription(e), this._quotesInfo[e] = null + }, T.prototype.quoteSetFields = function(e, t) {}, T.prototype.quoteAddSymbols = + function(e, t) { + this._quotesInfo[e].symbols = this._filteredSymbols(this._quotesInfo[e].symbols + .concat(t)), this._restartQuotesSubscription(e) + }, T.prototype.quoteRemoveSymbols = function(e, t) { + this._quotesInfo[e].symbols = this._quotesInfo[e].symbols.filter((function(e) { + return t.indexOf(e) < 0 + })), this._restartQuotesSubscription(e) + }, T.prototype.quoteFastSymbols = function(e, t) { + this._quotesInfo[e].fastSymbols = this._filteredSymbols(t), this + ._restartQuotesSubscription(e) + }, T.prototype.quoteHibernateAll = function(e) {}, T.prototype + ._stopDepthSubscription = function(e) { + this._depthInfo[e].listenerGUID && (this._externalDatafeed.unsubscribeDepth(this + ._depthInfo[e].listenerGUID), this._depthInfo[e].listenerGUID = + void 0) + }, T.prototype._startDepthSubscription = function(e) { + var t = this, + i = this._depthInfo[e].symbol; + + function s(e) { + return e.map((function(e) { + return { + p: e.price, + v: e.volume + } + })) + } + + function r(e) { + var t = {}; + return t.s = i, t.bids = s(e.bids), t.asks = s(e.asks), t + } + i && this._externalDatafeed.subscribeDepth && (t._depthInfo[e].listenerGUID = + this._externalDatafeed.subscribeDepth(i, (function(i) { + var s; + t._depthInfo[e] && ((s = i).snapshot ? TradingView + .ChartapiMessagerInstances[e].onDepthData([e] + .concat([r(s)])) : TradingView + .ChartapiMessagerInstances[e].onDepthUpdate([e] + .concat([r(s)]))) + }))) + }, T.prototype._restartDepthSubscription = function(e) { + this._stopDepthSubscription(e), this._startDepthSubscription(e) + }, T.prototype.depthCreateSession = function(e) { + this._depthInfo[e] = { + symbol: null, + listenerGUID: void 0 + } + }, T.prototype.depthDeleteSession = function(e) { + this._depthInfo[e].symbol = null, this._stopDepthSubscription(e), delete this + ._depthInfo[e] + }, T.prototype.depthSetSymbol = function(e, t) { + this._depthInfo[e].symbol = t, this._restartDepthSubscription(e) + }, T.prototype._filteredSymbols = function(e) { + var t = []; + return e.forEach((function(e) { + e instanceof Object || t.indexOf(e) < 0 && t.push(e) + })), t + }, T.prototype._isEndOfData = function(e, t, i) { + var s = e + "!" + t + "@" + i; + return !!this._endOfData[s] + }, T.prototype._setEndOfData = function(e, t, i, s) { + var r = e + "!" + t + "@" + i; + this._endOfData[r] = !1 !== s + }, T.prototype.serverTimeOffset = function() { + return this._serverTimeOffset + }, T.prototype.serverTime = function() { + return 1e3 * this.getCurrentUTCTime() + }, T.prototype.getCurrentUTCTime = function() { + return (new Date).valueOf() / 1e3 + this._serverTimeOffset + }, T.prototype.switchTimezone = function(e, t) { + this._timeScales[e].setTimezone(t); + var i = this._timeScales[e].tickMarks(); + null !== i && TradingView.ChartapiMessagerInstances[e].onTickmarksUpdated(0, i) + }, e.exports = T + }, + EX27: function(e, t, i) { + "use strict"; + var s = i("Eyy1").ensureNotNull, + r = i("IiTo"), + n = i("LxhU").Interval, + o = i("EJcV"), + a = i("MrEN"), + l = i("XzZr"), + c = l.ChartApiInterface, + h = l.HandlerInfo, + u = i("ogJP").requireFullInterfaceImplementation, + d = i("txPx").getLogger("Chart.ChartApiLocal"), + p = i("uDHo").TIMEFRAMETYPE, + _ = i("OLhd").createDwmAligner; + TradingView.STUDY_COUNT_LIMIT = 210, JSServer.ChartApi = function(e) { + this._notificationHandlers = {}, this._sessions = {}, this.studyCounter = 0, this + ._connected = !1, this._enabled = !1, this._studyEngine = new o(e), this + ._callbacks = {}, this._serverTimeOffset = 0; + var t = this; + this._studyEngine.on("configuration_received", (function() { + t._fireEvent("configuration_received") + })), this._studyEngine.on("realtime_tick", (function(e) { + var i = { + time: e.value[0] / 1e3, + open: e.value[1], + high: e.value[2], + low: e.value[3], + close: e.value[4], + volume: e.value[5] + }; + t._fireEvent("realtime_tick", i, !0) + })), this._setVisibleRangeTimeout = {} + }, JSServer.ChartApi.prototype.destroy = function() { + this._studyEngine.destroy(), this._studyEngine = null + }, JSServer.ChartApi.prototype.purgeCache = function(e) { + this._studyEngine.purgeCache(), this._studyEngine.purgeDataCache() + }, JSServer.ChartApi.prototype.defaultWatchlistSymbols = function() { + return this._watchlistSettings.default_symbols + }, JSServer.ChartApi.prototype.defaultResolutions = function() { + return this._studyEngine.supportedResolutions() || ["1", "3", "5", "15", "30", "45", + "60", "120", "180", "240", "1D", "1W", "1M" + ] + }, JSServer.ChartApi.prototype.availableCurrencies = function() { + var e = this._studyEngine.supportedCurrencies().map((function(e) { + return { + id: e, + code: e, + convertible: !0 + } + })); + return Promise.resolve(e) + }, JSServer.ChartApi.prototype.availableUnits = function() { + return Promise.resolve(this._studyEngine.supportedUnits()) + }, JSServer.ChartApi.prototype.supportedSymbolsTypes = function() { + return this._studyEngine.supportedSymbolsTypes() + }, JSServer.ChartApi.prototype.supportedExchangesList = function() { + return this._studyEngine.supportedExchangesList() + }, JSServer.ChartApi.prototype.symbolsGrouping = function() { + return this._studyEngine.symbolsGrouping() + }, JSServer.ChartApi.prototype.start = function() { + this._enabled = !0, this._fireEvent("start_enabled") + }, JSServer.ChartApi.prototype.unsubscribe = function(e, t) { + var i = this._callbacks[e]; + i && i.splice(i.indexOf(t), 1) + }, JSServer.ChartApi.prototype.on = function(e, t) { + return this._callbacks.hasOwnProperty(e) || (this._callbacks[e] = []), this._callbacks[ + e].push(t), this + }, JSServer.ChartApi.prototype._fireEvent = function(e, t, i) { + if (this._callbacks.hasOwnProperty(e)) { + var s = this._callbacks[e].slice(0); + i || (this._callbacks[e] = []); + for (var r = 0; r < s.length; ++r) s[r](t) + } + }, JSServer.ChartApi.prototype.chartCreateSession = function(e, t) { + this._studyEngine.chartCreateSession(e) + }, JSServer.ChartApi.prototype.chartDeleteSession = function(e) { + this._studyEngine.chartDeleteSession(e) + }, JSServer.ChartApi.prototype.createSession = function(e, t) { + TradingView.ChartapiMessagerInstances[e] = new a(this, e), this._sessions[e] = t, this + ._notificationHandlers[e] = {}, this.connected() && t.onMessage({ + method: "connected", + params: [] + }) + }, JSServer.ChartApi.prototype.removeSession = function(e) { + delete this._sessions[e], delete this._notificationHandlers[e], this._studyEngine + .stopSources(e) + }, JSServer.ChartApi.prototype.connected = function() { + return this._connected + }, JSServer.ChartApi.prototype.connect = function() { + if (this._enabled) this.connected() || (this._connected = !0, this.sessionid = + "dummy session id", this._notifySessions({ + method: "connected", + params: [] + })); + else { + var e = this; + this.on("start_enabled", (function() { + e.connect() + })) + } + }, JSServer.ChartApi.prototype.disconnect = function() { + this._connected = !1, this._notifySessions({ + method: "disconnected", + params: [] + }), this.purgeCache(), this.studyCounter = 0 + }, JSServer.ChartApi.prototype.switchTimezone = function(e, t) { + this._studyEngine.switchTimezone(e, t) + }, JSServer.ChartApi.prototype.receiveLocalResponse = function(e) { + this._dispathNotification(e), this._fireEvent("message_" + e.method, void 0, !0) + }, JSServer.ChartApi.prototype.getMarks = function(e, t, i, s, r) { + this._studyEngine.getMarks(e, t, i, s, r) + }, JSServer.ChartApi.prototype.getTimescaleMarks = function(e, t, i, s, r) { + this._studyEngine.getTimescaleMarks(e, t, i, s, r) + }, JSServer.ChartApi.prototype.resolveSymbol = function(e, t, i, s, r) { + this._notificationHandlers[e][t] = new h(s, t), this._studyEngine.resolveSymbol(e, t, i) + }, JSServer.ChartApi.prototype._doWhenSeriesDataReceived = function(e, t) { + TradingView.ChartapiMessagerInstances[e].seriesCompleted.subscribe(null, t, !0) + }, JSServer.ChartApi.prototype.createSeries = function(e, t, i, s, r, n, o, a) { + var l = this; + this._notificationHandlers[e][t] = new h((function(r) { + "series_completed" === r.method && null !== o && (l._applyTimeFrame(e, + s, t, i, o), o = null), a(r) + }), t), this._studyEngine.createSeries(e, t, i, s, r, { + countBack: n || 300 + }) + }, JSServer.ChartApi.prototype.removeSeries = function(e, t) { + delete this._notificationHandlers[e][t], this._studyEngine.removeSeries(e, t) + }, JSServer.ChartApi.prototype.setVisibleTimeRange = function(e, t, i, r, n, o, a, l) { + var c = r, + h = !0 !== (a = a || {}).applyDefaultRightMargin && void 0 === a + .percentRightMargin && void 0 !== n ? n : null, + u = _(this._studyEngine.getSeriesInterval(e, t), this._studyEngine + .getSeriesSymbolInfo(e, t)); + null !== u && (c = u.timeToSessionStart(1e3 * c) / 1e3, null !== h && (h = u + .timeToSessionStart(1e3 * h) / 1e3)); + var d = this; + + function p() { + var r = d._studyEngine.sessionTimeScale(e); + if (null !== r) { + var n, u = r.indexOfTime(1e3 * c); + if (null === h) n = r.lastSessionBarIndex(); + else { + var p = r.indexOfTime(1e3 * h); + n = p && p.index + } + if (null !== u && null !== n) { + var _ = u.index; + if (u.timeMs < 1e3 * c && (_ += 1), !1 === o) { + const e = s(r.firstSessionBarIndex()); + _ < e && (_ = e) + } + _ > n || (TradingView.ChartapiMessagerInstances[e].onSeriesTimeframeUpdate( + t, i, _, n, a), l && setTimeout(l, 0)) + } + } + } + if (this._studyEngine.isTimeScaleExtendedTo(e, 1e3 * r)) p(); + else { + var m = TradingView.ChartapiMessagerInstances[e].seriesCompleted, + f = TradingView.ChartapiMessagerInstances[e].seriesError; + void 0 !== this._setVisibleRangeTimeout[e] && clearTimeout(this + ._setVisibleRangeTimeout[e]), this._setVisibleRangeTimeout[e] = setTimeout( + function() { + delete this._setVisibleRangeTimeout[e], m.subscribe(null, g, !0), f + .subscribe(null, b, !0), this._studyEngine.ensureExtendedTo(t, e, + 1e3 * r) + }.bind(this), 0) + } + + function g(e, s) { + e === t && s === i && (m.unsubscribe(null, g), f.unsubscribe(null, b), p()) + } + + function b(e, s) { + e === t && s === i && m.unsubscribe(null, g) + } + }, JSServer.ChartApi.prototype._applyTimeFrame = function(e, t, i, s, o) { + var a, l, c = {}, + h = !0; + if (o.type === p.PeriodBack) { + var u = this._studyEngine.getSeriesLastBarTime(e, i); + if (null === u) return; + l = u / 1e3; + var d = n.parse(o.value), + m = this._studyEngine.getSeriesSymbolInfo(e, i); + a = r.alignPeriodsBackForVisibleRange(m.session, m.session_holidays, m.corrections, + d.letter(), d.multiplier(), 1, u) / 1e3; + var f = _(this._studyEngine.getSeriesInterval(e, i), m); + null !== f && (l = f.timeToExchangeTradingDay(1e3 * l) / 1e3, a = f + .timeToExchangeTradingDay(1e3 * a) / 1e3), c = { + applyDefaultRightMargin: !0 + }, h = !1 + } else a = o.from, l = o.to; + this.setVisibleTimeRange(e, i, s, a, l, h, c) + }, JSServer.ChartApi.prototype.modifySeries = function(e, t, i, s, r, n, o) { + var a = this; + this._notificationHandlers[e][t] = new h((function(r) { + "series_completed" === r.method && null !== n && (a._applyTimeFrame(e, + s, t, i, n), n = null), o(r) + }), t), this._studyEngine.modifySeries(e, t, s, r, i) + }, JSServer.ChartApi.prototype.requestMoreData = function(e, t) { + this._studyEngine.extendSeriesRange(e, t) + }, JSServer.ChartApi.prototype.setStudiesAccessController = function(e) { + this.studiesAccessController = e + }, JSServer.ChartApi.prototype.setWatchlistSettings = function(e) { + this._watchlistSettings = e + }, JSServer.ChartApi.prototype.allStudiesMetadata = function() { + return this._studyEngine.studiesMetadata() + }, JSServer.ChartApi.prototype.requestMetadata = function(e, t, i) { + this._notificationHandlers[e][t] = new h(i, t); + var s = this.studiesAccessController.getEnabledTools(); + TradingView.ChartapiMessagerInstances[e].onRequestMetadata(t, s) + }, JSServer.ChartApi.prototype.isCanCreateStudy = function() { + return this.studyCounter < TradingView.STUDY_COUNT_LIMIT + }, + JSServer.ChartApi.prototype.createStudy = function(e, t, i, s, r, n, o) { + if (!this.isCanCreateStudy()) throw new Error("Exceeded the limit of studies"); + this._notificationHandlers[e][t] = new h(o, t), this._studyEngine.createStudy(e, t, s, + i, r, n), this.studyCounter++ + }, JSServer.ChartApi.prototype.rebindStudy = function(e, t, i, s, r, n, o, a) { + throw new Error("Not implemented") + }, JSServer.ChartApi.prototype.removeStudy = function(e, t, i) { + delete this._notificationHandlers[e][t], this._studyEngine.removeStudy(e, t), this + .studyCounter-- + }, JSServer.ChartApi.prototype.modifyStudy = function(e, t, i, s, r) { + this._notificationHandlers[e][t] = new h(r, t), this._studyEngine.modifyStudy(e, t, i, + s) + }, JSServer.ChartApi.prototype.createPointset = function(e, t, i, s, r, n, o) { + this._notificationHandlers[e][t] = new h(o, t), this._studyEngine.createPointset(e, t, + s, r, n) + }, JSServer.ChartApi.prototype.modifyPointset = function(e, t, i, s, r) { + throw Error("This call is not implemented") + }, JSServer.ChartApi.prototype.removePointset = function(e, t, i) { + this._notificationHandlers[e][t] = null, this._studyEngine.removePointset(e, t) + }, JSServer.ChartApi.prototype.requestMoreTickmarks = function(e, t) { + this._studyEngine.requestMoreTickmarks(e, t) + }, JSServer.ChartApi.prototype.requestFirstBarTime = function(e, t, i, s) { + this._notificationHandlers[e][t] = new h(s, t) + }, JSServer.ChartApi.prototype._invokeHandler = function(e, t) { + e && e(t) + }, JSServer.ChartApi.prototype._sendRequest = function(e, t) { + throw Error("This method is not implemented") + }, JSServer.ChartApi.prototype._onMessage = function(e) { + throw Error("This method is not implemented") + }, JSServer.ChartApi.prototype._dispathNotification = function(e) { + var t = e.params.shift(); + if (this._notificationHandlers[t]) switch (e.method) { + case "timescale_update": + var i = e.params[0], + s = e.params[1]; + for (var r in s.clear = 0 === s.changes.length && 0 === s.marks.length, this + ._sessions[t].onMessage({ + method: "timescale_update", + params: s + }), i) { + var n = { + method: "data_update", + params: { + customId: r, + plots: i[r].series, + nonseries: i[r].nonseries, + turnaround: i[r].turnaround + } + }; + this._invokeNotificationHandler(t, r, n) + } + break; + case "tickmark_update": + this._sessions[t].onMessage({ + method: "timescale_update", + params: e.params[0] + }); + break; + case "data_update": + for (var r in e.params[0]) { + var o = e.params[0][r]; + n = { + method: "data_update", + params: { + customId: r, + plots: o.series ? o.series : o.plots, + nonseries: o.nonseries, + turnaround: o.turnaround + } + }; + this._invokeNotificationHandler(t, r, n) + } + break; + case "index_update": + for (var r in e.params[0]) { + n = { + method: "index_update", + params: e.params[0][r] + }; + this._invokeNotificationHandler(t, r, n) + } + break; + case "critical_error": + d.logNormal(new Date + " critical_error session:" + this.sessionid + + " reason:" + e.params[0]), this._sessions[t].onMessage({ + method: "critical_error", + params: e.params + }); + break; + case "timescale_completed": + case "quote_symbol_data": + case "quote_list_fields": + case "depth_symbol_error": + case "depth_symbol_success": + case "dd": + case "dpu": + case "depth_bar_last_value": + this._sessions[t].onMessage({ + method: e.method, + params: e.params + }); + break; + case "clear_data": + for (var a in e.params[0]) this._invokeNotificationHandler(t, a, { + method: "clear_data", + params: e.params[0][a] + }); + break; + default: + var l = e.params[0]; + this._invokeNotificationHandler(t, l, e) + } + }, JSServer.ChartApi.prototype._invokeNotificationHandler = function(e, t, i) { + if (void 0 !== t) { + var s = this._notificationHandlers[e][t]; + void 0 !== s && s && this._invokeHandler(s.handler, i) + } + }, JSServer.ChartApi.prototype.searchSymbols = function(e, t, i, s, r, n, o, a, l, c) { + this._studyEngine.searchSymbols(e, t, i, c) + }, JSServer.ChartApi.prototype._notifySessions = function(e) { + for (var t in this._sessions) { + if (!this._sessions.hasOwnProperty(t)) return; + var i = this._sessions[t]; + "function" == typeof i.onMessage && i.onMessage(e) + } + }, JSServer.ChartApi.prototype.unpack = function(e) { + throw Error("This method is not implemented") + }, JSServer.ChartApi.prototype.quoteCreateSession = function(e) { + return this._studyEngine.quoteCreateSession(e) + }, JSServer.ChartApi.prototype.quoteDeleteSession = function(e) { + return this._studyEngine.quoteDeleteSession(e) + }, JSServer.ChartApi.prototype.quoteSetFields = function(e, t) { + return this._studyEngine.quoteSetFields(e, t) + }, JSServer.ChartApi.prototype.quoteAddSymbols = function(e, t) { + return -1 !== t.indexOf(void 0) && (console.warn("Got undefined in quoteAddSymbols"), + t = t.filter((function(e) { + return !!e + }))), this._studyEngine.quoteAddSymbols(e, t) + }, JSServer.ChartApi.prototype.quoteRemoveSymbols = function(e, t) { + return this._studyEngine.quoteRemoveSymbols(e, t) + }, JSServer.ChartApi.prototype.quoteFastSymbols = function(e, t) { + return this._studyEngine.quoteFastSymbols(e, t) + }, JSServer.ChartApi.prototype.quoteHibernateAll = function(e) { + return this._studyEngine.quoteHibernateAll(e) + }, JSServer.ChartApi.prototype.depthCreateSession = function(e) { + return this._studyEngine.depthCreateSession(e) + }, JSServer.ChartApi.prototype.depthDeleteSession = function(e) { + return this._studyEngine.depthDeleteSession(e) + }, JSServer.ChartApi.prototype.depthSetSymbol = function(e, t) { + return this._studyEngine.depthSetSymbol(e, t) + }, JSServer.ChartApi.prototype.depthClearSymbol = function(e) {}, JSServer.ChartApi + .prototype.depthSetScale = function(e, t) {}, JSServer.ChartApi.prototype + .createStudiesAccessController = function(e, t, i) { + return new this.StudiesAccessController(this._studyEngine, e && JSON.parse(e) || { + type: "black", + tools: [] + }) + }, JSServer.ChartApi.prototype.StudiesAccessController = function(e, t) { + this._studyEngine = e, this._studiesAccess = t + }, JSServer.ChartApi.prototype.StudiesAccessController.prototype._findTool = function(e) { + for (var t = null, i = 0; i < this._studiesAccess.tools.length; ++i) { + var s = this._studiesAccess.tools[i]; + if (s.name === e || s === e) { + t = s; + break + } + } + return t + }, JSServer.ChartApi.prototype.StudiesAccessController.prototype.getEnabledTools = + function() { + return this._studyEngine.studiesMetadata().filter((function(e) { + return this.isToolEnabled(e.description) || e.is_hidden_study + }), this) + }, JSServer.ChartApi.prototype.StudiesAccessController.prototype.isToolEnabled = function( + e) { + var t = this._findTool(e); + return "black" === this._studiesAccess.type ? !t || t.grayed : !!t + }, JSServer.ChartApi.prototype.StudiesAccessController.prototype.isToolGrayed = function( + e) { + var t = this._findTool(e); + return t && t.grayed + }, JSServer.ChartApi.prototype.serverTimeOffset = function() { + return this._studyEngine.serverTimeOffset() + }, + JSServer.ChartApi.prototype.serverTime = function() { + return this._studyEngine.serverTime() + }, JSServer.ChartApi.prototype.disconnectCount = function() { + return 0 + }, u(JSServer.ChartApi, "JSServer.ChartApi", c, "ChartApiInterface"), e.exports = JSServer + .ChartApi + }, + EYFt: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return S + })); + var s = i("ivNn"), + r = i("YFKU"), + n = i("qFKp"), + o = i("Tmoa"), + a = i("Kxc7"), + l = i("k9/m"), + c = i("CW80"), + h = i("mMWL"), + u = i("23IT"), + d = i("i6cO"), + p = i("UAFa"), + _ = i("xCUR"), + m = i("Eyy1"), + f = i("nEwK"); + const g = n.CheckMobile.any(), + b = Object(r.t)("n/a"), + v = a.enabled("hide_last_na_study_output"); + class S { + constructor(e, t) { + this._emptyValues = [], this._colorProviders = new Map, this._study = e, this + ._model = t; + const i = e.metaInfo().plots; + i && i.forEach((t, i) => { + if (Object(u.isPlotWithTechnicalValues)(t)) return; + const s = t.id; + this._emptyValues.push({ + id: s, + index: i, + title: this._study.guiPlotName(s), + value: "", + visible: !1 + }); + const r = Object(u.isOhlcPlot)(t) ? t.target : t.id; + this._colorProviders.set(r, Object(p.createStudyPlotColorProvider)(e + .metaInfo(), e.properties(), r)) + }) + } + getItems() { + return this._emptyValues + } + getValues(e) { + const t = this._emptyValues.map(e => ({ + ...e + })); + let i = null; + const r = this._study.data().lastIndex(); + if (null !== r) + for (const e of t) { + if (!this._study.properties().styles[e.id].visible.value()) continue; + const t = this._study.nearestIndex(r, l.PlotRowSearchMode.NearestLeft, e + .index + 1); + if (void 0 === t) continue; + const s = t + this._study.offset(e.id); + i = null !== i ? Math.max(s, i) : s + }(null === e || null !== i && e > i) && (e = i); + const n = this._hideValues(), + a = this._study.isVisible() && !n ? b : ""; + for (const e of t) e.value = a; + if (n) return t; + if (v && t.length && (t[t.length - 1].value = ""), this._study.metaInfo().graphics + .hhists) return this._getValuesForHHist(t, e); + const c = this._study.priceScale(); + if (!this._study.isVisible() || null === e || null === c || c.isEmpty() || this + ._model.timeScale().isEmpty()) return t; + const h = this._study.metaInfo().plots, + p = Object(_.a)(this._study), + m = {}; + for (const i of t) { + let t = i.id; + const n = this._study.properties().styles[t].visible.value(); + if (i.visible = n, !n) continue; + const a = i.index, + c = e - this._study.offset(t), + _ = null !== r && c > r ? l.PlotRowSearchMode.NearestLeft : l + .PlotRowSearchMode.Exact, + f = this._study.nearestIndex(c, _); + if (void 0 === f) continue; + let g = m[t]; + if (void 0 === g && (g = this._study.getMinFirstBarIndexForPlot(t), Number + .isFinite(g) && (m[t] = g)), g > f) continue; + const b = this._study.data().last(), + v = this._study.data().valueAt(f) || (null !== b ? b.value : null); + if (null === v) continue; + const S = v[a + 1]; + if (!Object(s.isNumber)(S)) continue; + const y = S > 0; + i.value = p(S); + const w = this._study.properties().styles[t]; + let P = w.color.value(); + const C = h[a]; + Object(u.isOhlcPlot)(C) ? (t = C.target || t, P = this._study.properties() + .ohlcPlots[t].color.value()) : Object(u.isArrowsPlot)(C) && (P = y ? w + .colorup.value() : w.colordown.value()); + let x = P; + const T = this._colorProviders.get(t), + I = T && T.getPlotPointStyle(v); + I && (Object(u.isArrowsPlot)(C) ? (y && void 0 !== I.colors[d.ColorerType.Up] && + (x = I.colors[d.ColorerType.Up]), y || void 0 === I.colors[d + .ColorerType.Down] || (x = I.colors[d.ColorerType.Down])) : + void 0 !== I.colors[d.ColorerType.Main] && (x = I.colors[d.ColorerType + .Main])), "transparent" === x && (x = P), + x = Object(o.resetTransparency)(x), i.color = x + } + return t + } + _hideValues() { + return g && (null === this._model.crossHairSource().pane || Object(c.isLineToolName) + (h.tool.value()) || null !== this._model.lineBeingEdited()) + } + _getValuesForHHist(e, t) { + e.forEach(e => { + e.visible = this._study.isVisible(), e.value = b + }); + const i = this._study.priceScale(), + r = this._model.timeScale(); + if (null === i || i.isEmpty() || r.isEmpty() || this._hideValues()) return e; + if (null === t || !isFinite(t)) { + const i = this._study.data().last(); + if (null === i) return e; + t = i.index + } + const n = this._model.crossHairSource(), + o = n.price; + if (!isFinite(n.y) && null === (t = function(e, t) { + var i; + const s = null === (i = e.visibleBarsStrictRange()) || void 0 === i ? + void 0 : i.lastBar(); + if (!s) return null; + const r = t.data().search(s, l.PlotRowSearchMode.NearestLeft); + return r ? r.index : null + }(this._model.timeScale(), this._model.mainSeries()))) return e; + const a = function(e, t, i, s) { + if (0 === e.size) return null; + if (!i) { + const e = Object(m.ensureNotNull)(s.data().valueAt(t)); + i = s.barFunction()(e) + } + const r = function(e, t) { + let i = null; + return e.forEach((e, s) => { + s <= t && (null === i || s > i) && (i = s) + }), i + }(e, t); + if (null === r) return null; + const n = e.get(r); + if (!n || 0 === n.size) return null; + return function(e, t) { + let i = null; + return e.forEach(e => { + e.priceLow <= t && t < e.priceHigh && (i = e) + }), i + }(n, i) + }(this._study.graphics().hhistsByTimePointIndex(), t, o, this._model + .mainSeries()); + if (null === a) return e; + const c = this._study.metaInfo().graphics.hhists; + if (void 0 === c) return e; + const h = c[a.styleId]; + if (void 0 === h) return e; + const u = this._study.properties().child("graphics").child("hhists").child(a + .styleId), + d = new f.VolumeFormatter; + return e.forEach((e, t) => { + if (t < u.colors.childCount()) + if (t < a.rate.length) { + const i = a.rate[t]; + e.title = h.titles[t], e.value = Object(s.isNumber)(i) ? d + .format(i) : "", e.color = u.colors[t].value() + } else e.title = "", e.value = "", e.color = void 0; + else { + if (a.rate.length > 1 && t === u.colors.childCount()) { + const t = a.rate.reduce((e, t) => e + t, 0); + return e.value = d.format(t), void(e.color = u.valuesColor + .value()) + } + e.value = "" + } + }), e + } + } + }, + Ecpn: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + const s = { + VbPFixed: !0, + PivotPointsStandard: !0, + VbPVisible: !0 + }; + + function r(e) { + return e in s + } + }, + EqoR: function(e, t, i) { + "use strict"; + var s = i("5rJj"), + r = i("aDyP").LineToolPitchfork; + class n extends r { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Inside Pitchfork" + } + static createProperties(e) { + var t = new s("linetoolinsidepitchfork", e, !1, { + range: [0, 8] + }); + return n._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e) + } + } + t.LineToolInsidePitchfork = n + }, + Ery9: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "setCustomAdapter", (function() { + return _ + })), i.d(t, "initialize", (function() { + return m + })), i.d(t, "updateUser", (function() { + return f + })), i.d(t, "getChartsCount", (function() { + return g + })), i.d(t, "getCharts", (function() { + return b + })), i.d(t, "removeChart", (function() { + return v + })), i.d(t, "saveChart", (function() { + return S + })), i.d(t, "getChartContent", (function() { + return y + })), i.d(t, "loadChart", (function() { + return w + })), i.d(t, "removeStudyTemplate", (function() { + return P + })), i.d(t, "getStudyTemplateContent", (function() { + return C + })), + i.d(t, "saveStudyTemplate", (function() { + return x + })), i.d(t, "getStudyTemplatesList", (function() { + return T + })), i.d(t, "invalidateStudyTemplatesList", (function() { + return I + })), i.d(t, "getStudyTemplateContentById", (function() { + return M + })), i.d(t, "getStandardStudyTemplateContentById", (function() { + return O + })), i.d(t, "removeStudyTemplateById", (function() { + return L + })), i.d(t, "renameStudyTemplate", (function() { + return A + })), i.d(t, "replaceStudyTemplate", (function() { + return E + })), i.d(t, "getDrawingTemplates", (function() { + return k + })), i.d(t, "loadDrawingTemplate", (function() { + return D + })), i.d(t, "removeDrawingTemplate", (function() { + return V + })), i.d(t, "saveDrawingTemplate", (function() { + return B + })); + var s = i("FQhm"), + r = i("txPx"), + n = i("Cf1E"); + const o = Object(r.getLogger)("Chart.SaveloadAdapter.Library"); + let a, l, c, h, u = null, + d = null; + + function p(e) { + return `${c}/${encodeURIComponent(h)}/${e}?client=${encodeURIComponent(a)}&user=${encodeURIComponent(l)}` + } + + function _(e) { + u = e + } + + function m(e, t, i, s) { + a = e, l = t, c = i, h = s + } + + function f(e) { + l = e + } + + function g(e, t) { + throw new Error("Not implemented") + } + async function b() { + const e = e => e.map(e => ({ + id: e.id, + name: e.name, + image_url: String(e.id), + modified_iso: e.timestamp, + short_symbol: e.symbol, + interval: e.resolution + })); + if (u) return u.getAllCharts().then(e); + try { + const t = await fetch("" + p("charts"), { + credentials: "same-origin" + }); + if (!t.ok) throw new Error( + `Getting chart content response was not OK. Status: ${t.status}.`); + const i = await t.json(); + if ("ok" !== i.status) throw new Error("Get chart content request failed: " + i + .message); + return e(i.data) + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + async function v(e) { + if (u) u.removeChart(e); + else try { + const t = await fetch(`${p("charts")}&chart=${encodeURIComponent(e)}`, { + method: "DELETE", + credentials: "same-origin" + }); + if (!t.ok) throw new Error( + `Remove chart response was not OK. Status: ${t.status}.`); + const i = await t.json(); + if ("ok" !== i.status) throw new Error( + "Remove drawing template request failed: " + i.message) + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + async function S(e, t, i, s, r) { + const a = r.id.value(), + l = { + name: e, + content: JSON.stringify(s), + symbol: t, + resolution: i + }; + if (u) return u.saveChart({ + ...l, + id: a + }); + try { + const e = new FormData; + for (const t in l) e.append(t, l[t]); + let t = p("charts"); + null != a && (t += "&chart=" + encodeURIComponent(a)); + const i = await fetch(t, { + credentials: "same-origin", + method: "POST", + body: e + }); + if (!i.ok) throw new Error( + `Saving chart content response was not OK. Status: ${i.status}.`); + const s = await i.json(); + if ("ok" !== s.status) throw new Error("Saving chart content request failed: " + s + .message); + return s.id + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + async function y(e) { + const t = t => { + const i = JSON.parse(t); + return i.uid = e.id, i + }; + if (u) return u.getChartContent(e.id).then(e => t(e)); + try { + const i = await fetch(`${p("charts")}&chart=${encodeURIComponent(e.id)}`, { + credentials: "same-origin" + }); + if (!i.ok) throw new Error( + `Getting chart content response was not OK. Status: ${i.status}.`); + const s = await i.json(); + if ("ok" !== s.status) throw new Error("Get chart content request failed: " + s + .message); + return t(s.data.content) + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + + function w(e) { + y(e).then(e => { + s.emit("chart_load_requested", e) + }, () => { + o.logWarn("Error loading chart") + }) + } + async function P(e) { + try { + if (u) return u.removeStudyTemplate({ + name: e + }); + const t = await fetch(`${p("study_templates")}&template=${encodeURIComponent(e)}`, { + method: "DELETE", + credentials: "same-origin" + }); + if (!t.ok) throw new Error( + `Remove study template response was not OK. Status: ${t.status}.`); + const i = await t.json(); + if ("ok" !== i.status) throw new Error("Remove study template request failed: " + i + .message) + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + async function C(e) { + try { + if (u) { + return { + content: await u.getStudyTemplateContent({ + name: e + }) + } + } + const t = await fetch(`${p("study_templates")}&template=${encodeURIComponent(e)}`, { + credentials: "same-origin" + }); + if (!t.ok) throw new Error( + `Get study template response was not OK. Status: ${t.status}.`); + const i = await t.json(); + if ("ok" !== i.status) throw new Error("Get study template request failed: " + i + .message); + return i.data + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + async function x(e) { + try { + if (u) return u.saveStudyTemplate(e).then(() => ({ + error: "" + })).catch(e => ({ + error: null != e ? Object(n.a)(e) : "error" + })); + const t = new FormData; + t.append("name", e.name), t.append("content", e.content); + const i = await fetch(p("study_templates"), { + method: "POST", + body: t, + credentials: "same-origin" + }); + if (!i.ok) throw new Error( + `Save study template response was not OK. Status: ${i.status}.`); + const s = await i.json(); + return { + error: "ok" === s.status ? "" : s.status + } + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + async function T() { + try { + if (d) return d; + d = []; + const e = e => (d = e.map(e => ({ + is_default: !1, + name: e.name + })), d); + if (u) return u.getAllStudyTemplates().then(e); + const t = await fetch(p("study_templates"), { + method: "GET", + credentials: "same-origin" + }); + if (!t.ok) throw new Error( + `Study templates list response was not OK. Status: ${t.status}.`); + const i = await t.json(); + if ("ok" !== i.status) throw new Error("Study templates list request failed: " + i + .message); + return e(i.data) + } catch (e) { + throw o.logWarn(Object(n.a)(e)), e + } + } + + function I() { + d = null + } + + function M(e, t) { + throw new Error("Not implemented") + } + + function O(e, t) { + throw new Error("Not implemented") + } + + function L(e, t) { + throw new Error("Not implemented") + } + + function A(e, t, i) { + throw new Error("Not implemented") + } + + function E(e, t, i) { + throw new Error("Not implemented") + } + async function k(e) { + throw new Error("Not implemented") + } + async function D(e, t) { + throw new Error("Not implemented") + } + async function V(e, t) { + throw new Error("Not implemented") + } + async function B(e, t, i) { + throw new Error("Not implemented") + } + }, + EsvI: function(e, t, i) { + "use strict"; + i.r(t); + i("bSeV"); + var s = i("eJTA"), + r = i("wZIs"), + n = i("Vdly"); + + function o() { + return Object(n.getValue)("current_theme.name") || null + } + var a = i("wVAQ"), + l = i("txPx"); + const c = Object(l.getLogger)("Themes.Provider"); + let h = null; + + function u(e) { + return Object(a.fetch)("/theme/?themeName=" + encodeURIComponent(e), { + credentials: "include", + method: "GET" + }).then(e => e.json()).then(e => { + const t = {}; + return e.content && (t.content = JSON.parse(e.content)), t + }) + } + var d = i("zM7N"), + p = i("oiZD"); + var _ = i("YFKU"), + m = i("IMMp"), + f = i("HGP3"); + const g = { + [d.a.Light]: { + name: d.a.Light, + label: () => Object(_.t)("Light", { + context: "colorThemeName" + }), + order: 2, + getThemedColor: e => Object(f.getHexColorByName)(e) + }, + [d.a.Dark]: { + name: d.a.Dark, + label: () => Object(_.t)("Dark", { + context: "colorThemeName" + }), + order: 1, + getThemedColor: e => { + const t = m[e] || e; + return Object(f.getHexColorByName)(t) + } + } + }; + + function b(e) { + return !e.isPrivate + } + + function v() { + return g[p.watchedTheme.value()] || g.light + } + + function S(e) { + return v().getThemedColor(e) + } + async function y(e, t, i, s, n = !0, o = !1, a = !1) { + const l = await (t ? Promise.resolve(O(e)) : x(e)); + if (void 0 !== l.content) { + const h = !t; + a && (void 0 !== (c = l.content).chartProperties && Object(r.applyDefaultsOverrides) + (c.chartProperties), void 0 !== c.mainSourceProperties && Object(r + .applyDefaultsOverrides)(c.mainSourceProperties, void 0, !0, + "mainSeriesProperties")), await s.applyTheme(l.content, h, i, e, t, n, + o) + } + var c; + return l + } + + function w() { + Object(p.setTheme)(o() || "light") + } + + function P() { + return o() + } + + function C() { + var e; + e = v().name, Object(n.setValue)("current_theme.name", e, { + forceFlush: !0 + }) + } + + function x(e) { + return u(e) + } + + function T() { + return h || Object(a.fetch)("/themes/", { + credentials: "include", + method: "GET" + }).then(e => (h = e.json(), h)) + } + + function I() { + return d.c() + } + + function M(e) { + return I().includes(e) + } + + function O(e) { + return d.b(e) || { + content: void 0 + } + } + + function L(e, t) { + const i = t || v().name, + s = d.b(i), + r = 0 !== e.length && e.split("."); + return s && s.content && r ? r.reduce((e, t) => e[t], s.content) : null + } + + function A(e, t, i) { + const r = L(e, i); + return null !== r && Object(s.areEqualRgba)(Object(s.parseRgba)(r), Object(s.parseRgba)( + String(t))) + } + + function E(e, t) { + return function(e, t) { + const i = new FormData; + return i.append("content", JSON.stringify(t)), i.append("name", e), h = null, + Object(a.fetch)("/save-theme/", { + credentials: "include", + method: "POST", + body: i + }).then(e => e.json(), e => c.logError(e)) + }(e, t) + } + + function k(e) { + return function(e) { + const t = new FormData; + return t.append("name", e), h = null, Object(a.fetch)("/remove-theme/", { + credentials: "include", + method: "POST", + body: t + }).then(e => e.json(), e => c.logError(e)) + }(e) + } + + function D(e) { + return function(e) { + return u(e).then(e => Boolean(e.content)) + }(e) + } + + function V(e) { + return d.e(e) + } + + function B(e) { + return d.d(e) + } + + function R(e) { + return { + content: { + chartProperties: { + paneProperties: e.model().properties().paneProperties.state(), + scalesProperties: e.model().properties().scalesProperties.state() + }, + sessions: e.model().sessions().properties().state(), + mainSourceProperties: e.model().mainSeries().properties().state() + } + } + } + i.d(t, "isPublicTheme", (function() { + return b + })), i.d(t, "getCurrentTheme", (function() { + return v + })), i.d(t, "getThemedColor", (function() { + return S + })), i.d(t, "loadTheme", (function() { + return y + })), i.d(t, "restoreTheme", (function() { + return w + })), i.d(t, "savedThemeName", (function() { + return P + })), i.d(t, "syncTheme", (function() { + return C + })), i.d(t, "getTheme", (function() { + return x + })), i.d(t, "getThemeNames", (function() { + return T + })), i.d(t, "getStdThemeNames", (function() { + return I + })), i.d(t, "isStdThemeName", (function() { + return M + })), i.d(t, "getStdTheme", (function() { + return O + })), i.d(t, "getStdThemedValue", (function() { + return L + })), i.d(t, "isStdThemedDefaultValue", (function() { + return A + })), i.d(t, "saveTheme", (function() { + return E + })), i.d(t, "removeTheme", (function() { + return k + })), + i.d(t, "isThemeExist", (function() { + return D + })), i.d(t, "translateStdThemeName", (function() { + return V + })), i.d(t, "isStdTheme", (function() { + return B + })), i.d(t, "extractThemeFromModel", (function() { + return R + })), i.d(t, "DEFAULT_THEME", (function() { + return "light" + })), i.d(t, "themes", (function() { + return g + })) + }, + ExCE: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("VdBB"); + class r { + constructor() { + this._bars = [] + } + hitTest(e) { + const t = this._bars, + i = this._getBarSpacing(), + s = i / 2; + if (0 === t.length) return null; + const r = this._getTolerance(), + n = t[0], + o = t[t.length - 1]; + if (e.x < n.time - s - r) return null; + if (e.x > o.time + s + r) return null; + let a = 0, + l = t.length - 1, + c = -1; + for (; a <= l;) { + const i = Math.floor((a + l) / 2), + h = t[i]; + let u = s; + if (h !== n && h !== o || (u += r), Math.abs(h.time - e.x) <= u) { + c = i; + break + } + e.x - h.time > s ? a = i + 1 : l = i - 1 + } + if (-1 !== c) { + const n = Math.ceil(r / i); + if (0 !== n) { + const i = Math.max(0, c - n), + o = Math.min(t.length - 1, c + n); + for (let n = i; n <= o; n++) + if (Math.abs(e.x - t[n].time) <= s + r && this._isPointAtBar(t[n], e.y, + r)) return this._getHitTest() + } else if (this._isPointAtBar(t[c], e.y, r)) return this._getHitTest() + } + return null + } + _getHitTest() { + return new s.HitTestResult(s.HitTestResult.REGULAR) + } + _isPointAtBar(e, t, i) { + const s = Math.min(e.high, e.low), + r = Math.max(e.high, e.low); + return s - i <= t && t <= r + i + } + } + }, + EyEd: function(e, t, i) { + "use strict"; + var s = i("lCO3").Version, + r = i("txPx").getLogger("Chart.StudyMigration"); + + function n(e) { + this._studyId = e, this._maxToVers = s.ZERO, this._maxFromVers = s.ZERO, this._migrs = [] + } + n.prototype.addMigration = function(e, t, i) { + var r = s.parse(e), + n = s.parse(t); + r.isGreater(this._maxFromVers) && (this._maxFromVers = r), n.isGreater(this + ._maxToVers) && (this._maxToVers = n), this._migrs.push({ + fromVers: r, + toVers: n, + rules: i + }) + }, n.prototype.updateInputs = function(e, t, i) { + if (!i) return i; + for (var s = TradingView.clone(i), n = e; n.isLess(t);) { + var o = this._findMigration(n); + if (null == o) break; + if (r.logNormal("Migrating study inputs from " + o.fromVers + " to " + o.toVers + + " version, studyId: " + this._studyId + ", migration: " + JSON.stringify( + o) + ", inputs: " + JSON.stringify(i)), s = this._applyMigration(s, o), + !n + .isLess(o.toVers)) throw new Error( + "Problems in study migration process... Possible infinite cycle has been detected and stopped." + ); + n = o.toVers + } + return n > e && r.logNormal("Study inputs migration is done, studyId: " + this + ._studyId + ", inputs: " + JSON.stringify(s)), s + }, n.prototype._findMigration = function(e) { + for (var t = -1, i = this._maxFromVers, s = 0; s < this._migrs.length; s++) { + var r = this._migrs[s]; + r.fromVers.isLess(e) || r.fromVers.isLessOrEqual(i) && (i = r.fromVers, t = s) + } + return t < 0 ? null : this._migrs[t] + }, n.prototype._applyMigration = function(e, t) { + for (var i = e, s = 0; s < t.rules.length; s++) { + var r = t.rules[s]; + i = this._getApplyRuleFun(r.type)(i, r) + } + return i + }, n.prototype._getApplyRuleFun = function(e) { + if ("inputRemoved" === e) return n._applyInputRemovedRule; + if ("inputChangedType" === e) return n._applyInputChangedTypeRule; + if ("inputChangedMinMax" === e) return n._applyInputChangedMinMaxRule; + if ("inputChangedOptions" === e) return n._applyInputChangedOptionsRule; + throw new Error("Unknown migration rule type: " + e) + }, n._applyInputRemovedRule = function(e, t) { + if (!(t.inputId in e)) return e; + if ("removeVal" !== t.action) throw new Error("Unexpected rule.action=" + t.action + + " in rule.type=" + t.type); + var i = e[t.inputId]; + return delete e[t.inputId], r.logNormal("Input " + t.inputId + "=" + i + " removed"), e + }, n._applyInputChangedTypeRule = function(e, t) { + var i = e[t.inputId]; + if ("resetToDefVal" === t.action) return e[t.inputId] = t.defVal, r.logNormal("Input " + + t.inputId + "=" + i + " reset to default value " + t.defVal), e; + if ("convertVal" === t.action) { + if (null == i) return e; + if ("float" === t.inputTypeFrom && "integer" === t.inputType) return e[t.inputId] = + Math.round(e[t.inputId]), r.logNormal("Input " + t.inputId + "=" + i + + " converted to value " + e[t.inputId]), e; + if ("integer" === t.inputTypeFrom && "float" === t.inputType) return e; + if ("text" === t.inputTypeFrom && "source" === t.inputType) return n._isValidSource( + i, t.options) || (e[t.inputId] = t.defVal), e; + throw new Error("Cannot convertVal from " + t.inputTypeFrom + " to " + t.inputType) + } + throw new Error("Unknown action " + t.action + " for rule with type " + t.type) + }, n._isValidSource = function(e, t) { + return e.indexOf("$") >= 0 || t.indexOf(e) >= 0 + }, n._applyInputChangedMinMaxRule = function(e, t) { + if ("adjustValIfNeeded" !== t.action) throw new Error("Unknown action " + t.action + + " for rule with type " + t.type); + var i = e[t.inputId]; + return i < t.minVal ? e[t.inputId] = t.minVal : i > t.maxVal && (e[t.inputId] = t + .maxVal), r.logNormal("Input " + t.inputId + "=" + i + " adjusted to value " + + e[t.inputId]), e + }, n._applyInputChangedOptionsRule = function(e, t) { + if (!(["text"].indexOf(t.inputType) >= 0 && "resetToDefValIfNeeded" === t.action)) + throw new Error("Unexpected rule.inputType=" + t.inputType + " in rule.action=" + t + .action); + var i = e[t.inputId]; + return t.options.indexOf(i) < 0 && (e[t.inputId] = t.defVal, r.logNormal("Input " + t + .inputId + "=" + i + " reset to default value " + t.defVal)), e + }, e.exports = n + }, + Eyy1: function(e, t, i) { + "use strict"; + + function s(e) { + if (void 0 === e) throw new Error("Value is undefined"); + return e + } + + function r(e) { + if (null === e) throw new Error("Value is null"); + return e + } + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.ensureNever = t.ensure = t.ensureNotNull = t.ensureDefined = t.assert = void 0, t + .assert = function(e, t) { + if (!e) throw new Error("Assertion failed" + (t ? ": " + t : "")) + }, t.ensureDefined = s, t.ensureNotNull = r, t.ensure = function(e) { + return r(s(e)) + }, t.ensureNever = function(e) {} + }, + F58L: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyTemplates", (function() { + return _ + })); + var s = i("YFKU"), + r = i("zUrt"), + n = i("JWMC"), + o = i("aIyQ"), + a = i.n(o), + l = i("hY0g"), + c = i.n(l), + h = i("fZEr"), + u = i("txPx"); + const d = Object(u.getLogger)("Platform.StudyTemplates"), + p = Object(s.t)("Do you really want to delete Study Template '{name}' ?"); + class _ { + constructor(e) { + this._chartWidgetCollection = e.chartWidgetCollection, this + ._favoriteStudyTemplatesService = e.favoriteStudyTemplatesService, window + .loginStateChange.subscribe(null, r.backend.invalidateStudyTemplatesList), this + ._list = new c.a([]), this._onChange = new a.a, this._list.subscribe(() => this + ._onChange.fire()) + } + findRecordByName(e) { + return this._list.value().find(t => t.name === e) || null + } + showSaveAsDialog() { + const e = this._chartWidgetCollection.activeChartWidget.value().model(); + Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i.e(8), i.e(9), i.e(13), i.e(16), + i.e(17), i.e(21), i.e(23), i.e(28), i.e(36), i.e(85), i.e(0), i.e(2), i + .e(15), i.e("study-template-dialog") + ]).then(i.bind(null, "IDfV")).then(t => { + new t.StudyTemplateSaver({ + controller: e, + onSave: e => { + this._list.setValue(e) + } + }).show() + }) + } + applyTemplate(e) { + const t = this.findRecordByName(e); + null !== t ? window.runOrSignIn(() => { + const e = this._chartWidgetCollection.activeChartWidget.value(), + i = i => { + Object(n.trackEvent)("GUI", "Load Study Template"), e.model() + .applyStudyTemplate(JSON.parse(i.content), t.name) + }; + void 0 !== t.id ? t.is_default ? r.backend + .getStandardStudyTemplateContentById(t.id, i) : r.backend + .getStudyTemplateContentById(t.id, i) : r.backend + .getStudyTemplateContent(t.name).then(i) + }, { + source: "Study templates apply" + }) : d.logNormal(`Template ${e} not found in cache`) + } + deleteStudyTemplate(e) { + const t = this.findRecordByName(e); + null !== t ? this._removeTemplate(t) : d.logNormal( + `Template ${e} not found in cache`) + } + list() { + return this._list.value() + } + getOnChange() { + return this._onChange + } + refreshStudyTemplateList(e) { + r.backend.getStudyTemplatesList().then(t => { + this._list.setValue(t), void 0 !== e && e() + }) + } + invalidate() { + r.backend.invalidateStudyTemplatesList() + } + _removeTemplate(e) { + window.runOrSignIn(() => { + Object(h.showConfirm)({ + text: p.format({ + name: e.name + }), + onConfirm: ({ + dialogClose: t + }) => new Promise(i => { + const s = () => { + this.refreshStudyTemplateList(() => { + const s = this.list(); + this._list.setValue(s + .filter(t => t !== + e)), this + ._favoriteStudyTemplatesService && + this + ._favoriteStudyTemplatesService + .remove(e.name), i(), + t() + }) + }; + r.backend.invalidateStudyTemplatesList(), + void 0 !== e.id ? r.backend + .removeStudyTemplateById(e.id, s) : r + .backend.removeStudyTemplate(e.name).then(s) + }) + }) + }, { + source: "Study templates delete" + }) + } + } + }, + FA0h: function(e, t, i) { + "use strict"; + + function s() { + return Promise.all([i.e("redux"), i.e("react"), i.e(1), i.e(3), i.e(4), i.e(8), i.e(9), i.e( + 13), i.e(14), i.e(19), i.e(26), i.e(0), i.e(2), i.e(7), i.e(10), i.e(18), i + .e(20), i.e(25), i.e("symbol-search-dialog") + ]).then(i.bind(null, "GcSm")) + } + i.d(t, "a", (function() { + return s + })) + }, + FBsw: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "OverlayPriceAxisView", (function() { + return l + })); + var s = i("Kxc7"), + r = i("KcY8"), + n = i("n5al"), + o = i("oXaB"); + const a = s.enabled("force_exchange_as_title"); + class l extends r.a { + constructor(e) { + super(), this._source = e + } + _updateRendererData(e, t, i) { + e.visible = !1, t.visible = !1; + const s = this._source.lastValueData("close", !1); + if (s.noData) return; + const r = this._source.model(), + n = this._source.priceScale(); + if (null === n) return; + if (!r.isPriceScaleVisible(n)) return; + i.background = s.color, i.textColor = this.generateTextColor(s.color), i + .coordinate = s.coordinate, i.floatCoordinate = s.floatCoordinate; + const a = this._source.model().properties().scalesProperties, + l = n.isPercentage(); + a.showSeriesLastValue.value() && (e.text = l ? s.formattedPricePercentage : s + .formattedPriceAbsolute, a.seriesLastValueMode.value() !== o + .PriceAxisLastValueMode.LastPriceAndPercentageValue ? e.secondLine = + "" : e.secondLine = l ? s.formattedPriceAbsolute : s + .formattedPricePercentage, e.visible = !0), t.text = "", a + .showSymbolLabels.value() && (t.text = this._paneText(), + t.visible = t.text.length > 0) + } + _paneText() { + let e = ""; + const t = this._source.symbolInfo(); + return a ? e = Object(n.displayedSymbolExchange)(t) : this._source.model() + .properties().scalesProperties.showSymbolLabels.value() && (e = Object(n + .displayedSymbolName)(t)), e + } + } + }, + FBuY: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TVXWindowEvents", (function() { + return o + })); + i("HbRj"); + var s = i("txPx"), + r = i("VVxS"); + const n = Object(s.getLogger)("XWindowEvents"); + var o; + ! function(e) { + const t = "tvxwevents.", + i = {}; + let s; + window.BroadcastChannel ? (s = new BroadcastChannel("tvxwevents"), s.addEventListener( + "message", (function(e) { + const { + data: { + event: t, + value: s + } + } = e; + i[t] && i[t].forEach(e => { + e(s) + }) + })), function() { + const e = [], + i = performance.now(); + for (let i = 0; i < r.TVLocalStorage.length; i++) { + const s = r.TVLocalStorage.key(i); + s.startsWith(t) && e.push(s) + } + const s = r.TVLocalStorage.length; + for (const t of e) r.TVLocalStorage.removeItem(t); + const o = performance.now() - i; + n.logNormal("Total keys amount in local storage on operation start: " + s), n + .logNormal("Keys amount in local storage to be deleted: " + e.length), n + .logNormal("Keys to be deleted from local storage: " + JSON.stringify(e)), n + .logNormal(`Removing keys from local storage took ${o} ms`) + }()) : window.addEventListener("storage", (function(e) { + const { + newValue: s, + key: n + } = e; + if (null === s || !n || !n.startsWith(t)) return; + const o = n.substr(t.length); + i[o] && i[o].forEach(t => { + t(e.newValue) + }); + r.TVLocalStorage.removeItem(n) + })), e.on = function(e, t) { + i[e] || (i[e] = []), i[e].push(t) + }, e.off = function(e, t) { + if (!i[e]) return; + const s = i[e].indexOf(t); - 1 !== s && (1 === i[e].length ? delete i[e] : i[e] + .splice(s, 1)) + }, e.emit = function(e, i = Date.now()) { + try { + s ? s.postMessage({ + event: e, + value: i + }) : r.TVLocalStorage.setItem(t + e, i.toString()) + } catch (e) { + n.logError(e.message) + } + } + }(o || (o = {})) + }, + FDyI: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("LxhU"), + n = i("IiTo"), + o = i("/bs+"); + class a { + constructor(e) { + this._timeScale = e + } + coordinateToTime(e) { + const t = this._timeScale.coordinateToIndex(e); + return this._timeScale.indexToTimePoint(t) + } + barSpacingChanged() { + return this._timeScale.barSpacingChanged() + } + rightOffsetChanged() { + return this._timeScale.rightOffsetChanged() + } + barSpacing() { + return this._timeScale.barSpacing() + } + rightOffset() { + return this._timeScale.rightOffset() + } + width() { + return this._timeScale.width() + } + } + var l = i("aIyQ"), + c = i.n(l), + h = i("96Yh"), + u = i("pOzK"), + d = i("CsKN"); + + function p(e, t) { + const i = () => { + e.completed().unsubscribe(null, s), t(!1) + }, + s = () => { + e.error().unsubscribe(null, i), t(!0) + }; + e.completed().subscribe(null, i, !0), e.error().subscribe(null, s, !0) + } + var _ = i("OLhd"); + i.d(t, "ChartWidgetApiBase", (function() { + return m + })); + class m { + constructor(e, t) { + this._visibleBarsChanged = new c.a, this._crosshairMoved = new c.a, this._ranges = + null, this._alignerResolution = r.Interval.parse(""), this._alignerSymbolInfo = + null, this._dwmAligner = null, this._chartWidget = e, this._activateChart = t, + this._chartWidget.model().crossHairSource().moved().subscribe(this, this + ._onCrosshairMoved) + } + getPriceToBarRatio() { + return this._chartWidget.model().model().mainSeriesScaleRatioProperty().value() + } + setPriceToBarRatio(e, t) { + const i = this._chartWidget.model(), + s = i.model(), + r = s.mainSeriesScaleRatioProperty(); + (null == t ? void 0 : t.disableUndo) ? new d.SetScaleRatioPropertiesCommand(r, e, + "", s).redo(): i.setScaleRatioProperty(r, e, "Change Price to Bar Ratio") + } + isPriceToBarRatioLocked() { + return this._chartWidget.model().model().mainSeries().priceScale().isLockScale() + } + setPriceToBarRatioLocked(e, t) { + const i = this._chartWidget.model(), + s = i.model(), + r = s.mainSeries().priceScale(); + (null == t ? void 0 : t.disableUndo) ? new u.SetPriceScaleModeCommand({ + lockScale: e + }, r, "", s).redo(): i.setPriceScaleMode({ + lockScale: e + }, r, "Toggle Lock Scale") + } + onDataLoaded() { + return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries() + .dataEvents().completed()) + } + onSymbolChanged() { + return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries() + .dataEvents().symbolResolved()) + } + onIntervalChanged() { + return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries() + .onIntervalChanged()) + } + onVisibleRangeChanged() { + return this._makeSubscriptionFromDelegate(this._visibleBarsChanged) + } + onChartTypeChanged() { + return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries() + .onStyleChanged()) + } + onSeriesTimeframe() { + return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries() + .dataEvents().seriesTimeFrame()) + } + whenChartReady(e) { + this._chartWidget.withModel(this, e) + } + crossHairMoved() { + return this._makeSubscriptionFromDelegate(this._crosshairMoved) + } + setSymbol(e, t) { + if (e === this.symbol()) return void(null == t || t()); + const i = e => { + !e && t && t() + }, + s = this._chartWidget.model().mainSeries().dataEvents(); + t && p(s, i), this._activateChart(), this._chartWidget.setSymbol(e) + } + setResolution(e, t) { + const i = r.Interval.normalize(e); + if (null === i || i === this.resolution()) return void(null == t || t()); + const s = e => { + !e && t && t() + }, + n = this._chartWidget.model().mainSeries().dataEvents(); + t && p(n, s), this._activateChart(), this._chartWidget.setResolution(i) + } + setChartType(e, t) { + const i = this._chartWidget.model().mainSeries().properties().style; + if (i.value() === e) return void(null == t || t()); + const s = e => { + !e && t && t() + }, + r = this._chartWidget.model().mainSeries().dataEvents(); + t && p(r, s), this._chartWidget.model().setChartStyleProperty(i, e, + "Change Series Style") + } + getAllStudies() { + return this._chartWidget.model().model().allStudies(!0).map(h.studyEntityInfo) + } + getAllPanesHeight() { + const e = this._chartWidget.model().model().panes(); + if (this._chartWidget.isMaximizedPane()) { + let t = 0, + i = 0; + e.forEach(e => { + t += e.height(), i += e.stretchFactor() + }); + const s = i / t; + return e.map(e => Math.round(e.stretchFactor() / s * 100) / 100) + } + return e.map(e => e.height()) + } + setAllPanesHeight(e) { + const t = this._chartWidget.model().model(), + i = t.panes(); + Object(s.assert)(i.length === e.length, + "There`s a mismatch between the number of heights you provided and the number of panes." + ); + const r = i.reduce((e, t) => e + t.stretchFactor(), 0) / e.reduce((e, t) => e + t); + e.forEach((e, t) => { + const s = e * r; + i[t].setStretchFactor(s) + }), t.fullUpdate() + } + sessions() { + return this._chartWidget.model().model().sessions() + } + getTimeScaleLogicalRange() { + return this._chartWidget.model().timeScale().logicalRange() + } + exportData(e) { + const t = { + ...e + }; + return void 0 !== t.from && (t.from = this._convertTimeFromPublic(t.from)), + void 0 !== t.to && (t.to = this._convertTimeFromPublic(t.to)), i.e( + "export-data").then(i.bind(null, "SIoL")).then(e => e.exportData(this + ._chartWidget.model().model(), t)) + } + barTimeToEndOfPeriod(e) { + const t = this._prepareEndOfPeriodArgs(); + return Object(o.a)(t.barBuilder, e, t.intervalObj) + } + endOfPeriodToBarTime(e) { + const t = this._prepareEndOfPeriodArgs(); + return Object(o.b)(t.barBuilder, e, t.intervalObj) + } + properties() { + return this._chartWidget.properties() + } + setBarSpacing(e) { + this._chartWidget.model().timeScale().setBarSpacing(e) + } + scrollChartByBar(e) { + this._chartWidget.model().scrollChartByBar(e) + } + mergeAllScales(e) { + this._chartWidget.model().mergeAllScales(e) + } + chartPainted() { + return this._chartWidget.chartPainted() + } + axesSizeReady() { + for (const e of this._chartWidget.paneWidgets()) { + for (const t of e.leftPriceAxisesContainer().axes()) + if (!t.sizeReady()) return !1; + for (const t of e.rightPriceAxisesContainer().axes()) + if (!t.sizeReady()) return !1 + } + return !0 + } + applyOverrides(e) { + this._chartWidget.applyOverrides(e) + } + addOverlayStudy(e, t, i) { + return this._chartWidget.addOverlayStudy(e, t, i) + } + ranges() { + throw new Error("not implemented") + } + getTimeScale() { + return new a(this._chartWidget.model().timeScale()) + } + _destroy() { + this._chartWidget.hasModel() && this._chartWidget.model().crossHairSource().moved() + .unsubscribeAll(this) + } + _createStudy(e) { + return Promise.reject("Pine and java studies are not supported") + } + _convertTimeToPublic(e) { + const t = this._getSeriesAligner(); + return null !== t ? t.timeToExchangeTradingDay(1e3 * e) / 1e3 : e + } + _convertIndexToPublicTime(e) { + const t = this._chartWidget.model(), + i = t.timeScale(); + if (i.isEmpty()) return null; + const r = i.points(), + n = Object(s.ensureNotNull)(r.firstIndex()), + o = Object(s.ensureNotNull)(r.lastIndex()); + let a = null; + if (n <= e && e <= o) a = r.valueAt(e); + else if (e > o) { + const r = t.mainSeries().syncModel(); + if (null !== r) { + const t = Object(s.ensureNotNull)(i.indexToTimePoint(o)); + a = r.projectTime(t, e - o) + } + } + return null !== a && (a = this._convertTimeToPublic(a)), a + } + _convertTimeFromPublic(e) { + const t = this._getSeriesAligner(); + return null !== t ? t.timeToSessionStart(1e3 * e) / 1e3 : e + } + _getSeriesAligner() { + const e = this._chartWidget.model().mainSeries(), + t = e.interval(), + i = r.Interval.parse(t), + s = e.symbolInfo(); + return this._alignerResolution.isEqualTo(i) && this._alignerSymbolInfo === s || ( + this._dwmAligner = null === s ? null : Object(_.createDwmAligner)(t, s), + this._alignerResolution = i, this._alignerSymbolInfo = s), this._dwmAligner + } + _onCrosshairMoved(e) { + const t = this._convertIndexToPublicTime(e.index); + null !== t && this._crosshairMoved.fire({ + price: e.price, + time: t + }) + } + _makeSubscriptionFromDelegate(e) { + return { + subscribe: e.subscribe.bind(e), + unsubscribe: e.unsubscribe.bind(e), + unsubscribeAll: e.unsubscribeAll.bind(e) + } + } + _prepareEndOfPeriodArgs() { + const e = this._chartWidget.model().model(), + t = e.timezone(), + i = Object(s.ensureNotNull)(e.mainSeries().symbolInfo()), + o = e.mainSeries().interval(), + a = new n.SessionInfo(t, i.session, i.session_holidays, i.corrections); + return { + barBuilder: Object(n.newBarBuilder)(o, a, a), + intervalObj: r.Interval.parse(o) + } + } + } + }, + FIi8: function(e, t, i) { + "use strict"; + + function s(e, ...t) { + return e && "object" == typeof e ? (0 === t.length || t.forEach(t => { + null != t && "object" == typeof t && Object.keys(t).forEach(i => { + const n = e[i], + o = t[i]; + if (o === e) return; + const a = Array.isArray(o); + if (o && (r(o) || a)) { + let t; + t = a ? n && Array.isArray(n) ? n : [] : n && r(n) ? n : {}, + e[i] = s(t, o) + } else void 0 !== o && (e[i] = o) + }) + }), e) : e + } + + function r(e) { + if (!e || "[object Object]" !== Object.prototype.toString.call(e)) return !1; + const t = Object.getPrototypeOf(e); + if (!t) return !0; + const i = Object.hasOwnProperty.toString, + s = t.hasOwnProperty("constructor") && t.constructor; + return "function" == typeof s && i.call(s) === i.call(Object) + } + i.r(t), i.d(t, "deepExtend", (function() { + return s + })) + }, + FKaq: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SetPriceScaleSelectionStrategyCommand", (function() { + return a + })); + var s = i("Eyy1"), + r = i("RDU5"), + n = i("MWAT"); + class o { + constructor(e) { + this._leftScales = e.leftPriceScales().map(e => e.id()), this._rightScales = e + .rightPriceScales().map(e => e.id()) + } + restorePane(e) { + this._leftScales.reverse().map(t => Object(s.ensureNotNull)(e.getPriceScaleById(t))) + .forEach(t => e.movePriceScale(t, "left")), this._rightScales.reverse().map(t => + Object(s.ensureNotNull)(e.getPriceScaleById(t))).forEach(t => e + .movePriceScale(t, "right")) + } + } + class a extends r.UndoCommand { + constructor(e, t, i) { + super(i), this._chartModel = e, this._targetStrategy = Object(n + .createPriceScaleSelectionStrategy)(t), this._initialState = e.panes() + .map(e => new o(e)) + } + redo() { + this._chartModel.panes().forEach(e => e.setPriceScaleSelectionStrategy(this + ._targetStrategy)), this._chartModel.fullUpdate() + } + undo() { + const e = this._chartModel.panes(); + for (let t = 0; t < e.length; t++) this._initialState[t].restorePane(e[t]); + this._chartModel.fullUpdate() + } + } + }, + FQhm: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "unsubscribe", (function() { + return l + })), i.d(t, "on", (function() { + return c + })), i.d(t, "subscribe", (function() { + return h + })), i.d(t, "subscribeToAll", (function() { + return u + })), i.d(t, "emit", (function() { + return d + })), i.d(t, "emitOnce", (function() { + return p + })); + var s = i("aIyQ"), + r = i.n(s); + const n = {}, + o = [], + a = {}; + + function l(e, t, i) { + n[e].unsubscribe(i, t) + } + + function c(e, t, i) { + h(e, t, i) + } + + function h(e, t, i, s) { + n.hasOwnProperty(e) || (n[e] = new r.a), a[e] ? t.call(i) : n[e].subscribe(i, t, s) + } + + function u(e) { + o.push(e) + } + + function d(e, ...t) { + const i = [e].concat(t); + o.forEach(e => { + e.apply(null, i) + }), n.hasOwnProperty(e) && n[e].fire.apply(n[e], t) + } + + function p(e) { + a[e] && console.warn( + `Something went wrong: emitOnce called multiple times with same event (${e})`), a[ + e] = !0, d.apply(null, arguments) + } + }, + FZIs: function(e, t, i) { + "use strict"; + var s; + i.d(t, "a", (function() { + return s + })), + function(e) { + e.Light = "light", e.Dark = "dark" + }(s || (s = {})) + }, + FaJS: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "scaleRatio", (function() { + return r + })), i.d(t, "priceRangeByScaleRatio", (function() { + return n + })), i.d(t, "barSpacingByScaleRatio", (function() { + return o + })); + var s = i("Qb4w"); + + function r(e, t) { + if (t.isLog() || e.isEmpty() || t.isEmpty()) return null; + const i = function(e) { + if (e.isEmpty()) return null; + const t = e.priceRange(); + if (null === t) return null; + const i = t.length(); + return e.internalHeight() / i + }(t); + if (null === i) return null; + return e.getValidBarSpacing() / Math.max(1e-10, i) + } + + function n(e, t, i) { + if (e.isLog() || null === i || e.isEmpty()) return null; + const r = e.priceRange(); + if (null === r || r.isEmpty()) return null; + const n = e.internalHeight() / (t / i), + o = r.length(); + if (n === o) return r; + const a = (n - o) / 2; + return new s.PriceRange(r.minValue() - a, r.maxValue() + a) + } + + function o(e, t) { + if (e.isLog() || null === t || e.isEmpty()) return null; + const i = e.priceRange(); + if (null === i) return null; + const s = i.length(); + return e.internalHeight() / s * t + } + }, + Fdrt: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PaneRendererStandardPivotLabel", (function() { + return r + })); + var s = i("VdBB"); + class r { + constructor(e, t, i) { + this._drawRects = [], this._cacheProvider = e, this._point = t, this._label = i + } + draw(e, t) { + const i = this._cacheProvider(t); + e.save(), e.setTransform(1, 0, 0, 1, 0, 0); + const s = t.pixelRatio; + this._drawRects = []; + const r = t => { + const r = i.labelRectByIndex(t), + n = { + left: Math.round(this._point.x - r.width + o), + top: Math.round(this._point.y - r.height / 2), + width: r.width, + height: r.height + }; + return e.drawImage(i.canvas(), Math.round(r.left * s), Math.round(r.top * + s), r.width * s, r.height * s, Math.round(n.left * s), Math + .round(n + .top * s), n.width * s, n.height * s), this._drawRects.push(n), + r.width + }, + n = this._label.split("/"); + let o = 0; + for (let e = 0; e < n.length; e++) { + const t = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5"] + .indexOf(n[e]); + e > 0 && (o += r(t + 11) / 2), o += r(t) / 2 + } + e.restore() + } + hitTest(e) { + for (const t of this._drawRects) + if (e.x >= t.left && e.x <= t.left + t.width && e.y >= t.top && e.y <= t.top + t + .height) return new s.HitTestResult(s.HitTestResult.REGULAR); + return null + } + } + }, + Fixu: function(e, t, i) { + "use strict"; + i.d(t, "c", (function() { + return r + })), i.d(t, "d", (function() { + return n + })), i.d(t, "b", (function() { + return o + })), i.d(t, "a", (function() { + return a + })); + i("Eyy1"), i("dfhE"); + + function s(e, t) { + 0 + } + + function r(e) { + s() + } + + function n(e) { + s() + } + + function o(e) { + s() + } + + function a(e) { + 0 + } + }, + FsE7: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), this.version = l.version, i.e("lt-pane-views") + .then(i.t.bind(null, "wgWl", 7)).then(({ + FibTimeZonePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + migrateVersion(e, t, i) { + if (1 === e) { + i.properties.level1.color.setValue(i.properties.baselinecolor.value()); + for (var s = 2; s <= 11; s++) i.properties["level" + s].color.setValue(i + .properties.linecolor.value()); + for (s = 1; s <= 11; s++) i.properties["level" + s].linewidth.setValue(i + .properties.linewidth.value()), i.properties["level" + s].linestyle + .setValue(i.properties.linestyle.value()) + } + } + pointsCount() { + return 2 + } + name() { + return "Fib Time Zone" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "SMr9"))) + .FibTimezoneDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolfibtimezone", e, !1, { + range: [1, 11] + }); + return l._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [], i = [], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r) + .child("linewidth")), i.push(e.child("level" + r).child("color")); + for (t = [], i = [], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r) + .child("linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.version = 2, l.LevelsCount = 11, t.LineToolFibTimeZone = l + }, + "GD+X": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor(e, t) { + this._chartUndoModel = e, this._chartModel = e.model(), this._priceScale = t + } + getMode() { + const e = this._priceScale.properties().childs(); + return e.percentage.value() ? 2 : e.indexedTo100.value() ? 3 : e.log.value() ? 1 : 0 + } + setMode(e) { + this._priceScale.setMode({ + percentage: 2 === e, + log: 1 === e, + indexedTo100: 3 === e + }) + } + isInverted() { + return this._priceScale.isInverted() + } + setInverted(e) { + this._priceScale.properties().childs().isInverted.setValue(e) + } + getVisiblePriceRange() { + return this._priceScale.priceRangeInPrice() + } + setVisiblePriceRange(e) { + this._priceScale.setPriceRangeInPrice(e), this._chartModel.lightUpdate() + } + hasMainSeries() { + return this._priceScale.hasMainSeries() + } + getStudies() { + return this._priceScale.getStudies().map(e => e.id()) + } + currency() { + const e = this._priceScale.currency(this._chartModel.availableCurrencies()); + return null === e ? null : { + selectedCurrency: e.selectedCurrency, + readOnly: e.readOnly + } + } + setCurrency(e) { + this._chartUndoModel.setPriceScaleCurrency(this._priceScale, e) + } + unit() { + const e = this._priceScale.unit(this._chartModel.availableUnits()); + return null === e ? null : { + selectedUnit: e.selectedUnit, + readOnly: 0 === e.availableGroups.size, + availableGroups: Array.from(e.availableGroups) + } + } + setUnit(e) { + this._chartUndoModel.setPriceScaleUnit(this._priceScale, e) + } + } + }, + GDWD: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "addPlusButtonProperty", (function() { + return o + })), i.d(t, "restoreAddPlusButtonSettingsValue", (function() { + return a + })); + var s = i("Vdly"), + r = i("m/cY"); + + function n() { + return s.getBool("add_plus_button", !0) + } + const o = Object(r.a)(n()); + + function a() { + o.setValue(!0), s.remove("add_plus_button") + } + s.onSync.subscribe(null, () => o.setValue(n())), o.listeners().subscribe(null, () => s.setValue( + "add_plus_button", o.value())) + }, + GEp6: function(e, t, i) { + "use strict"; + + function s(e, t, i) { + var s = t.subtract(e), + r = i.subtract(e).dotProduct(s) / s.dotProduct(s); + return { + coeff: r, + distance: e.addScaled(s, r).subtract(i).length() + } + } + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.distanceToSegment = t.distanceToLine = void 0, t.distanceToLine = s, t + .distanceToSegment = function(e, t, i) { + var r = s(e, t, i); + if (0 <= r.coeff && r.coeff <= 1) return r; + var n = e.subtract(i).length(), + o = t.subtract(i).length(); + return n < o ? { + coeff: 0, + distance: n + } : { + coeff: 1, + distance: o + } + } + }, + GH0z: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PercentageFormatter", (function() { + return n + })); + var s = i("kcTO"), + r = i("Ialn"); + class n extends s.PriceFormatter { + constructor(e = 100) { + super(e), this.type = "percentage" + } + state() { + const e = s.PriceFormatter.prototype.state.call(this); + return e.percent = !0, e + } + parse(e) { + return e = e.replace("%", ""), super.parse(e) + } + format(e, t, i, s, n = !0) { + const o = super.format(e, t, i, s, !1) + "%"; + return n ? Object(r.forceLTRStr)(o) : o + } + static serialize(e) { + return e.state() + } + static deserialize(e) { + return new n(e.priceScale) + } + } + }, + GUQs: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "c", (function() { + return n + })), i.d(t, "b", (function() { + return o + })); + var s = i("qFKp"); + + function r(e) { + e.cancelable && e.preventDefault() + } + + function n(e) { + return t => { + r(t), e() + } + } + + function o(e) { + s.isChrome && e.addEventListener("mousedown", e => { + if (1 === e.button) return e.preventDefault(), !1 + }) + } + }, + GVHu: function(e, t, i) { + "use strict"; + (function(e, s) { + var r = i("Eyy1"), + n = r.assert, + o = r.ensureNotNull, + a = i("hsV8").unpackNonSeriesData, + l = i("n5al").symbolTitle, + c = i("38az").StudyBarColorer, + h = i("hezA").StudyPriceAxisView, + u = i("jenN"), + d = u.emptyStudyGraphics, + p = u.loadStudyGraphics, + _ = u.saveStudyGraphics, + m = u.LiveStudyGraphics, + f = u.createGraphicsPriceAxisViews, + g = i("XzZr").ChartApiInterface, + b = i("Ocx9").DefaultProperty, + v = i("kcTO").PriceFormatter, + S = i("nEwK").VolumeFormatter, + y = i("GH0z").PercentageFormatter, + w = i("k9/m"), + P = w.PlotList, + C = w.PlotRowSearchMode, + x = i("0YCj"), + T = (i("cBZt").extractStudyId, i("FQhm")), + I = i("23IT"), + M = I.LineStudyPlotStyle, + O = i("TmNs").StudyPriceLineAxisView, + L = i("w4Ji").studyPlotFunctionMap, + A = i("w4Ji").studyEmptyPlotValuePredicate, + E = i("jy4L").makeNextStudyId, + k = i("Kxc7"), + D = i("IcDj").StudyBase, + V = i("i6cO").ColorerType, + B = i("H0vP").InvalidationMask, + R = i("bmVy"), + N = R.StudyStatusType, + j = (R.convertStudyStatusToString, i("Tmoa").colorToInteger), + F = i("UAFa").createStudyPlotColorProvider, + W = i("0C7r").intervalsVisibilitiesDefaults, + H = i("txPx").getLogger("Chart.Study"), + U = k.enabled("datasource_copypaste"), + z = k.enabled("study_symbol_ticker_description"), + G = k.enabled("hide_unresolved_symbols_in_legend"); + + function q(e, t, i) { + var s = new b(t, i, !0); + s.addExclusion("visible"), s.addExclusion("precision"), s.addExclusion("minTick"), s + .addExclusion("intervalsVisibilities"); + for (var r = 0; r < e.inputs.length; ++r) { + var n = e.inputs[r]; + n.isHidden && (s.addExclusion("inputs." + r.toString()), s.addExclusion( + "inputs." + n.id)) + } + return s + } + + function Y(e, t) { + if (t.plots) + for (var i = 0; i < t.plots.length; i++) { + var s = t.plots[i], + r = s.id; + if (!I.isColorerPlot(s)) { + var n = { + visible: !0, + color: "#0496FF", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 2, + plottype: M.Line, + histogramBase: 0, + transparency: 50, + trackPrice: !1, + joinPoints: !1 + }; + I.isBarColorerPlot(s) && (n.transparency = 0), n.plottype = s.type, n + .title = r, e.styles && r in e.styles && TradingView.merge(n, e + .styles[r]), e.styles[r] = n + } + } + } + + function K(e, t) { + return e && e[t] && e[t].hasOwnProperty("showLast") ? e[t].showLast.value() : null + } + class J extends D { + constructor(e, t, i, r) { + super(e, t, i, r), this._resolvedSymbols = {}, this + ._priceAxisViewsBase = [], this._graphicsPriceAxisViews = [], this + ._priceLinesAxisViews = [], this._hlinesPriceAsisViews = [], this + ._horizlinesPriceAsisViews = [], this._chartApi = e._chartApi, this + ._turnaroundCounter = 0, this._turnaround = "st" + this + ._turnaroundCounter, this._plotFields = []; + var n = this.metaInfo().plots; + if (n) + for (var o = 0, a = n.length; o < a; o++) { + var l = n[o].id; + this._plotFields.push(l) + } + this._invalidateLastNonEmptyPlotRowCache(), this.m_data = new P(L(this + ._metaInfo), A), this._graphics = new m, this._plotOffsets = {}, + this._plotOffsetsMetaInfoOverride = {}, this._studyModified = !1, this + ._tagsChanged = new s, this._labelPaneViews = [], this._createViews(); + var c = this; + this._handler = function(e) { + c.onData(e) + }, + this._handler.isTVScriptStrategy = this._metaInfo.isTVScriptStrategy, + this._recreatePriceFormattingDependencies(), this._properties.precision + .listeners().subscribe(this, this._precisionChanged), this + ._showStudyArgumentsProperty.listeners().subscribe(this, this + .invalidateTitleCache), this._properties.description.listeners() + .subscribe(this, this.invalidateTitleCache), this._properties.inputs + .listeners().subscribe(this, this.invalidateTitleCache), this + ._properties.shortDescription && this._properties.shortDescription + .listeners().subscribe(this, this.invalidateTitleCache), k.enabled( + "update_study_formatter_on_symbol_resolve") && e.mainSeries() + .dataEvents().symbolResolved().subscribe(this, this + ._recreatePriceFormattingDependencies), e.mainSeries().dataEvents() + .symbolResolved().subscribe(this, this.invalidateTitleCache); + c = this; + var h = {}; + this._simplePlotsCount = r.plots.filter((function(e, t) { + if (I.isLinePlot(e)) return !0; + if (I.isOhlcPlot(e)) { + var i = c.metaInfo().plots[t].target; + return !h[i] && (h[i] = i, !0) + } + return !1 + })).length, this._properties.showInDataWindow.listeners().subscribe(e, e + .fullUpdate), this.hasBarColorer() && this._properties.visible + .listeners().subscribe(e.mainSeries(), e.mainSeries() + .invalidateBarStylesCache), this._childStudyByRebind = new s, this + ._formatterChanged = new s, this._priceStepChanged = new s, this + ._aboutToBeDestroyed = new s, this._ongoingDataUpdate = Promise + .resolve(), this._isDestroyed = !1, this._definitionsViewModel = null + } + lastValueData(e, t, i) { + var s = { + noData: !0 + }; + if (this._model.timeScale().isEmpty() || null == this.priceScale() || this + .priceScale().isEmpty() || this.data().isEmpty()) return s; + var r = this._model.timeScale().visibleBarsStrictRange(); + if (null === r) return s; + if (!this.properties().visible.value()) return s; + var n, o, a = this.properties().styles, + l = this.properties().ohlcPlots; + if (a && a[e] && (n = a[e]), l && l[e] && (n = l[e]), !n || !n.visible + .value()) return s; + var c = this.metaInfo().plots; + for (o = 0; o < c.length && !(c[o].id === e || I.isOhlcClosePlot(o) && c[o] + .target === e); o++); + var h = o + 1, + u = this.offset(e), + d = this.nearestIndex(r.lastBar() - u, C.NearestLeft, h); + if (null == d) return s; + var p = this._lastNonEmptyPlotRow(h), + _ = null !== p && r.contains(p.index), + m = null !== p ? p.value : null, + f = t || _ ? m : this.data().valueAt(d); + if (!f || !isNumber(f[h])) return s; + var g = { + noData: !1 + }, + b = f[h]; + i && (g.price = b); + var v = this.firstValue(!0); + if (!isNumber(v)) return s; + g.text = this.priceScale().formatPrice(b, v), g.formattedPriceAbsolute = + this.priceScale().formatPriceAbsolute(b), g.formattedPricePercentage = + this.priceScale().formatPricePercentage(b, v); + const S = F(this.metaInfo(), this.properties(), e).getPlotPointStyle(f) + .colors[V.Main]; + return g.color = S || n.color.value(), g.floatCoordinate = this.priceScale() + .priceToCoordinate(b, v), g.coordinate = g.floatCoordinate, g.item = f, + g + } + isFailed() { + return this._status.type === N.Error + } + isLoading() { + return this._status.type === N.Loading + } + series() { + return this._series + } + model() { + return this._model + } + clearData() { + this._invalidateLastNonEmptyPlotRowCache(), this.data().clear(), this + ._graphics.clear && this._graphics.clear(), this._plotOffsets = {} + } + onTagsChanged() { + return this._tagsChanged + } + properties() { + return this._properties + } + state(e, t) { + var i = { + type: TradingView.className(this.constructor), + id: this.id(), + state: this.properties().state(), + zorder: this.zorder(), + ownFirstValue: this.isVisible() ? null : this._ownFirstValue + }; + this.metaInfo() instanceof x ? i.metaInfo = TradingView.clone(this + .metaInfo().state()) : (i.metaInfo = TradingView.clone(this + .metaInfo()), + i.metaInfo.id = x.parseIdString(i.metaInfo.id + (i.metaInfo + .version ? "-" + i.metaInfo.version : "")).fullId), e && (i + .data = this.data().state(), i.data.symbols = this._resolvedSymbols, + i.data.graphics = _(this.graphics()), i.data.plotOffsets = this + ._plotOffsets), this.ownerSource() && (i.ownerSource = this + .ownerSource().id()); + for (var s = 0; s < this._metaInfo.inputs.length; s++) + if ("bar_time" === this._metaInfo.inputs[s].type) { + var r = this._metaInfo.inputs[s].id, + n = i.state.inputs[r]; + if (n < 0) { + var o = this._rightOffsetToUnixTime(-n); + i.state.inputs[r] = o && o >= 0 ? o : 0 + } + } return this._isChildStudy && x.patchChildStudyMetaInfoState(i), i + } + _plotsForAlert() { + var e = this, + t = this._metaInfo, + i = [I.isLinePlot, I.isShapesPlot, I.isCharsPlot, I.isArrowsPlot, I + .isOhlcPlot, I.isAlertConditionPlot + ]; + return t.plots.map((function(e, t) { + return e.pinePlotIndex = t, e + })).filter((function(e) { + return i.some((function(t) { + return t(e) + })) + })).map((function(i) { + var s = { + id: i.id, + type: i.type, + pinePlotIndex: i.pinePlotIndex, + offset: e.offset(i.id) + }; + return t.styles && void 0 !== t.styles[i.id] && (s.title = t + .styles[i.id].title || "", s.text = t.styles[i.id] + .text || ""), i.target && t.ohlcPlots && t + .ohlcPlots[i.target] && (s.ohlcTitle = t.ohlcPlots[i + .target].title), s + })) + } + _collectDepsForAlert() { + throw new Error("Not implemented") + } + idForAlert() { + return D.prototype.idForAlert.call(this) + } + dependenciesForAlerts() { + throw new Error("Not implemented") + } + _hasAvailableAlertPlots() { + return !1 + } + _hasAlertablePlots() { + return (this.metaInfo().plots || []).some((function(e) { + return "line" === e.type + })) + } + _hasAlertConditions() { + if (this.metaInfo().plots.some(I.isAlertConditionPlot)) return !0; + var e = this.stateForAlert(); + return Boolean(e.alerts && e.alerts.conditions) + } + _hasAlertFunction() { + const e = this.metaInfo(); + return Boolean(e.hasAlertFunction) + } + _isAlertFeatureEnabled() { + return !1 + } + hasStateForAlert() { + return this._isAlertFeatureEnabled() && !this.isFailed() && (this.metaInfo() + .isTVScript ? this._hasAlertConditions() || this + ._hasAvailableAlertPlots() || this._hasAlertFunction() : this + ._hasAlertablePlots()) + } + stateForAlert() { + throw new Error("Not implemented") + } + isSavedInStudyTemplates() { + for (var e = 0; e < this._metaInfo.inputs.length; e++) + if ("bar_time" === this._metaInfo.inputs[e].type) return !1; + return !0 + } + restoreData(e) { + this._invalidateLastNonEmptyPlotRowCache(), this.data().restoreState(e), + this._resolvedSymbols = e.symbols, this._graphics = e.graphics ? p(e + .graphics) : d(), this._postProcessGraphics(), this._plotOffsets = e + .plotOffsets, this._status = { + type: N.Completed + } + } + restart(e) { + this._restarting = !0, this.clearData(), (e || k.enabled( + "stop_study_on_restart")) && this.stop(), setTimeout(this.start + .bind(this), 0) + } + stop(e) { + if (!0 === e && this._children) + for (var t = 0; t < this._children.length; ++t) this._children[t].stop(! + 0); + this._stopStudyOnServer(), this.clearData(), this._unsubscribeToSessionId(), + this.recalculate() + } + _allInputsAreValid() { + for (var e = 0; e < this._metaInfo.inputs.length; e++) + if ("bar_time" === this._metaInfo.inputs[e].type) { + var t = this._metaInfo.inputs[e].id, + i = this._properties.inputs[t].value(); + if (void 0 === i || null == i) return !1 + } return !0 + } + sourceId() { + return this._studyId + } + parentSource() { + return this._source || this._series + } + symbolSource() { + return this.parentSource().symbolSource() + } + source() { + return this.parentSource() + } + ownerSource() { + return this._isChildStudy ? this._source : D.prototype.ownerSource.call( + this) + } + getAllOwnerSources() { + for (var e = [], t = this.ownerSource(); null != t;) e.push(t), t = t + .ownerSource(); + return e + } + isChildStudy() { + return !!this._isChildStudy + } + setChild(e) { + e instanceof J && e.source() === this && (this._children || (this + ._children = []), -1 === this._children.indexOf(e) && this + ._children.push(e)) + } + unsetChild(e) { + if (e instanceof J && e.source() === this && this._children) { + var t = this._children.indexOf(e); + ~t && this._children.splice(t, 1) + } + } + hasChildren() { + return !(!this._children || !this._children.length) + } + getAllChildren() { + if (!Array.isArray(this._children)) return []; + for (var e = this._children.slice(), t = 0; t < e.length; ++t) + for (var i = e[t].getAllChildren(), s = 0; s < i.length; ++s) ~e + .indexOf(i[s]) || e.push(i[s]); + return e + } + _debugId() { + var e = []; + return this._studyId && e.push(this._studyId), e.push(this._metaInfo + .fullId), e.push(this._metaInfo.description), JSON.stringify({ + study: e + }) + } + isStarted() { + return !!this._studyId + } + _isStopped() { + return !this.isStarted() + } + isRestarting() { + return !!this._restarting + } + start(e, t) { + var i = this._model.mainSeries(); + if (!i.isStarted()) return void i.dataEvents().completed().subscribe(this, ( + function() { + this.start(e, t) + }), !0); + this._isChildStudy && this._source.isHibernated() && this._source.start(); + const s = !(!this._isChildStudy && !this.hasChildren() && !this + .isVisible()) || !0 === t; + this._chartApi && this._chartApi.connected() && s && this + ._allSymbolsAreResolved().then(function() { + this._startAfterSymbolsResolved(e, t) + }.bind(this)).catch(function(e) { + H.logError("ERROR: " + this._debugId() + " start failed, " + e), + delete this._restarting + }.bind(this)) + } + _getStudyIdWithLatestVersion() { + var e = x.cutDollarHash(this._metaInfo.id), + t = e; + return e.indexOf("@tv-scripting") >= 0 ? t += "-101!" : t += "-" + this + ._metaInfo.version, t + } + _startAfterSymbolsResolved(e, t) { + if (!this.isStarted() || this._restarting) { + if (this._isChildStudy) { + if (!this._source.isStarted() || this._source.isRestarting()) + return void this._source.onStart.subscribe(this, this + ._startAfterSymbolsResolved, !0); + x.setChildStudyMetaInfoPropertiesSourceId(this._metaInfo, this + ._source.sourceId(), this._properties) + } + if (delete this._restarting, this._allInputsAreValid() && (this + ._inputs = this.inputs({ + keepOptionalSymbolsEmpty: !0 + }), this._createStudyOnServer(), this._subscribeToSessionId(), + this.onStart.fire(), !0 === e && this._children)) + for (var i = 0; i < this._children.length; ++i) this._children[i] + .start(!0, t) + } + } + _createStudyOnServer() { + var e = this._getStudyIdWithLatestVersion(); + this._studyId = E(), this._incrementTurnaround(), this._studyName = e, + this._chartApi.createStudy(this._studyId, this._turnaround, this + ._isChildStudy ? this._source.sourceId() : this._series + .seriesSource().instanceId(), this._studyName, this._inputs, this + ._handler, this._isChildStudy) + } + _modifyStudyOnServer(e) { + this._chartApi.modifyStudy(this._studyId, this._turnaround, e, this + ._handler) + } + _stopStudyOnServer() { + this._chartApi && this._chartApi.connected() && this.isStarted() && this + ._chartApi.removeStudy(this._studyId, this._isChildStudy), this + ._studyId = null + } + _rightOffsetToUnixTime(e) { + var t = null; + if (this._series.bars().size() >= e) { + var i = o(this._series.bars().lastIndex()) - e; + t = o(this._series.bars().valueAt(i))[TradingView.TIME_PLOT] + } + return t + } + inputsForAlert() { + var e = this.offset(), + t = this.inputs(); + return e && t.push(e), t + } + inputsForAlertState() { + return this.inputs() + } + _prepareInputValue(e, t) { + var i = e.id; + if (t.valuesAsIsFromProperties) return this._properties.inputs[i].value(); + if ("symbol" === e.type) { + var s = t && t.symbolsForDisplay, + r = this._properties.inputs[i].value(), + n = s ? r : this._getSymbolForApi(r), + o = this._resolvedSymbols && this._resolvedSymbols[this + ._getSymbolForResolve(n)]; + if ("" === n && e.optional) { + if (t && t.keepOptionalSymbolsEmpty) return n; + n = this._model.mainSeries().symbol(), o = this._model.mainSeries() + .symbolInfo() + } + if (s) + if (o) + if (z) { + switch (this._model.mainSeries().properties() + .statusViewStyle.symbolTextSource.value()) { + case "description": + n = o.description; + break; + case "ticker-and-description": + n = `${o.name}, ${o.description}`; + break; + case "ticker": + n = o.name + } + } else n = l(o, t.noExchanges); + else G && (n = ""); + else o && (n = o.ticker || o.full_name), !this.isPine() && t && t + .symbolsForChartApi && (n = this.getSymbolString(n)); + return n + } + if ("bar_time" === e.type) { + var a = this._properties.inputs[i].value(); + if (a < 0) { + var c = this._rightOffsetToUnixTime(-a); + a = c && c >= 0 ? c : a + } + return a + } + if (this._metaInfo.isTVScript || this._metaInfo.pine) { + if ("text" === i) return this._metaInfo.defaults.inputs.text; + if ("pineId" === i) return this._metaInfo.scriptIdPart; + if ("pineVersion" === i) return this._metaInfo.pine ? this._metaInfo + .pine.version : "-1"; + if ("color" === e.type && this._metaInfo.isRGB) { + var h = this._properties.inputs[i].value(); + return j(h) + } + return this._properties.inputs[i].value() + } + return this._properties.inputs[i].value() + } + _rebindToSource(e, t) { + var i = this.parentSource(); + if (this._isChildStudy) { + var s; + this._source.unsetChild(this); + var r = null; + if (e === this._model.mainSeries()) delete this._source, delete this + ._isChildStudy, delete this._ownerSource, s = this._series + .seriesSource().instanceId(), r = g + .REBIND_STUDY_CHILD_TO_STANDALONE; + else { + if (!(e instanceof J)) return H.logError( + "Unable to rebind study to source of this type"), !1; + this._ownerSource = e, this._source = e, s = this._source + .sourceId(), this._source.setChild(this), this._source + .isHibernated() && this._source.start() + } + this._incrementTurnaround(), this.disablePriceRangeReady(), this + ._chartApi.rebindStudy(this._studyId, this._turnaround, s, this + ._studyName, t, this._handler, r) + } else { + if (!(e instanceof J)) return H.logError( + "Unable to rebind study to source of this type"), !1; + var n = e.isHibernated(); + n && e.start(); + var o = !1; + if (this._canCreateStudyWithRebindType(g + .REBIND_STUDY_STANDALONE_TO_CHILD) && (this + ._incrementTurnaround(), this.disablePriceRangeReady(), o = this + ._chartApi.rebindStudy(this._studyId, this._turnaround, e + .sourceId(), this._studyName, t, this._handler, g + .REBIND_STUDY_STANDALONE_TO_CHILD)), !o) return n && e + .stop(), !1; + this._isChildStudy = !0, this._ownerSource = e, this._source = e, this + ._source.setChild(this), this._childStudyByRebind.fire() + } + var a = this.m_priceScale, + l = e.priceScale(); + if (a !== l) { + var c = this._model.paneForSource(this), + h = this._model.paneForSource(e); + c === h && h.move(this, l, !0) + } + const u = this.parentSource(); + return i.formatterChanged().unsubscribe(this, this + ._onSourceFormatterChanged), u.formatterChanged().subscribe(this, + this._onSourceFormatterChanged), i.priceStepChanged().unsubscribe( + this, this._onSourcePriceStepChanged), u.priceStepChanged() + .subscribe(this, this._onSourcePriceStepChanged), i.currencyChanged() + .unsubscribeAll(this), u.currencyChanged().subscribe(this, this + ._onSourceCurrencyChanged), i.unitChanged().unsubscribeAll(this), u + .unitChanged().subscribe(this, this._onSourceUnitChanged), i + .priceRangeReadyChanged().unsubscribeAll(this), u + .priceRangeReadyChanged().subscribe(this, this + ._onSourcePriceRangeReadyChanged), this + ._recreatePriceFormattingDependencies(), !0 + } + childStudyByRebind() { + return this._childStudyByRebind + } + _changeInputsImpl(e, t) { + var i = this.source(), + s = this._properties.inputs && this._properties.inputs.state(), + r = x.getSourceIdByInputs(this._metaInfo.inputs, s), + n = !0; + if (r) + if ("high" === r || "open" === r || "low" === r || "close" === r || + "hl2" === r || "ohl3" === r || "ohlc4" === r) i = this._model + .mainSeries(); + else + for (var o = this._model.dataSources().filter((function(e) { + return e instanceof J && e.canHaveChildren() + })), a = 0; a < o.length; ++a) + if (o[a].sourceId() === r) { + i = o[a]; + break + } if (i !== this.source()) { + if (!this._rebindToSource(i, e) && s) + for (var l in t) + if (t.hasOwnProperty(l) && t[l] !== e[l] && 0 === e[l].indexOf( + r)) { + var c = this._properties.inputs[l], + h = t[l]; + c.setValue(h), n = !1; + break + } + } else this._incrementTurnaround(), this.disablePriceRangeReady(), this + ._modifyStudyOnServer(e); + this.invalidateTitleCache(), n && (this._studyModified = n) + } + _incrementTurnaround() { + this._turnaround = "st" + ++this._turnaroundCounter + } + _tryChangeInputs() { + var e = TradingView.clone(this._inputs); + this.isStarted() && this._chartApi.connected() ? this._allInputsAreValid() ? + this._allSymbolsAreResolved().then(function() { + var t = this.inputs({ + keepOptionalSymbolsEmpty: !0 + }); + const i = JSON.stringify(t) !== JSON.stringify(this._inputs); + this._isStopped() ? i && this.disablePriceRangeReady() : i && ( + this._changeInputsImpl(t, e), this._inputs = t) + }.bind(this)).catch(function(e) { + H.logError("ERROR: " + this._debugId() + + " _tryChangeInputs: cannot modify study, " + e) + }.bind(this)) : this.stop() : (this.stop(!0), this.start(!0)), this + ._tagsChanged.fire() + } + testInputValue(e, t) { + if (!x.canBeChild(this._metaInfo) || !x.isSourceInput(e)) return !0; + var i = this._properties.inputs && this._properties.inputs[e.id]; + if (!i) return !0; + var s = J.getInputRebindType(e, i.value(), t); + return !!this._canCreateStudyWithRebindType(s) + } + _canCreateStudyWithRebindType(e) { + return e !== g.REBIND_STUDY_STANDALONE_TO_CHILD || this._chartApi + .isCanCreateStudy(!0) + } + changeStyles() { + var e = void 0 !== this._metaInfo.inputs.find((function(e) { + return "symbol" === e.type + })); + !this.isStarted() && !e || this._restarting || (this._inputs ? this + ._tryChangeInputs() : this._chartApi && this._chartApi + .connected() && this.restart()) + } + _recreatePaneViews() { + this.hasBarColorer() && this._model.mainSeries().invalidateBarStylesCache(), + this._createViews(), this.recalculate(!0), this.updateAllViews() + } + _onPropertiesChanged() { + this.changeStyles(), this._recreatePaneViews(), T.emit( + "study_properties_changed", this._id) + } + _isModifiedStudyInputs(e) { + if (void 0 === this._oldStudyInputs) return this._oldStudyInputs = e, !0; + var t = Object.keys(this._oldStudyInputs); + return n(t.length === Object.keys(e).length, + "keys quantity should be equal"), t.forEach((function(t) { + n(e.hasOwnProperty(t), "key '" + t + + "' should existing in studyInputs"), this + ._oldStudyInputs[t] !== e[t] && (this._oldStudyInputs = + e) + }), this), this._oldStudyInputs === e + } + _pinePatchProps() { + throw new Error("Not implemented") + } + priceLabelText(e) { + var t, i = this._metaInfo.styles, + s = this._metaInfo.ohlcPlots; + i && i[e] && (t = i[e]), s && s[e] && (t = s[e]); + var r = t.title; + return 1 !== this._simplePlotsCount || I.isPlotTitleDefined(r) ? this + ._metaInfo.is_price_study && r !== this._metaInfo.shortDescription ? + "" === r ? this._metaInfo.shortDescription : this._metaInfo + .shortDescription + ":" + r : r : this._metaInfo.shortDescription + } + createPriceAxisView(e) { + return new h(this, { + plotIndex: e + }) + } + createPriceLineAxisView(e) { + return new O(this, e) + } + _concatPriceAxisViews() { + this._priceAxisViews = [].concat(this._priceAxisViewsBase, this + ._graphicsPriceAxisViews, this._hlinesPriceAsisViews, this + ._horizlinesPriceAsisViews) + } + recalculate(e) { + var t = this._model.paneForSource(this); + this._model.recalculatePane(t, e), this._model.updateSource(this) + } + data() { + return this.m_data + } + metaInfo() { + return this._metaInfo + } + graphicsInfo() { + return this._metaInfo.graphics + } + graphics() { + return this._graphics + } + turnaround(e) { + var t = this.source(); + return !0 === e ? (t === this._series ? t.seriesSource().turnaround() : t + .turnaround(!0)) + "_" + this._turnaround : this._turnaround + } + _checkTurnaround(e) { + return e === this._turnaround || e === this._model.mainSeries() + .seriesSource().turnaround() || e === this.turnaround(!0) + } + _handleStudyError(e) { + this.clearData(), this._setStatus(e), this._statusView.update(), this._model + .updateSource(this) + } + _onStudyLoading() { + this._setStatus({ + type: N.Loading, + startTime: Date.now() + }), this._statusView.update(), this._model.updateSource(this) + } + _onStudyError(e) { + var t = "string" == typeof e ? { + error: e.split(":", 2)[0] + } : e; + this._handleStudyError({ + type: N.Error, + errorDescription: t + }), this._enablePriceRangeReady() + } + _onStudyCompleted(e) { + this._studyModified && (this.clearData(), this._studyModified = !1), this + ._setStatus({ + type: N.Completed + }), this._statusView.update(); + var t = this._model.paneForSource(this); + this._model.recalculatePane(t), this._updateSources(); + var i = B.full(); + null !== this._model.appliedTimeFrame().value() && i + .lockVisibleTimeRangeOnResize(), this._model.invalidate(i) + } + onData(e) { + switch (e.method) { + case "study_loading": + this._onStudyLoading(); + break; + case "study_error": + this._onStudyError(e.params[2]); + break; + case "study_completed": + if (!this._checkTurnaround(e.params[1])) return; + this._onStudyCompleted(e.params[e.params.length - 1]); + break; + case "data_update": + if (e.params.customId !== this.sourceId() || !this._checkTurnaround( + e.params.turnaround)) return; + n(!!e.params.nonseries, "data.params.nonseries is missing"), this + ._onDataUpdate(e.params.plots, e.params.nonseries); + break; + case "clear_data": + this._checkTurnaround(e.params.turnaround) && this.clearData() + } + } + _onDataUpdate(e, t) { + this._studyModified && (this.clearData(), this._studyModified = !1); + var i = a(t.d); + return this._ongoingDataUpdate = this._ongoingDataUpdate.then((function() { + return i + }), (function() { + return i + })).then(this._onDataUnpacked.bind(this, e, t.indexes)), this + ._ongoingDataUpdate + } + _onDataUnpacked(e, t, i) { + this._isDestroyed || ("nochange" !== t && this._processPlotOffsets(i), this + .transformData(e), this._mergeData(e), null !== i && (i + .indexes_replace ? (n("nochange" !== t), this._graphics + .replaceIndexesTo(t)) : ("nochange" !== t && this._graphics + .replaceIndexesTo(t), void 0 !== i.graphicsCmds && this + ._graphics.processCommands(i.graphicsCmds, this._metaInfo + .graphics))), this._onDataUpdated(e, i, t), this + .priceRangeReady() || this._enablePriceRangeReady()) + } + _onDataUpdated(e, t, i) { + if (this.hasBarColorer() && e.length > 0) { + var s = this.barColorer().firstColoredBar(e[0].index); + this._model.mainSeries().invalidateBarStylesCache(s) + } + null !== t && this._postProcessGraphics(); + var r = this._model.paneForSource(this); + this._model.recalculatePane(r), this._updateSources() + } + transformData(e) {} + moveData(e) { + this._ongoingDataUpdate = this._ongoingDataUpdate.then(function() { + this._invalidateLastNonEmptyPlotRowCache(), this.data().move(e) + }.bind(this)) + } + replaceData(e, t, i) { + this._invalidateLastNonEmptyPlotRowCache(), this.data().remove(e + 1), this + .data().addTail(i, t) + } + _updateSources() { + this._model.updateSource(this), this.hasBarColorer() && this._model + .updateSource(this._model.mainSeries()) + } + static processPlotOffsets(e, t) { + t && t.indexes_replace || (e._plotOffsets = t && t.offsets || {}) + } + _processPlotOffsets(e) { + J.processPlotOffsets(this, e) + } + _mergeData(e) { + this._invalidateLastNonEmptyPlotRowCache(), this.data().merge(e) + } + _postProcessGraphics() { + this._graphicsPriceAxisViews = f(this), this._concatPriceAxisViews() + } + static offset(e, t) { + var i = 0; + return e._plotOffsets && void 0 !== e._plotOffsets[t] && (i += e + ._plotOffsets[t]), void 0 !== e._plotOffsetsMetaInfoOverride[t] ? + i += e._plotOffsetsMetaInfoOverride[t] : e.properties().offsets && + void 0 !== e.properties().offsets[t] && (i += e.properties().offsets[t] + .val.value()), e.properties().offset && (i += e.properties().offset + .val.value()), i + } + offset(e) { + return J.offset(this, e) + } + paneViews() { + return this.isSourceHidden() ? null : this._paneViews + } + labelPaneViews() { + return this.isSourceHidden() ? null : this._labelPaneViews + } + dataWindowView() { + return this._dataWindowView + } + legendView() { + return this._legendView + } + statusView() { + return this._statusView + } + priceAxisViews(e, t) { + return this.properties().oldShowLastValue && !this.properties() + .oldShowLastValue.value() ? null : e.findTargetPriceAxisViews(this, t, + this._priceAxisViews, this._priceLinesAxisViews) + } + _showLastValueOnPriceScale() { + return this._model.properties().scalesProperties.showStudyLastValue.value() + } + hasBarColorer() { + for (var e = 0; e < this._metaInfo.plots.length; ++e) + if (I.isBarColorerPlot(this._metaInfo.plots[e])) return !0; + return !1 + } + barColorer() { + for (var e = null, t = 0; t < this._metaInfo.plots.length; ++t) + if (I.isBarColorerPlot(this._metaInfo.plots[t])) { + var i = new c(this, t); + null == e ? e = i : e.pushBackBarColorer(i) + } if (null == e) throw new Error( + "Cannot create BarColorer: study doesn't have a bar_colorer plot!" + ); + return e + } + base() { + return 0 + } + _priceScaleByProperties() { + if ("default" === this.properties().precision.value()) return null; + var e = parseInt(this.properties().precision.value()); + return isFinite(e) ? Math.pow(10, e) : null + } + _formatterByProperties() { + var e = this._priceScaleByProperties(); + return null !== e ? new v(e) : null + } + _priceScaleByMetaInfo() { + var e = this.metaInfo().format, + t = isNumber(e.precision) ? Math.pow(10, e.precision) : void 0; + if ("price" === e.type || "percent" === e.type) return t || 100; + if ("volume" === e.type) { + if (void 0 === e.precision) { + var i = this.series().symbolInfo(); + if (null !== i && isNumber(i.volume_precision)) return Math.pow(10, + i.volume_precision) + } + return 1 + } + return "inherit" === e.type || H.logWarn("Unsupported format type: " + e + .type), null + } + _formatterByMetaInfo() { + var e = this.metaInfo().format, + t = isNumber(e.precision) ? Math.pow(10, e.precision) : void 0; + switch (e.type) { + case "price": + return new v(t); + case "volume": + var i = e.precision; + if (void 0 === i) { + var s = this.series().symbolInfo(); + i = s && isNumber(s.volume_precision) ? s.volume_precision : 0 + } + return new S(i); + case "percent": + return new y(t); + case "inherit": + return null; + default: + return H.logWarn("Unsupported format type: " + e.type), null + } + } + _onSourceFormatterChanged() { + null === this._formatter && (null !== this.priceScale() && this.priceScale() + .updateFormatter(), this._formatterChanged.fire()) + } + _onSourcePriceStepChanged() { + null === this._priceStep && this._priceStepChanged.fire() + } + _precisionChanged() { + this._recreatePriceFormattingDependencies() + } + _recreatePriceFormattingDependencies() { + this._recreateFormatter(), this._recreatePriceStep() + } + _recreateFormatter() { + this._formatter = this._tryCreateFormatter(), this._formatterChanged.fire(), + null !== this.priceScale() && this.priceScale().updateFormatter(), this + ._model.fullUpdate() + } + _recreatePriceStep() { + var e = null, + t = this._tryToGetPriceScale(); + null !== t && (e = 1 / t), this._priceStep !== e && (this._priceStep = e, + this._priceStepChanged.fire()) + } + _tryToGetPriceScale() { + var e = this._priceScaleByProperties(); + return null === e && (e = this._priceScaleByMetaInfo()), e + } + _tryCreateFormatter() { + var e = this._formatterByProperties(); + return null === e && (e = this._formatterByMetaInfo()), e + } + formatter() { + return this._formatter || this.parentSource().formatter(!1) + } + priceStep() { + return this._priceStep || this.parentSource().priceStep(!1) + } + setOwnerSource(e) { + super.setOwnerSource(e), this._recreatePriceFormattingDependencies() + } + nearestIndex(e, t, i) { + if (TradingView.isInteger(e)) { + var s = this.data().search(e, t, i); + return null !== s ? s.index : void 0 + } + H.logDebug("nearestIndex: incorrect logicalPoint") + } + updateAllViews() { + for (var e = 0; e < this._paneViews.length; e++) this._paneViews[e] + .update(); + for (e = 0; e < this._labelPaneViews.length; e++) this._labelPaneViews[e] + .update(); + this._dataWindowView.update(), null !== this._legendView && this._legendView + .update(), this._statusView.update(); + for (e = 0; e < this._priceAxisViews.length; e++) this._priceAxisViews[e] + .update(); + this._priceLinesAxisViews.forEach((function(e) { + e.update() + })) + } + tags() { + return !this._metaInfo || !this._metaInfo.description || this._metaInfo + .isTVScriptStub || this._metaInfo.is_hidden_study || this._metaInfo + .isTVScript && "tv-scripting" === this._metaInfo.productId ? [] : [this + ._metaInfo.description + ] + } + onExtendedHoursChanged() { + this.restart(!0) + } + hasSymbolInputs() { + for (var e = this._metaInfo.inputs.length; e--;) + if ("symbol" === this._metaInfo.inputs[e].type) return !0; + return !1 + } + canOverrideMinTick() { + return !1 + } + _subscribeExtendedHours() { + !this._isSubscribedToExtendedHours && this.hasSymbolInputs() && (this + ._series.onExtendedHoursChanged().subscribe(this, this + .onExtendedHoursChanged), this._isSubscribedToExtendedHours = !0 + ) + } + removeByRemoveAllStudies() { + return !0 + } + canHaveChildren() { + return void 0 === this._canHaveChildren && (this._canHaveChildren = !!x + .canHaveChildren(this._metaInfo)), this._canHaveChildren + } + static getInputRebindType(e, t, i) { + var s = x.isSourceInput(e); + return s && !~t.indexOf("$") && ~i.indexOf("$") ? g + .REBIND_STUDY_STANDALONE_TO_CHILD : s && ~t.indexOf("$") && !~i.indexOf( + "$") ? g.REBIND_STUDY_CHILD_TO_STANDALONE : 0 + } + getPlotFields() { + return this._plotFields + } + getMinFirstBarIndexForPlot(e) { + var t = K(this._properties.styles, e) || K(this._properties.ohlcPlots, e) || + K(this._properties.filledAreasStyle, e); + if (null === t) return -1 / 0; + var i = this.data().lastIndex(); + return null === i ? -1 / 0 : i - t + 1 + } + _getPropertyDefinitionsViewModelClass() { + return Promise.resolve(null) + } + getPropertyDefinitionsViewModel() { + if (null === this._definitionsViewModel) { + var e = this; + return e._getPropertyDefinitionsViewModelClass().then((function(t) { + return null === t || e._isDestroyed ? null : (null === e + ._definitionsViewModel && (e + ._definitionsViewModel = new t(e._model + .undoModel(), e)), e + ._definitionsViewModel) + })) + } + return Promise.resolve(this._definitionsViewModel) + } + isPine() { + return void 0 !== this._metaInfo.pine + } + isStandardPine() { + return this.isPine() && x.isStandardPine(this._metaInfo.id) + } + isLinkedToSeries() { + return !0 === this._metaInfo.linkedToSeries + } + _getTelemetryObjectName() { + return "study" + } + _getTelemetryAdditionalData() { + var e = ""; + return this._metaInfo.pine && this._metaInfo.pine.version && this._metaInfo + .shortId.indexOf("USER") >= 0 && (e = "_v" + this._metaInfo.pine + .version), { + symbol: this.series().actualSymbol(), + resolution: this.series().interval(), + study: this._metaInfo.shortId + e + } + } + _sendTelemetryReport(e, t, i) { + void 0 === i && (i = this._getTelemetryAdditionalData()); + var s = Object.assign(t, { + additional: i + }); + (void 0).sendChartReport(e, s) + } + _sendTelemetryCounter(e, t) { + this._sendTelemetryReport(e, { + count: 1 + }, t) + } + onAboutToBeDestroyed() { + return this._aboutToBeDestroyed + } + destroy() { + this._aboutToBeDestroyed.fire(), this._isDestroyed = !0, this._legendView && + this._legendView.destroy(), null !== this._definitionsViewModel && (this + ._definitionsViewModel.destroy(), this._definitionsViewModel = null + ), + this._properties.precision.listeners().unsubscribe(this, this + ._precisionChanged), this._showStudyArgumentsProperty.listeners() + .unsubscribe(this, this.invalidateTitleCache), this._properties + .description.listeners().unsubscribe(this, this.invalidateTitleCache), + this._properties.shortDescription && this._properties.shortDescription + .listeners().unsubscribe(this, this.invalidateTitleCache), this._model + .mainSeries().dataEvents().symbolResolved().unsubscribeAll(this), this + ._properties.showInDataWindow.listeners().unsubscribe(this._model, this + ._model.fullUpdate), this.hasBarColorer() && this._properties + .visible.listeners().unsubscribe(this._model.mainSeries(), this._model + .mainSeries().invalidateBarStylesCache), this._model.mainSeries() + .dataEvents().symbolResolved().unsubscribe(this, this + ._recreatePriceFormattingDependencies), super.destroy() + } + desiredPriceScalePosition() { + return this.metaInfo().isTVScriptStub ? "overlay" : this.metaInfo() + .linkedToSeries ? "as-series" : void 0 === this.metaInfo().priceScale ? + null : ["right", "left", "overlay"][this.metaInfo().priceScale] + } + guiPlotName(e) { + var t = this.properties().styles; + return t && t[e] && t[e].title ? t[e].title.value() : this.title() + } + defaultPlotIdForAlert() { + return this._metaInfo.plots.length ? this._metaInfo.plots[0].id : null + } + formatterChanged() { + return this._formatterChanged + } + copiable() { + return U && !this.isChildStudy() + } + setPriceScale(e) { + super.setPriceScale(e), T.emit("study_event", this.id(), + "price_scale_changed") + } + disconnect() { + this._studyId = null + } + } + TradingView.Study = J, t.Study = J, t.prepareStudyProperties = function(t, s, r, o, a) { + return function(t, s, r, o, a, l) { + var c = function(t, s, r, o) { + var a = i("K4L1"); + if (x.versionOf(t) < 1) throw new Error( + "This function cannot work with metainfo of the old format version. Required format version >= 1" + ); + var l = TradingView.clone(defaults("study")); + Y(l, t); + var c = x.getStudyPropertyRootName(t), + h = TradingView.clone(defaults(c, o)); + h.intervalsVisibilities = TradingView.clone(W), ("Overlay" === t + .shortId || "Compare" === t.shortId) && (h.currencyId = + null, h.unitId = null); + t.isTVScript && t.TVScriptSourceCode !== h.TVScriptSourceCode && + (h = TradingView.clone(TradingView.factoryDefaults(c, o))); + TradingView.merge(l, h), s && (n(!(s instanceof e), + "propsState should not be an instance of Property"), + TradingView.merge(l, s)); + var u = TradingView.clone(t), + d = {}; + a.mergeInputsObjPart(d, u.defaults.inputs), a + .mergeInputsObjPart(d, l.inputs), l.inputs = d, delete u + .inputs, delete u.defaults.inputs; + var p = {}; + if (TradingView.merge(p, u.defaults), TradingView.merge(p, + TradingView.factoryDefaults(c)), TradingView.merge(p, + l), TradingView.merge(p, u), delete p.defaults, l = p, + null !== r) { + var _ = r.model().studiesColorRotatorFactory() + .getColorRotator(t); + null !== _ && ("Overlay@tv-basicstudies" === t.id ? l + .lineStyle.color = _.getColor(l.lineStyle.color, + t) : TradingView.merge(l, function(e, t) { + for (var i in e.styles) { + var s = e.styles[i].color; + s && (e.styles[i].color = t.getColor(s)) + } + return e + }(l, _))) + } + s && TradingView.merge(l.styles, s.styles); + return l + }(t, s, r, o), + h = x.getSourceInputIds(t); + if (h.length > 0) { + var u = h[0]; + l instanceof J ? c.inputs[u] = "{pid}$0" : void 0 !== c.inputs[u] && + -1 !== c.inputs[u].indexOf("$") && (c.inputs[u] = "close") + } + return q(t, a, c) + }(t, s, r, o, x.getStudyPropertyRootName(t), a) + }, t.prepareStudyPropertiesForLoadChart = function(e, t, s, r, n, o) { + return function(e, t, s, r, n, o, a) { + var l = function(e, t, s, r, n) { + var o = i("K4L1"); + e.version && s.version && e.version !== s.version && H.logWarn( + "Serialized metaInfo version " + e.version + + " is not equal to the saved state version " + s.version); + var a = TradingView.clone(defaults("study")); + a.intervalsVisibilities = TradingView.clone(W), TradingView + .merge(a, TradingView.factoryDefaults(x + .getStudyPropertyRootName(e))), Y(a, e), TradingView + .merge(a, s), a = n.updateStudyState(a, e, t); + var l = TradingView.clone(t || e); + if (l && x.versionOf(l) >= 1) { + var c = {}; + o.mergeInputsObjPart(c, (l.defaults || {}).inputs), o + .mergeInputsObjPart(c, a.inputs), a.inputs = c, delete l + .inputs, l.defaults && delete l.defaults.inputs; + var h = {}; + TradingView.merge(h, l.defaults), TradingView.merge(h, + TradingView.factoryDefaults(x + .getStudyPropertyRootName(l))), TradingView + .merge(h, a), delete l.defaults, TradingView.merge(h, + l), a = h + } + return a + }(e, t, s, 0, n); + return q(t || e, o, l) + }(e, t, s, 0, n, x.getStudyPropertyRootName(e)) + } + }).call(this, i("tc+8"), i("aIyQ")) + }, + GVQo: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + var s = i("Eyy1"), + r = i("3ClC"), + n = i("CW80"); + + function o(e, t) { + if (1 === t.length && Object(r.isStudy)(t[0])) { + const e = t[0]; + return { + title: e.title(), + sources: [{ + source: Object(s.ensureNotNull)(e.state()), + type: "study" + }] + } + } + const i = { + sources: [], + title: "" + }; + return i.sources = t.filter(e => e.copiable() && Object(n.isLineTool)(e)).map(t => { + const i = { + type: "drawing", + geometry: t.geometry(), + source: { + ...t.state(!1), + points: t.normalizedPoints() + }, + modelId: e + }; + return delete i.source.alertId, i + }), i.sources.length > 0 ? (1 === i.sources.length ? i.title = t[0].title && t[0] + .title() : i.title = "Drawings", i) : null + } + }, + GhVi: function(e, t, i) { + "use strict"; + (function(t) { + function i() { + this._marksByIndex = new Map, this._marksBySpan = [], this.changed = new t, this + .minIndex = void 0, this.maxIndex = void 0 + } + i.prototype.reset = function() { + this._resetImpl(), this.changed.fire() + }, i.prototype._resetImpl = function() { + this._marksByIndex = new Map, this._marksBySpan = [], this.minIndex = void 0, + this.maxIndex = void 0, this._cache = void 0 + }, i.prototype.merge = function(e) { + if (0 !== e.length) { + var t = e[0].index, + i = e[e.length - 1].index; + t <= this.minIndex && i >= this.maxIndex && this._resetImpl(); + for (var s = this._marksBySpan, r = new Set, n = 0; n < e.length; n++) { + var o = (c = e[n]).index, + a = c.span, + l = this._marksByIndex.get(c.index); + if (l) { + if (l.index === c.index && l.span === c.span) { + l.time = c.time; + continue + } + this._removeTickmark(l) + } + } + for (n = 0; n < e.length; n++) { + var c; + o = (c = e[n]).index, a = c.span; + if (!this._marksByIndex.has(c.index)) { + this._marksByIndex.set(o, c); + var h = s[a]; + void 0 === h && (h = [], s[a] = h); + var u = 0 === h.length || h[h.length - 1].index < c.index; + s[a].push(c), u || r.add(a) + } + } + this.minIndex = void 0 === this.minIndex ? t : Math.min(this.minIndex, t), + this.maxIndex = void 0 === this.maxIndex ? i : Math.max(this.maxIndex, + i); + for (a = s.length; a--;) s[a] && (s[a].length || delete s[a], r.has(a) && s[ + a].sort(this._sortByIndexAsc)); + this._cache = void 0, this.changed.fire() + } + }, i.prototype._removeTickmark = function(e) { + var t = e.index; + if (this._marksByIndex.get(t) === e) { + this._marksByIndex.delete(t), + t <= this.minIndex && this.minIndex++, t >= this.maxIndex && this + .maxIndex--, this.maxIndex < this.minIndex && (this.minIndex = void 0, + this.maxIndex = void 0); + var i = this._marksBySpan[e.span], + s = i.indexOf(e); - 1 !== s && i.splice(s, 1) + } + }, i.prototype._sortByIndexAsc = function(e, t) { + return e.index - t.index + }, i.prototype.removeTail = function(e) { + var t = new Map; + this.maxIndex = 0, this._marksByIndex.forEach(function(i, s) { + i.time < e && (t.set(s, i), this.maxIndex = Math.max(this.maxIndex, + s)) + }.bind(this)), this._marksByIndex = t + }, i.prototype.addTail = function(e) { + for (var t = 0; t < e.length; t++) e[t].index = this.maxIndex + t + 1; + this.merge(e) + }, i.prototype.indexToTime = function(e) { + var t = this._marksByIndex.get(e); + return t ? new Date(1e3 * t.time) : null + }, i.prototype.density = function() { + var e = this.maxIndex - this.minIndex; + if (0 !== e) return 1e3 * (this._marksByIndex.get(this.maxIndex).time - this + ._marksByIndex.get(this.minIndex).time) / e + }, i.prototype.estimateLeft = function(e) { + var t = this.density(); + if (t) return (1e3 * this._marksByIndex.get(this.minIndex).time - e) / t + }, i.prototype.nearestIndex = function(e) { + for (var t = this.minIndex, i = this.maxIndex; i - t > 2;) { + if (1e3 * this._marksByIndex.get(t).time === e) return t; + if (1e3 * this._marksByIndex.get(i).time === e) return i; + var s = Math.round((t + i) / 2); + 1e3 * this._marksByIndex.get(s).time > e ? i = s : t = s + } + return t + }, i.prototype.build = function(e, t) { + var i = Math.ceil(t / e); + if (this._maxbar === i && this._cache) return this._cache; + this._maxbar = i; + for (var s = [], r = this._marksBySpan.length; r--;) + if (this._marksBySpan[r]) { + var n = s; + s = []; + for (var o = n.length, a = 0, l = this._marksBySpan[r], c = l.length, + h = 1 / 0, u = -1 / 0, d = 0; d < c; d++) { + for (var p = l[d], _ = p.index; a < o;) { + var m = n[a], + f = m.index; + if (!(f < _)) { + h = f; + break + } + a++, s.push(m), u = f, h = 1 / 0 + } + h - _ >= i && _ - u >= i && (s.push(p), u = _) + } + for (; a < o; a++) s.push(n[a]) + } return this._cache = s, this._cache + }, i.prototype.state = function() { + for (var e = [], t = this._marksBySpan.length; t--;) this._marksBySpan[t] && ( + e = e.concat(this._marksBySpan[t])); + return { + marks: e = e.map((function(e) { + return [e.span, e.time, e.index] + })), + version: 2 + } + }, i.prototype.restoreState = function(e) { + if (this._marksByIndex = new Map, this._marksBySpan = [], this.maxIndex = + void 0, this.minIndex = void 0, e && e.marks && e.marks.length) + if (2 === e.version) { + var t = e.marks.map((function(e) { + return { + span: e[0], + time: e[1], + index: e[2] + } + })); + this.merge(t) + } else this.merge(e.marks) + }, e.exports.Tickmarks = i + }).call(this, i("aIyQ")) + }, + GmZZ: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("fJhV"); + class r extends s.LineDataSourceTimeAxisView { + constructor(e) { + super(e, 0) + } + _getBgColor() { + return this._source.properties().linecolor.value() + } + _getAlwaysInViewPort() { + return !1 + } + _getIndex() { + const e = this._source.points(); + return 0 === e.length ? null : e[0].index + } + } + }, + GxN8: function(e, t, i) { + "use strict"; + + function s(e) { + return Boolean(e.showInObjectTree) + } + i.d(t, "a", (function() { + return s + })) + }, + H007: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "RiskRewordEntryPriceProperty", (function() { + return a + })), i.d(t, "RiskRewordStopPriceProperty", (function() { + return l + })), i.d(t, "RiskRewardTargetPriceProperty", (function() { + return c + })); + var s = i("Eyy1"), + r = i("tc+8"), + n = i.n(r); + class o extends n.a { + constructor(e, t) { + super(), this._lineSource = e, this._pointIndex = t + } + value() { + const e = this._lineSource.points()[this._pointIndex].price; + return this._formatAndParsePrice(e) + } + state() { + return this.value() + } + merge(e, t) { + return this.setValue(e), t ? [] : null + } + _formatAndParsePrice(e) { + const t = Object(s.ensureNotNull)(this._lineSource.ownerSource()).formatter(); + if (t.parse) { + const i = t.format(e), + s = t.parse(i); + return s.res ? s.value : e + } + return e + } + } + class a extends o { + constructor(e) { + super(e, 0) + } + setValue(e) { + const t = this._lineSource.points()[this._pointIndex]; + this._lineSource.startChanging(this._pointIndex, t), t.price = parseFloat("" + e), + this._lineSource.setPoint(this._pointIndex, t), this._lineSource.recalculate(), + this._lineSource.model().updateSource(this._lineSource), this._listeners.fire( + this), this._lineSource.endChanging(!1, !1), this._lineSource + .syncPriceLevels() + } + } + class l extends o { + constructor(e) { + super(e, 1) + } + value() { + const e = this._lineSource.stopPrice(); + return this._formatAndParsePrice(e) + } + setValue(e) { + const t = Math.round(Math.abs(e - this._lineSource.entryPrice()) * this._lineSource + .model().mainSeries().base()); + this._lineSource.properties().childs().stopLevel.setValue(t), this._lineSource + .syncPriceLevels() + } + } + class c extends o { + constructor(e) { + super(e, 2) + } + value() { + const e = this._lineSource.profitPrice(); + return this._formatAndParsePrice(e) + } + setValue(e) { + const t = Math.round(Math.abs(e - this._lineSource.entryPrice()) * this._lineSource + .model().mainSeries().base()); + this._lineSource.properties().childs().profitLevel.setValue(t), this._lineSource + .syncPriceLevels() + } + } + }, + H0vP: function(e, t, i) { + "use strict"; + i.r(t); + var s, r = i("Eyy1"); + class n { + constructor(e = o) { + this._paneInvalidationLevel = o, this._leftPriceScalesInvalidationMap = new Map, + this._rightPriceScalesInvalidationMap = new Map, this._invalidationLevel = e + } + fullInvalidation() { + return this._invalidationLevel + } + invalidateAll(e) { + this._invalidationLevel = Math.max(this._invalidationLevel, e) + } + invalidatePane(e) { + this._paneInvalidationLevel = Math.max(this._invalidationLevel, e) + } + invalidatePriceScale(e, t, i) { + const s = "left" === e ? this._leftPriceScalesInvalidationMap : this + ._rightPriceScalesInvalidationMap, + r = s.get(t) || o; + s.set(t, Math.max(r, i)) + } + invalidationLevelForPane() { + return Math.max(this._paneInvalidationLevel, this._invalidationLevel) + } + getterForPriceScaleInvalidationLevelBySide(e) { + const t = "left" === e ? this._leftPriceScalesInvalidationMap : this + ._rightPriceScalesInvalidationMap; + return e => Math.max(t.get(e) || o, this._invalidationLevel) + } + priceScaleSideMaxLevel(e) { + const t = "left" === e ? this._leftPriceScalesInvalidationMap : this + ._rightPriceScalesInvalidationMap; + let i = this._invalidationLevel; + return t.size > 0 && t.forEach(e => { + e > i && (i = e) + }), i + } + merge(e) { + this._invalidationLevel = Math.max(this._invalidationLevel, e._invalidationLevel), + this._paneInvalidationLevel = Math.max(this._paneInvalidationLevel, e + ._paneInvalidationLevel), e._leftPriceScalesInvalidationMap.forEach((e, + t) => { + const i = this._leftPriceScalesInvalidationMap.get(t) || o; + this._leftPriceScalesInvalidationMap.set(t, Math.max(i, e)) + }), e._rightPriceScalesInvalidationMap.forEach((e, t) => { + const i = this._rightPriceScalesInvalidationMap.get(t) || o; + this._rightPriceScalesInvalidationMap.set(t, Math.max(i, e)) + }) + } + } + i.d(t, "InvalidationLevel", (function() { + return s + })), i.d(t, "defaultInvalidationLevel", (function() { + return o + })), i.d(t, "InvalidationMask", (function() { + return a + })), + function(e) { + e[e.None = 0] = "None", e[e.Cursor = 1] = "Cursor", e[e.Light = 2] = "Light", e[e.Full = + 3] = "Full" + }(s || (s = {})); + const o = s.None; + class a { + constructor(e = o) { + this._panesOrderChanged = !1, this._keepVisibleTimeRangeOnResize = !1, this + ._timeAxisInvalidationLevel = o, this._invalidatedPanes = new Map, this + ._additionalActions = [], this._invalidationLevel = e + } + invalidateAll(e) { + this._invalidationLevel !== e && (this._invalidationLevel = Math.max(this + ._invalidationLevel, e), this._invalidatedPanes.forEach(e => { + e.invalidateAll(this._invalidationLevel) + })) + } + invalidateAllPane(e, t) { + this._invalidatedPanes.has(e) || this._invalidatedPanes.set(e, new n(this + ._invalidationLevel)), Object(r.ensureDefined)(this._invalidatedPanes.get( + e)).invalidateAll(t) + } + invalidatePriceScale(e, t, i, s) { + this._invalidatedPanes.has(e) || this._invalidatedPanes.set(e, new n(this + ._invalidationLevel)), Object(r.ensureDefined)(this._invalidatedPanes.get( + e)).invalidatePriceScale(t, i, s) + } + invalidateTimeScale(e) { + this._timeAxisInvalidationLevel = Math.max(this._timeAxisInvalidationLevel, e) + } + invalidatePanesOrder() { + this._panesOrderChanged = !0 + } + lockVisibleTimeRangeOnResize() { + this._keepVisibleTimeRangeOnResize = !0 + } + fullInvalidation() { + return this._invalidationLevel + } + maxPaneInvalidation() { + const e = []; + return this._invalidatedPanes.forEach(t => { + e.push(t.fullInvalidation()) + }), Math.max(...e, this._invalidationLevel) + } + invalidateForPane(e) { + return this._invalidatedPanes.get(e) || new n(this._invalidationLevel) + } + invalidateForTimeScale() { + return Math.max(this._timeAxisInvalidationLevel, this._invalidationLevel) + } + validationActions() { + return this._additionalActions + } + addValidationAction(e) { + this._additionalActions.push(e) + } + merge(e) { + this._invalidationLevel = Math.max(this._invalidationLevel, e._invalidationLevel), + this._panesOrderChanged = this._panesOrderChanged || e._panesOrderChanged, this + ._keepVisibleTimeRangeOnResize = this._keepVisibleTimeRangeOnResize || e + ._keepVisibleTimeRangeOnResize, this._invalidatedPanes.forEach(e => { + e.invalidateAll(this._invalidationLevel) + }), e._invalidatedPanes.forEach((e, t) => { + this._invalidatedPanes.has(t) || this._invalidatedPanes.set(t, new n( + this._invalidationLevel)), Object(r.ensureDefined)(this + ._invalidatedPanes.get(t)).merge(e) + }), this._timeAxisInvalidationLevel = Math.max(this._timeAxisInvalidationLevel, + e._timeAxisInvalidationLevel); + for (let t = 0; t < e._additionalActions.length; t++) this._additionalActions.push(e + ._additionalActions[t]) + } + panesOrderInvalidated() { + return this._panesOrderChanged + } + isVisibleTimeRangeLockedOnResize() { + return this._keepVisibleTimeRangeOnResize + } + static cursor() { + return new a(s.Cursor) + } + static light() { + return new a(s.Light) + } + static full() { + return new a(s.Full) + } + static panesOrder() { + const e = a.full(); + return e.invalidatePanesOrder(), e + } + static validateAction(e) { + const t = new a; + return t._additionalActions.push(e), t + } + } + }, + HGP3: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("iR50"), + r = i("RBvv"), + n = i("Eyy1"); + const o = { + ...s, + ...r + }, + a = {}, + l = Object.keys(o).length, + c = /^#[0-9A-F]{6}$/i; + Object.keys(o).forEach(e => { + const t = function e(t, i = []) { + const s = o[t]; + if (!s) return null; + if (c.test(s)) return s; + const r = s; + return i.push(t), -1 !== i.indexOf(r) ? (console.warn( + "Colors definitions cycled"), s) : i.length > l ? (console.warn( + "Too many variables-link in HEX-color search: " + i[0]), null) : e( + r, i) + }(e); + a[e] = Object(n.ensureNotNull)(t) + }); + const h = a; + + function u(e) { + const t = h[e]; + if (!t) throw new Error("No such color " + e); + return t + } + i.d(t, "colorsPalette", (function() { + return h + })), i.d(t, "getHexColorByName", (function() { + return u + })) + }, + HGup: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })), i.d(t, "c", (function() { + return a + })), i.d(t, "b", (function() { + return l + })); + var s = i("Eyy1"), + r = i("3u3j"); + class n extends r.a { + constructor(e, t, i) { + super(e, t, i) + } + redo() { + const e = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(this + ._sourceId)), + t = Object(s.ensureNotNull)(this._chartModel.paneForSource(e)), + i = this._chartModel.children(e, !0); + t.bulkActionMacro(() => { + i.forEach(e => this._chartModel.detachSource(e)), this._chartModel + .detachSource(e) + }); + const r = this._chartModel.createPane(this.targetPaneIndex()), + n = r.findSuitableScale(e); + r.bulkActionMacro(() => { + r.addDataSource(e, n, !1), i.forEach(e => r.addDataSource(e, n, !1)) + }), Object(s.ensureNotNull)(e.priceScale()).restoreState(this + ._newPriceScaleState(r.isOverlay(e))), this._chartModel.fullUpdate(), + this._chartModel.setShouldBeSavedEvenIfHidden(!0) + } + undo() { + const e = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(this + ._sourceId)), + t = Object(s.ensureNotNull)(this._chartModel.paneForSource(e)), + i = this._chartModel.children(e, !0); + t.bulkActionMacro(() => { + i.forEach(e => this._chartModel.detachSource(e)); + const t = this._chartModel.detachSource(e); + Object(s.assert)(t, "Undo of detaching must remove pane") + }); + const r = this._chartModel.panes()[this._initialPaneIndex]; + let n = r.getPriceScaleById(this._initialPriceScaleId); + null === n && (n = r.createPriceScaleAtPosition(this._initialPriceScalePosition, + this._initialPriceScaleIndex)), r.bulkActionMacro(() => { + r.addDataSource(e, n, !0), i.forEach(e => r.addDataSource(e, n, !1)) + }), Object(s.ensureNotNull)(e.priceScale()).restoreState(this + ._originalPriceScaleState()), this._chartModel.fullUpdate() + } + } + class o extends n { + constructor(e, t, i) { + super(e, t, i) + } + targetPaneIndex() { + return this._initialPaneIndex + 1 + } + } + class a extends n { + constructor(e, t, i) { + super(e, t, i) + } + targetPaneIndex() { + return this._initialPaneIndex + } + } + class l extends n { + constructor(e, t, i) { + super(e, t, i) + } + targetPaneIndex() { + return this._chartModel.panes().length + } + } + }, + HLXm: function(e, t, i) { + "use strict"; + + function s(e) { + "LineToolGannComplex" !== e.type || void 0 !== e.version && 1 !== e.version || (e.type = + "LineToolGannFixed") + } + i.r(t), i.d(t, "migrateState", (function() { + return s + })) + }, + "HV/F": function(e, t, i) { + "use strict"; + + function s(e) { + const t = {}; + return { + promise: new Promise((i, s) => { + e.subscribe(t, i, !0) + }), + destroy: () => { + e.unsubscribeAll(t) + } + } + } + i.r(t), i.d(t, "delegateToPromise", (function() { + return s + })) + }, + HY7u: function(e, t, i) {}, + HZKX: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "defaultContextMenuOptions", (function() { + return Te + })), i.d(t, "createActionAddAlert", (function() { + return Me + })), i.d(t, "createActionTrade", (function() { + return Oe + })), i.d(t, "createActionOrder", (function() { + return Le + })), i.d(t, "createMTPredictorActions", (function() { + return Ae + })), i.d(t, "createLinesAction", (function() { + return Ee + })), i.d(t, "ActionsProvider", (function() { + return ke + })); + var s = i("Eyy1"), + r = i("txPx"), + n = (i("nc0P"), i("ogJP")), + o = i("Kxc7"), + a = i("7KDR"), + l = i("YmeR"), + c = i("Daqx"), + h = i("3ClC"), + u = i("QloM"), + d = i("Qq0B"), + p = i("z61+"), + _ = i("/3z9"), + m = i("L/Ed"), + f = i("cKqi"), + g = i("YzC7"), + b = i("pvsv"), + v = i("GVQo"), + S = i("CW80"), + y = i("/tGj"), + w = i("2uTr"), + P = i("YFKU"), + C = i("//lZ"), + x = i("9uLv"); + const T = Object(r.getLogger)("Chart.ActionsProvider"), + I = (Object(P.t)("Add Alert"), Object(P.t)("Add Alert on {series}"), Object(P.t)( + "Add Alert on {drawing}"), Object(w.appendEllipsis)(Object(P.t)( + "Edit {title} Alert"))), + M = Object(P.t)("Extend Alert Lines"), + O = Object(P.t)("Show alert label lines"), + L = Object(P.t)("Hide alert label lines"), + A = (Object(P.t)("Trade"), Object(w.appendEllipsis)(Object(P.t)("Create Limit Order")), + Object(P.t)("Show")), + E = Object(P.t)("Hide"), + k = (Object(P.t)("MTPredictor"), Object(P.t)("Apply Manual Risk/Reward"), Object(P.t)( + "Apply Manual Decision Point"), Object(P.t)("Analyze Trade Setup"), Object(P.t)( + "Apply Elliott Wave"), Object(P.t)("Apply Elliott Wave Intermediate"), Object(P.t)( + "Apply Elliott Wave Major"), Object(P.t)("Apply Elliott Wave Minor"), Object(P.t)( + "Apply WPT Up Wave"), Object(P.t)("Up Wave 1 or A"), Object(P.t)("Up Wave 2 or B"), + Object(P.t)("Up Wave C"), Object(P.t)("Up Wave 3"), Object(P.t)("Up Wave 4"), Object(P + .t)("Up Wave 5"), Object(P.t)("Apply WPT Down Wave"), Object(P.t)( + "Down Wave 1 or A"), Object(P.t)("Down Wave 2 or B"), Object(P.t)("Down Wave C"), + Object(P.t)("Down Wave 3"), Object(P.t)("Down Wave 4"), Object(P.t)("Down Wave 5"), + Object(P.t)("Pinned To Scale {label} (Hidden)")), + D = Object(P.t)("Pinned To Right Scale (Hidden)"), + V = Object(P.t)("Pin To Scale {label} (Hidden)"), + B = Object(P.t)("Pin To Right Scale (Hidden)"), + R = Object(P.t)("Pinned To Scale {label}"), + N = Object(P.t)("Pinned To Right Scale"), + j = Object(P.t)("Pin To Scale {label}"), + F = Object(P.t)("Pin To Right Scale"), + W = Object(P.t)("Pinned To Left Scale (Hidden)"), + H = Object(P.t)("Pin To Left Scale (Hidden)"), + U = Object(P.t)("Pinned To Left Scale"), + z = Object(P.t)("Pin To Left Scale"), + G = Object(P.t)("Pin To New Left Scale"), + q = Object(P.t)("Pin To New Right Scale"), + Y = Object(P.t)("Pin To Scale (Now {label})"), + K = Object(P.t)("Pin To Scale (Now No Scale)"), + J = Object(P.t)("Pin To Scale (Now Left)"), + Z = Object(P.t)("Pin To Scale (Now Right)"), + X = Object(P.t)("No Scale (Fullscreen)"), + $ = Object(P.t)("Move To"), + Q = Object(P.t)("Existing Pane Above"), + ee = Object(P.t)("New Pane Above"), + te = Object(P.t)("Existing Pane Below"), + ie = Object(P.t)("New Pane Below"), + se = Object(P.t)("Bring to Front"), + re = Object(P.t)("Send to Back"), + ne = Object(P.t)("Bring Forward"), + oe = Object(P.t)("Send Backward"), + ae = Object(P.t)("Visual Order"), + le = Object(P.t)("Lines"), + ce = Object(w.appendEllipsis)(Object(P.t)("Add Indicator/Strategy on {studyTitle}")), + he = (Object(w.appendEllipsis)(Object(P.t)("Add Financial metric for {instrumentName}")), + Object(w.appendEllipsis)(Object(P.t)("Settings"))), + ue = Object(P.t)("Apply Default"), + de = Object(w.appendEllipsis)(Object(P.t)("Save As")), + pe = Object(P.t)("Copy"), + _e = Object(P.t)("Clone"), + me = Object(P.t)("Template"), + fe = (Object(P.t)("Sync To All Charts"), Object(P.t)("Go to {lineToolName}")), + ge = Object(P.t)("Unlock"), + be = Object(P.t)("Lock"), + ve = (Object(P.t)("Show Earnings"), Object(P.t)("Show Dividends"), Object(P.t)( + "Show Splits"), Object(P.t)("Show All Ideas")), + Se = Object(P.t)("Show Ideas of Followed Users"), + ye = Object(P.t)("Show My Ideas Only"), + we = Object(w.appendEllipsis)(Object(P.t)("Settings")), + Pe = Object(P.t)("Hide Events on Chart"), + Ce = Object(P.t)("Add this Symbol to Entire Layout"), + xe = Object(P.t)("Add this Indicator to Entire Layout"), + Te = (Object(P.t)("Add this Strategy to Entire Layout"), Object(P.t)( + "Add this Financial Metric to Entire Layout"), { + general: !0, + mainSeries: !0, + mainSeriesTrade: !0, + esdStudies: !0, + studies: !0, + fundamentals: !0, + lineTools: !0, + publishedCharts: !0, + ordersAndPositions: !0, + alerts: !0, + chartEvents: !0, + objectTree: !0, + gotoLineTool: !1 + }); + + function Ie(e) { + return Object(y.isSymbolSource)(e) ? e.symbolTitle(!0, !0) : e.title(!0) + } + + function Me(e, t) { + return null + } + + function Oe(e, t, i) { + return null + } + + function Le(e) { + throw new Error("not supported") + } + + function Ae(e, t, i, s) { + return null + } + + function Ee(e) { + const t = e.actions(), + i = [t.showPriceLine]; + return i.push(t.showHighLowPriceLines), i.push(t.showAverageClosePriceLine), new a.Action({ + label: le, + statName: "Lines", + subItems: i + }) + } + class ke { + constructor(e, t) { + this._chartWidget = e, this._options = Object(n.merge)(Object(n.clone)(Te), t || {}) + } + async contextMenuActionsForSources(e) { + const t = e[0], + i = this._options; + if (t === this._chartWidget.model().mainSeries() && i.mainSeries) return this + ._contextMenuActionsForSeries(t); + if (Object(h.isStudy)(t) && i.studies) return this._contextMenuActionsForStudy(t); + if (Object(S.isLineTool)(t) && i.lineTools) { + const t = e.filter(S.isLineTool); + return this._contextMenuActionsForLineTool(t) + } + return [] + } + _isReadOnly() { + return this._chartWidget.readOnly() + } + _createActionHide(e) { + return new a.Action({ + label: E, + icon: i("dmHa"), + statName: "HideSelectedObject", + onExecute: this._chartWidget.hideDataSources.bind(this._chartWidget, [ + e + ]) + }) + } + _createActionShow(e) { + const t = new a.Action({ + checkable: !0, + label: A, + icon: i("6ctS"), + statName: "ToggleShow" + }), + s = new l.ActionBinder(t, e.properties().visible, this._chartWidget.model(), A); + return t.setBinding(s), s.setValue(e.properties().visible.value()), t + } + _createActionScale(e) { + const t = Object(s.ensureNotNull)(e.priceScale()), + r = this._chartWidget.model().model(), + n = Object(s.ensureNotNull)(r.paneForSource(e)), + o = n.priceScalePosition(t), + l = ("left" === o ? n.leftPriceScales() : n.rightPriceScales()).indexOf(t), + h = r.priceScaleSlotsCount().totallySlots < 2 ? "dontneedname" : "needname", + u = "overlay" === o ? "" : Object(c.a)(o, l).label, + d = Y.format({ + label: u + }), + p = { + "left-needname": d, + "left-dontneedname": J, + "right-needname": d, + "right-dontneedname": Z, + "overlay-needname": K, + "overlay-dontneedname": K + } [o + "-" + h]; + return new a.Action({ + label: p, + icon: i("/kal"), + subItems: this._createActionScaleItems(e) + }) + } + _createActionScaleDetach(e, t, i, r) { + const n = this._chartWidget.model().model(), + o = Object(s.ensureNotNull)(n.paneForSource(e)); + if (!o.canCreateNewPriceScale()) return null; + const l = Object(s.ensureNotNull)(e.priceScale()), + h = l.canDetachSource(e), + u = o.priceScalePosition(l), + d = h || u !== t; + if (!d) return null; + const p = n.priceScaleSlotsCount(), + _ = { + left: { + labelled: j, + sided: G + }, + right: { + labelled: j, + sided: q + } + }, + m = "left" === t ? o.leftPriceScales().length : o.rightPriceScales().length, + f = p[t] > m ? "labelled" : "sided", + g = Object(c.a)(t, m).label, + b = _[t][f].format({ + label: g + }); + return new a.Action({ + checkable: !1, + disabled: !d, + label: b, + statName: r, + payload: e, + onExecute: i + }) + } + _onDetachLeft(e) { + const t = e.getPayload(), + i = this._chartWidget.model().model(), + r = Object(s.ensureNotNull)(i.paneForSource(t)); + this._chartWidget.model().detachToLeft(t, r) + } + _onDetachRight(e) { + const t = e.getPayload(), + i = this._chartWidget.model().model(), + r = Object(s.ensureNotNull)(i.paneForSource(t)); + this._chartWidget.model().detachToRight(t, r) + } + _createActionScaleDetachLeft(e) { + return this._createActionScaleDetach(e, "left", this._onDetachLeft.bind(this), + "ToggleScaleLeft") + } + _createActionScaleDetachRight(e) { + return this._createActionScaleDetach(e, "right", this._onDetachRight.bind(this), + "ToggleScaleRight") + } + _onMoveToScale(e) { + const t = e.getPayload(); + if (t.datasource.priceScale() === t.priceScale) return; + const i = this._chartWidget.model().model(), + r = Object(s.ensureNotNull)(i.paneForSource(t.datasource)); + this._chartWidget.model().moveToScale(t.datasource, r, t.priceScale, t.undoText) + } + _createMoveToScaleAction(e, t, i, s) { + const r = e.priceScale() === t; + return new a.Action({ + checkable: !0, + checked: r, + label: i, + statName: "ToggleScale", + payload: { + datasource: e, + priceScale: t, + undoText: s + }, + onExecute: this._onMoveToScale.bind(this) + }) + } + _onNoScale(e) { + const t = e.getPayload().datasource, + i = this._chartWidget.model().model(), + r = Object(s.ensureNotNull)(i.paneForSource(t)); + r.isOverlay(t) || this._chartWidget.model().detachNoScale(t, r) + } + _createActionNoScale(e) { + const t = this._chartWidget.model().model(), + i = Object(s.ensureNotNull)(t.paneForSource(e)), + r = i.actionNoScaleIsEnabled(e); + return new a.Action({ + checkable: !0, + checked: i.isOverlay(e), + label: X, + disabled: !r, + statName: "ToggleNoScale", + payload: { + datasource: e + }, + onExecute: this._onNoScale.bind(this) + }) + } + _createActionScaleItems(e) { + const t = [], + i = this._chartWidget.model().model(), + r = Object(s.ensureNotNull)(i.paneForSource(e)), + n = i.priceScaleSlotsCount().totallySlots > 1, + o = r.rightPriceScales(), + l = r.leftPriceScales(), + h = this._createActionScaleDetachRight(e), + u = this._createActionScaleDetachLeft(e), + d = o.length + l.length + (null === h ? 0 : 1) + (null === u ? 0 : 1) > 2, + p = { + right: { + hidden: { + checked: { + labelled: k, + sided: D + }, + unchecked: { + labelled: V, + sided: B + } + }, + visible: { + checked: { + labelled: R, + sided: N + }, + unchecked: { + labelled: j, + sided: F + } + } + }, + left: { + hidden: { + checked: { + labelled: k, + sided: W + }, + unchecked: { + labelled: V, + sided: H + } + }, + visible: { + checked: { + labelled: R, + sided: U + }, + unchecked: { + labelled: j, + sided: z + } + } + } + }, + _ = { + left: r.visibleLeftPriceScales(), + right: r.visibleRightPriceScales() + }, + m = (t, i) => { + const s = ("right" === i ? o : l)[t], + r = _[i].includes(s) ? "visible" : "hidden", + a = e.priceScale() === s ? "checked" : "unchecked", + h = n ? "labelled" : "sided", + u = p[i], + d = { + labelled: u.visible.unchecked.labelled, + sided: u.visible.unchecked.sided + }, + m = Object(c.a)(i, t).label; + return { + actionText: u[r][a][h].format({ + label: m + }), + undoText: d[h].format({ + label: m + }) + } + }; + t.push(...o.map((t, i) => { + const s = m(i, "right"); + return this._createMoveToScaleAction(e, t, s.actionText, s.undoText) + })), null !== h && t.push(h); + d && (o.length > 0 || null !== h) && t.push(new a.Separator); + t.push(...l.map((t, i) => { + const s = m(i, "left"); + return this._createMoveToScaleAction(e, t, s.actionText, s.undoText) + })), null !== u && t.push(u); + d && (l.length > 0 || null !== u) && t.push(new a.Separator); + return t.push(this._createActionNoScale(e)), t + } + _createVisualOrderAction(e) { + const t = this._chartWidget.model(), + s = t.availableZOrderOperations(e), + r = [new a.Action({ + label: se, + statName: "BringToFront", + disabled: !s.bringToFrontEnabled, + onExecute: () => t.bringToFront(e) + }), new a.Action({ + label: re, + statName: "SendToBack", + disabled: !s.sendToBackEnabled, + onExecute: () => t.sendToBack(e) + }), new a.Action({ + label: ne, + statName: "BringForward", + disabled: !s.bringForwardEnabled, + onExecute: () => t.bringForward(e) + }), new a.Action({ + label: oe, + statName: "SendBackward", + disabled: !s.sendBackwardEnabled, + onExecute: () => t.sendBackward(e) + })]; + return new a.Action({ + label: ae, + icon: i("9dnG"), + statName: "VisualOrder", + subItems: r + }) + } + _createActionMergeUp(e) { + const t = this._chartWidget.model(); + return t.model().isMergeUpAvailableForSource(e) ? new a.Action({ + label: Q, + statName: "MergeUp", + onExecute: () => t.mergeSourceUp(e) + }) : null + } + _createActionUnmergeUp(e) { + const t = this._chartWidget.model(); + return t.model().isUnmergeAvailableForSource(e) ? new a.Action({ + label: ee, + statName: "UnmergeUp", + onExecute: () => t.unmergeSourceUp(e) + }) : null + } + _createActionMergeDown(e) { + const t = this._chartWidget.model(); + return t.model().isMergeDownAvailableForSource(e) ? new a.Action({ + label: te, + statName: "MergeDown", + onExecute: () => t.mergeSourceDown(e) + }) : null + } + _createActionUnmergeDown(e) { + const t = this._chartWidget.model(); + return t.model().isUnmergeAvailableForSource(e) ? new a.Action({ + label: ie, + statName: "UnmergeDown", + onExecute: () => t.unmergeSourceDown(e) + }) : null + } + _mergeContentMenuItems(e) { + return [this._createActionMergeUp(e), this._createActionUnmergeUp(e), this + ._createActionMergeDown(e), this._createActionUnmergeDown(e) + ].filter(n.notNull) + } + _createActionMove(e) { + const t = this._mergeContentMenuItems(e); + return t.length > 0 ? new a.Action({ + label: $, + icon: i("BBCR"), + subItems: t + }) : null + } + _contextMenuActionsForSeries(e) { + const t = [], + i = e.properties().visible.value(), + r = this._chartWidget.model().model(), + n = (Object(s.ensureNotNull)(r.paneForSource(e)), this._chartWidget.actions()); + if (this._isReadOnly()) t.push(i ? this._createActionHide(e) : this + ._createActionShow(e)), t.push(new a.Separator), t.push(this + ._createActionScale(e)); + else { + 0, + t.length > 0 && !(t[t.length - 1] instanceof a.Separator) && t.push(new a + .Separator), + o.enabled("symbol_info") && t.push(n.showSymbolInfoDialog);r.mainSeries() + .symbolInfo();0, + t.length > 0 && !(t[t.length - 1] instanceof a.Separator) && t.push(new a + .Separator), + t.push(this._createVisualOrderAction([e])); + const s = this._createActionMove(e);null !== s && t.push(s), + t.push(this._createActionScale(e)), + t.push(i ? this._createActionHide(e) : this._createActionShow(e)), + t.push(new a.Separator), + t.push(Ee(this._chartWidget)), + t.push(new a.Separator);window.widgetbar && (!window.widgetbar._customization || + window.widgetbar._customization.watchlist) && n.addToWatchlist && t.push(n + .addToWatchlist), + o.enabled("text_notes") && t.push(n.addToTextNotes), + t[t.length - 1] instanceof a.Separator || t.push(new a.Separator), + t[t.length - 1] instanceof a.Separator && t.pop() + } + return t + } + _createActionAddChildStudy(e) { + const t = this._chartWidget.model().model(); + return new a.Action({ + label: ce.format({ + studyTitle: Ie(e) + }), + icon: i("CwKc"), + statName: "ApplyIndicator", + onExecute: () => { + const i = this._chartWidget.showIndicators(Object(h.isStudy)( + e) ? e : void 0); + if (i && Object(h.isStudy)(e)) { + const e = () => { + trackEvent("SOS", "Apply SOS", "Apply by RC menu") + }, + s = t.studyInserted(); + s.subscribe(this, e), i.visible().subscribe(t => { + t || s.unsubscribe(this, e) + }, { + once: !0 + }) + } + } + }) + } + _createActionAddFundamentals(e) { + return null + } + _createActionShowSymbolInfoDialog(e, t) { + return new a.Action({ + label: Object(w.appendEllipsis)(Object(P.t)("Symbol Info")), + icon: i("1pHB"), + checkable: !1, + statName: "SymbolInfo", + onExecute: () => { + const i = e.symbol(), + s = { + symbolInfo: e.symbolInfo(), + unitName: e => t.name(e) + }; + Object(b.showSymbolInfoDialog)(i, s) + } + }) + } + _createActionShowProperties(e) { + return new a.Action({ + label: he, + icon: i("MXV9"), + statName: "EditSelectedObject", + onExecute: () => this._chartWidget.showSourceProperties(e) + }) + } + _contextMenuActionsForStudy(e) { + const t = this._chartWidget.actions(), + i = e.properties().visible.value(), + s = []; + if (!e.userEditEnabled()) return s; + if (this._chartWidget.readOnly()) s.push(i ? this._createActionHide(e) : this + ._createActionShow(e)), s.push(new a.Separator), e.constructor instanceof d + .NonSeriesStudy || s.push(this._createActionScale(e)); + else { + 0, + o.enabled("study_on_study") && e.canHaveChildren() && s.push(this + ._createActionAddChildStudy(e)); + const r = this._createApplyToEntireLayoutCommand(e); + if (null !== r && s.push(r), s.length > 0 && !(s[s.length - 1] instanceof a + .Separator) && s.push(new a.Separator), o.enabled("symbol_info") && ( + e instanceof g.a || e instanceof f.study_Overlay) && null !== e + .symbolInfo() && (s.push(this._createActionShowSymbolInfoDialog(e, this + ._chartWidget.model().model().availableUnits())), s.push(new a + .Separator)), s.push(this._createVisualOrderAction([e])), !(e + .constructor instanceof d.NonSeriesStudy)) { + const t = this._createActionMove(e); + null !== t && s.push(t), s.push(this._createActionScale(e)) + } + s.push(new a.Separator); + const n = e.metaInfo(); + if (e.copiable()) { + const t = new a.Action({ + label: pe, + shortcutHint: Object(_.humanReadableHash)(_.Modifiers.Mod + 67), + statName: "Copy", + onExecute: () => { + this._chartWidget.chartWidgetCollection().clipboard + .uiRequestCopy([e]) + } + }); + s.push(t) + } + s.push(i ? this._createActionHide(e) : this._createActionShow(e)), + s.push(t.studyRemove), + s.push(new a.Separator), + o.enabled("property_pages") && new p.a(n).hasUserEditableOptions() && s.push( + this._createActionShowProperties(e)), + s[s.length - 1] instanceof a.Separator && s.pop() + } + return s + } + _createEditAlertDrawingAction(e) { + return new a.Action({ + label: I.format({ + title: e.title() + }), + icon: TbbiEditAlertSvg, + statName: "EditAlert", + onExecute: () => { + window.runOrSignIn(() => { + e.editAlert("pane_context_menu_edit_alert") + }, { + source: "Alert edit from pane context menu" + }) + } + }) + } + _createLineToolTemplateAction(e) { + if (!window.lineToolPropertiesToolbar) return null; + const t = window.lineToolPropertiesToolbar.templatesList(); + return void 0 === t ? null : new a.ActionAsync(() => { + const i = [], + s = new a.Action({ + label: de, + statName: "SaveAs", + onExecute: () => { + t.showSaveDialog(i => { + const s = JSON.stringify(e.template()); + t.saveTemplate(i, s) + }) + } + }); + i.push(s); + const r = new a.Action({ + label: ue, + statName: "ApplyDefault", + onExecute: () => { + this._chartWidget.model() + .restorePropertiesForSource(e), window + .lineToolPropertiesToolbar.onSourceChanged(e) + } + }); + return i.push(r), new Promise(e => { + t.templatesLoaded().then(() => { + const e = t.getData(); + e.length > 0 && i.push(new a.Separator), e + .forEach((e, s) => { + const r = new a.Action({ + label: e, + statName: "ApplyTemplate", + onExecute: () => t + .loadTemplate(e), + toolbox: { + type: m.ToolboxType + .Delete, + action: () => { + t.deleteAction( + e) + } + }, + showToolboxOnHover: !0 + }); + i.push(r) + }) + }, e => { + T.logWarn(e) + }).then(() => { + e({ + label: me, + statName: "Template", + subItems: i + }) + }) + }) + }) + } + _createActionToggleLockObject(e) { + const t = e.properties().frozen.value(); + return new a.Action({ + label: t ? ge : be, + statName: "ToggleLockSelectedObject", + checkable: !0, + icon: i(t ? "fs3R" : "qckB"), + onExecute: () => this._chartWidget.toggleLockSelectedObject() + }) + } + async _contextMenuActionsForLineTool(e) { + const t = [], + r = this._chartWidget.actions(), + l = this._chartWidget.model().model(), + c = () => { + t.push(this._createVisualOrderAction(e)) + }, + h = () => { + const s = e.filter(e => e.cloneable()); + if (s.length > 0) { + const e = new a.Action({ + label: _e, + icon: i("K8V9"), + shortcutHint: Object(_.humanReadableModifiers)(_.Modifiers + .Mod) + "Drag", + doNotBindShortcut: !0, + statName: "Clone", + onExecute: () => this._chartWidget.model().cloneLineTools(s, + !1) + }, "Clone"); + t.push(e) + } + return !!s.length + }, + u = () => { + const i = e.filter(e => e.copiable()); + if (i.length > 0) { + const e = new a.Action({ + label: pe, + shortcutHint: Object(_.humanReadableHash)(_.Modifiers.Mod + + 67), + statName: "Copy", + onExecute: () => this._chartWidget.chartWidgetCollection() + .clipboard.uiRequestCopy(i) + }, "Copy"); + t.push(e) + } + return !!i.length + }, + d = e => { + const i = new a.Action({ + label: fe.format({ + lineToolName: e.title() + }), + statName: "GoToLineTool", + checkable: !1, + onExecute: async t => { + const i = l.timeScale().logicalRange(); + if (null === i) return; + const r = this._chartWidget.model(), + o = l.timeScale().barSpacing(); + let a = i.left(); + const c = e.points().map(e => e.index); + let h = l.timeScale().points().firstIndex(); + const u = l.timeScale().points().lastIndex(); + if (null === h || null === u) return; + const d = i.length() / 2; + if (0 === c.length || c.some(e => i.contains(e))) + return; + const p = () => { + const t = e.points().map(e => e.index), + i = t.filter(e => e <= u).reduce((e, t) => + null === e ? t : Math.max(e, t), null); + return null !== i ? i : t.reduce((e, t) => Math + .min(e, t)) + }; + let _, m = p(); + if (h - d > m) { + const t = e.points().map(e => e.time).filter(n + .notUndefined).map(e => e.valueOf() / 1e3); + if (0 === t.length) return; + const i = t.reduce((e, t) => Math.min(e, t), t[0]); + await l.gotoTime(i), m = p(); + a = Object(s.ensureNotNull)(l.timeScale() + .logicalRange()).left(), h = Object(s + .ensureNotNull)(l.timeScale().points() + .firstIndex()) + } + h - d > m ? (_ = (a - h + d) * o, l.mainSeries() + .setGotoDateResult({ + timestamp: Object(s.ensureNotNull)(l + .timeScale().points().valueAt(h) + ), + eod: !0 + })) : _ = (a - m + 1 + d) * o, r + .startScrollTime(0), Object(C.doAnimate)({ + onStep: (e, t) => r.scrollTimeTo(t), + from: 0, + to: Math.round(_), + easing: x.c.easeInOutCubic, + duration: x.b, + onComplete: () => r.endScrollTime() + }) + } + }); + t.push(i) + }; + if (1 === e.length) { + const i = e[0]; + if (this._chartWidget.readOnly()) t.push(r.lineHide); + else if (i.userEditEnabled()) { + if (o.enabled("alerts") && !this._chartWidget.onWidget() && i.hasAlert && i + .hasAlert.value() && (t.push(this._createEditAlertDrawingAction(i)), t + .push(new a.Separator)), !o.enabled("charting_library_base")) { + const e = this._createLineToolTemplateAction(i); + null !== e && t.push(e) + } + c(), this._options.objectTree && r.paneObjectTree && t.push(r + .paneObjectTree), t.push(new a.Separator); + let e = h(); + e = u() || e, e = e, e && t.push(new a.Separator), t.push(this + ._createActionToggleLockObject(i)), t.push(r.lineHide), t.push(r + .lineRemove), i.points().length > 0 && this._options.gotoLineTool && + (t.push(new a.Separator), d(i)); + const s = await this._chartWidget.propertiesDefinitionsForSource(i); + if (o.enabled("property_pages") && null !== s && (t.push(new a.Separator), t + .push(r.format)), i.additionalActions) { + t.push(new a.Separator); + const e = i.additionalActions(this._chartWidget.model()); + t.push(...e) + } + } + } else this._options.objectTree && r.paneObjectTree && t.push(r.paneObjectTree), + c(), t.push(new a.Separator), h(), u(), t.push(new a.Separator), t.push(r + .lineHide), + t.push(r.lineRemove); + return t + } + _createEarningsShow() { + return null + } + _createDividendsShow() { + return null + } + _createSplitsShow() { + return null + } + _contextMenuActionsForESD() { + return [] + } + _contextMenuActionsForPublishedTimeline(e) { + const t = this._chartWidget.actions(), + i = []; + if (i.push(t.lineHide), window.is_authenticated) { + const t = e.properties().filter, + s = new a.Action({ + checked: t.value() === PublishedChartsFilter.None, + checkable: !0, + label: ve, + name: "ToggleAllIdeas", + statName: "ToggleAllIdeas", + onExecute: () => this._chartWidget.model().setProperty(t, + PublishedChartsFilter.None, ve) + }), + r = new a.Action({ + checked: t.value() === PublishedChartsFilter.Following, + checkable: !0, + label: Se, + name: "ToggleIdeasOfPeopleAndUser", + statName: "ToggleIdeasOfPeopleAndUser", + onExecute: () => this._chartWidget.model().setProperty(t, + PublishedChartsFilter.Following, Se) + }), + n = new a.Action({ + checked: t.value() === PublishedChartsFilter.Private, + checkable: !0, + label: ye, + name: "ToggleUserIdeas", + statName: "ToggleUserIdeas", + onExecute: () => this._chartWidget.model().setProperty(t, + PublishedChartsFilter.Private, ye) + }); + i.push(new a.Separator, s, r, n) + } + return i + } + _contextMenuActionsForTradingDrawings(e) { + return e.contextMenuItems() + } + _createAlertToggleHorzLineLabelAction(e) { + const t = getGlobalAlertSettingsProperty().childs().line.childs().visible, + i = t.value() ? L : O; + return new a.Action({ + checkable: !0, + label: M, + checked: t.value(), + statName: "ToggleExtendAlertLine", + onExecute: () => this._chartWidget.model().setProperty(t, !t.value(), i) + }) + } + _contextMenuActionsForAlertLabel(e) { + const t = e.alert(), + i = []; + return t.get("active") ? i.push(AlertActionCreator.stopAlert(t)) : i.push( + AlertActionCreator.restartAlert(t, "alert_label_context_menu_restart")), i + .push(AlertActionCreator.editAlert(t, "alert_label_context_menu_edit")), i.push( + AlertActionCreator.deleteAlert(t)), + i.push(new a.Separator), i.push(this._createAlertToggleHorzLineLabelAction(e)), + i + } + _contextMenuActionsForChartEvents(e) { + const t = []; + if (o.enabled("property_pages")) { + const e = new a.Action({ + label: we, + statName: "Format", + onExecute: () => this._chartWidget.showGeneralChartProperties(u + .TabNames.eventsAndAlerts) + }); + t.push(e) + } + const i = new a.Action({ + label: Pe, + name: "HideEvents", + statName: "HideEvents", + onExecute: () => this._chartWidget.model().setProperty(e.properties() + .visible, !1, Pe) + }); + return t.push(i), t + } + _createApplyToEntireLayoutCommand(e) { + if (!this._chartWidget.chartWidgetCollection() + .applyIndicatorsToAllChartsAvailable()) return null; + const t = this._chartWidget.model().model(); + if (e.parentSource() !== t.mainSeries()) return null; + const i = Object(s.ensureNotNull)(t.paneForSource(e)), + r = t.paneForSource(t.mainSeries()) === i, + n = e instanceof g.a && e.priceScale() === t.mainSeries().priceScale() && + Object(s.ensureNotNull)(e.priceScale()).isPercentage(), + o = r ? void 0 : t.panes().indexOf(i); + let l = xe, + c = "AddStudyToEntireLayout"; + return Object(y.isSymbolSource)(e) && (l = Ce, c = "AddSymbolToEntireLayout"), new a + .Action({ + label: l, + statName: c, + onExecute: () => { + const i = Object(s.ensureNotNull)(Object(v.a)(t.id(), [e])), + a = this._chartWidget.chartWidgetCollection(), + c = { + isOnMainPane: r, + asCompare: n, + paneIndex: o + }; + a.applyIndicatorToAllCharts(this._chartWidget, i, c, l) + } + }, "applyStudyToEntireLayout") + } + } + }, + Hr11: function(e, t, i) { + "use strict"; + + function s(e, t) { + return e <= t + } + + function r(e, t) { + return e >= t + } + + function n(e, t, i) { + return Math.min(Math.max(e, t), i) + } + + function o(e) { + return e < 0 ? -1 : e > 0 ? 1 : 0 + } + + function a(e) { + if (e < 0) return !1; + for (let t = e; t > 1; t /= 10) + if (t % 10 != 0) return !1; + return !0 + } + + function l(e, t, i) { + return t - e <= i + } + + function c(e, t, i) { + return Math.abs(e - t) < i + } + + function h(e) { + return e <= 0 ? NaN : Math.log(e) / Math.log(10) + } + + function u(e, t) { + return e < t ? -1 : e > t ? 1 : 0 + } + + function d(e, t = u) { + if (e.length < 1) throw Error("array is empty"); + let i = e[0]; + for (let s = 0; s < e.length; ++s) t(e[s], i) < 0 && (i = e[s]); + return i + } + + function p(e, t = u) { + if (e.length < 1) throw Error("array is empty"); + let i = e[0]; + for (let s = 0; s < e.length; ++s) t(e[s], i) > 0 && (i = e[s]); + return i + } + + function _(e) { + const t = Math.ceil(e); + return t % 2 != 0 ? t - 1 : t + } + + function m(e) { + return e > 0 ? Math.floor(e) : Math.ceil(e) + } + i.r(t), i.d(t, "lessThan", (function() { + return s + })), i.d(t, "greaterThan", (function() { + return r + })), i.d(t, "clamp", (function() { + return n + })), i.d(t, "sign", (function() { + return o + })), i.d(t, "isBaseDecimal", (function() { + return a + })), i.d(t, "greaterOrEqual", (function() { + return l + })), i.d(t, "equal", (function() { + return c + })), i.d(t, "log10", (function() { + return h + })), i.d(t, "defComparator", (function() { + return u + })), i.d(t, "min", (function() { + return d + })), i.d(t, "max", (function() { + return p + })), i.d(t, "ceiledEven", (function() { + return _ + })), i.d(t, "toInt", (function() { + return m + })) + }, + HySD: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ResizerDetacherState", (function() { + return o + })); + var s = i("Eyy1"), + r = i("hY0g"), + n = i.n(r); + class o { + constructor(e) { + this._alive = new n.a, this._container = new n.a, this._width = new n.a, this + ._height = new n.a, this._fullscreen = new n.a, this._detachable = new n.a, this + ._fullscreenable = new n.a, this._visible = new n.a, this._availWidth = new n.a, + this._availHeight = new n.a, + this._owner = new n.a, this._ownersStack = [], this.owner = this._owner + .readonly(), this._bridge = { + alive: this._alive.readonly(), + container: this._container.readonly(), + width: this._width.readonly(), + height: this._height.readonly(), + fullscreen: this._fullscreen.readonly(), + detachable: this._detachable.readonly(), + fullscreenable: this._fullscreenable.readonly(), + visible: this._visible.readonly(), + availWidth: this._availWidth.readonly(), + availHeight: this._availHeight.readonly(), + remove: () => { + const e = this._owner.value(); + e && e.remove && e.remove() + }, + negotiateWidth: e => { + const t = this._owner.value(); + t && t.negotiateWidth && t.negotiateWidth(e) + }, + negotiateHeight: e => { + const t = this._owner.value(); + t && t.negotiateHeight && t.negotiateHeight(e) + }, + requestFullscreen: () => { + const e = this._owner.value(); + e && e.requestFullscreen && e.requestFullscreen() + }, + exitFullscreen: () => { + const e = this._owner.value(); + e && e.exitFullscreen && e.exitFullscreen() + }, + detach: e => { + const t = this._owner.value(); + t && t.detach && t.detach(e) + }, + attach: () => { + const e = this._owner.value(); + e && e.attach && e.attach() + } + }, e && this.pushOwner(e) + } + bridge() { + return this._bridge + } + pushOwner(e) { + if (!e.alive.value()) return; + for (const e of this._ownersStack) this._unsubscribeOwner(e); + const t = { + owner: e + }; + this._ownersStack.push(t), this._subscribeOwner(t) + } + _subscribeOwner(e) { + const t = e.owner; + if (e.deathWatcher || (this._alive.setValue(!0), e.deathWatcher = t.alive.spawn(), e + .deathWatcher.subscribe(t => { + t || this._deadHandler(e) + })), this._owner.setValue(t), !e.subscriptions) { + const i = e.subscriptions = []; + this._visible.setValue(!1); + const s = (e, t) => { + if (e) { + const s = e.spawn(); + i.push(s), s.subscribe(e => { + t.setValue(e) + }, { + callWithLast: !0 + }) + } else t.deleteValue() + }; + s(t.container, this._container), s(t.width, this._width), s(t.height, this + ._height), s(t.fullscreen, this._fullscreen), s(t.detachable, this + ._detachable), s(t.fullscreenable, this._fullscreenable), s(t + .availWidth, this._availWidth), s(t.availHeight, this._availHeight), s(t + .visible, this._visible) + } + } + _unsubscribeOwner(e, t) { + if (e.subscriptions) { + for (const t of e.subscriptions) t.unsubscribe(); + e.subscriptions = null + } + t && e.deathWatcher && (e.deathWatcher.unsubscribe(), e.deathWatcher = null) + } + _deadHandler(e) { + const t = this._ownersStack.indexOf(e); + Object(s.assert)(-1 !== t, "sanitized owner should be in stack"); + for (let e = this._ownersStack.length - 1; e >= t; e--) this._unsubscribeOwner(this + ._ownersStack[e], !0); + this._ownersStack.length = t, t > 0 ? this._subscribeOwner(this._ownersStack[t - + 1]) : (this._alive.setValue(!1), this._owner.deleteValue()) + } + } + }, + I4UZ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "HeaderToolbarBootloader", (function() { + return o + })); + var s = i("yMne"), + r = i("YuHv"), + n = i("cZRT"); + class o extends n.a { + constructor(e, t) { + super(), this._toolsBootloader = e, this._headerProps = t, this._headerProps + .resizerBridge.negotiateHeight(s.b), this._headerProps.resizerBridge + .container.value().appendChild(Object(r.a)()) + } + _startLoading() { + return Promise.all([this._toolsBootloader.load(), this._loadHeaderToolbar()]) + .then(([e, t]) => new t(this._headerProps.resizerBridge.container.value(), { + ...this._headerProps, + tools: e + })) + } + _loadHeaderToolbar() { + return Promise.all([i.e("react"), i.e(14), i.e(42), i.e(79), i.e(7), i.e(10), i + .e(40), i.e("header-toolbar") + ]).then(i.bind(null, "KMbc")).then(e => e.HeaderToolbarRenderer) + } + } + }, + IDnv: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "extrapolateBarsFrontToTime", (function() { + return r + })), i.d(t, "extrapolateBarsFrontByCount", (function() { + return n + })), i.d(t, "extrapolateBarsFrontByCountAllPoints", (function() { + return o + })), i.d(t, "extrapolateBars", (function() { + return a + })); + var s = i("E6p6"); + + function r(e, t, i, s, n = !1) { + if (t > i) { + const o = r(e, i, t, s, n); + return o.count = -o.count, o + } + return a(e, t, 1, (e, t) => t > i || 0 !== s && e > s, n) + } + + function n(e, t, i, s = !1) { + const r = i < 0 ? -1 : 1; + return a(e, t, r, (e, t) => e >= i * r, s) + } + + function o(e, t, i) { + const s = i < 0 ? -1 : 1; + return a(e, t, s, (e, t) => e >= i * s, !0).times + } + + function a(e, t, i, r, n) { + let o = 0, + a = t; + e.moveTo(a); + let l = 0, + c = Number.MAX_VALUE, + h = !1, + u = t; + const d = []; + for (; !r(o, a);) { + if (l > 15) throw new Error("Internal error 0x10 while extrapolating."); + const r = e.indexOfBar(a); + if (r === s.SessionStage.PRE_SESSION && 1 === i) a = e.startOfBar(0), e.moveTo(a); + else if (r === s.SessionStage.PRE_SESSION && -1 === i) a = e.startOfBar(s.SessionStage + .PRE_SESSION), e.moveTo(a); + else if (r === s.SessionStage.POST_SESSION && 1 === i) a = e.startOfBar(s.SessionStage + .POST_SESSION), e.moveTo(a); + else { + if (r === s.SessionStage.POST_SESSION && -1 === i) throw new Error( + "Internal error 0x12 while extrapolating."); { + const p = e.startOfBar(r); + if (p > t && i > 0 || t > p && i < 0) { + if (h && c === p) throw new Error( + "Internal error 0x11 while extrapolating."); + h = !0, c = p, l = 0, o++, u = p, n && d.push(u) + } + if (0 === r && -1 === i) a = p - 1; + else { + a = e.startOfBar(r + i); + const t = e.startOfBar(s.SessionStage.POST_SESSION); + a > t && (e.moveTo(t), a = e.startOfBar(0)) + } + } + } + l++ + } + return { + time: u, + times: d, + count: o + } + } + }, + IMMp: function(e) { + e.exports = JSON.parse( + '{"color-bg-primary":"color-cold-gray-850","color-bg-primary-hover":"color-cold-gray-800","color-bg-secondary":"color-cold-gray-900","color-bg-highlight":"color-cold-gray-900","color-bg-scroll-buttons":"color-cold-gray-800","color-legacy-bg-scroll-buttons":"color-cold-gray-550","color-legacy-bg-widget":"color-cold-gray-900","color-text-primary":"color-cold-gray-200","color-text-secondary":"color-cold-gray-500","color-text-tertiary":"color-cold-gray-400","color-text-disabled":"color-cold-gray-650","color-accent-content":"color-white","color-divider":"color-cold-gray-700","color-divider-hover":"color-cold-gray-800","color-box-shadow":"color-cold-gray-900","color-active-hover-text":"color-cold-gray-300","color-alert-text":"color-cold-gray-200","color-border":"color-cold-gray-750","color-border-chat-fields":"color-cold-gray-750","color-border-hover":"color-cold-gray-650","color-border-table":"color-cold-gray-800","color-brand":"color-tv-blue-500","color-brand-hover":"color-tv-blue-600","color-brand-active":"color-tv-blue-700","color-button-hover-bg":"color-cold-gray-850","color-chart-page-bg":"color-cold-gray-800","color-common-tooltip-bg":"color-cold-gray-650","color-danger":"color-ripe-red-600","color-danger-hover":"color-ripe-red-500","color-danger-active":"color-ripe-red-400","color-depthrenderer-fill-style":"color-cold-gray-150","color-depthrenderer-stroke-style":"color-cold-gray-650","color-disabled-border-and-color":"color-cold-gray-800","color-disabled-input":"color-cold-gray-750","color-empty-container-message":"color-cold-gray-500","color-highlight-new":"color-tv-blue-a800","color-icons":"color-cold-gray-500","color-input-bg":"color-cold-gray-800","color-input-textarea-readonly":"color-cold-gray-650","color-input-placeholder-text":"color-cold-gray-700","color-input-publish-bg":"color-cold-gray-900","color-item-active-blue":"color-tv-blue-a800","color-item-hover-active-bg":"color-cold-gray-800","color-item-hover-bg":"color-cold-gray-800","color-item-hover-blue":"color-tv-blue-a800","color-item-selected-blue":"color-tv-blue-a800","color-item-active-text":"color-cold-gray-200","color-item-active-bg":"color-tv-blue-500","color-link":"color-tv-blue-500","color-link-hover":"color-tv-blue-600","color-link-active":"color-tv-blue-700","color-list-item":"color-cold-gray-500","color-list-nth-child-bg":"color-cold-gray-850","color-news-highlight":"color-cold-gray-800","color-pane-bg":"color-cold-gray-900","color-pane-secondary-bg":"color-cold-gray-850","color-placeholder":"color-cold-gray-650","color-popup-menu-item-hover-bg":"color-cold-gray-800","color-popup-menu-separator":"color-cold-gray-700","color-row-hover-active-bg":"color-cold-gray-800","color-sb-scrollbar-body-bg":"color-cold-gray-650","color-screener-description":"color-cold-gray-200","color-section-separator-border":"color-cold-gray-750","color-search-button-hover":"color-cold-gray-700","color-separator-table-chat":"color-cold-gray-750","color-success":"color-minty-green-700","color-success-hover":"color-minty-green-600","color-success-active":"color-minty-green-500","color-tag-active-bg":"color-cold-gray-750","color-tag-hover-bg":"color-cold-gray-800","color-text-regular":"color-cold-gray-200","color-toolbar-button-text":"color-cold-gray-500","color-toolbar-button-text-hover":"color-cold-gray-450","color-toolbar-button-text-active":"color-tv-blue-500","color-toolbar-button-text-active-hover":"color-tv-blue-600","color-toolbar-button-background-hover":"color-cold-gray-800","color-toolbar-button-background-secondary-hover":"color-cold-gray-750","color-toolbar-toggle-button-background-active":"color-tv-blue-500","color-toolbar-toggle-button-background-active-hover":"color-tv-blue-600","color-toolbar-interactive-element-text-normal":"color-cold-gray-300","color-toolbar-interactive-element-text-hover":"color-cold-gray-250","color-toolbar-opened-element-bg":"color-cold-gray-800","color-tooltip-bg":"color-cold-gray-750","color-tv-button-checked":"color-cold-gray-500","color-tv-dialog-caption":"color-cold-gray-50","color-tv-dropdown-item-hover-bg":"color-cold-gray-800","color-underlined-text":"color-cold-gray-300","color-widget-pages-bg":"color-cold-gray-900","color-warning":"color-tan-orange-700","color-forex-icon":"color-white","color-list-item-active-bg":"color-tv-blue-500","color-list-item-hover-bg":"color-cold-gray-800","color-list-item-text":"color-cold-gray-200","color-price-axis-label-back":"color-cold-gray-800","color-price-axis-label-text":"color-cold-gray-500","color-price-axis-gear":"color-cold-gray-500","color-price-axis-gear-hover":"color-cold-gray-400","color-price-axis-highlight":"color-cold-gray-800","color-bid":"color-tv-blue-500","color-scroll-bg":"color-cold-gray-750","color-scroll-border":"color-cold-gray-850","color-widget-border":"color-cold-gray-800","color-scroll-buttons-arrow":"color-white","color-control-intent-default":"color-cold-gray-650","color-control-intent-success":"color-minty-green-600","color-control-intent-primary":"color-tv-blue-500","color-control-intent-warning":"color-tan-orange-500","color-control-intent-danger":"color-ripe-red-700","color-growing":"color-minty-green-600","color-falling":"color-ripe-red-600","color-pre-market":"color-tan-orange-600","color-pre-market-bg":"color-tan-orange-400","color-post-market":"color-tv-blue-500","color-post-market-bg":"color-tv-blue-400","color-market-open":"color-minty-green-500","color-market-open-bg":"color-minty-green-400","color-market-closed":"color-cold-gray-400","color-market-holiday":"color-cold-gray-400","color-invalid-symbol":"color-ripe-red-400","color-invalid-symbol-hover":"color-ripe-red-500","color-replay-mode":"color-tv-blue-500","color-replay-mode-icon":"color-tv-blue-50","color-replay-mode-hover":"color-tv-blue-600","color-notaccurate-mode":"color-berry-pink-700","color-notaccurate-mode-bg":"color-berry-pink-400","color-delay-mode":"color-tan-orange-700","color-delay-mode-bg":"color-tan-orange-400","color-eod-mode":"color-grapes-purple-700","color-eod-mode-bg":"color-grapes-purple-400","color-data-problem":"color-ripe-red-600","color-data-problem-bg":"color-ripe-red-400","color-data-problem-hover":"color-ripe-red-500","color-list-item-bg-highlighted":"color-tv-blue-a900","color-list-item-bg-selected":"color-tv-blue-a800","color-list-item-bg-highlighted-hover":"color-tv-blue-a800","color-list-item-bg-selected-hover":"color-tv-blue-a700","color-screener-header-bg":"color-cold-gray-850","color-screener-header-bg-hover":"color-cold-gray-800","color-overlay":"color-cold-gray-950","color-card-border":"color-cold-gray-700","color-card-border-hover":"color-cold-gray-600"}' + ) + }, + IWXC: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "getQuoteSessionInstance", (function() { + return o + })), i.d(t, "setQuoteSessionInstance", (function() { + return a + })), i.d(t, "getQuoteSessionNoEnsure", (function() { + return l + })), i.d(t, "destroyQuoteSessions", (function() { + return c + })); + var s = i("hGf4"), + r = i.n(s); + const n = {}; + + function o(e = "full") { + return n[e] || a(e, new r.a(e)), n[e] + } + + function a(e = "full", t) { + n[e] = t + } + + function l(e = "full") { + return n[e] + } + + function c() { + for (const e in n) + if (n.hasOwnProperty(e)) { + const t = n[e]; + void 0 !== t && t.destroy(), delete n[e] + } + } + }, + Ialn: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isRtl", (function() { + return r + })), i.d(t, "stripLTRMarks", (function() { + return o + })), i.d(t, "startWithLTR", (function() { + return a + })), i.d(t, "forceLTRStr", (function() { + return l + })), i.d(t, "forceLTRStrSsr", (function() { + return c + })), i.d(t, "forceRTLStr", (function() { + return h + })), i.d(t, "getLTRScrollLeft", (function() { + return u + })), i.d(t, "getLTRScrollLeftOffset", (function() { + return d + })), i.d(t, "detectAutoDirection", (function() { + return m + })); + var s = i("oYVD"); + const r = () => "rtl" === window.document.dir, + n = new RegExp("‎|‪|‫|‬", "g"); + + function o(e) { + return "" !== e && r() && null != e ? e.replace(n, "") : e + } + + function a(e) { + return "" !== e && r() && null != e ? "‎" + e : e + } + + function l(e) { + return "" !== e && r() && null != e ? "‪" + e + "‬" : e + } + + function c(e) { + return "‪" + e + "‬" + } + + function h(e) { + return "" !== e && r() && null != e ? "‫" + e + "‬" : e + } + + function u(e) { + return Object(s.getNormalizedScrollLeft)(e, "rtl") + } + + function d(e, t) { + const i = Object(s.detectScrollType)(); + if ("indeterminate" === i) return 0; + switch (i) { + case "negative": + t = e.clientWidth - e.scrollWidth + t; + break; + case "reverse": + t = e.scrollWidth - e.clientWidth - t + } + return t + } + const p = + /[^\u0000-\u0040\u005B-\u0060\u007B-\u00BF\u00D7\u00F7\u02B9-\u02FF\u2000-\u200E\u2010-\u2029\u202C\u202F-\u2BFF]/, + _ = /[\u0590-\u07FF\u200F\u202B\u202E\uFB1D-\uFDFD\uFE70-\uFEFC]/; + + function m(e) { + const t = p.exec(e); + return t ? _.test(t[0]) ? "rtl" : "ltr" : "" + } + }, + IcDj: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("txPx"), + n = i("aIyQ"), + o = i.n(n), + a = i("7ktv"), + l = i("Qb4w"), + c = i("k9/m"), + h = i("0YCj"), + u = i.n(h), + d = i("jenN"), + p = i("972a"), + _ = i("it7y"), + m = i("e1Hy"); + class f extends _.StudyDataWindowView { + constructor(e, t) { + super(e, t), this._showStudyValues = t.properties().paneProperties + .legendProperties.showStudyValues, this._showStudyValues.subscribe(this, + this.update) + } + isValuesVisible() { + return this._showStudyValues.value() + } + additional() { + return null + } + destroy() { + this._showStudyValues.unsubscribeAll(this) + } + _createValuesProvider(e, t) { + return new m.a(e, t) + } + } + var g = i("mMWL"), + b = i("2kV1"), + v = i("5fI3"), + S = i("jy4L"), + y = i("YWnQ"), + w = i("W+6j"), + P = i("ogJP"), + C = i("zXvd"), + x = i("23IT"), + T = i("Kxc7"), + I = i("aO4+"), + M = i("Tmoa"), + O = i("Zy3/"); + class L { + constructor(e) { + this._data = e + } + draw(e, t) {} + drawBackground(e, t) { + e.save(); + const i = this._data, + s = t.pixelRatio; + let r = null; + const n = Math.round(this._data.w * s); + for (let t = 0; t < i.items.length; ++t) { + const o = i.items[t]; + if (null == o.color) { + r = null; + continue + } + e.fillStyle = o.color; + const a = Math.round(o.x * s); + let l = a; + if (t > 0) { + i.items[t - 1].index === o.index - 1 && null !== r && (l = r + 1) + } + const c = a + n, + h = c - l + 1; + e.fillRect(l, Math.round(i.y * s), h, Math.round(i.h * s)), r = c + } + e.restore() + } + hitTest(e) { + return null + } + } + var A = i("i6cO"), + E = i("UAFa"); + class k { + constructor(e, t, i, r) { + this._items = [], this._invalidated = !0, this._isMarkersEnabled = T.enabled( + "source_selection_markers"), this._study = e, this._series = t, this + ._model = i, this._plotName = r; + const n = this._study.metaInfo().plots; + for (let e = 0; e < n.length; e++) { + const t = n[e]; + t.id === this._plotName && (this._plotIndex = e, Object(s.assert)(Object(x + .isBgColorerPlot)(t), "Plot '" + this._plotName + + "' is not a background colorer!")) + } + this._colorProvider = Object(E.createStudyPlotColorProvider)(e.metaInfo(), e + .properties(), r) + } + items() { + return this._items + } + update() { + this._invalidated = !0 + } + renderer() { + if (!this._study.properties().styles[this._plotName].visible) return null; + if (!this._study.properties().styles[this._plotName].visible.value()) return null; + if (!this._scalesReady()) return null; + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const e = { + items: this._items, + y: 0, + h: Object(s.ensureNotNull)(this._study.priceScale()).height(), + w: this._model.timeScale().barSpacing() + }, + t = new O.CompositeRenderer; + return t.append(new L(e)), t + } + _scalesReady() { + const e = this._model.timeScale(), + t = this._study.priceScale(); + return e && !e.isEmpty() && null !== t && !t.isEmpty() + } + _getTranspValue() { + const e = this._study.properties().styles[this._plotName]; + let t = 0; + return e.transparency && (t = e.transparency.value(), t = Object(P.isNumber)(t) ? + t : 40), t + } + _updateImpl() { + this._items = [], Object(s.assert)(this._scalesReady(), "Scales must be ready!"); + const e = this._model.timeScale().visibleBarsStrictRange(); + if (null === e) return; + const t = this._getTranspValue(); + let i = Object(s.ensureDefined)(this._series.nearestIndex(e.firstBar(), c + .PlotRowSearchMode.NearestRight)), + r = Object(s.ensureDefined)(this._series.nearestIndex(e.lastBar(), c + .PlotRowSearchMode.NearestLeft)); + const n = this._study.offset(this._plotName); + n > 0 ? (i -= n, r += n) : (i += n, r -= n); + const o = this._study.getMinFirstBarIndexForPlot(this._plotName); + if (o > r) return; + i = Math.max(o, i); + const a = this._study.data().rangeIterator(i, r); + for (; a.hasNext();) { + const e = a.next(); + let i = e.index; + const r = e.value; + i += n; + const o = new I.Point(Math.floor(i) - .5, NaN); + let l = Object(P.isNumber)(t) ? t : 50; + l = Math.min(l, 100), l = Math.max(l, 0); + const c = this._colorProvider.getPlotPointStyle(r); + void 0 !== c.colors[A.ColorerType.Background] && (o.color = Object(M + .generateColor)(Object(s.ensureDefined)(c.colors[A.ColorerType + .Background]), l)), o.index = i, this._items.push(o) + } + this._model.timeScale().timedValuesToCoordinates(this._items) + } + } + var D = i("CLNU"), + V = i("vq8G"), + B = i("Nu4p"), + R = i("Hr11"), + N = i("VdBB"), + j = i("o2pV"), + F = i("XPit"), + W = i("f6yo"); + + function H(e, t, i) { + const s = e.get(t); + return void 0 !== s ? s : (e.set(t, i), i) + } + + function U(e, t, i, s) { + const r = H(e, t, new Map); + return H(r, i, s) + } + class z { + constructor() { + this._map = new Map, this._size = 0 + } + size() { + return this._size + } + clear() { + this._map.clear(), this._size = 0 + } + } + var G, q, Y = i("XlJ7"), + K = i("c44N"), + J = i("ikwP"); + ! function(e) { + e.Left = "left", e.Right = "right", e.Center = "center" + }(G || (G = {})), + function(e) { + e.Top = "top", e.Bottom = "bottom", e.Middle = "middle" + }(q || (q = {})); + class Z { + constructor(e, t, i, r, n, o = "center") { + this._cacheRenderParams = null, this._canvasesMap = {}, this._lines = e.split( + /[^\S\r\n]*(?:\r\n|\r|\n)/), this._font = function(e, t, i, s) { + return Object(Y.makeFont)(s, i, `${e ? "bold " : ""}${t ? "italic " : ""}`) + }(t, i, r, n), this._fontSize = n, this._verticalPadding = ~~(n / 6), this + ._textAlign = o; + const a = Object(J.createDisconnectedCanvas)(document, new J.Size(0, 0), 1), + l = Object(s.ensureNotNull)(a.getContext("2d")); + l.font = this._font; + let c = 0; + for (const e of this._lines) { + const t = l.measureText(e).width; + c = Math.max(c, t) + } + this.textImageWidth = c + 1, this.textImageHeight = this._lines.length * n + this + ._verticalPadding + } + paintTo(e, t, i, s, r, n, o) { + const a = this._getTextImage(i, t); + if (0 === a.width || 0 === a.height) return; + const l = function(e, t, i) { + let s = e; + switch (t) { + case "left": + break; + case "right": + s -= i; + break; + case "center": + s -= i / 2 + } + return Math.round(s) + }(s, n, this.textImageWidth), + c = function(e, t, i) { + let s = e; + switch (t) { + case "top": + break; + case "bottom": + s -= i; + break; + case "middle": + s -= i / 2 + } + return Math.round(s) + }(r, o, this.textImageHeight); + Object(J.drawScaled)(e, t.pixelRatio, () => { + e.drawImage(a, l, c, this.textImageWidth, this.textImageHeight) + }) + } + _getTextImage(e, t) { + if (null !== this._cacheRenderParams && Object(K.areEqualPaneRenderParams)(this + ._cacheRenderParams, t) || (this._canvasesMap = {}, this + ._cacheRenderParams = t), this._canvasesMap[e]) return this._canvasesMap[ + e]; { + const t = Object(J.createDisconnectedCanvas)(document, new J.Size(this + .textImageWidth, this.textImageHeight), this._cacheRenderParams + .pixelRatio), + i = Object(s.ensureNotNull)(t.getContext("2d")); + let r; + switch (i.textBaseline = "top", i.font = this._font, i.fillStyle = e, this + ._textAlign) { + case "left": + r = 0, i.textAlign = "left"; + break; + case "right": + r = this.textImageWidth - 1, i.textAlign = "right"; + break; + default: + r = this.textImageWidth / 2, i.textAlign = "center" + } + let n = this._verticalPadding; + return Object(J.drawScaled)(i, this._cacheRenderParams.pixelRatio, () => { + for (const e of this._lines) i.fillText(e, r, n), n += this + ._fontSize + }), this._canvasesMap[e] = t, t + } + } + } + class X extends z { + constructor(e) { + super(), this._maxSize = e, this._keysQueue = [] + } + get(e) { + if (!e.text || !e.fontSize || !e.align) return null; + const t = e.fontSize, + i = e.text, + s = e.align, + r = U(this._map, t, s, new Map); + let n = r.get(i); + return void 0 !== n || (this._size >= this._maxSize ? this._deleteFirstKey() : ++ + this._size, this._keysQueue.push([t, i, s]), n = new Z(e.text, e.bold, e + .italic, e.font, e.fontSize, e.align), r.set(i, n)), n + } + _deleteFirstKey() { + const e = this._keysQueue.shift(), + t = e[0], + i = e[1], + s = this._map.get(t); + s.delete(i), 0 === s.size && this._map.delete(t) + } + } + var $ = i("zDbI"); + class Q { + constructor(e, t = { + skipRenderingOptimizations: !1 + }) { + this._height = void 0 !== e.height ? e.height : e.width, this._width = void 0 !== e + .width ? e.width : e.height, this._items = [], this._barSpacing = 0, this + ._textCache = t.textCache || new X(5e3), this._drawOperation = t + .skipRenderingOptimizations ? this._drawWithoutOptimizations.bind(this) : this + ._drawWithOptimizations.bind(this), this._color = e.color, this._borderColor = e + .borderColor, this._vertOffset = e.vertOffset || 0, e.text && (this._text = e + .text, this._fontSize = e.fontSize, this._textColor = e.textColor, this + ._textAlign = e.textAlign || "center"), void 0 !== e.items && void 0 !== e + .barSpacing && this.setData(e.items, e.barSpacing) + } + draw(e, t) { + this._preDrawInit(), this._drawOperation(e, t) + } + hitTest(e) { + const t = N.HitTestResult.REGULAR; + let i = null; + for (const s of this._items) { + if (!s) continue; + const r = this._calcBoundingBox(s); + if (r && Object(W.pointInBox)(e, r)) { + const e = { + tooltip: this._getTooltip(s, r) + }; + i = new N.HitTestResult(t, e) + } + } + return i + } + setData(e, t) { + this._setBaseData(e, t) + } + _calcBoundingBox(e) { + const t = e.vertOffset, + i = this._getTextCache(e); + if (!i) return; + const s = i.textImageWidth, + r = i.textImageHeight, + n = s / 2, + o = e.y + t + e.textVertOffset, + a = t > 0 ? 0 : -r, + l = t > 0 ? r : 0, + c = new I.Point(e.x - n, o + a), + h = new I.Point(e.x + n, o + l); + return Object(I.box)(c, h) + } + _unionBox(e, t) { + const i = Math.min(e.min.x, t.min.x), + s = Math.max(e.max.x, t.max.x), + r = Math.min(e.min.y, t.min.y), + n = Math.max(e.max.y, t.max.y), + o = new I.Point(i, r), + a = new I.Point(s, n); + return Object(I.box)(o, a) + } + _getTooltip(e, t) { + if (e.tooltip) return { + content: { + type: "text", + data: e.tooltip + }, + tooltipDelay: 200, + extendMargin: !0, + rect: { + x: t.min.x, + y: t.min.y, + w: Math.abs(t.max.x - t.min.x), + h: Math.abs(t.max.y - t.min.y) + } + } + } + _setBaseData(e, t) { + this._items.length = 0, this._barSpacing = t; + for (const t of e) { + const e = void 0 === t.width ? Object(s.ensureDefined)(this._width) : t.width, + i = void 0 === t.height ? Object(s.ensureDefined)(this._height) : t.height, + r = void 0 === t.vertOffset ? this._vertOffset : t.vertOffset, + n = r > 0 ? i : -i; + this._items.push({ + width: e, + height: i, + vertOffset: r, + textVertOffset: n, + shapeWidth: 0, + shapeHeight: 0, + stepX: 0, + stepY: 0, + ...t + }) + } + } + _drawItemText(e, t, i) { + const s = this._getTextCache(i); + if (null === s) return; + const r = i.x, + n = i.vertOffset, + o = i.y + n + i.textVertOffset; + let a; + a = i.style && void 0 !== i.style.textColor ? i.style.textColor : this._textColor, s + .paintTo(e, t, a, r, o, G.Center, n > 0 ? q.Top : q.Bottom) + } + _drawWithOptimizations(e, t) { + let i, s, r = null, + n = !1; + for (const o of this._items) o.style && void 0 !== o.style.color ? (i = o.style + .color || "rgba(0, 0, 0, 0)", s = o.style.borderColor || "rgba(0, 0, 0, 0)" + ) : (i = this._color, s = this._borderColor), r !== i && (r = i, n && this + ._endPath(e), this._startPath(e, t, i, s)), this._drawItemShape(e, t, o), + n = !0; + n && this._endPath(e); + for (const i of this._items) this._drawItemText(e, t, i) + } + _drawWithoutOptimizations(e, t) { + let i, r; + for (const n of this._items) { + const o = Object(s.ensureDefined)(n.style); + i = o.color || "rgba(0, 0, 0, 0)", r = o.borderColor || "rgba(0, 0, 0, 0)", this + ._startPath(e, t, i, r), this._drawItemShape(e, t, n), this._endPath(e), + this._drawItemText(e, t, n) + } + } + _drawItemShape(e, t, i) { + Object(J.drawScaled)(e, t.pixelRatio, () => this._drawItemShapeUsingCSSPixels(e, i)) + } + _drawItemShapeUsingCSSPixels(e, t) {} + _preDrawInit() {} + _startPath(e, t, i, s) {} + _endPath(e) {} + _getTextCache(e) { + const t = e.text || this._text, + i = e.fontSize || this._fontSize, + s = e.textAlign || this._textAlign; + return this._textCache.get({ + text: t, + bold: !1, + italic: !1, + font: $.CHART_FONT_FAMILY, + fontSize: i, + align: s + }) + } + } + class ee extends Q { + _startPath(e, t, i, s) { + e.beginPath(), e.lineWidth = this._lineWidth(t), e.lineCap = "butt", e.strokeStyle = + i + } + _endPath(e) { + e.stroke() + } + _lineWidth(e) { + return Math.max(1, Math.floor(2 * e.pixelRatio)) + } + } + class te extends Q { + _startPath(e, t, i, s) { + e.beginPath(), e.lineWidth = this._lineWidth(t), e.lineCap = "butt", e.fillStyle = + i, e.strokeStyle = s + } + _endPath(e) { + e.fill(), e.stroke() + } + _lineWidth(e) { + return Math.max(1, Math.floor(e.pixelRatio)) + } + } + class ie extends te { + constructor() { + super(...arguments), this._sign = 0, this._thinArrow = !1, + this._thinArrowLineWidth = 0, this._headHeight = 0, this._arrowWidth = 0 + } + setData(e, t) { + this._setBaseData(e, t) + } + _drawItemShape(e, t, i) { + const s = t.pixelRatio, + r = this._lineWidth(t) % 2 ? .5 : 0, + n = this._sign, + o = this._arrowWidth, + a = this._headHeight, + l = Math.abs(i.height), + c = Math.round(i.x * s) + r, + h = i.vertOffset, + u = Math.round((i.y + h + n * l / 2) * s) + r, + d = Object(R.ceiledEven)(o * s), + p = d / 2, + _ = Math.round(l * s), + m = Math.round(a * s); + e.translate(c, u), this._thinArrow ? (e.moveTo(0, 0), e.lineTo(-p, -p * n), e + .moveTo(0, 0), e.lineTo(p, -p * n), e.moveTo(0, 0), e.lineTo(0, -_ * n), e + .moveTo(-p, -_ * n), e.lineTo(p, -_ * n)) : (e.moveTo(0, 0), _ < m ? (e + .lineTo(d, -_ * n), e.lineTo(-d, -_ * n)) : (e.lineTo(d, -m * n), e + .lineTo(p, -m * n), e.lineTo(p, -_ * n), e.lineTo(-p, -_ * n), e.lineTo( + -p, -m * n), e.lineTo(-d, -m * n)), e.lineTo(0, 0)), e.translate(-c, -u) + } + _preDrawInit() { + const e = this._calculateWidth(); + this._arrowWidth = e, this._sign = this._isUp() ? -1 : 1, this._thinArrow = e < 4, + this._thinArrowLineWidth = Math.max(e / 2, 1), this._headHeight = Math.round(e) + } + _startPath(e, t, i, s) { + e.beginPath(), e.fillStyle = i, e.strokeStyle = s, e.lineWidth = this._lineWidth(t) + } + _lineWidth(e) { + return this._thinArrow ? this._thinArrowLineWidth : super._lineWidth(e) + } + _calcBoundingBox(e) { + const t = e.vertOffset, + i = this._sign, + s = this._arrowWidth, + r = this._headHeight, + n = Math.abs(e.height), + o = e.x - s, + a = o + 2 * s, + l = e.y + t + i * Math.round(n / 2), + c = l + (-n - r) * i, + h = new I.Point(o, l), + u = new I.Point(a, c); + let d = Object(I.box)(h, u); + const p = super._calcBoundingBox(e); + return p && (d = this._unionBox(d, p)), d + } + _calculateWidth() { + return Math.round(this._barSpacing / 4) + } + } + const se = 2 * Math.PI; + class re extends te { + setData(e, t) { + this._setBaseData(e, t); + for (const e of this._items) { + const t = e.height; + e.stepX = Math.round(t / 2 * .65) + .5, e.stepY = e.stepX; + const i = e.stepX / 2, + s = this._getTextCache(e); + if (null === s) { + e.shapeWidth = 2 * e.stepX, e.shapeHeight = 2.5 * e.stepY, e.vertOffset = + this._calcVertOffset(e); + continue + } + const r = s.textImageWidth, + n = s.textImageHeight; + e.shapeWidth = r + 2 * e.stepX, e.shapeHeight = n + 2 * i + e.stepY, e + .vertOffset = this._calcVertOffset(e), e.textHorizOffset = this + ._getHorizontalTextOffset(e), e.textVertOffset = this + ._getVerticalTextOffset(e) + } + } + _calcVertOffset(e) { + return e.vertOffset + } + _drawCorner(e, t, i, s, r) { + const n = Math.max(1, Math.floor(2 * r)); + e.lineTo(t - n * s.prevPointSignX, i - n * s.prevPointSignY), e.arcTo(t, i, t + n * + s.nextPointSignX, i + n * s.nextPointSignY, n) + } + _getArrowSize(e) { + return e.stepX + } + _getHorizontalTextOffset(e) { + return 0 + } + _getVerticalTextOffset(e) { + return 0 + } + _hasText(e) { + return Boolean(e.text) || Boolean(this._text) + } + _drawItemText(e, t, i) { + var r; + const n = this._getTextCache(i); + if (null === n) return; + const o = i.textHorizOffset || 0, + a = i.x + o, + l = i.vertOffset, + c = i.y + l + i.textVertOffset, + h = (null === (r = i.style) || void 0 === r ? void 0 : r.textColor) || this + ._textColor; + n.paintTo(e, t, Object(s.ensureDefined)(h), a, c, G.Center, q.Middle) + } + } + class ne { + constructor(e, t, i, s) { + this.prevPointSignX = e, this.prevPointSignY = t, this.nextPointSignX = i, this + .nextPointSignY = s + } + } + var oe; + ! function(e) { + e.rightUp = new ne(1, 0, 0, 1), e.rightDown = new ne(0, 1, -1, 0), e.leftDown = new ne(-1, + 0, 0, -1), e.leftUp = new ne(0, -1, 1, 0) + }(oe || (oe = {})); + class ae extends te { + _calcBoundingBox(e) { + const t = e.width, + i = e.height, + s = t / 2, + r = Math.round(i / 3), + n = e.x, + o = e.vertOffset - 2 * r, + a = e.y + o, + l = n - s, + c = n + s, + h = a, + u = a + i, + d = new I.Point(l, h), + p = new I.Point(c, u); + let _ = Object(I.box)(d, p); + const m = super._calcBoundingBox(e); + return m && (_ = this._unionBox(_, m)), _ + } + } + const le = new Map; + le.set("PaneRendererArrowUp", class extends ie { + _isUp() { + return !0 + } + }), le.set("PaneRendererArrowDown", class extends ie { + _isUp() { + return !1 + } + }), le.set("PaneRendererCircleShape", class extends te { + _drawItemShapeUsingCSSPixels(e, t) { + const i = Math.max(t.width, t.height) / 2, + s = t.x, + r = t.vertOffset, + n = t.y + r; + e.moveTo(s + i, n), e.arc(s, n, i, 0, se, !1) + } + _calcBoundingBox(e) { + const t = Math.max(e.width, e.height) / 2, + i = e.x, + s = e.vertOffset, + r = e.y + s, + n = i - t, + o = i + t, + a = r - t, + l = r + t, + c = new I.Point(n, a), + h = new I.Point(o, l); + let u = Object(I.box)(c, h); + const d = super._calcBoundingBox(e); + return d && (u = this._unionBox(u, d)), u + } + }), le.set("PaneRendererCrossShape", class extends ee { + _drawItemShape(e, t, i) { + const s = i.width, + r = i.height, + n = i.x - s / 2, + o = i.vertOffset, + a = i.y - r / 2 + o, + l = t.pixelRatio, + c = this._lineWidth(t), + h = c % 2 ? .5 : 0, + u = Math.round(n * l); + let d = Math.round((n + s) * l); + (d - u) % 2 != c % 2 && (d += 1); + const p = Math.floor((u + d) / 2) + h, + _ = Math.round(a * l); + let m = Math.round((a + r) * l); + (m - _) % 2 != c % 2 && (m += 1); + const f = Math.floor((_ + m) / 2) + h; + e.moveTo(p, _), e.lineTo(p, m), e.moveTo(u, f), e.lineTo(d, f) + } + _calcBoundingBox(e) { + const t = e.width, + i = e.height, + s = e.x - t / 2, + r = e.vertOffset, + n = e.y - i / 2 + r, + o = s, + a = s + t, + l = n, + c = n + i, + h = new I.Point(o, l), + u = new I.Point(a, c); + let d = Object(I.box)(h, u); + const p = super._calcBoundingBox(e); + return p && (d = this._unionBox(d, p)), d + } + }), le.set("PaneRendererDiamond", class extends te { + _drawItemShapeUsingCSSPixels(e, t) { + const i = Math.round(t.height / 2), + s = t.x, + r = t.vertOffset, + n = t.y + r; + e.moveTo(s, n - i), e.lineTo(s + i, n), e.lineTo(s, n + i), e.lineTo(s - i, + n), e.lineTo(s, n - i) + } + _calcBoundingBox(e) { + const t = Math.round(e.height / 2), + i = e.x, + s = e.vertOffset, + r = e.y + s, + n = i - t, + o = i + t, + a = r - t, + l = r + t, + c = new I.Point(n, a), + h = new I.Point(o, l); + let u = Object(I.box)(c, h); + const d = super._calcBoundingBox(e); + return d && (u = this._unionBox(u, d)), u + } + }), le.set("PaneRendererFlagShape", class extends te { + _drawItemShapeUsingCSSPixels(e, t) { + const i = t.width, + s = t.height, + r = s / 2, + n = (i - 3) / 3, + o = t.x - i / 2, + a = t.vertOffset, + l = t.y - r + a; + e.moveTo(o, l), e.lineTo(o + 3, l), e.bezierCurveTo(o + n, l - n, o + 2 * n, + l + n, o + i, l), e.lineTo(o + i, l + r), e.bezierCurveTo(o + i - n, + l + r + n, o + i - 2 * n, l + r - n, o + 3, l + r), e.lineTo(o + 3, + l + s), e.lineTo(o, l + s), e.lineTo(o, l) + } + _calcBoundingBox(e) { + const t = e.width, + i = e.height, + s = i / 2, + r = e.x - t / 2, + n = e.vertOffset, + o = e.y - s + n, + a = r, + l = r + t, + c = o, + h = o + i, + u = new I.Point(a, c), + d = new I.Point(l, h); + let p = Object(I.box)(u, d); + const _ = super._calcBoundingBox(e); + return _ && (p = this._unionBox(p, _)), p + } + }), le.set("PaneRendererLabelUp", class extends re { + _calcBoundingBox(e) { + const t = e.x - e.shapeWidth / 2, + i = e.x + e.shapeWidth / 2, + s = e.y + e.vertOffset, + r = e.y + e.shapeHeight + e.vertOffset, + n = new I.Point(t, s), + o = new I.Point(i, r); + return Object(I.box)(n, o) + } + _drawItemShape(e, t, i) { + const s = t.pixelRatio, + r = this._lineWidth(t) % 2 ? .5 : 0, + n = Math.max(1, Math.floor(s)) % 2 ? .5 : 0, + o = this._getArrowSize(i); + let a = Math.round(o * s); + (n + a) % 1 != r % 1 && (a += .5); + let l = Math.round(i.shapeWidth / 2 * s); + (n + l) % 1 != r % 1 && (l += .5); + const c = Math.round(i.x * s) + n, + h = Math.round((i.y + i.vertOffset) * s) + r, + u = c - a, + d = Math.round((i.y + i.vertOffset + o) * s) + r, + p = c + a, + _ = c + l, + m = Math.round((i.y + i.vertOffset + i.shapeHeight) * s) + r, + f = c - l; + e.moveTo(u, d), e.lineTo(c, h), e.lineTo(p, d), i.shapeWidth <= 2 * o ? (e + .lineTo(_, d), this._drawCorner(e, _, m, oe.rightDown, s), this + ._drawCorner(e, f, m, oe.leftDown, s), e.lineTo(f, d)) : (this + ._drawCorner(e, _, d, oe.rightUp, s), this._drawCorner(e, _, m, oe + .rightDown, s), this._drawCorner(e, f, m, oe.leftDown, s), this + ._drawCorner(e, f, d, oe.leftUp, s)), e.lineTo(u, d) + } + _getVerticalTextOffset(e) { + return e.shapeHeight / 2 + this._getArrowSize(e) / 2 + } + _calcVertOffset(e) { + return Math.sign(e.vertOffset) >= 0 ? e.vertOffset : e.vertOffset - e + .shapeHeight + } + }), le.set("PaneRendererLabelDown", class extends re { + _calcBoundingBox(e) { + const t = e.x - e.shapeWidth / 2, + i = e.x + e.shapeWidth / 2, + s = e.y - e.shapeHeight + e.vertOffset, + r = e.y + e.vertOffset, + n = new I.Point(t, s), + o = new I.Point(i, r); + return Object(I.box)(n, o) + } + _drawItemShape(e, t, i) { + const s = t.pixelRatio, + r = this._lineWidth(t) % 2 ? .5 : 0, + n = Math.max(1, Math.floor(s)) % 2 ? .5 : 0, + o = this._getArrowSize(i); + let a = Math.round(o * s); + (n + a) % 1 != r % 1 && (a += .5); + let l = Math.round(i.shapeWidth / 2 * s); + (n + l) % 1 != r % 1 && (l += .5); + const c = Math.round(i.x * s) + n, + h = Math.round((i.y + i.vertOffset) * s) + r, + u = c + a, + d = Math.round((i.y + i.vertOffset - o) * s) + r, + p = c - a, + _ = c + l, + m = Math.round((i.y + i.vertOffset - i.shapeHeight) * s) + r, + f = c - l; + e.moveTo(u, d), e.lineTo(c, h), e.lineTo(p, d), i.shapeWidth <= 2 * o ? (e + .lineTo(f, d), this._drawCorner(e, f, m, oe.leftUp, s), this + ._drawCorner(e, _, m, oe.rightUp, s), e.lineTo(_, d)) : (this + ._drawCorner(e, f, d, oe.leftDown, s), this._drawCorner(e, f, m, oe + .leftUp, s), this._drawCorner(e, _, m, oe.rightUp, s), this + ._drawCorner(e, _, d, oe.rightDown, s)), e.lineTo(u, d) + } + _getVerticalTextOffset(e) { + return -e.shapeHeight / 2 - this._getArrowSize(e) / 2 + } + _calcVertOffset(e) { + return Math.sign(e.vertOffset) <= 0 ? e.vertOffset : e.vertOffset + e + .shapeHeight + } + }), le.set("PaneRendererSquare", class extends te { + _drawItemShape(e, t, i) { + const s = t.pixelRatio, + r = Math.max(1, Math.floor(s)) % 2 ? .5 : 0, + n = this._lineWidth(t) % 2 ? .5 : 0; + let o = Math.round(i.height / 2 * s); + (r + o) % 1 != n % 1 && (o += .5); + const a = Math.round(i.x * s) + r, + l = Math.round((i.y + i.vertOffset) * s) + r, + c = a - o, + h = l - o, + u = a + o, + d = l + o; + e.rect(c, h, u - c, d - h) + } + _calcBoundingBox(e) { + const t = e.height, + i = Math.round(t / 2), + s = e.x - i, + r = e.vertOffset, + n = e.y + r - i, + o = s, + a = s + t, + l = n, + c = n + t, + h = new I.Point(o, l), + u = new I.Point(a, c); + let d = Object(I.box)(h, u); + const p = super._calcBoundingBox(e); + return p && (d = this._unionBox(d, p)), d + } + }), le.set("PaneRendererTriangleApexUp", class extends ae { + _drawItemShape(e, t, i) { + const s = i.width, + r = i.height, + n = Math.round(r / 3), + o = i.vertOffset - 2 * n, + a = t.pixelRatio, + l = this._lineWidth(t) % 2 ? .5 : 0, + c = Math.max(1, Math.floor(a)), + h = c % 2 ? .5 : 0; + let u = Math.round(s * a); + u % 2 != c % 2 && (u += 1); + const d = Math.round(i.x * a) + h, + p = Math.round((i.y + o) * a), + _ = d + u / 2, + m = Math.round((i.y + o + r) * a) + l, + f = d - u / 2; + e.moveTo(d, p), e.lineTo(_, m), e.lineTo(f, m), e.lineTo(d, p) + } + }), le.set("PaneRendererTriangleApexDown", class extends ae { + _drawItemShape(e, t, i) { + const s = i.width, + r = i.height, + n = Math.round(r / 3), + o = i.vertOffset - n, + a = t.pixelRatio, + l = this._lineWidth(t) % 2 ? .5 : 0, + c = Math.max(1, Math.floor(a)), + h = c % 2 ? .5 : 0; + let u = Math.round(s * a); + u % 2 != c % 2 && (u += 1); + const d = Math.round(i.x * a) + h, + p = Math.round((i.y + o) * a) + l, + _ = d + u / 2, + m = Math.round((i.y + o + r) * a), + f = d - u / 2; + e.moveTo(f, p), e.lineTo(_, p), e.lineTo(d, m), e.lineTo(f, p) + } + }), le.set("PaneRendererXCross", class extends ee { + _drawItemShapeUsingCSSPixels(e, t) { + const i = t.width, + s = t.height, + r = t.x - i / 2, + n = t.vertOffset, + o = t.y - s / 2 + n; + e.moveTo(r, o), e.lineTo(r + i, o + s), e.moveTo(r, o + s), e.lineTo(r + i, + o) + } + _calcBoundingBox(e) { + const t = e.width, + i = e.height, + s = e.x - t / 2, + r = e.vertOffset, + n = e.y - i / 2 + r, + o = s, + a = s + t, + l = n, + c = n + i, + h = new I.Point(o, l), + u = new I.Point(a, c); + let d = Object(I.box)(h, u); + const p = super._calcBoundingBox(e); + return p && (d = this._unionBox(d, p)), d + } + }); + class ce { + constructor(e, t, i, s) { + this._items = [], this._invalidated = !1, this._renderer = null, this + ._isMarkersEnabled = T.enabled("source_selection_markers"), this + ._selectionData = null, this._plotIndex = null, this._topCoord = 0, this + ._bottomCoord = 0, this._study = e, this._series = t, this._model = i, this + ._plotName = s; + const r = e.metaInfo().plots; + for (let e = 0; e < r.length; e++) + if (r[e].id === this._plotName) { + this._plotIndex = e; + break + } this._colorProvider = Object(E.createStudyPlotColorProvider)(e.metaInfo(), e + .properties(), s), this._selectionIndexer = new j.SelectionIndexes(i + .timeScale()) + } + items() { + return this._items + } + update() { + this._invalidated = !0 + } + renderer() { + if (!this._study.properties().styles[this._plotName].visible) return null; + if (!this._study.properties().styles[this._plotName].visible.value()) return null; + if (!this._scalesReady()) return null; + if (this._invalidated) { + const e = this._study.properties().styles[this._plotName]; + this._updateRenderer(e), this._invalidated = !1 + } + return this._renderer + } + _scalesReady() { + const e = this._model.timeScale(), + t = this._study.priceScale(); + return e && null !== t && !e.isEmpty() && !t.isEmpty() + } + _updateImpl() { + if (this._items = [], !this._scalesReady()) return; + const e = this._model.timeScale(), + t = this._study.priceScale(), + i = e.visibleBarsStrictRange(); + if (null === i || null === t) return; + let r = this._series.nearestIndex(i.firstBar(), c.PlotRowSearchMode.NearestRight), + n = this._series.nearestIndex(i.lastBar(), c.PlotRowSearchMode.NearestLeft); + if (void 0 === r || void 0 === n) return; + const o = this._study.offset(this._plotName); + o > 0 ? (r -= o, n += o) : (r += o, n -= o); + const a = this._study.getMinFirstBarIndexForPlot(this._plotName); + if (a > n) return; + r = Math.max(a, r); + const l = this._study.data(), + h = this._study.firstValue(); + if (null === h) return; + const u = l.rangeIterator(r, n), + d = this._getTranspValue(); + let p = []; + const _ = this._model.selection().isSelected(this._study); + _ ? (p = this._selectionIndexer.indexes(), this._selectionData = { + points: [], + hittestResult: N.HitTestResult.REGULAR, + vertOffset: 0, + bgColors: [], + barSpacing: e.barSpacing(), + visible: !0 + }) : (this._selectionIndexer.clear(), this._selectionData = null); + const m = this._series.properties().style.value(), + f = 2 === m ? "lineStyle" : 3 === m ? "areaStyle" : null; + let g, b; + f ? (g = this._series.properties()[f].priceSource.value(), b = g) : (g = "high", b = + "low"); + const v = t.isInverted(), + S = t.coordinateToPrice(t.height() * t.topMargin(), h), + y = t.coordinateToPrice(t.height() * (1 - t.bottomMargin()), h); + this._topCoord = v ? y : S, this._bottomCoord = v ? S : y; + const w = Object(s.ensureNotNull)(this._model.paneForSource(this._study)).height(), + P = this._study.properties().styles[this._plotName], + C = P.color.value(), + x = P.textColor ? P.textColor.value() : void 0, + T = C, + I = C, + M = void 0 === x ? void 0 : x, + O = Object(s.ensureNotNull)(this._plotIndex), + L = Object(A.createEmptyStyle)(); + for (; u.hasNext();) { + const e = u.next(), + t = e.index, + i = e.value, + s = Math.floor(t + o), + r = i[O + 1]; + if (null == r) continue; + const n = this._createItem(s, r, g, b); + if (null !== n) { + if (this._colorProvider.isColorDefined()) { + n.style = { + color: T, + borderColor: I, + textColor: M + }; + const e = this._colorProvider.getPlotPointStyle(i, L); + this._fillItemWithPointStyle(n, e, d) + } + _ && -1 !== p.indexOf(t) && null !== this._selectionData && (this + ._selectionData.points.push(n), this._selectionData.bgColors.push( + this._model.backgroundColorAtYPercentFromTop(n.y / w))), this + ._items.push(n) + } + } + this._convertItemsToCoordinates() + } + _fillItemWithPointStyle(e, t, i) { + const r = Object(s.ensureDefined)(e.style); + if (void 0 !== t.colors[A.ColorerType.Main]) { + r.color = Object(M.generateColor)(Object(s.ensureDefined)(t.colors[A.ColorerType + .Main]), i); + const e = i > 9 ? i - 10 : 0; + r.borderColor = Object(M.generateColor)(r.color, e) + } + void 0 !== t.colors[A.ColorerType.Text] && (r.textColor = Object(M.generateColor)( + Object(s.ensureDefined)(t.colors[A.ColorerType.Text]), i)) + } + _updateRenderer(e) { + this._updateImpl(); + const t = this._model.timeScale(), + i = {}, + s = this._getTranspValue(), + r = t.barSpacing(), + n = this._calculateShapeHeight(r), + o = this._study.properties().styles[this._plotName].location.value(), + a = this._calculateVerticalOffset(o, n + n / 2); + i.barSpacing = r, i.items = this._items, i.color = Object(M.generateColor)(this + ._study.properties().styles[this._plotName].color.value(), s), i.height = n, + i.vertOffset = a; + const l = this._study.properties().styles[this._plotName].plottype.value(), + c = B.a[l], + h = new O.CompositeRenderer; + c && h.append(this._createRenderer(c.paneRendererClass, i)), this._model.selection() + .isSelected(this._study) && this._isMarkersEnabled && null !== this + ._selectionData && (this._selectionData.vertOffset = a, h.append(new V + .SelectionRenderer(this._selectionData))), this._renderer = h + } + _createRenderer(e, t) { + const i = le.get(e); + return new(Object(s.ensureDefined)(i))(t) + } + _getSeriesVal(e, t) { + const i = Object(F.barFunction)(e), + s = this._series.data().valueAt(t); + return null === s ? null : i(s) + } + _getTranspValue() { + let e = 0; + this._study.properties().transparency && (e = this._study.properties().transparency + .value(), e = Object(P.isNumber)(e) ? e : 50); + const t = this._study.properties().styles[this._plotName]; + return t.transparency && (e = t.transparency.value(), e = Object(P.isNumber)(e) ? + e : 50), Object(R.clamp)(e, 0, 100) + } + _createItem(e, t, i, r) { + const n = this._study.properties().styles[this._plotName].location.value(); + if ((null === t || 0 === t) && n !== p.c.Absolute) return null; + let o; + switch (n) { + case p.c.AboveBar: + const a = this._getSeriesVal(i, e); + if (null === a) return null; + o = a; + break; + case p.c.BelowBar: + const l = this._getSeriesVal(r, e); + if (null === l) return null; + o = l; + break; + case p.c.Top: + o = this._topCoord; + break; + case p.c.Bottom: + o = this._bottomCoord; + break; + case p.c.Absolute: + o = Object(s.ensureNotNull)(t); + break; + default: + throw new Error("Bad value: " + n) + } + return new I.Point(e, o) + } + _convertItemsToCoordinates() { + const e = this._model.timeScale(), + t = this._study.priceScale(); + e.timedValuesToCoordinates(this._items); + const i = Object(s.ensureNotNull)(this._study.firstValue()); + Object(s.ensureNotNull)(t).pointsArrayToCoordinates(this._items, i) + } + _calculateVerticalOffset(e, t) { + let i = 0; + switch (e) { + case p.c.AboveBar: + case p.c.Bottom: + i = -t; + break; + case p.c.BelowBar: + case p.c.Top: + i = t + } + return Object(s.ensureNotNull)(this._study.priceScale()).isInverted() && (i *= -1), + i + } + _calculateShapeHeight(e, t) { + let i = e; + switch (t) { + case x.PlotSymbolSize.Tiny: + i = .3 * e; + break; + case x.PlotSymbolSize.Small: + i = .6 * e; + break; + case x.PlotSymbolSize.Normal: + i = e; + break; + case x.PlotSymbolSize.Large: + i = 1.5 * e; + break; + case x.PlotSymbolSize.Huge: + i = 2 * e + } + return i + } + } + class he extends ce { + renderer() { + const e = this._study.properties().styles[this._plotName]; + return e.visible && e.visible.value() && this._scalesReady() ? (this._invalidated && + (this._updateRenderer(e), this._invalidated = !1), this._renderer) : null + } + _updateRenderer(e) { + this._updateImpl(); + const t = this._model.timeScale(), + i = {}, + s = this._getTranspValue(), + r = t.barSpacing(); + let n; + if (e.size) { + const t = e.size.value(); + n = this._calculateShapeHeight(25, t) + } else n = Math.round(r / 2); + n = Math.max(n, 1); + const o = e.location.value(), + a = Object(M.generateColor)(e.color.value(), s), + l = s > 19 ? s - 10 : 0, + c = this._calculateVerticalOffset(o, Math.round(1.5 * n)); + i.barSpacing = r, i.items = this.items(), i.color = a, i.borderColor = Object(M + .generateColor)(e.color.value(), l), i.height = n, i.vertOffset = c; + const h = e.plottype.value(), + u = B.a[h], + d = new O.CompositeRenderer, + p = e.text ? e.text.value() : void 0; + if (void 0 !== p && "" !== p.trim()) { + let t = p.trim().replace(/\\n/gm, "\n"); + t = Object(D.cleanButAmpersand)(t, !0), i.text = t, i.fontSize = 12; + const r = e.textColor ? e.textColor.value() : void 0; + i.textColor = r ? Object(M.generateColor)(r, s) : a + } + d.append(super._createRenderer(u.paneRendererClass, i)), this._model.selection() + .isSelected(this._study) && this._isMarkersEnabled && null !== this + ._selectionData && (this._selectionData.vertOffset = c, d.append(new V + .SelectionRenderer(this._selectionData))), this._renderer = d + } + } + var ue = i("/SnT"), + de = i.n(ue), + pe = i("Zp/P"); + class _e extends Q { + constructor(e, t) { + super(e, t), this._heightEnsured = Object(s.ensureDefined)(this._height); + const i = e.char.slice(0, 40); + this._ch = de()(i)[0] || " ", this._fontFamily = e.fontFamily || $ + .CHART_FONT_FAMILY, this._charCache = new Z(this._ch, !1, !1, this._fontFamily, + this._heightEnsured) + } + hitTest(e) { + const t = Object(pe.interactionTolerance)().series + this._heightEnsured / 2; + for (const i of this._items) { + if (new I.Point(i.x, i.y + i.vertOffset).subtract(e).length() <= t) return new N + .HitTestResult(N.HitTestResult.REGULAR) + } + return null + } + _drawItemShape(e, t, i) { + const s = i.x, + r = i.vertOffset > 0 ? 1 : -1, + n = i.y + i.vertOffset - r * Math.round(this._heightEnsured / 2); + let o; + o = i.style && void 0 !== i.style.color ? i.style.color : this._color, this + ._charCache.paintTo(e, t, o, s, n, G.Center, i.vertOffset > 0 ? q.Top : q + .Bottom) + } + _startPath(e, t, i, s) {} + _endPath(e) {} + } + class me extends ce { + renderer() { + const e = this._study.properties().styles[this._plotName]; + if (!e.visible || !e.visible.value()) return null; + if (!this._scalesReady()) return null; + const t = this._model.timeScale(); + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const i = {}, + s = this._getTranspValue(), + r = t.barSpacing(); + let n; + if (e.size) { + const t = e.size.value(); + n = this._calculateShapeHeight(50, t) + } else n = Math.round(r); + const o = e.location.value(), + a = Object(M.generateColor)(e.color.value(), s), + l = this._calculateVerticalOffset(o, n); + i.items = this.items(), i.barSpacing = r, i.char = e.char.value(), i.height = n, i + .vertOffset = l, i.color = a; + const c = new O.CompositeRenderer, + h = e.text ? e.text.value() : void 0; + if (void 0 !== h && "" !== h.trim()) { + let t = h.trim().replace(/\\n/gm, "\n"); + t = Object(D.cleanButAmpersand)(t, !0), i.text = t, i.fontSize = 12; + const r = e.textColor ? e.textColor.value() : void 0; + i.textColor = r ? Object(M.generateColor)(r, s) : a + } + return c.append(new _e(i)), this._model.selection().isSelected(this._study) && this + ._isMarkersEnabled && null !== this._selectionData && (this._selectionData + .vertOffset = l, c.append(new V.SelectionRenderer(this._selectionData))), c + } + } + var fe = i("eJTA"); + class ge extends I.Point { + constructor(e, t, i, s) { + super(e, t), this.height = i, this.isUp = s, this.style = {} + } + } + + function be(e) { + return Math.round(e / 4) + } + + function ve(e) { + return Math.round(e / 2) + } + class Se { + constructor(e) { + this._data = e + } + draw(e, t) { + var i; + const s = t.pixelRatio, + r = this._data, + n = ve(r.barSpacing), + o = be(r.barSpacing), + a = n < 4, + l = Math.max(n / 2, 1), + c = Object(R.ceiledEven)(n * s), + h = c / 2, + u = Math.round(n * s); + e.lineCap = "butt", e.lineWidth = Math.max(1, Math.floor(s)); + const d = e.lineWidth % 2 ? .5 : 0; + for (const t of r.items) { + const n = t.isUp ? -1 : 1, + p = Math.round(Math.abs(t.height) * s), + _ = Math.round(t.x * s) + d, + m = Math.round((t.y - n * o) * s) + d; + e.beginPath(), e.translate(_, m); + const f = null !== (i = t.style && t.style.color) && void 0 !== i ? i : t.isUp ? + r.colorup : r.colordown; + a ? (e.moveTo(0, 0), e.lineTo(-h, -h * n), e.moveTo(0, 0), e.lineTo(h, -h * n), + e.moveTo(0, 0), e.lineTo(0, -p * n), e.moveTo(-h, -p * n), e.lineTo(h, - + p * n), e.lineWidth = l, e.strokeStyle = f, e.stroke()) : (e.moveTo( + 0, 0), p < u ? (e.lineTo(c, -p * n), e.lineTo(-c, -p * n)) : (e + .lineTo(c, -u * n), e.lineTo(h, -u * n), e.lineTo(h, -p * n), e + .lineTo(-h, -p * n), e.lineTo(-h, -u * n), e.lineTo(-c, -u * n)), e + .lineTo(0, 0), e.strokeStyle = t.isUp ? r.colorBorderUp : r + .colorBorderDown, e.stroke(), e.fillStyle = f, e.fill()), e.translate(- + _, -m) + } + } + hitTest(e) { + const t = this._data, + i = ve(t.barSpacing), + s = Math.round(i / 2), + r = Math.round(i), + n = be(t.barSpacing); + for (const i of t.items) { + if (!i) continue; + if (!Number.isFinite(i.x) || !Number.isFinite(i.y)) continue; + const t = Math.abs(i.height), + o = i.isUp ? -1 : 1, + a = t + r, + l = i.y - o * n, + c = l - o * a, + h = i.x - s, + u = i.x + s; + if (h < e.x && e.x < u && (i.isUp ? l < e.y && e.y < c : c < e.y && e.y < l)) + return new N.HitTestResult(N.HitTestResult.REGULAR) + } + return null + } + } + class ye extends V.SelectionRenderer { + _drawMarker(e, t, i, r, n) { + const o = Object(s.ensureNotNull)(this._data), + a = t.isUp ? 1 : -1; + const l = i + a * be(o.barSpacing) + a * ve(o.barSpacing); + let c = Math.round(3.5 * n * 2); + c % 2 != r % 2 && (c += 1); + const h = r % 2 / 2, + u = Math.round(t.x * n) + h, + d = Math.round((t.y + l) * n) + h; + e.beginPath(), e.arc(u, d, c / 2, 0, 2 * Math.PI, !0), e.closePath(), e.fill(), + e.stroke() + } + } + class we extends ce { + constructor() { + super(...arguments), this._maxAbsValue = 0 + } + renderer() { + if (!this._study.properties().styles[this._plotName].visible) return null; + if (!this._study.properties().styles[this._plotName].visible.value()) return null; + if (!this._scalesReady()) return null; + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const e = {}, + t = Object(R.clamp)(this._getTranspValue(), 0, 100), + i = this._model.timeScale().barSpacing(); + e.items = this._items, e.barSpacing = i, e.colorup = Object(M.generateColor)(this + ._study.properties().styles[this._plotName].colorup.value(), t), e + .colordown = Object(M.generateColor)(this._study.properties().styles[this + ._plotName].colordown.value(), t); + const s = Object(fe.parseRgba)(e.colorup), + r = s ? 100 * (1 - s[3]) : 0, + n = Object(fe.parseRgba)(e.colordown), + o = n ? 100 * (1 - n[3]) : 0; + e.colorBorderUp = Object(M.generateColor)("#000000", r), e.colorBorderDown = Object( + M.generateColor)("#000000", o), e.minHeight = this._study.properties() + .styles[this._plotName].minHeight.value(), e.maxHeight = this._study + .properties().styles[this._plotName].maxHeight.value(); + const a = new O.CompositeRenderer; + if (a.append(new Se(e)), this._model.selection().isSelected(this._study) && null !== + this._selectionData) { + const e = this._selectionData; + e.barSpacing = i, a.append(new ye(e)) + } + return a + } + _fillItemWithPointStyle(e, t, i) { + const r = Object(s.ensureDefined)(e.style); + e.isUp ? void 0 !== t.colors[A.ColorerType.Up] ? r.color = Object(M.generateColor)( + Object(s.ensureDefined)(t.colors[A.ColorerType.Up]), i) : r.color = Object(M + .generateColor)(this._study.properties().styles[this._plotName].colorup + .value(), i) : void 0 !== t.colors[A.ColorerType.Down] ? r.color = Object(M + .generateColor)(Object(s.ensureDefined)(t.colors[A.ColorerType.Down]), i) : + r.color = Object(M.generateColor)(this._study.properties().styles[this + ._plotName].colordown.value(), i) + } + _createItem(e, t, i, s) { + if (0 === t) return null; + Math.abs(t) > this._maxAbsValue && (this._maxAbsValue = Math.abs(t)); + const r = t > 0; + let n; + if (r) { + const t = this._getSeriesVal(s, e); + if (null === t) return null; + n = t + } else { + const t = this._getSeriesVal(i, e); + if (null === t) return null; + n = t + } + return new ge(e, n, t, r) + } + _convertItemsToCoordinates() { + const e = this._model.timeScale(), + t = Object(s.ensureNotNull)(this._study.priceScale()); + e.timedValuesToCoordinates(this._items), t.pointsArrayToCoordinates(this._items, + Object(s.ensureNotNull)(this._study.firstValue())); + let i = Math.abs(this._study.properties().styles[this._plotName].minHeight.value()), + r = Math.abs(this._study.properties().styles[this._plotName].maxHeight.value()); + if (i > r) { + const e = i; + i = r, r = e + } + const n = (r - i) / this._maxAbsValue, + o = this._items; + for (let e = 0; e < o.length; e++) { + const t = o[e], + s = Math.abs(t.height); + t.height = s * n + i + } + } + } + var Pe = i("29fS"); + class Ce { + constructor(e, t, i, s) { + this._bars = [], this._invalidated = !1, this._isMarkersEnabled = T.enabled( + "source_selection_markers"), this._selectionData = null, this + ._ohlcPlotIndexes = new Map, this._study = e, this._series = t, this._model = i, + this._plotName = s, this._isMarkersEnabled = T.enabled( + "source_selection_markers"), this._colorProvider = Object(E + .createStudyPlotColorProvider)(e.metaInfo(), e.properties(), s), this + ._selectionIndexer = new j.SelectionIndexes(i.timeScale()); + const r = this._study.metaInfo().plots; + for (let e = 0; e < r.length; e++) { + const t = r[e]; + "target" in t && (t.target === this._plotName && (Object(x.isOhlcOpenPlot)(t) && + this._ohlcPlotIndexes.set(1, e), Object(x.isOhlcHighPlot)(t) && this + ._ohlcPlotIndexes.set(2, e), Object(x.isOhlcLowPlot)(t) && this + ._ohlcPlotIndexes.set(3, e), Object(x.isOhlcClosePlot)(t) && this + ._ohlcPlotIndexes.set(4, e))) + } + } + update() { + this._invalidated = !0 + } + items() { + return this._bars + } + _updateImpl() { + this._bars.length = 0; + const e = this._study.priceScale(); + if (this._model.timeScale().isEmpty() || null === e || e.isEmpty()) return; + const t = this._model.timeScale().visibleBarsStrictRange(); + if (null === t) return; + let i = this._series.nearestIndex(t.firstBar(), c.PlotRowSearchMode.NearestRight); + const r = this._series.nearestIndex(t.lastBar(), c.PlotRowSearchMode.NearestLeft); + if (void 0 === i || void 0 === r) return; + const n = this._study.getMinFirstBarIndexForPlot(this._plotName); + if (n > r) return; + i = Math.max(n, i); + const o = this._study.data(), + a = this._study.firstValue(); + if (null === a) return; + const l = o.rangeIterator(i, r), + h = this._study.properties().ohlcPlots[this._plotName], + u = new Map, + d = (e, t) => { + const i = e + "@" + t; + if (!u.has(i)) { + const s = Object(M.generateColor)(e, t); + return u.set(i, s), s + } + return u.get(i) + }, + p = Object(A.createEmptyStyle)(); + for (; l.hasNext();) { + const e = l.next(); + let t = e.index; + const i = e.value; + t = Math.floor(t); + let r = !0; + const n = new Map; + for (let e = 1; e <= 4; ++e) { + const t = this._ohlcPlotIndexes.get(e); + if (void 0 === t) { + r = !1; + break + } + const s = i[t + 1]; + if (null == s) { + r = !1; + break + } + n.set(e, s) + } + if (!r) continue; + const o = Object(s.ensureDefined)(n.get(1)), + a = Object(s.ensureDefined)(n.get(4)), + c = Object(s.ensureDefined)(n.get(2)), + u = Object(s.ensureDefined)(n.get(3)), + _ = Math.max(o, c, u, a), + m = Math.min(o, c, u, a); + let f = Object(s.ensureDefined)(d(h.color.value(), 0)); + const g = this._colorProvider.getPlotPointStyle(i, p); + void 0 !== g.colors[A.ColorerType.Main] && (f = Object(s.ensureDefined)(g + .colors[A.ColorerType.Main])); + const b = { + time: Math.round(t), + open: o, + high: _, + low: m, + close: a, + color: f, + wickColor: g.colors[A.ColorerType.Wick], + borderColor: g.colors[A.ColorerType.Border], + hollow: null + }; + this._bars.push(b) + } + if (e.barPricesToCoordinates(this._bars, a), this._model.timeScale() + .barIndexesToCoordinates(this._bars), this._model.selection().isSelected(this + ._study)) { + const t = this._selectionIndexer.indexes(); + this._selectionData = { + points: [], + hittestResult: N.HitTestResult.REGULAR, + bgColors: [], + visible: !0, + barSpacing: this._model.timeScale().barSpacing() + }; + const i = Object(s.ensureNotNull)(this._model.paneForSource(this._study)) + .height(), + r = Object(s.ensureDefined)(this._ohlcPlotIndexes.get(4)); + for (let s = 0; s < t.length; s++) { + const n = t[s], + o = this._study.data().valueAt(n); + if (null === o) continue; + const l = o[r + 1]; + if (null == l) continue; + const c = this._model.timeScale().indexToCoordinate(Math.floor(n)), + h = e.priceToCoordinate(l, a); + this._selectionData.points.push(new I.Point(c, h)), this._selectionData + .bgColors.push(this._model.backgroundColorAtYPercentFromTop(h / i)) + } + } else this._selectionIndexer.clear() + } + } + class xe extends Ce { + renderer() { + if (!this._study.properties().ohlcPlots[this._plotName].visible.value()) + return null; + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const e = { + bars: this._bars, + barSpacing: this._model.timeScale().barSpacing(), + dontDrawOpen: this._series.properties().barStyle.dontDrawOpen.value(), + thinBars: this._series.properties().barStyle.thinBars.value() + }, + t = new O.CompositeRenderer; + return t.append(new Pe.PaneRendererBars(e)), this._model.selection().isSelected(this + ._study) && this._isMarkersEnabled && this._selectionData && t.append(new V + .SelectionRenderer(this._selectionData)), t + } + } + var Te = i("/hKg"); + class Ie extends Ce { + renderer() { + const e = this._study.properties().ohlcPlots[this._plotName]; + if (!e.visible.value()) return null; + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const t = this._model.timeScale().barSpacing(), + i = { + bars: this._bars, + barSpacing: t, + wickVisible: e.drawWick.value(), + bodyVisible: !0, + borderVisible: e.drawBorder.value(), + barWidth: Object(pe.optimalBarWidth)(t), + borderColor: e.borderColor.value(), + wickColor: e.wickColor.value() + }, + s = new O.CompositeRenderer; + return s.append(new Te.PaneRendererCandles(i)), this._model.selection().isSelected( + this._series) && this._isMarkersEnabled && this._selectionData && s.append( + new V.SelectionRenderer(this._selectionData)), s + } + } + var Me = i("KtbP"), + Oe = i("wYrq"), + Le = i("2ijp"), + Ae = i("8Uy/"); + class Ee extends Le.a { + constructor(e, t) { + super(), this._lineRendererData.linestyle = Ae.LINESTYLE_DOTTED, this._study = + e, this._plotName = t + } + _updateImpl() { + this._lineRendererData.visible = !1; + const e = this._study.properties().styles[this._plotName]; + if (!e.trackPrice.value()) return; + const t = this._study.lastValueData(this._plotName, !0); + t.noData || (this._lineRendererData.visible = !0, this._lineRendererData.y = t + .coordinate, this._lineRendererData.color = t.color, this + ._lineRendererData.linewidth = e.linewidth.value()) + } + } + var ke = i("cPgM"); + class De { + constructor() { + this._items = [], this._actualLength = 0, this._invalidations = 0 + } + push(e) { + this._items.length === this._actualLength ? this._items.push(e) : this._items[this + ._actualLength] !== e && (this._items[this._actualLength] = e), this + ._actualLength += 1 + } + newItem() { + const e = this._items.length > this._actualLength ? this._items[this + ._actualLength] : null; + return null !== e && Boolean(e.invalidateCache) && e.invalidateCache(), e + } + invalidateCache() { + this._invalidations += 1, 3e3 === this._invalidations && (this._items.splice(this + ._actualLength), this._invalidations = 0), this._actualLength = 0 + } + at(e) { + return this._items[e] + } + data() { + return this._items + } + length() { + return this._actualLength + } + } + class Ve { + constructor() { + this._map = new Map, this._usedKeys = new Set, this._invalidations = 0 + } + invalidateCache() { + this._invalidations += 1, 50 === this._invalidations && (this._deleteUnused(), this + ._invalidations = 0), this._usedKeys.clear(), this._map.forEach((e, t) => e + .invalidateCache()) + } + get(e) { + const t = this._map.get(e); + return void 0 !== t && this._usedKeys.add(e), t + } + set(e, t) { + this._usedKeys.add(e), this._map.set(e, t) + } + forEach(e) { + this._map.forEach((t, i) => { + this._usedKeys.has(i) && e(t, i) + }) + } + delete(e) { + const t = this._map.get(e); + void 0 !== t && t.invalidateCache(), this._usedKeys.delete(e) + } + _deleteUnused() { + const e = []; + this._map.forEach((t, i) => { + this._usedKeys.has(i) || e.push(i) + }); + for (const t of e) this._map.delete(t) + } + } + class Be extends De { + constructor() { + super(), this.points1 = new De, this.points2 = new De, + this.push(this.points1), this.push(this.points2) + } + addPoints1Point(e, t) { + let i = this.points1.newItem(); + null !== i ? (i.x = e, i.y = t) : i = { + x: e, + y: t + }, this.points1.push(i) + } + addPoints2Point(e, t) { + let i = this.points2.newItem(); + null !== i ? (i.x = e, i.y = t) : i = { + x: e, + y: t + }, this.points2.push(i) + } + invalidateCache() { + this.points1.invalidateCache(), this.points2.invalidateCache() + } + } + class Re extends ke.ScaledPaneRenderer { + constructor() { + super(...arguments), this._data = null + } + setData(e) { + this._data = e + } + hitTest(e, t) { + return null + } + _drawImpl(e, t) { + if (null === this._data) return; + const i = .25 * this._data.barSpacing, + s = this._data.transparency; + this._data.colorAreas.forEach((t, r) => { + e.beginPath(); + for (let s = 0; s < t.length(); s++) { + const r = t.at(s); + if (0 === r.points1.length() || 0 === r.points2.length()) + continue; + const n = r.points1.at(0).x, + o = r.points1.at(0).y; + if (e.moveTo(n, o), 1 !== r.points1.length() && 1 !== r.points2 + .length()) { + for (let t = 1; t < r.points1.length(); t++) e.lineTo(r + .points1.at(t).x, r.points1.at(t).y); + for (let t = r.points2.length() - 1; t >= 0; t--) e.lineTo(r + .points2.at(t).x, r.points2.at(t).y) + } else { + const t = r.points2.at(0).x, + s = r.points2.at(0).y; + e.lineTo(n + i, o), e.lineTo(t + i, s), e.lineTo(t - i, s), + e.lineTo(n - i, o) + } + } + e.closePath(), e.fillStyle = Object(M.generateColor)(r, s), e.fill() + }) + } + } + var Ne = i("ZJKN"); + class je extends De { + constructor() { + super(...arguments), this._startIndex = 0 + } + setStartIndex(e) { + this._startIndex = e + } + at(e) { + const t = e - this._startIndex; + for (; t >= this._actualLength;) { + if (this._items.length <= t) this._items.push({ + plot1Value: void 0, + plot2Value: void 0, + colorIndex: void 0 + }); + else { + const e = this._items[this._actualLength]; + e.plot1Value = void 0, e.plot2Value = void 0, e.colorIndex = void 0 + } + this._actualLength += 1 + } + return this._items[t] + } + } + class Fe { + constructor(e, t = !1) { + this._isHlineFill = !1, this._bandAKey = null, this._bandBKey = null, this + ._colorPlotIndex = null, this._colorValues = [], this._colors = new De, this + ._areaRenderer = new Re, this._invalidated = !0, this._plIndex1 = null, this + ._plIndex2 = null, this._level1 = 0, this._level2 = 0, this._studyValuesCache = + new je, this._points1 = new De, this._points2 = new De, this._timePoints = + new De, this._colorAreas = new Ve, this._source = e, this._fillGaps = t + } + update() { + this._invalidated = !0 + } + renderer(e, t) { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._areaRenderer + } + _correctVisibleRange(e) { + const t = this._source.data(), + i = t.search(e.firstBar(), c.PlotRowSearchMode.NearestLeft, this._plotIndex1()), + s = t.search(e.firstBar(), c.PlotRowSearchMode.NearestLeft, this._plotIndex2()), + r = t.search(e.lastBar(), c.PlotRowSearchMode.NearestRight, this._plotIndex1()), + n = t.search(e.lastBar(), c.PlotRowSearchMode.NearestRight, this._plotIndex2()), + o = null !== i ? i.index : e.firstBar(), + a = null !== s ? s.index : e.firstBar(), + l = null !== r ? r.index : e.lastBar(), + h = null !== n ? n.index : e.lastBar(); + return [Math.min(o, a), Math.max(l, h)] + } + _plotNames() { + return this._source.metaInfo().plots.map(e => e.id) + } + _plotIndex1() { + return null === this._plIndex1 && (this._plIndex1 = this._plotNames().indexOf(this + ._plotAId()) + 1), this._plIndex1 + } + _plotIndex2() { + return null === this._plIndex2 && (this._plIndex2 = this._plotNames().indexOf(this + ._plotBId()) + 1), this._plIndex2 + } + _updateImpl() { + var e, t, i; + if (this._areaRenderer.setData(null), !this._visible()) return; + const r = this._source.priceScale(), + n = this._source.model(), + o = n.timeScale(); + if (!r || r.isEmpty() || o.isEmpty()) return; + if (n.mainSeries().bars().isEmpty()) return; + const a = this._source.firstValue(); + if (null === a) return; + if (this._isHlineFill) { + const e = this._source.properties().bands[Object(s.ensureNotNull)(this + ._bandAKey)], + t = this._source.properties().bands[Object(s.ensureNotNull)(this + ._bandBKey)]; + this._level1 = r.priceToCoordinate(e.value.value(), a), this._level2 = r + .priceToCoordinate(t.value.value(), a) + } + const l = o.visibleBarsStrictRange(); + if (null === l) return; + this._timePoints.invalidateCache(), this._points1.invalidateCache(), this._points2 + .invalidateCache(), null === (e = this._colors) || void 0 === e || e + .invalidateCache(), this._colorAreas.invalidateCache(); + const [c, h] = this._correctVisibleRange(l), u = this._isPerBarColoringSupported() ? + this._colors : null, d = this._source.offset(this._plotAId()), p = this._source + .offset(this._plotBId()), _ = Math.min(d, p), m = Math.max(d, p), f = this + ._plotIndex1(), g = this._plotIndex2(), b = this._source.data(); + if (b.isEmpty()) return; + let v, S; + const y = Object(s.ensureNotNull)(b.firstIndex()), + w = Object(s.ensureNotNull)(b.lastIndex()), + C = y - Math.max(0, -_), + x = w + Math.max(0, m), + T = Math.max(c - 1, C), + I = Math.min(h + 1, x), + M = this._studyValuesCache; + M.invalidateCache(); + const O = T - m, + L = b.rangeIterator(O, I - _), + A = Math.max(l.firstBar() - 1, Math.min(O - m - 1, O - 1 + _)); + M.setStartIndex(A); + const E = new Ne.BarsRange(l.firstBar() - 1, l.lastBar() + 1); + for (; L.hasNext();) { + const e = L.next(), + t = e.index, + i = e.value, + r = i[f], + n = i[g], + o = t + d, + a = t + p; + if (o === a && E.contains(o)) { + const e = M.at(o); + e.plot1Value = r, e.plot2Value = n + } else { + if (E.contains(o)) { + M.at(o).plot1Value = r + } + if (E.contains(a)) { + M.at(a).plot2Value = n + } + } + if (null !== u) { + const e = t - 1 + _; + if (l.contains(e)) { + const t = i[Object(s.ensureNotNull)(this._colorPlotIndex) + 1]; + M.at(e).colorIndex = t + } + } + } + const k = this._timePoints, + D = this._points1, + V = this._points2; + let B = null; + const R = A + M.length(); + for (let e = A; e <= R; e++) { + if (!this._fillGaps && (null === v || null === S)) { + const t = e - 1; + k.push(t), D.push(NaN), V.push(NaN), null == u || u.push(null) + } + const s = M.at(e); + if (null !== u) { + const e = s.colorIndex; + B = null == e ? null : this._getColorByPlotValue(e) + } + if (this._isHlineFill) { + k.push(e), null !== u && u.push(B); + continue + } + const r = null !== (t = s.plot1Value) && void 0 !== t ? t : null, + n = null !== (i = s.plot2Value) && void 0 !== i ? i : null; + (null !== r || null !== n || Number.isFinite(v) || Number.isFinite(S)) && (v = + r, S = n, D.push(r), V.push(n), k.push(e), null !== u && u.push(B)) + } + r.pricesArrayToCoordinates(D.data(), a, D.length()), r.pricesArrayToCoordinates(V + .data(), a, V.length()), o.indexesToCoordinates(k.data(), k.length()); + const N = this._transparency(); + let j = Object(P.isNumber)(N) ? N : 50; + j = Math.min(j, 100), j = Math.max(j, 0); + const F = { + barSpacing: this._source.model().timeScale().barSpacing(), + transparency: j, + colorAreas: this._getFilledAreas(k, D, V, u) + }; + this._areaRenderer.setData(F) + } + _getFilledAreas(e, t, i, s) { + const r = this._isHlineFill; + if (!r && (0 === t.length() || 0 === i.length())) return new Ve; + const n = this._colorAreas; + let o = null, + a = null; + const l = this._color(); + for (let c = 0; c < e.length(); c++) { + const h = r ? this._level1 : t.at(c), + u = r ? this._level2 : i.at(c), + d = e.at(c), + p = Object(pe.coordinateIsValid)(h), + _ = Object(pe.coordinateIsValid)(u); + if (this._fillGaps ? p || _ : p && _) { + const e = s ? s.at(c) || "" : l; + if (a !== e || null === o) { + a = e, null !== o && (p && o.addPoints1Point(d, h), _ && o + .addPoints2Point(d, u)); + const t = n.get(e) || new De; + o = t.newItem() || new Be, t.push(o), n.set(e, t) + } + p && o.addPoints1Point(d, h), _ && o.addPoints2Point(d, u) + } else this._fillGaps || (a = null, o = null) + } + return n.delete(""), n + } + } + class We extends Fe { + constructor(e) { + super(e) + } + _plotAId() { + return this._source.properties().area[0].name.value() + } + _plotBId() { + return this._source.properties().area[1].name.value() + } + _color() { + return this._source.properties().areaBackground.backgroundColor.value() + } + _transparency() { + const e = this._source.properties().areaBackground.transparency.value(); + return Object(R.clamp)(e, 0, 100) + } + _visible() { + return this._source.properties().areaBackground.fillBackground.value() + } + _getColorByPlotValue(e) { + return this._color() + } + _isPerBarColoringSupported() { + return !1 + } + } + class He extends Fe { + constructor(e, t, i) { + super(e, !!t.fillgaps), this._isHlineFill = "hline_hline" === t.type, Object(s + .assert)(this._isHlineFill || "plot_plot" === t.type, + "Wrong filledArea type: " + t.type), this._isHlineFill && this + ._initBandIndexes(t.objAId, t.objBId), this._fillMetaInfo = t, this + ._fillStyleProps = i; + const r = e.metaInfo(); + for (let i = 0; i < r.plots.length; ++i) { + const n = r.plots[i]; + if ("palette" in n && n.palette === t.palette) { + this._colorPlotIndex = i, this._colorsMap = Object(s.ensureDefined)(Object(s + .ensureDefined)(r.palettes)[t.palette]).valToIndex, this + ._colorValues = e.properties().palettes[t.palette].colors; + break + } + if (r.isRGB && "target" in n && n.target === t.id) { + this._colorPlotIndex = i; + break + } + } + } + _getColorByPlotValue(e) { + if (this._colorsMap) { + const t = Object(s.ensureDefined)(this._colorsMap)[e]; + return this._colorValues[Object(s.ensureDefined)(t)].childs().color.value() + } + return Object(M.rgbaFromInteger)(e) + } + _isPerBarColoringSupported() { + return null !== this._colorPlotIndex + } + _plotAId() { + return this._fillMetaInfo.objAId + } + _plotBId() { + return this._fillMetaInfo.objBId + } + _color() { + return this._fillStyleProps.childs().color.value() + } + _transparency() { + return this._fillStyleProps.childs().transparency.value() + } + _correctVisibleRange(e) { + const [t, i] = super._correctVisibleRange(e), s = this._source + .getMinFirstBarIndexForPlot(this._fillMetaInfo.id); + return [Math.max(s, t), i] + } + _visible() { + return this._fillStyleProps.childs().visible.value() + } + _initBandIndexes(e, t) { + this._bandAKey = null, this._bandBKey = null; + const i = this._source.metaInfo().bands; + if (void 0 !== i) + for (let s = 0; s < i.length; ++s) { + const r = i[s]; + null !== this._bandAKey || r.id !== e ? null === this._bandBKey && r.id === + t && (this._bandBKey = s) : this._bandAKey = s + } + } + } + var Ue = i("l4sv"); + class ze { + constructor(e, t) { + this._invalidated = !0, this._lineRenderer = new Ue.HorizontalLineRenderer, this + ._source = t, this._points = [new I.Point(-1, -1)], this._invalidated = !0, this + ._properties = e + } + update() { + this._invalidated = !0 + } + renderer() { + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const e = { + y: this._points[0].y, + color: this._properties.childs().color.value(), + linewidth: this._properties.childs().linewidth.value(), + linestyle: this._properties.childs().linestyle.value() + }; + return this._lineRenderer.setData(e), this._lineRenderer + } + _updateImpl() { + const e = this._source.priceScale(); + if (!e || e.isEmpty()) return void(this._points[0] = new I.Point(-1, -1)); + const t = this._properties.childs().value.value(), + i = this._source.firstValue(), + s = Object(P.isNumber)(t) && null !== i ? e.priceToCoordinate(t, i) : NaN; + this._points[0] = new I.Point(-1, s) + } + } + class Ge extends ke.ScaledPaneRenderer { + constructor() { + super(), this._data = null, this._data = null + } + setData(e = null) { + this._data = e + } + hitTest() { + return null + } + _drawImpl(e, t) { + if (null === this._data || 0 === this._data.points.length) return; + const i = t.cssWidth; + e.fillStyle = Object(M.generateColor)(this._data.backcolor, this._data + .transparency); + const s = Math.min(this._data.points[0], this._data.points[1]), + r = Math.max(this._data.points[0], this._data.points[1]); + e.fillRect(0, s, i, r - s) + } + } + class qe { + constructor(e) { + this._points = [], this._bandBgRenderer = new Ge, this._source = e + } + update() { + if (this._points = [], this._source.properties().bands.length < 2) return; + if (!this._source.properties().bandsBackground.fillBackground.value()) return; + const e = this._source.properties().bands[0], + t = this._source.properties().bands[1], + i = this._source.priceScale(), + s = this._source.firstValue(); + i && !i.isEmpty() && null !== s && (this._points.push(i.priceToCoordinate(e.value + .value(), s)), this._points.push(i.priceToCoordinate(t.value.value(), + s))) + } + renderer() { + const e = { + points: this._points, + backcolor: this._source.properties().bandsBackground.backgroundColor + .value(), + transparency: this._source.properties().bandsBackground.transparency.value() + }; + return this._bandBgRenderer.setData(e), this._bandBgRenderer + } + } + class Ye { + constructor(e, t, i) { + this._points = [], this._bandBgRenderer = new Ge, this._bandAKey = null, this + ._bandBKey = null, this._source = e, Object(s.assert)("hline_hline" === t.type, + "Wrong filledArea type: " + t.type), this._initBandIndexes(t.objAId, t + .objBId), this._fillStyleProps = i, this._bandBgRenderer = new Ge + } + update() { + if (this._points = [], !this._fillStyleProps.childs().visible.value()) return; + if (null === this._bandAKey || null === this._bandBKey) return; + const e = this._source.properties().bands[this._bandAKey], + t = this._source.properties().bands[this._bandBKey], + i = this._source.priceScale(), + s = this._source.firstValue(); + i && !i.isEmpty() && null !== s && (this._points.push(i.priceToCoordinate(e.value + .value(), s)), this._points.push(i.priceToCoordinate(t.value.value(), + s))) + } + renderer() { + let e = this._fillStyleProps.childs().transparency.value(); + e = Object(R.clamp)(e, 0, 100); + const t = { + points: this._points, + backcolor: Object(M.generateColor)(this._fillStyleProps.childs().color + .value(), e), + transparency: this._fillStyleProps.childs().transparency.value() + }; + return this._bandBgRenderer.setData(t), this._bandBgRenderer + } + _initBandIndexes(e, t) { + this._bandAKey = null, this._bandBKey = null; + Object(s.ensureDefined)(this._source.metaInfo().bands).forEach((i, s) => { + null === this._bandAKey && i.id === e && (this._bandAKey = s), null === + this._bandBKey && i.id === t && (this._bandBKey = s) + }) + } + } + var Ke = i("bmVy"), + Je = i("eCE5"); + i.d(t, "StudyBase", (function() { + return st + })); + const Ze = Object(r.getLogger)("Chart.Study"), + Xe = window.t("Invalid Symbol"); + const $e = { + symbolsForDisplay: !1, + symbolsForChartApi: !0, + skipHiddenInputs: !1, + skipFakeInputs: !1, + skipBooleanInputs: T.enabled("dont_show_boolean_study_arguments"), + asObject: !0, + skippedGroups: [], + skippedInputs: [], + noExchanges: !1, + noResolution: !1, + keepOptionalSymbolsEmpty: !1, + skipColorInputs: !1, + skipTimeInputs: !1, + skipOptionalEmptySymbolInputs: !1 + }, + Qe = T.enabled("study_symbol_ticker_description"); + + function et(e, t) { + const i = e.plots[t]; + if (!i || !Object(x.isOhlcPlot)(i)) return !1; + const s = i.target, + r = e.defaults.styles && e.defaults.styles[s], + n = e.defaults.ohlcPlots && e.defaults.ohlcPlots[s], + o = e.ohlcPlots && e.ohlcPlots[s]; + return r && Object(x.isOhlcPlotStyleBars)(r) || n && Object(x.isOhlcPlotStyleBars)(n) || !! + o && Object(x.isOhlcPlotStyleBars)(o) + } + + function tt(e, t) { + const i = e.plots[t]; + if (!i || !Object(x.isOhlcPlot)(i)) return !1; + const s = i.target, + r = e.defaults.styles && e.defaults.styles[s], + n = e.defaults.ohlcPlots && e.defaults.ohlcPlots[s], + o = e.ohlcPlots && e.ohlcPlots[s]; + return r && Object(x.isOhlcPlotStyleCandles)(r) || n && Object(x.isOhlcPlotStyleCandles)( + n) || !!o && Object(x.isOhlcPlotStyleCandles)(o) + } + + function it(e, t) { + Object(s.assert)(void 0 !== e, "zOrder must be defined"), Object(s.assert)(!t.has(e), + "zOrder must be unique") + } + class st extends a.PriceDataSource { + constructor(e, t, i, s) { + super(e), this.onStart = new o.a, this._symbolsResolved = new o.a, this + ._statusChanged = new o.a, this._paneViews = [], this._priceAxisViews = [], + this._resolvedSymbols = {}, this._resolvedSymbolsByInput = {}, this + ._isChildStudy = !1, this._status = { + type: Ke.StudyStatusType.Undefined + }, this._studyId = null, this._isSubscribedToSessionId = !1, this + ._titleStrCache = {}, this._titleInPartsCache = {}, this._children = [], + this._numericFormatter = new C.NumericFormatter, this + ._priceAxisViewsBase = [], this._priceLinesAxisViews = [], this + ._labelPaneViews = [], this._ownFirstValue = null, this + ._pendingResolveSymbols = new Map, this._onIsActualIntervalChange = new o.a, + this._lastNonEmptyPlotRowCache = {}, this._chartApi = e.chartApi(), this + ._properties = t, this._metaInfo = s, this._series = this._model + .mainSeries(), this._series.onIntervalChanged().subscribe(this, this + ._calcIsActualInterval), this._showStudyArgumentsProperty = e + .properties().paneProperties.legendProperties.showStudyArguments, + i instanceof st && (this._source = i, this._isChildStudy = !0, this._source + .setChild(this)); + const r = this.parentSource(); + r.currencyChanged().subscribe(this, this._onSourceCurrencyChanged), r + .unitChanged().subscribe(this, this._onSourceUnitChanged), r + .priceRangeReadyChanged().subscribe(this, this + ._onSourcePriceRangeReadyChanged), r.formatterChanged().subscribe(this, + this._onSourceFormatterChanged), r.priceStepChanged().subscribe(this, + this._onSourcePriceStepChanged), Qe && this._model.mainSeries() + .properties().statusViewStyle.symbolTextSource.listeners().subscribe(this, + () => { + this.invalidateTitleCache(!0) + }), this._properties.subscribe(this, this._onPropertiesChanged), this + ._properties.visible.subscribe(this, this._visibleChanged), this._properties + .visible.subscribe(this, this.processHibernate), + this._properties.intervalsVisibilities.subscribe(this, this + ._calcIsActualInterval); + for (let e = 0; e < this._metaInfo.plots.length; e++) { + const t = this._metaInfo.plots[e].id, + i = this.properties().styles[t]; + null != i && null != i.visible && i.visible.subscribe(this, this + .processHibernate) + } + for (const e of Object.keys(this._metaInfo.graphics)) + for (const t of Object.keys(this._metaInfo.graphics[e])) { + const i = this._properties.graphics[e][t]; + i.visible && i.visible.subscribe(this, this.processHibernate) + } + this._isActualInterval = Object(Je.a)(this._series.intervalObj(), this + .properties().intervalsVisibilities) + } + destroy() { + const e = this.parentSource(); + e.currencyChanged().unsubscribeAll(this), e.unitChanged().unsubscribeAll(this), + e.priceRangeReadyChanged().unsubscribeAll(this), e.formatterChanged() + .unsubscribeAll(this), e.priceStepChanged().unsubscribeAll(this), this + ._series.properties().statusViewStyle.symbolTextSource.unsubscribeAll(this), + this._series.onIntervalChanged().unsubscribeAll(this) + } + isSymbolInvalid() { + return this._status.type === Ke.StudyStatusType.Error && this._status + .errorDescription.error === Xe + } + isActualInterval() { + return this._isActualInterval + } + onIsActualIntervalChange() { + return this._onIsActualIntervalChange + } + isVisible() { + if (!this.properties().visible.value() || !this.isActualInterval()) return !1; + const e = this.metaInfo(); + if (e.plots.length > 0) return !0; + for (const t of Object.keys(e.graphics)) + for (const i of Object.keys(e.graphics[t])) { + const e = this.properties().graphics[t][i]; + if (!e.visible || e.visible.value()) return !0 + } + return !(!e.isTVScriptStrategy && !e.hasAlertFunction) + } + inputs(e) { + const t = Object(P.merge)(Object(P.clone)($e), e || {}); + return t.skipOptionalEmptySymbolInputs && (t.keepOptionalSymbolsEmpty = !0), + this._buildInputs(t) + } + status() { + return this._status + } + title(e, t, i, s) { + i = void 0 === i ? !this._showStudyArgumentsProperty.value() : i; + const r = JSON.stringify([e, t, i, s]); + if (this._titleStrCache[r]) return this._titleStrCache[r]; + if (this._titleInPartsCache[r]) return this._joinTitlesParts(this + ._titleInPartsCache[r]); + const n = this._title(e, t, i, s); + return this._titleStrCache[r] = n, n + } + titleInParts(e, t, i, s) { + i = void 0 === i ? !this._showStudyArgumentsProperty.value() : i; + const r = JSON.stringify([e, t, i, s]); + if (this._titleInPartsCache[r]) return this._titleInPartsCache[r]; + const n = this._titleInParts(e, t, i, s); + return this._titleInPartsCache[r] = n, n + } + invalidateTitleCache(e) { + if (this._titleStrCache = {}, this._titleInPartsCache = {}, !0 === e && this + ._children) + for (let t = 0; t < this._children.length; ++t) this._children[t] + .invalidateTitleCache(e) + } + setOwnFirstValue(e) { + this._ownFirstValue = e + } + firstValue(e) { + var t, i, s; + if (!this._isChildStudy && "Compare@tv-basicstudies" === (null === (t = this + ._metaInfo) || void 0 === t ? void 0 : t.id) || !(null === (i = this + ._metaInfo) || void 0 === i ? void 0 : i.is_price_study)) { + const t = this._model.timeScale().visibleBarsStrictRange(); + if (null === t) return null; + if (!this.properties().visible.value() || !this.isActualInterval()) + return this._ownFirstValue; + const i = t.firstBar(), + r = t.lastBar(); + let n = null; + const o = (null === (s = this._metaInfo) || void 0 === s ? void 0 : s + .plots) || []; + if (null === n) { + const t = this.data().rangeIterator(i, r); + for (; t.hasNext();) { + const i = t.next().value; + for (let t = 0; t < o.length; ++t) { + if (Object(x.isColorerPlot)(o[t])) continue; + const s = i[t + 1]; + if (null == s) continue; + const r = o[t].id, + a = this.properties().styles[r]; + if (a.visible && a.visible.value() && !(e && Math.abs(s) < + 1e-10)) { + n = s; + break + } + } + if (null !== n) break + } + } + return this._ownFirstValue = n, null !== n ? n : this._bandsFirstValue(e) + } + if (this._isChildStudy) { + const e = this._getNonPriceParent(); + if (e && this.priceScale() === e.priceScale()) return null !== e + ._ownFirstValue ? e._ownFirstValue : e.firstValue() + } + return this._series.firstValue() + } + priceRange(e, t) { + let i = null; + const r = Object(s.ensureNotNull)(this._metaInfo), + n = this._fillPrecalculatedAutoscaleInfo(e, t); + let o = this.data().minMaxOnRangeCached(e, t, n.fields); + if (o = Object(c.mergeMinMax)(n.baseValueMinMax, o), n.useMainSeriesRange) { + const i = [{ + name: "low", + offset: 0 + }, { + name: "high", + offset: 0 + }], + s = this.series().data().bars().minMaxOnRangeCached(e, t, i); + o = Object(c.mergeMinMax)(o, s) + } + if (null !== o && (i = new l.PriceRange(o.min, o.max)), r.bands) + for (let e = 0; e < r.bands.length; e++) + if (this.properties().bands[e].visible.value()) { + const t = this.properties().bands[e].value.value(); + if (!Object(P.isNumber)(t)) continue; + i ? i.apply(t, t) : i = new l.PriceRange(t, t) + } return this._postProcessPriceRange(i) + } + autoScaleInfo(e, t) { + const i = { + topPixelMargin: 0, + bottomPixelMargin: 0 + }; + return { + range: this.priceRange(e, t), + topPixelMargin: i.topPixelMargin, + bottomPixelMargin: i.bottomPixelMargin + } + } + resolvedSymbolInfoBySymbol(e) { + return this._resolvedSymbols && e && this._resolvedSymbols[this + ._getSymbolForResolve(e)] || null + } + currency() { + const e = this.metaInfo(); + return Boolean(e) && e.is_price_study ? this.parentSource().currency() : null + } + unit() { + const e = this.metaInfo(); + return Boolean(e) && e.is_price_study ? this.parentSource().unit() : null + } + sessionId() { + return this.parentSource().sessionId() + } + sessionIdChanged() { + return this.parentSource().sessionIdChanged() + } + getSymbolString(e) { + return "" === e ? "" : Object(v.encodeExtendedSymbolOrGetSimpleSymbolString)( + this._getSymbolObject(e)) + } + onStatusChanged() { + return this._statusChanged + } + symbolsResolved() { + return this._symbolsResolved + } + valuesProvider() { + return new m.a(this, this.model()) + } + statusProvider(e) { + return new w.a(this, this._model.properties().scalesProperties.textColor) + } + correctScaleMargins(e) { + if ("Volume" === this.metaInfo().shortId) { + const t = this.model().paneForSource(this); + return null !== t && t.isOverlay(this) && t.containsMainSeries() ? { + top: .75, + bottom: 0 + } : { + top: e.top, + bottom: 0 + } + } + return e + } + canBeHiddenByGlobalFlag() { + return !0 + } + isSourceHidden() { + return !this.isVisible() || this.canBeHiddenByGlobalFlag() && g + .hideAllIndicators().value() + } + _invalidateLastNonEmptyPlotRowCache() { + this._lastNonEmptyPlotRowCache = {} + } + processHibernate() { + this.isHibernateAllowed() && (!this.isStarted() && this.isVisible() && this + .start(), this.isStarted() && !this.isVisible() && this.stop()) + } + isHibernated() { + return !this.isVisible() && !this.isStarted() + } + _createViews() { + var e, t, i; + this._priceAxisViewsBase = [], this._priceLinesAxisViews = [], this + ._paneViews = [], this._labelPaneViews = []; + const r = new Set, + n = this.metaInfo(), + o = Boolean(n.usePlotsZOrder), + a = new Map; + if (n.plots) + for (let t = 0; t < n.plots.length; t++) { + const i = n.plots[t]; + let l, c, h, u, d; + if (Object(x.isNonVisualPlot)(i)) continue; + let p = n.plots[t].id, + _ = n.styles; + if (Object(x.isBgColorerPlot)(i)) l = new k(this, this._series, this + ._model, p); + else if (Object(x.isShapesPlot)(i)) l = new he(this, this._series, this + ._model, p); + else if (Object(x.isCharsPlot)(i)) l = new me(this, this._series, this + ._model, p); + else if (Object(x.isArrowsPlot)(i)) l = new we(this, this._series, this + ._model, p); + else if (Object(x.isOhlcPlot)(i)) { + const e = i.target; + if (r.has(e)) continue; + if (r.add(e), et(n, t)) l = new xe(this, this._series, this._model, + e); + else { + if (!tt(n, t)) { + Ze.logError(`plot ${i.id} looks to be invalid`); + continue + } + l = new Ie(this, this._series, this._model, e) + } + u = this.createPriceAxisView(e), h = new Me.PanePriceAxisView(u, + this, this._model), p = e, _ = n.ohlcPlots + } else u = this.createPriceAxisView(p), d = this + .createPriceLineAxisView(p), l = new Oe.a(this, this._series, this + ._model, p), this.properties().styles[p].trackPrice.value() && ( + c = new Ee(this, p)), h = new Me.PanePriceAxisView(u, this, this + ._model); + const m = o ? Object(s.ensureDefined)(null === (e = null == _ ? void 0 : + _[p]) || void 0 === e ? void 0 : e.zorder) : a.size; + it(m, a); + const f = { + paneViews: [l], + labelView: h, + priceAxisView: u, + priceLineAxisView: d + }; + void 0 !== c && f.paneViews.push(c), a.set(m, f) + }(null !== (i = null === (t = this._metaInfo) || void 0 === t ? void 0 : t + .bands) && void 0 !== i ? i : []).forEach((e, t) => { + const i = this._properties.bands[t]; + if (i && i.visible.value()) { + const t = new ze(i, this), + r = o ? Object(s.ensureDefined)(e.zorder) : a.size; + it(r, a), a.set(r, { + paneViews: [t] + }) + } + }), this._properties.bandsBackground && (Object(s.assert)(!o, + "'usePlotsZOrder' flag does not supported"), a.set(a.size, { + paneViews: [new qe(this)] + })); + const l = this._paneViews; + Object(d.createGraphicsPaneViews)(this, this.model()).then(e => { + for (let t = 0; t < e.length; t++) l.push(e[t]); + this._model.lightUpdate() + }), this._properties.areaBackground && (Object(s.assert)(!o, + "'usePlotsZOrder' flag does not supported"), a.set(a.size, { + paneViews: [new We(this)] + })); + const c = e => n.plots.some(t => Object(x.isColorerPlot)(t) && t.target === e); + if (this._properties.filledAreas && n.filledAreas) + for (let e = 0; e < n.filledAreas.length; ++e) { + const t = n.filledAreas[e], + i = this._properties.filledAreasStyle[t.id], + r = c(t.id); + let l; + if ("plot_plot" === t.type || r ? l = new He(this, t, i) : + "hline_hline" === t.type ? l = new Ye(this, t, i) : Ze.logWarn( + "Unsupported filledArea type: " + t.type), void 0 !== l) { + const e = o ? Object(s.ensureDefined)(t.zorder) : a.size; + it(e, a), a.set(e, { + paneViews: [l] + }) + } + } + const h = Array.from(a.keys()).sort((e, t) => e - t); + for (let e = 0; e < h.length; e++) { + const t = Object(s.ensureDefined)(a.get(h[e])); + this._paneViews.push(...t.paneViews), t.labelView && this._labelPaneViews + .push(t.labelView), t.priceAxisView && this._priceAxisViewsBase.push(t + .priceAxisView), t.priceLineAxisView && this._priceLinesAxisViews + .push(t.priceLineAxisView) + } + this._dataWindowView || (this._dataWindowView = new _.StudyDataWindowView(this, + this._model)), this._legendView || (this._legendView = new f(this, this + ._model)), this._statusView || (this._statusView = new b + .StudyStatusView(this)), this._concatPriceAxisViews() + } + _titleInputs(e, t) { + return this.inputs(this._titleInputsOptions(e, t)) + } + _titleInputsOptions(e, t) { + return { + symbolsForDisplay: !0, + skipHiddenInputs: !0, + skipFakeInputs: !1, + fakeInputsForDisplay: !0, + asObject: !1, + skippedGroups: [], + noExchanges: e, + noResolution: t, + skipColorInputs: !0, + skipTimeInputs: !0 + } + } + _subscribeToSessionId() { + !this._isSubscribedToSessionId && this.hasSymbolInputs() && (this + .sessionIdChanged().subscribe(this, this._onSessionIdChanged), this + ._isSubscribedToSessionId = !0) + } + _unsubscribeToSessionId() { + this._isSubscribedToSessionId && (this.sessionIdChanged().unsubscribe(this, this + ._onSessionIdChanged), this._isSubscribedToSessionId = !1) + } + _onSessionIdChanged() { + this.restart(!0) + } + _title(e, t, i, s) { + const r = this._titleInParts(e, t, i, s); + return this._joinTitlesParts(r) + } + _postProcessPriceRange(e) { + if (e && e.minValue() === e.maxValue() && !this.metaInfo().is_price_study) { + const t = .005 * e.minValue(); + e = new l.PriceRange(e.minValue() - t, e.maxValue() + t) + } + const t = this.priceScale(); + return t && t.isLog() && e ? new l.PriceRange(t.priceToLogical(e.minValue()), t + .priceToLogical(e.maxValue())) : e + } + _joinTitlesParts(e) { + const t = e[1] ? e[1].join(", ") : ""; + return e[0] + (t.length > 0 ? " (" + t + ")" : "") + } + _titleInParts(e, t, i, s) { + let r = ""; + r = e ? this.metaInfo().shortDescription || this._properties.shortDescription && + this._properties.shortDescription.value() || "Study" : this.metaInfo() + .description || this._properties.description && this._properties.description + .value() || "Study", t = t || {}; + const n = [window.t(r, { + context: "study" + })]; + let o = []; + if (!i) { + const i = this._getMTFResolutionInputTitle(); + null !== i && i.length > 0 && n.push(i); + const r = this.metaInfo(), + a = this._titleInputs(s, !0) || []; + if (a.length > 0) { + const i = {}; + if (this._isChildStudy) + for (let t = 0; t < r.inputs.length; ++t) { + const n = r.inputs[t]; + if (!u.a.isSourceInput(n)) continue; + const o = n.id, + a = this._properties.inputs[o].value(); + if (a.indexOf("$") >= 0 && this._source) { + const t = this._source.metaInfo(), + r = this._source.title(e, {}, !0, s); + if (1 === t.plots.length) i[a] = r; + else { + const e = a.split("$")[1], + s = t.plots[parseInt(e)].id, + n = t.styles && t.styles[s], + o = n && n.title || s; + i[a] = r + ": " + o + } + } + break + } + o = a.map(e => { + let s = Object(P.isNumber)(e) ? this._numericFormatter + .format(e) : i && i[e.toString()] || e.toString(); + return t && t[s.toString()] && (s = t[s.toString()]), s + }) + } + } + return [n.join(" · "), o] + } + _getMTFResolutionInputTitle() { + const e = this.metaInfo(); + for (let t = 0; t < e.inputs.length; t++) { + const i = e.inputs[t]; + if ("resolution" === i.type && i.isMTFResolution) return this._properties + .inputs[i.id].value() + } + return null + } + isHibernateAllowed() { + return !this.hasChildren() + } + _getSymbolForResolve(e) { + return this.getSymbolString(this._getSymbolForApi(e)) + } + _allSymbolsAreResolved() { + const e = this.metaInfo(), + t = []; + let i = !1; + for (let s = 0; s < e.inputs.length; s++) + if ("symbol" === e.inputs[s].type) { + const r = e.inputs[s].id, + n = this._properties.inputs[r].value(), + o = this._getSymbolForResolve(n); + if ("" !== o) + if (this._resolvedSymbols[o]) i = !0; + else { + const e = this._resolveSymbol(o, n); + t.push(e) + } + } if (0 === t.length) { + const e = Promise.resolve(); + return i ? e.then(() => this._symbolsResolved.fire()) : e + } + return Promise.all(t).catch(e => (this._setStatus({ + type: Ke.StudyStatusType.Error, + errorDescription: { + error: Xe + } + }), this.stop(!0), this._model.updateSource(this), Promise.reject( + "Invalid symbol, " + e))).then(() => { + null !== this._studyId && this.stop(!0), this.start(!0), + this._symbolsResolved.fire(), this._recheckLineToolsActuality() + }) + } + _getSymbolForApi(e) { + return e + } + _resolveSymbol(e, t) { + if ("" === e) return Promise.resolve(); + let i = this._pendingResolveSymbols.get(e); + return void 0 !== i || (i = new Promise((i, s) => { + this._chartApi.resolveSymbol(Object(S.makeNextSymbolId)(), e, + r => { + switch (this._pendingResolveSymbols.delete(e), r + .method) { + case "symbol_resolved": + this._setStatus({ + type: Ke.StudyStatusType + .Undefined + }), this._resolvedSymbols[e] = r.params[ + 1], this._resolvedSymbolsByInput[ + t] = r.params[1], this + ._onSymbolResolved(e, t, r.params[1]), + this.invalidateTitleCache(!0), i(); + break; + case "symbol_error": + if (this._setStatus({ + type: Ke.StudyStatusType.Error, + errorDescription: { + error: r.params[1] + } + }), r.params[1] === y + .permissionDenied && r.params[2]) + switch (r.params[2]) { + case y + .SymbolErrorPermissionDeniedReason + .Symbol: + if (r.params[3]) + return void this + ._resolveSymbol(r + .params[3], t).then( + i); + break; + default: + return void this._resolveSymbol( + r.params[2], t).then(i) + } + 0, s() + } + }) + }), this._pendingResolveSymbols.set(e, i)), i + } + _recheckLineToolsActuality() { + const e = this._model.paneForSource(this); + null !== e && e.sourcesByGroup().lineSourcesForAllSymbols().forEach(e => { + e.ownerSource() === this && e.calcIsActualSymbol() + }) + } + _getSymbolObject(e) { + const t = { + symbol: e + }; + return t.session = this.sessionId(), t + } + _onSymbolResolved(e, t, i) { + 0 + } + _setStatus(e) { + this._status = e, this._statusView && this._statusView.update(), this._model + .updateSource(this), this._statusChanged.fire(e) + } + _bandsFirstValue(e) { + const t = Object(s.ensureNotNull)(this._metaInfo); + if (!t.bands) return null; + for (let i = 0; i < t.bands.length; i++) { + const t = this.properties().childs().bands.childs()[i]; + if (t.childs().visible.value()) { + const i = t.childs().value.value(); + if (e && 0 === i) continue; + return i + } + } + return null + } + _prepareInputs(e) { + Object(s.assert)(!!e, "options not set"); + const t = this.metaInfo(), + i = {}, + r = e.allowedInputTypes ? new Set(e.allowedInputTypes) : null; + for (let s = 0; s < t.inputs.length; s++) { + const n = t.inputs[s]; + if (null !== r && !r.has(n.type)) continue; + if (n.isFake && e.skipFakeInputs) continue; + if (n.isMTFResolution && e.noResolution) continue; + if (n.isHidden && e.skipHiddenInputs) continue; + if ("bool" === n.type && e.skipHiddenInputs && e.skipBooleanInputs) + continue; + if ("color" === n.type && e.skipHiddenInputs && e.skipColorInputs) continue; + if ("time" === n.type && e.skipHiddenInputs && e.skipTimeInputs) continue; + if (void 0 !== n.groupId && -1 !== e.skippedGroups.indexOf(n.groupId)) + continue; + if (-1 !== e.skippedInputs.indexOf(n.id)) continue; + const o = this._prepareInput(n, e); + "symbol" === n.type && e.skipOptionalEmptySymbolInputs && "" === o || (i[n + .id] = Object(P.clone)(o)) + } + return i + } + _lastNonEmptyPlotRow(e) { + var t; + if (!Object(P.isInteger)(e)) return Ze.logDebug( + "_lastNonEmptyPlotRow: incorrect plotIndex"), null; + let i = null !== (t = this._lastNonEmptyPlotRowCache[e]) && void 0 !== t ? t : + null; + if (null !== i) return i; + return i = this.data().findLast((t, i) => void 0 !== i[e], 1e3), null === i ? + null : (this._lastNonEmptyPlotRowCache[e] = i, i) + } + _applyPlotToPrecalculatedAutoscaleInfo(e, t, i, s) { + const r = s.id, + n = this.properties().styles[r], + o = Object(x.isShapesPlot)(s) || Object(x.isCharsPlot)(s); + i.useMainSeriesRange = i.useMainSeriesRange || Object(x.isArrowsPlot)(s); + let a = Object(x.isLinePlot)(s) || Object(x.isOhlcPlot)(s); + if (o) { + const e = n.location.value(), + t = [p.c.Absolute, p.c.Top, p.c.Bottom].indexOf(e) < 0; + i.useMainSeriesRange = i.useMainSeriesRange || o && t, a = a || e === p.c + .Absolute + } + if (!a) return i; + const l = { + name: r, + offset: this.offset(r) + }, + h = n.plottype.value(); + if (!this.properties().skipHistogramBaseOnAutoScale && [x.LineStudyPlotStyle + .Histogram, x.LineStudyPlotStyle.Columns, x.LineStudyPlotStyle.Area + ].indexOf(h) >= 0) { + const s = n.histogramBase.value(), + r = this.data().minMaxOnRangeCached(e, t, [l]); + return Object(P.isNumber)(s) && null !== r && (i.baseValueMinMax = Object(c + .mergeMinMax)(i.baseValueMinMax, { + min: s, + max: s + }), i.baseValueMinMax = Object(c.mergeMinMax)(i.baseValueMinMax, r)), i + } + return i.fields.push(l), i + } + _fillPrecalculatedAutoscaleInfo(e, t) { + return Object(s.ensureNotNull)(this._metaInfo).plots.filter(e => !Object(x + .isPlotWithTechnicalValues)(e)).filter(e => { + const t = e.id; + let i; + if (Object(x.isOhlcPlot)(e)) { + const t = e.target; + i = this.properties().ohlcPlots[t] + } else i = this.properties().styles[t]; + return i.visible.value() + }).reduce((i, s) => this._applyPlotToPrecalculatedAutoscaleInfo(e, t, i, + s), { + fields: [], + useMainSeriesRange: !1, + baseValueMinMax: null + }) + } + _buildInputs(e) { + Object(s.assert)(!!e, "options not set"); + let t = {}; + try { + t = this._prepareInputs(e) + } catch (e) { + Ze.logWarn("Failed to prepare study inputs: " + e) + } + if (e.asObject) { + const e = {}; + return Object.keys(t).forEach(i => { + null != t[i] && (e[i] = t[i]) + }), e + } { + const e = []; + return Object.keys(t).forEach(i => { + null != t[i] && e.push(t[i]) + }), e + } + } + _prepareInput(e, t) { + const i = this._prepareInputValue(e, t); + return !e.isFake || t.fakeInputsForDisplay || t.onlyAtomValues ? i : { + v: i, + f: !0, + t: e.type + } + } + _calcIsActualInterval() { + const e = this._isActualInterval; + this._isActualInterval = Object(Je.a)(this._series.intervalObj(), this + .properties().intervalsVisibilities), e !== this._isActualInterval && ( + this._onIsActualIntervalChange.fire(), this._visibleChanged(), this + .processHibernate()) + } + _visibleChanged() { + this._series.invalidateBarColorerCache() + } + _getNonPriceParent() { + const e = this.source(); + if (e instanceof st) { + const t = e.metaInfo(); + return t.is_price_study && "Compare@tv-basicstudies" !== t.id ? e + ._getNonPriceParent() : e + } + return null + } + } + }, + IiTo: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("jCNj"), + r = i("LxhU"), + n = i("Hr11"), + o = i("ZmuQ"), + a = i("E6p6"); + class l extends o.a { + constructor(e, t) { + super(), this._sessionStartMs = -Number.MAX_VALUE, this._sessionEndMs = -Number + .MAX_VALUE, this._periodSec = e, this._session = t + } + alignTimeIfPossible(e) { + const t = this.alignTime(e); + return isNaN(t) ? e : t + } + indexOfBar(e) { + return e < this._sessionStartMs ? a.SessionStage.PRE_SESSION : e >= this + ._sessionEndMs ? a.SessionStage.POST_SESSION : Object(n.toInt)(s + .time_seconds_diff(e, this._sessionStartMs) / this._periodSec) + } + startOfBar(e) { + if (e === a.SessionStage.PRE_SESSION) { + const e = s.get_cal_from_unix_timestamp_ms(this._session.timezone, this + ._sessionStartMs - 1), + t = this._session.spec.alignToNearestSessionEnd(e, -1); + return s.cal_to_utc(this._session.timezone, t) + } + if (e === a.SessionStage.POST_SESSION) return this._sessionEndMs; + if (e < 0) throw new Error("Negative offset is not supported"); + return this._sessionStartMs + s.time_seconds(this._periodSec * e) + } + endOfBar(e) { + if (e < 0) throw new Error("Index cannot be negative"); + const t = this.startOfBar(e) + 1e3 * this._periodSec; + return t > this._sessionEndMs ? this._sessionEndMs : t + } + isLastBar(e, t) { + return t >= this._sessionStartMs + s.time_seconds(this._periodSec * (e + 1) - 1) + } + moveTo(e) { + const t = this._session.timezone, + i = s.utc_to_cal(t, e), + r = this._session.spec.alignToSessionStart(i); + this._sessionStartMs = s.cal_to_utc(t, i), s.add_minutes(i, r), this + ._sessionEndMs = s.cal_to_utc(t, i) + } + indexOfLastBarInSession() { + return Object(n.toInt)((this._sessionEndMs - 1 - this._sessionStartMs) / 1e3 / + this._periodSec) + } + moveNext() { + this.moveTo(this._sessionEndMs) + } + } + var c = i("OBgQ"); + + function h(e, t) { + const i = s.clone(t), + r = e.businessDaysToCalendarDays(i, 1); + r > 1 && s.add_date(i, r - 1); + const n = e.leftBorderOfDailyBar(i); + if (null === n) throw new Error("Cannot calculate left border of daily bar"); + return s.cal_to_utc(s.get_timezone(e.timezone()), n) + } + class u extends o.a { + constructor(e, t, i, s, r = !1) { + super(), this._periodStart = -Number.MAX_VALUE, this._periodEnd = -Number + .MAX_VALUE, this._periodLastBarStart = -Number.MAX_VALUE, this + ._periodStartDay = new c.a(0, 0, 0), this._periodEndDay = new c.a(0, 0, 0), + this._period = i, this._sessionTgt = e, this._builder = s, this + ._useBusinessDays = r, this._sessionSrc = r ? new o.b("Etc/UTC", "24x7") : + t || e + } + builder() { + return this._builder + } + alignTimeIfPossible(e) { + return this.tradingDayToSessionStart(e) + } + tradingDayToSessionStart(e) { + return this.moveTo(e), this.startOfBar(0) + } + indexOfBar(e) { + if (this._useBusinessDays) { + const t = c.a.fromCalendar(s.get_cal_from_unix_timestamp_ms(this._sessionSrc + .timezone, e)); + return t.before(this._periodStartDay) ? a.SessionStage.PRE_SESSION : this + ._periodEndDay.before(t) ? a.SessionStage.POST_SESSION : 0 + } + return e < this._periodStart ? a.SessionStage.PRE_SESSION : e >= this + ._periodEnd ? a.SessionStage.POST_SESSION : 0 + } + startOfBar(e) { + if (e === a.SessionStage.PRE_SESSION) { + const e = s.get_cal_from_unix_timestamp_ms(this._sessionTgt.timezone, this + ._periodStart - 1), + t = this._sessionTgt.spec.alignToNearestSessionEnd(e, -1); + return s.cal_to_utc(this._sessionTgt.timezone, t) - 1 + } + return e === a.SessionStage.POST_SESSION || e > 0 ? this._periodEnd : e === a + .SessionStage.LASTBAR_SESSION ? this._periodLastBarStart : this._periodStart + } + moveTo(e) { + const t = s.get_cal_from_unix_timestamp_ms(this._sessionSrc.timezone, e); + this._sessionSrc.spec.correctTradingDay(t); + const i = s.get_year(t), + r = this._indexOfPeriodInYear(t), + n = r + this._period, + o = this._sessionTgt.spec, + a = this._sessionTgt.timezone, + l = this._builder.startOfPeriod(a, r, i); + this._periodStart = h(o, l); + const u = s.clone(l), + d = o.businessDaysToCalendarDays(u, 1); + d > 1 && s.add_date(u, d - 1), this._periodStartDay = c.a.fromCalendar(u); + const p = this._builder.startOfPeriod(a, n, i); + this._periodEnd = h(o, p); + const _ = s.clone(p); + for (s.add_date(_, -1); o.isCalWeekEnd(_);) s.add_date(_, -1); + this._periodEndDay = c.a.fromCalendar(_), s.add_date(p, -1), + function(e, t) { + for (; e.isCalWeekEnd(t);) s.add_date(t, -1) + }(this._sessionTgt.spec, p), this._periodLastBarStart = h(o, p), (this + ._periodLastBarStart < this._periodStart || this._periodLastBarStart === + this._periodEnd) && (this._periodLastBarStart = this._periodStart) + } + endOfBar(e) { + if (0 !== e) throw new Error("index should be 0"); + return this._periodEnd + } + isLastBar(e, t) { + if (0 !== e) throw new Error("index should be 0"); + return t >= this._periodLastBarStart + } + currentRange() { + return { + from: this._periodStartDay, + to: this._periodEndDay + } + } + indexOfBarInYear(e) { + const t = s.get_cal_from_unix_timestamp_ms(this._sessionSrc.timezone, e), + i = s.get_year(t), + r = this._builder.indexOfPeriod(t), + o = this._sessionTgt.timezone; + let a = this._builder.startOfPeriod(o, r, i), + l = h(this._sessionTgt.spec, a); + return a = s.get_cal_from_unix_timestamp_ms(s.get_timezone("Etc/UTC"), l), i < s + .get_year(a) ? (a = this._builder.startOfPeriod(o, r - 1, i), l = h(this + ._sessionTgt.spec, a), { + index: (r - 1) / this._period, + time: l + }) : { + index: Object(n.toInt)(r / this._period), + time: l + } + } + sessionSrc() { + return this._sessionSrc + } + _indexOfPeriodInYear(e) { + const t = this._builder.indexOfPeriod(e); + let i = Object(n.toInt)(t / this._period) * this._period; + return -1 === t && (i = -this._period), i + } + } + + function d(e, t) { + const i = s.get_day_of_week(t) - e.firstDayOfWeek(); + return i < 0 ? i + 7 : i + } + + function p(e, t) { + const i = s.get_day_of_year(t) - 1; + let r = d(e, t) - i % 7; + return 0 === r ? Object(n.toInt)(i / 7) : (r >= 0 && (r -= 7), Object(n.toInt)((r + i) / 7)) + } + class _ { + indexOfPeriod(e) { + return s.get_day_of_year(e) - 1 + } + startOfPeriod(e, t, i) { + const r = s.days_per_year(i); + return s.get_cal(s.get_timezone("Etc/UTC"), i, s.JANUARY, 1 + Math.min(t, r)) + } + } + class m extends _ { + constructor(e) { + super(), this._sessionsSpec = e + } + indexOfPeriod(e) { + return super.indexOfPeriod(e) - function(e, t) { + const i = p(e, t), + r = s.get_cal(s.get_timezone("Etc/UTC"), s.get_year(t), s.JANUARY, 1); + s.add_date(r, 7 * i); + const n = i * e.weekEndsCount() + e.holidaysFromYearStart(r), + o = s.get_day_of_year(t) - s.get_day_of_year(r); + return n + o - e.calendarDaysToBusinessDays(r, o) + }(this._sessionsSpec, e) + } + startOfPeriod(e, t, i) { + const r = 7 - this._sessionsSpec.weekEndsCount(), + o = Math.max(0, Object(n.toInt)(t / r) - 1), + a = s.get_cal(s.get_timezone("Etc/UTC"), i, s.JANUARY, 1), + l = s.get_days_per_year(a); + if (s.add_date(a, 7 * o), (t -= r * o - this._sessionsSpec.holidaysFromYearStart( + a)) > 0) { + const e = this._sessionsSpec.businessDaysToCalendarDays(a, t); + s.add_date(a, e) + } + let c = s.get_day_of_year(a) - 1; + return i < s.get_year(a) && (c += l), super.startOfPeriod(e, c, i) + } + } + class f { + constructor(e) { + this._builder = null, this._initialized = !1, this._session = e + } + indexOfPeriod(e) { + return this._getBuilder().indexOfPeriod(e) + } + startOfPeriod(e, t, i) { + return this._getBuilder().startOfPeriod(e, t, i) + } + _getBuilder() { + return null !== this._builder && this._initialized || (this._builder = this._session + .spec.hasWeekEnds() ? new m(this._session.spec) : new _, this + ._initialized = !0), this._builder + } + } + class g { + constructor(e) { + this._session = e + } + indexOfPeriod(e) { + let t = p(this._session.spec, e); + if (0 === t) { + const i = s.get_timezone(this._session.spec.timezone()); + e < this.startOfPeriod(i, 0, s.get_year(e)) && (t = -1) + } + return t + } + startOfPeriod(e, t, i) { + if (t < 0) { + i--; + const r = s.get_cal(s.get_timezone("Etc/UTC"), i, s.DECEMBER, 31, 23, 59, 59), + o = this.indexOfPeriod(r), + a = -1 * t, + l = Object(n.toInt)(o / a) * a; + return this.startOfPeriod(e, l, i) + } + const r = s.get_cal(s.get_timezone("Etc/UTC"), i, s.JANUARY, 1), + o = d(this._session.spec, r), + a = 0 === o ? 7 * t : 7 * (t + 1) - o; + return a > s.get_days_per_year(r) ? this.startOfPeriod(e, 0, i + 1) : (s.add_date(r, + a), r) + } + } + class b { + indexOfPeriod(e) { + return s.get_month(e) + } + startOfPeriod(e, t, i) { + if (t < 0) { + const e = Object(n.toInt)((11 - t) / 12); + i -= e, t += 12 * e + } else t > s.DECEMBER && (i++, t = s.JANUARY); + return s.get_cal(s.get_timezone("Etc/UTC"), i, t, 1) + } + } + + function v(e, t, i, s = !1) { + const n = r.Interval.parse(e), + o = n.multiplier(); + return n.isMinutes() ? new l(60 * o, t) : n.isSeconds() ? new l(o, t) : n.isTicks() ? new l( + 1, t) : n.isRange() ? new l(60 * o, t) : new u(t, i, o, function(e, t) { + switch (e) { + case r.ResolutionKind.Days: + return new f(t); + case r.ResolutionKind.Weeks: + return new g(t); + case r.ResolutionKind.Months: + return new b + } + throw new Error("Unknown dwm resolution: " + e) + }(n.kind(), t), s) + } + + function S(e, t, i, s, r, n, o) { + return w(e, t, i, s, r, n, o, 0) + } + + function y(e, t, i, s, r, n, o) { + return w(e, t, i, s, r, n, o, 1) + } + + function w(e, t, i, s, n, a, l, c) { + const h = r.Interval.parse(n + s); + if (h.isMonths()) { + const e = new Date(l); + return 0 === c && e.setUTCDate(1), + function(e, t) { + T(e, Math.floor(t / 12)); + let i = e.getUTCMonth() - t % 12; + i < 0 && (T(e, 1), i += 12); + e.setUTCMonth(i); + for (; e.getUTCMonth() !== i;) I(e, 1) + }(e, a * h.multiplier()), e.getTime() + } + const u = new o.b("Etc/UTC", e, t, i), + d = h.inMilliseconds(), + p = h.isDWM(); + let _; + _ = p ? 864e5 : 60 * u.spec.maxTradingDayLength() * 1e3; + let m = 0; + m = h.isWeeks() ? 7 : 7 - u.spec.weekEndsCount(); + const f = _ / d, + g = m * f; + let b; + if (a < g) b = a / f; + else { + b = 7 * (a / g) + } + return p && (b = Math.floor(b)), l - 864e5 * b + } + + function P(e, t, i, s, n, a, l) { + const c = r.Interval.parse(n + s); + if (c.isMonths()) { + const e = new Date(a), + t = new Date(l); + let i = 12 * (t.getUTCFullYear() - e.getUTCFullYear()); + return i += t.getUTCMonth() - e.getUTCMonth(), Math.ceil(i / c.multiplier()) + } + const h = new o.b("Etc/UTC", e, t, i), + u = c.inMilliseconds(); + let d; + d = c.isDWM() ? 864e5 : 60 * h.spec.maxTradingDayLength() * 1e3; + let p = 0; + p = c.isWeeks() ? 7 : 7 - h.spec.weekEndsCount(); + const _ = l - a, + m = d / u, + f = p * m; + let g = _ / 864e5 * m; + return g >= f && (g = _ / 6048e5 * f), Math.ceil(g) + } + + function C(e, t) { + const i = s.clone(t); + return e.alignToSessionStart(i), s.cal_to_utc(s.get_timezone(e.timezone()), i) + } + + function x(e, t) { + const i = s.utc_to_cal(t.timezone, +e); + let r = s.get_day_of_week(i), + n = s.get_minutes_from_midnight(i); + const o = t.spec.findSession(t.spec.getWeekIndex(i), r, n).getEntry(); + return o.isOvernight() && n > o.startOffset() + o.length() && r === o.dayOfWeek() - 1 && ( + r++, n -= 1440), r === o.dayOfWeek() && n >= o.startOffset() && n < o + .startOffset() + o.length() + } + + function T(e, t) { + const i = e.getUTCMonth(); + e.setUTCFullYear(e.getUTCFullYear() - t), e.getUTCMonth() !== i && I(e, 1) + } + + function I(e, t) { + e.setTime(e.getTime() - 864e5 * t) + } + i.d(t, "newBarBuilder", (function() { + return v + })), i.d(t, "alignPeriodsBackForDataRequest", (function() { + return S + })), i.d(t, "alignPeriodsBackForVisibleRange", (function() { + return y + })), i.d(t, "getPeriodsBetweenDates", (function() { + return P + })), i.d(t, "alignExchangeTimeToSessionStartAndReturnUTC", (function() { + return C + })), i.d(t, "isTradingNow", (function() { + return x + })), i.d(t, "SessionInfo", (function() { + return o.b + })) + }, + IjC5: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "RectangleRenderer", (function() { + return u + })); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("f6yo"), + o = i("GEp6"), + a = i("VdBB"), + l = i("Tmoa"), + c = i("8Uy/"), + h = i("gAom"); + class u { + constructor(e, t, i) { + this._data = null, this._hitTestResult = e || new a.HitTestResult(a.HitTestResult + .MOVEPOINT), + this._backHitTestResult = t || new a.HitTestResult(a.HitTestResult + .MOVEPOINT_BACKGROUND), this._forceOverrideTransparency = Boolean(i) + } + setData(e) { + this._data = e + } + hitTest(e, t) { + if (null === this._data || this._data.points.length < 2 || this._data.nohittest) + return null; + const [i, s] = this._getPointsInPhysicalSpace(t), n = new r.Point(s.x, i.y), a = + new r.Point(i.x, s.y), l = new r.Point(e.x * t.pixelRatio, e.y * t.pixelRatio), + c = this._extendAndHitTestLineSegment(l, i, n, t); + if (null !== c) return c; + const h = this._extendAndHitTestLineSegment(l, a, s, t); + if (null !== h) return h; + let u = Object(o.distanceToSegment)(n, s, l); + return u.distance <= 3 ? this._hitTestResult : (u = Object(o.distanceToSegment)(i, + a, l), u.distance <= 3 ? this._hitTestResult : this._data + .fillBackground ? this._hitTestBackground(l, i, s, t) : null) + } + getColor() { + const e = Object(s.ensure)(this._data); + return void 0 === e.transparency ? e.backcolor : Object(l.generateColor)(e + .backcolor, e.transparency, this._forceOverrideTransparency) + } + draw(e, t) { + if (null === this._data || this._data.points.length < 2 || this._data.linewidth <= + 0 && !this._data.fillBackground) return; + e.save(); + const [i, s] = this._getPointsInPhysicalSpace(t), r = this._data.linewidth ? Math + .max(1, Math.floor(this._data.linewidth * t.pixelRatio)) : 0, n = this._data + .fillBackground ? this.getColor() : void 0, o = Math.max(1, Math.floor(t + .pixelRatio)); + Object(h.fillRectWithBorder)(e, i.x, i.y, s.x, s.y, n, this._data.color, r, c + .LINESTYLE_SOLID, this._data.extendLeft, this._data.extendRight, "center", t + .physicalWidth, this._data.includeRightEdge && 1 === o ? 1 : 0), e.restore() + } + _getPointsInPhysicalSpace(e, t = 0) { + const i = Object(s.ensureNotNull)(this._data), + [n, o] = i.points, + a = e.pixelRatio, + l = Math.min(n.x, o.x), + c = Math.max(n.x, o.x), + h = Math.min(n.y, o.y), + u = Math.max(n.y, o.y), + d = Math.round(l * a) + t, + p = Math.round(c * a) + t, + _ = Math.round(h * a) + t, + m = Math.round(u * a) + t; + return [new r.Point(d, _), new r.Point(p, m)] + } + _extendAndHitTestLineSegment(e, t, i, s) { + const r = this._extendAndClipLineSegment(t, i, s); + if (null !== r) { + if (Object(o.distanceToSegment)(r[0], r[1], e).distance <= 3) return this + ._hitTestResult + } + return null + } + _extendAndClipLineSegment(e, t, i) { + const n = Object(s.ensureNotNull)(this._data); + if (Object(r.equalPoints)(e, t)) return null; + const o = i.physicalWidth, + a = Math.min(e.x, t.x), + l = Math.max(e.x, t.x), + c = n.extendLeft ? 0 : Math.max(a, 0), + h = n.extendRight ? o : Math.min(l, o); + return c > h || h <= 0 || c >= o ? null : [new r.Point(c, e.y), new r.Point(h, t.y)] + } + _hitTestBackground(e, t, i, s) { + const o = this._extendAndClipLineSegment(t, i, s); + return null !== o && Object(n.pointInBox)(e, Object(r.box)(o[0], o[1])) ? this + ._backHitTestResult : null + } + } + }, + InMJ: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()), this.version = n.version, i.e("lt-pane-views") + .then(i.t.bind(null, "gr7S", 7)).then(({ + FlatBottomPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 3 + } + name() { + return "Flat Bottom" + } + hasEditableCoordinates() { + return !1 + } + addPoint(e, t) { + return t && t.shift() && 2 === this.points().length && this._snapPoint45Degree(e, + this.points()[this.points().length - 2]), s.prototype.addPoint.call(this, e) + } + setLastPoint(e, t) { + return t && t.shift() && 2 === this.points().length && this._snapPoint45Degree(e, + this.points()[this.points().length - 2]), s.prototype.setLastPoint.call( + this, e) + } + setPoint(e, t, i) { + if (i && i.shift() && 1 === e) { + this._snapPoint45Degree(t, this.points()[0]) + } + if (2 === e) this._points[1].index = t.index; + else if (3 === e) return this._points[0].index = t.index, this._points[2].price = t + .price, void this.normalizePoints(); + super.setPoint(e, t) + } + getPoint(e) { + return e < 3 ? s.prototype.getPoint.call(this, e) : 3 === e ? { + index: this._points[0].index, + price: this._points[2].price + } : void 0 + } + canHasAlert() { + return !0 + } + _getAlertPlots() { + var e = this._points[0], + t = this._points[1], + i = []; + e.index <= t.index ? (i.push(e), i.push(t)) : (i.push(t), i.push(e)); + var s = this._points[2]; + s.time = t.time, s.index = t.index; + var r, n, o, a, l = { + price: s.price, + time: e.time, + index: e.index + }, + c = []; + s.index <= l.index ? (c.push(s), c.push(l)) : (c.push(l), c.push(s)), i[0].price > + c[0].price ? (r = i, n = c) : c[0].price > i[0].price || c[1].price > i[1] + .price ? (r = c, n = i) : (r = i, n = c); + var h = this.properties().extendLeft.value(), + u = this.properties().extendRight.value(); + return e.index <= t.index ? (o = h, a = u) : (o = u, a = h), [this + ._linePointsToAlertPlot(r, "Upper", o, a), this._linePointsToAlertPlot(n, + "Lower", h, a) + ] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "vm8R"))) + .GeneralTrendFiguresDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolflatbottom", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + n.version = 1, t.LineToolFlatBottom = n + }, + J2xC: function(e, t, i) { + e.exports = { + "css-value-header-toolbar-height": "38px" + } + }, + JT5O: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyMarket", (function() { + return n + })); + var s = i("hY0g"), + r = i.n(s); + class n { + constructor(e, t) { + this._visibility = new r.a(!1), this._dialogPromise = null, this._dialog = null, + this._chartWidgetCollection = e, this._options = t + } + visible() { + return this._visibility.readonly() + } + show(e) { + var t; + null === this._dialog && this._requestDialog(e), null === (t = this._dialog) || + void 0 === t || t.open(e, void 0) + } + hide() { + var e; + null === (e = this._dialog) || void 0 === e || e.hide() + } + resetAllPages() { + var e; + null === (e = this._dialog) || void 0 === e || e.resetAllStudies() + } + _requestDialog(e) { + if (null === this._dialogPromise) { + let t; + t = Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i.e(8), i.e(9), i.e(17), + i.e(19), i.e(24), i.e(68), i.e(78), i.e(0), i.e(2), i.e(18), i.e( + "study-market") + ]).then(i.bind(null, "zbLM")).then(e => new e.IndicatorsLibraryContainer( + this._chartWidgetCollection, this._options)), this._dialogPromise = t + .then(t => { + this._dialog = t, this._dialog.visible().subscribe(e => { + this._visibility.setValue(e) + }), this._dialog.open(e) + }) + } + return this._dialogPromise + } + } + }, + JWMC: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "trackEvent", (function() { + return l + })); + i("bSeV"); + var s = i("FQhm"), + r = i("Kxc7"), + n = i("txPx"); + const o = Object(n.getLogger)("Common.TrackEvent"), + a = [/Study_(Drawing)_(.*)/, /(Study)_(.*)@tv-basicstudies/, /(Study)_(.*)/, + /(Chart Style) (.*)/ + ], + l = (e, t, i) => { + if (r.enabled("charting_library_base")) return void((e, t, i) => { + t = t || e || i || ""; + let r = ""; + for (let e = 0; e < a.length; e++) { + const i = t.match(a[e]); + if (i && 3 === i.length) { + t = i[1], r = i[2]; + break + } + } + Object(s.emit)(t.toLowerCase().replace(" ", "_"), { + category: e, + label: i, + value: r + }) + })(e, t, i); + let n = (e ? e + ":" : "") + t; + i && (n += " " + i), o.logNormal(n), r.enabled("widget") || !window._UNIT_TESTS && + window.gtag && window.gtag("event", t, { + event_category: e, + event_label: i + }) + }; + "undefined" != typeof window && (window.TradingView = window.TradingView || {}, window + .TradingView.trackEvent = l) + }, + JcHK: function(e, t, i) { + "use strict"; + + function s(e) { + return e.getAll().some(e => e.isInitialized()) + } + + function r(e, t) { + const i = e.getAll(), + s = () => { + t(), i.forEach(e => { + e.chartWidgetInitialized.unsubscribe(null, s) + }) + }; + i.forEach(e => { + e.chartWidgetInitialized.subscribe(null, s, !0) + }) + } + i.r(t), i.d(t, "isAnyChartWidgetInitialized", (function() { + return s + })), i.d(t, "waitAnyChartWidgetInitialized", (function() { + return r + })) + }, + JjUe: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "OverlayDataWindowView", (function() { + return h + })); + var s = i("ivNn"), + r = i("4miz"), + n = i("qFKp"), + o = i("e92V"), + a = i("mMWL"), + l = i("e1Hy"); + const c = n.CheckMobile.any(); + class h extends r.b { + constructor(e, t) { + super(), this._invalidated = !0, this._study = e, this._model = t, this + ._valueProvider = this._createValuesProvider(e, t), this._items = this + ._valueProvider.getItems().map(e => new r.a(e.title, "")), this.update() + } + items() { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._items + } + update() { + this._invalidated = !0 + } + study() { + return this._study + } + _updateImpl() { + this._header = this._study.title(); + let e; + this._showLastPriceAndChangeOnly() ? e = this._study.data().lastIndex() : (e = + this._model.crossHairSource().appliedIndex(), Object(s.isNumber)(e) || ( + e = this._study.data().lastIndex())); + const t = this._valueProvider.getValues(e); + for (let e = 0; e < t.length; ++e) { + const i = t[e], + s = this._items[e]; + s.setValue(i.value), s.setVisible(i.visible), s.setColor(i.color) + } + } + _showLastPriceAndChangeOnly() { + return c && (null === this._model.crossHairSource().pane || Object(o + .isLineToolName)(a.tool.value()) || null !== this._model + .lineBeingEdited()) + } + _createValuesProvider(e, t) { + return new l.a(e, t) + } + } + }, + JmuD: function(e, t, i) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.hasProperty = t.isObject = void 0, t.isObject = function(e) { + var t = typeof e; + return null !== e && ("object" === t || "function" === t) + }, t.hasProperty = function(e, t) { + return t in e + } + }, + JpbW: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "showChangeIntervalDialogAsync", (function() { + return n + })); + var s = i("6KAu"); + let r = null; + + function n(e) { + const t = r = Object(s.a)().then(i => { + t === r && i.showChangeIntervalDialog(e) + }); + return t + } + }, + K4L1: function(e, t, i) { + "use strict"; + var s = i("Eyy1").assert, + r = i("lCO3").Version, + n = i("txPx").getLogger("Chart.Study.Versioning"), + o = i("Wt0y"), + a = i("0YCj"), + l = i("TcSq").extractPineId, + c = i("Si3H").migrateMetaInfoAndPropState; + + function h(e, t) { + if (!e) throw new Error("No studies metainfo"); + var s = i("EyEd"); + if (this._studiesMetainfo = e, !t) throw new Error("No studies migrations"); + this._studiesMigrations = t, this._migrations = {}; + for (var r = 0; r < this._studiesMigrations.length; r++) + for (var o = this._studiesMigrations[r], a = o.versFrom, l = o.versTo, c = 0; c < o + .studyMigrations.length; c++) { + var h = o.studyMigrations[c], + u = h.studyId; + if (0 !== h.rules.length) { + var d = u in this._migrations ? this._migrations[u] : new s(u); + d.addMigration(a, l, h.rules), this._migrations[u] = d + } else n.logError("Study Migration should have at least one convertion rule") + } + this._clientMigrations = [function(e, t) { + if (0 === this._studiesMetainfo.length || !e.isTVScript || e.version >= 22) + return t; + for (var i = {}, s = 0, r = 0;;) { + var n = t[r]; + if (void 0 === n) break; + var o = t[n.id]; + n.isFake && (n.id = "in_" + s++), i[r] = n, i[n.id] = o, r++ + } + return i + }] + } + h.prototype.updateMetaInfo = function(e) { + if (!e) return e; + s(!e.isTVScript, + "This method should update only built-in java indicators metaInfo. For Pine indicators use updateMetaInfoAsync" + ); + for (var t = null, i = this._studiesMetainfo, r = 0; r < i.length; r++) + if (i[r].id === e.id) { + t = i[r]; + break + } return TradingView.clone(t) + }, h.prototype.updateMetaInfoAsync = function(e) { + if (!e) return { + sync: !1, + result: Promise.reject("No old metaInfo was given") + }; + new a(e), a.versionOf(e); + for (var t = null, i = this._studiesMetainfo, s = 0; s < i.length; s++) + if (i[s].id === e.id) { + t = i[s]; + break + } return { + sync: !0, + result: t ? TradingView.clone(t) : null + } + }, h.prototype.lastVersionOfStudy = function(e) { + return this._studiesMetainfo.find((function(t) { + return t.id === e + })).version + }, h.prototype.updateStudyInputs = function(e, t, i, s, o) { + var a = TradingView.clone(s); + if (e in this._migrations) { + var l, c = r.parse(t); + if ("last" === i) { + var h = this.lastVersionOfStudy(e); + l = r.parse(h) + } else l = r.parse(i); + a = this._migrations[e].updateInputs(c, l, a) + } + if (null == o) return a; + for (var u in o) u in a || (a[u] = o[u]); + for (var u in a) + if (!(u in o)) { + var d = a[u]; + n.logWarn("Extra input detected, studyId=" + e + ", versionFrom=" + t + + ", inputId=" + u + ", inputValue=" + d + ", removing it and continue..." + ), delete a[u] + } return a + }, h.prototype.updateStudyState = function(e, t, i) { + if (null == e || null == t || null == i) return e; + if (e = TradingView.clone(e), !(t.isTVScript || !!t.pine) && t.version !== i.version) { + var s = i && i.defaults.inputs, + r = this.updateStudyInputs(t.id, t.version, i.version, e.inputs, s); + e.inputs = r + } + for (var o = 0; o < this._clientMigrations.length; ++o) { + r = this._clientMigrations[o].call(this, t, e.inputs); + Object.keys(r).length === Object.keys(e.inputs).length ? e.inputs = r : n.logWarn( + "StudyVersioning._clientMigrations application returned bad result. Skipping it..." + ) + } + var l = a.versionOf(t); + if (t.isTVScript && t.TVScriptSourceCode && l >= 12 && l <= 26) { + var c = {}; + for (o = 0; o < t.plots.length; ++o) { + var h = t.plots[o], + u = i.plots[o]; + c[h.id] = u.id + } + var d = Object.keys(e.styles); + for (o = 0; o < d.length; ++o) { + var p = d[o], + _ = e.styles[p]; + delete e.styles[p]; + var m = c[p]; + e.styles[m] = _ + } + var f = Object.keys(e.plots); + for (o = 0; o < f.length; ++o) { + var g = f[o]; + p = e.plots[g].id; + e.plots[g].id = c[p] + } + } + return e + }, h.prototype.patchPointsBasedStudyState = function(e) { + return h._fixInputsMaxValue(e.state, e.metaInfo), e + }, h.prototype.patchPointsBasedStudyData = function(e, t) { + if (!o.isProd()) return t; + if (!e || !t) return t; + var i = TradingView.clone(t); + return "VbPFixed@tv-volumebyprice" === e.id && e.version && e.version <= 4 && h + ._patchOldVolumeProfiles(0, i), i + }, h.prototype.patchStudyData = function(e, t, i, s) { + if (!o.isProd()) return { + data: t, + nsData: i, + indexes: s + }; + var r = TradingView.clone(t), + n = TradingView.clone(i), + l = TradingView.clone(s); + "VbPVisible@tv-volumebyprice" === e.id && e.version && e.version <= 4 && h + ._patchOldVolumeProfiles(0, r.graphics), "VbPSessions@tv-volumebyprice" === e.id && + e.version && e.version <= 4 && h._patchOldVolumeProfiles(0, r.graphics); + var c = a.versionOf(e); + if (e.isTVScript && e.TVScriptSourceCode && c >= 12 && c <= 26) { + var u = r.columns; + r.columns = []; + for (var d = 0; d < u.length; ++d) { + var p = "plot_" + d; + r.columns.push(p) + } + } + return { + data: r, + nsData: n, + indexes: l + } + }, h._patchOldVolumeProfiles = function(e, t) { + var i = t.hhists[e].data, + s = []; + for (var r in i) s = s.concat(i[r]); + t.hhists[0].data = s + }, h._fixInputsOrder = function(e, t) { + for (var i = a.getOrderedInputIds(t), s = h.splitInputs(e.inputs), r = s.arr, n = s.obj, + o = TradingView.merge({}, n), l = 0; l < i.length; ++l) { + var c = i[l], + u = h.findInputKeyById(r, c); + if (null !== u) { + var d = r[u]; + o[l] = d + } + } + e.inputs = o + }, h.INPUT_MAX_VALUE = 1e12, h._verifyInputsMaxValue = function(e) { + var t = h.INPUT_MAX_VALUE; + if (e.inputs) + for (var i = 0; i < e.inputs.length; i++) { + var s = e.inputs[i]; + "integer" === s.type && (s.max && s.max > t && n.logWarn( + "Bad integer input max value in metaInfo id=" + e.id + " title=" + e + .description)) + } + }, h._fixInputsMaxValue = function(e, t) { + if (!TradingView.isAbsent(t)) { + var i = h.INPUT_MAX_VALUE; + if (t.inputs) + for (var s = 0; s < t.inputs.length; s++) { + "integer" === (a = t.inputs[s]).type && (a.max && a.max > i && (a.max = i)) + } + if (e && e.inputs) { + var r = h.splitInputs(e.inputs), + n = r.arr; + for (var o in n) { + var a; + "integer" === (a = n[o]).type && (a.max && a.max > i && (a.max = i)) + } + e.inputs = TradingView.merge(r.obj, r.arr) + } + } + }, h.prototype.patchPropsStateAndMetaInfo = function(e, t, i) { + "Script$BOOKER" !== t.productId || t.alerts || delete e.alerts, h._fixInputsOrder(e, t), + h._fixInputsMaxValue(e, t); + var s = h.splitInputs(e.inputs); + e.inputs = s.obj; + var r = a.versionOf(t); + r < a.METAINFO_FORMAT_VERSION_SOS_V2 && t.isChildStudy && (e.isChildStudy = t + .isChildStudy); + if (t.isTVScript && t.version < 60 && ("Script$TV_EARNINGS@tv-scripting" !== t.id && + "Script$TV_DIVIDENDS@tv-scripting" !== t.id && + "Script$TV_SPLITS@tv-scripting" !== t.id || delete t.TVScriptSourceCode), + "Volume" !== t.id && "Volume@tv-basicstudies" !== t.id || 0 !== t.inputs.length || ( + t.inputs = [{ + id: "length", + type: "integer", + defval: 20, + min: 1, + max: 1e3 + }], t.plots.push({ + id: "vol_ma", + type: "line" + })), "Volume@tv-basicstudies" === t.id && t.version && t.version <= 46 && + void 0 === e.styles.vol.transparency && (e.styles.vol.transparency = e + .transparency || 87), "PivotPointsStandard@tv-basicstudies" === t.id && (0 === t + .inputs.length ? (e.inputs = { + kind: "Traditional", + showHistoricalPivots: !0 + }, t.inputs = [{ + defval: "Traditional", + id: "kind", + type: "text", + options: ["Traditional", "Fibonacci", "Woodie", "Classic", "DeMark", + "Camarilla" + ] + }, { + id: "showHistoricalPivots", + type: "bool", + defval: !0 + }]) : 1 === t.inputs.length && (e.inputs = { + kind: "Traditional" + }, t.inputs = [{ + defval: "Traditional", + id: "kind", + type: "text", + options: ["Traditional", "Fibonacci", "Woodie", "Classic", "DeMark", + "Camarilla" + ] + }, { + id: "showHistoricalPivots", + type: "bool", + defval: !0 + }]), void 0 === e._hardCodedDefaultsVersion)) { + e._hardCodedDefaultsVersion = 1; + var n = e.color; + delete e.color, e.levelsStyle = { + colors: { + P: n, + "S1/R1": n, + "S2/R2": n, + "S3/R3": n, + "S4/R4": n, + "S5/R5": n + } + } + } + "CMF" === t.shortId && 2 === t.inputs.length && (e.inputs = { + length: e.inputs["length fast"] + }, t.inputs = t.inputs.splice(0, 1), + t.inputs[0].id = "length"), t.defaults && void 0 === t.defaults.precision && r < + a.VERSION_NEW_STUDY_PRECISION_FORMAT && (-1 !== ["Volume@tv-basicstudies", + "VbPVisible@tv-volumebyprice", "VbPSessions@tv-volumebyprice" + ].indexOf(t.id) ? t.defaults.precision = 0 : t.defaults.precision = 4); + if (t.version < 60) + for (var o = ["TV_DIVIDENDS", "TV_SPLITS", "TV_EARNINGS"], u = "Script".length, d = + 0; d < o.length; d++) t.id.startsWith("Script$" + o[d] + "@tv-scripting") && + (t.fullId = "ESD" + t.fullId.substring(u), t.id = "ESD" + t.id.substring(u), t + .name = "ESD" + t.name.substring(u), t.shortId = "ESD" + t.shortId + .substring(u), t.productId = "ESD" + t.productId.substring(u)); + var p = { + "ESD$TV_EARNINGS@tv-scripting": { + fullId: "Earnings@tv-basicstudies-129!", + id: "Earnings@tv-basicstudies", + name: "Earnings@tv-basicstudies", + shortId: "Earnings", + productId: "tv-basicstudies" + }, + "ESD$TV_SPLITS@tv-scripting": { + fullId: "Splits@tv-basicstudies-129!", + id: "Splits@tv-basicstudies", + name: "Splits@tv-basicstudies", + shortId: "Splits", + productId: "tv-basicstudies" + }, + "ESD$TV_DIVIDENDS@tv-scripting": { + fullId: "Dividends@tv-basicstudies-129!", + id: "Dividends@tv-basicstudies", + name: "Dividends@tv-basicstudies", + shortId: "Dividends", + productId: "tv-basicstudies" + } + }; + if (t.id in p && Object.assign(t, p[t.id]), r < a.VERSION_PINE_PROTECT_TV_4164) { + var _ = { + "StrategyScript$STD;Consecutive%1Ups/Downs%1Strategy": { + pineId: "STD;Consecutive%1Ups%1Downs%1Strategy", + className: "StrategyScript" + }, + Script$EDGR_NET_INCOME_FROM_CONTINUING_OPERATIONS_APPLICABLE_TO_COMMON_V2: { + pineId: "Script$EDGR_NET_INCOME_FROM_CONTINUING_OPS_APPLICABLE_TO_COMMON_V2", + className: "Script" + } + }; + if (t.shortId in _) { + var m = _[t.shortId].className + "$" + _[t.shortId].pineId, + f = { + scriptIdPart: _[t.shortId].pineId, + fullId: t.fullId.replace(t.shortId, m), + id: t.id.replace(t.shortId, m), + name: t.name.replace(t.shortId, m), + shortId: m + }; + TradingView.merge(t, f), TradingView.merge(e, f) + } + var g = l(t.fullId), + b = g && g.match(/^(USER)(_\d+)(;)(.*)$/); + if (b) { + var v = b[0], + S = b[1] + b[3] + b[2] + b[4]; + f = { + scriptIdPart: S, + fullId: t.fullId.replace(v, S), + id: t.id.replace(v, S), + name: t.name.replace(v, S), + shortId: t.shortId.replace(v, S) + }; + TradingView.merge(t, f), TradingView.merge(e, f) + } + } + if ("MA" === t.id) { + var y = new a({ + id: "MAExp", + properties: [{ + id: "is_price_study", + type: "bool", + value: "true" + }], + inputs: [{ + id: "length", + type: "integer", + defval: 20, + min: 1, + max: 500 + }, { + id: "source", + type: "text", + defval: "close", + options: ["open", "high", "low", "close"] + }], + plots: [{ + id: "MovAvgExp", + type: "line" + }], + palettes: {} + }), + w = new a({ + id: "MASimple", + properties: [{ + id: "is_price_study", + type: "bool", + value: "true" + }], + inputs: [{ + id: "length", + type: "integer", + defval: 20, + min: 1, + max: 500 + }, { + id: "source", + type: "text", + defval: "close", + options: ["open", "high", "low", "close"] + }], + plots: [{ + id: "MovAvgSimple", + type: "line" + }], + palettes: {} + }), + P = new a({ + id: "MAVolumeWeighted", + properties: [{ + id: "is_price_study", + type: "bool", + value: "true" + }], + inputs: [{ + id: "length", + type: "integer", + defval: 20, + min: 1, + max: 500 + }, { + id: "source", + type: "text", + defval: "close", + options: ["open", "high", "low", "close"] + }], + plots: [{ + id: "MovAvgVolumeWeighted", + type: "line" + }], + palettes: {} + }), + C = new a({ + id: "MAWeighted", + properties: [{ + id: "is_price_study", + type: "bool", + value: "true" + }], + inputs: [{ + id: "length", + type: "integer", + defval: 20, + min: 1, + max: 500 + }, { + id: "source", + type: "text", + defval: "close", + options: ["open", "high", "low", "close"] + }], + plots: [{ + id: "MovAvgWeighted", + type: "line" + }], + palettes: {} + }); + switch (e.inputs.type) { + case "exp": + t = y; + break; + case "simple": + t = w; + break; + case "weighted": + t = C; + break; + case "volume weighted": + t = P + } + e.styles[t.plots[0].id] = e.styles.MovAvg, delete e.styles.MovAvg, delete e.inputs + .type + } + return i.oldShowStudyLastValueProperty && (e.oldShowLastValue = e.showLastValue), + delete e.showLastValue, delete e.showStudyArguments, c(t, e), { + propsState: e, + metaInfo: t + } + }, h.mergeInputs = function(e, t) { + h.mergeInputsArrPart(e, t), h.mergeInputsObjPart(e, t) + }, h.mergeInputsArrPart = function(e, t) { + var i = h.splitInputs(t); + for (var s in i.arr) { + var r = h.findInputKeyById(e, i.arr[s].id); + r ? TradingView.merge(e[r], i.arr[s]) : h.appendInputInfoToArr(e, i.arr[s]) + } + }, h.mergeInputsObjPart = function(e, t) { + var i = h.splitInputs(t); + TradingView.merge(e, i.obj) + }, h.appendInputInfoToArr = function(e, t) { + var i = -1; + for (var s in e) { + var r = parseInt(s, 10); + isNumber(r) && (r > i && (i = r)) + } + e[i + 1] = t + }, h.splitInputs = function(e) { + var t = {}, + i = {}; + for (var s in e) isNumber(parseInt(s, 10)) ? t[s] = e[s] : i[s] = e[s]; + return { + arr: t, + obj: i + } + }, h.findInputKeyById = function(e, t) { + var i = null; + for (var s in e) + if (isNumber(parseInt(s, 10)) && e[s].id === t) { + i = s; + break + } return i + }, h.getInputKeyById = function(e, t) { + var i = h.findInputKeyById(e, t); + if (!i) throw new Error("Cannot find input with id: " + t); + return i + }, e.exports = h + }, + K5cv: function(e, t, i) { + "use strict"; + let s; + + function r() { + return s + } + + function n(e) { + s = e + } + i.r(t), i.d(t, "getSearchRequestDelay", (function() { + return r + })), i.d(t, "setSearchRequestDelay", (function() { + return n + })) + }, + K8V9: function(e, t) { + e.exports = + '' + }, + K9GE: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return s + })), i.d(t, "c", (function() { + return r + })), i.d(t, "a", (function() { + return n + })); + const s = 350, + r = { + linear: e => e, + easeInQuad: e => e * e, + easeOutQuad: e => e * (2 - e), + easeInOutQuad: e => e < .5 ? 2 * e * e : (4 - 2 * e) * e - 1, + easeInCubic: e => e * e * e, + easeOutCubic: e => --e * e * e + 1, + easeInOutCubic: e => e < .5 ? 4 * e * e * e : (e - 1) * (2 * e - 2) * (2 * e - 2) + 1, + easeInQuart: e => e * e * e * e, + easeOutQuart: e => 1 - --e * e * e * e, + easeInOutQuart: e => e < .5 ? 8 * e * e * e * e : 1 - 8 * --e * e * e * e, + easeInQuint: e => e * e * e * e * e, + easeOutQuint: e => 1 + --e * e * e * e * e, + easeInOutQuint: e => e < .5 ? 16 * e * e * e * e * e : 1 + 16 * --e * e * e * e * e + }; + class n { + constructor(e, t, i, s) { + this._mX1 = e, this._mY1 = t, this._mX2 = i, this._mY2 = s + } + easingFunc(e) { + return this._mX1 === this._mY1 && this._mX2 === this._mY2 ? e : this._calcBezier( + this._getTForX(e)) + } + _a(e, t) { + return 1 - 3 * t + 3 * e + } + _b(e, t) { + return 3 * t - 6 * e + } + _c(e) { + return 3 * e + } + _calcBezier(e) { + return ((this._a(this._mY1, this._mY2) * e + this._b(this._mY1, this._mY2)) * e + + this._c(this._mY1)) * e + } + _getSlope(e) { + return 3 * this._a(this._mX1, this._mX2) * e * e + 2 * this._b(this._mX1, this + ._mX2) * e + this._c(this._mX1) + } + _getTForX(e) { + let t = e; + for (let i = 0; i < 4; ++i) { + const i = this._getSlope(t); + if (0 === i) return t; + t -= (this._calcBezier(t) - e) / i + } + return t + } + } + }, + "KG+6": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })), i.d(t, "b", (function() { + return r + })), i.d(t, "d", (function() { + return l + })), i.d(t, "c", (function() { + return c + })); + var s, r, n = i("Eyy1"), + o = i("tqok"), + a = i("hsV8"); + + function l(e, t) { + if (e.firstBarTime >= t.length || e.lastBarTime >= t.length) return null; + const i = t[e.firstBarTime], + s = t[e.lastBarTime]; + return i === o.INVALID_TIME_POINT_INDEX || s === o.INVALID_TIME_POINT_INDEX ? null : ( + Object(n.assert)(i <= s, "firstBarTime should not exceed lastBarTime"), Object(n + .assert)(e.priceLow <= e.priceHigh, "priceLow should not exceed priceHigh"), { + firstBarTime: i, + lastBarTime: s, + rate: e.rate, + priceHigh: e.priceHigh, + priceLow: e.priceLow + }) + } + + function c(e, t, i) { + const s = Object(a.ensureTimePointIndexIndex)(i.indexOf(e.firstBarTime)), + r = Object(a.ensureTimePointIndexIndex)(i.indexOf(e.lastBarTime)); + return { + id: t, + ...e, + firstBarTime: s, + lastBarTime: r + } + }! function(e) { + e.LeftToRight = "left_to_right", e.RightToLeft = "right_to_left" + }(s || (s = {})), + function(e) { + e.Relative = "relative", e.Absolute = "absolute" + }(r || (r = {})) + }, + KcY8: function(e, t, i) { + "use strict"; + var s = i("aO4+"), + r = i("f6yo"), + n = i("VaSN"), + o = i("Tmoa"), + a = i("Ialn"), + l = i("ikwP"), + c = i("VdBB"), + h = i("gAom"), + u = i("//lt"); + class d { + constructor(e, t) { + this.setData(e, t) + } + setData(e, t) { + this._data = { + ...e + }, this._commonData = { + ...t + } + } + draw(e, t, i, s, r, n) { + if (!this._data.visible) return; + e.save(), e.font = t.font; + const c = void 0 !== this._data.labelIcon, + u = this._data.ignoreOffset ? 0 : t.offsetSize, + d = t.borderSize, + p = t.paddingTop + this._commonData.additionalPaddingTop, + _ = t.paddingBottom + this._commonData.additionalPaddingBottom, + m = t.paddingInner, + f = t.paddingOuter, + g = t.fontSize; + let b = this._data.text, + v = this._data.textColor || this._commonData.textColor, + S = this._data.secondLine || "", + y = this._commonData.secondLineTextColor || v, + w = this._data.thirdLine || ""; + const P = this._commonData.thirdLineTextColor || v; + 0 === S.length && (S = w, y = P, w = ""), 0 === b.length && (b = S, v = y, S = w, + y = P, w = ""); + const C = i.yMidCorrection(e, b) * n, + x = Math.ceil(i.measureText(e, b)), + T = g + p + _, + I = Boolean(S), + M = Boolean(w), + O = I ? Math.ceil(i.measureText(e, S)) : 0, + L = M ? Math.ceil(i.measureText(e, w)) : 0, + A = d + m + f + x + u, + E = O > 0 ? d + m + f + O + u : 0, + k = L > 0 ? d + m + f + L + u : 0, + D = Math.max(A, E, k), + V = Math.max(1, Math.floor(n)); + let B = Math.round(T * n); + B % 2 != V % 2 && (B += 1); + const R = Math.round((g + t.lineSpacing) * n), + N = Math.round(2 * (g + t.lineSpacing) * n), + j = Math.max(1, Math.floor(d * n)), + F = this._data.separatorVisible ? j : 0, + W = this._data.borderVisible ? j : 0, + H = c ? B : Math.round(D * n), + U = Math.round(u * n), + z = Math.ceil(s * n), + G = Math.ceil(m * n); + let q = this._commonData.coordinate; + this._commonData.fixedCoordinate && (q = this._commonData.fixedCoordinate), q = Math + .round(q * n) - Math.floor(.5 * n); + const Y = Math.floor(q + V / 2 - B / 2), + K = Y + B, + J = "right" === r, + Z = J ? z - F : F, + X = z; + let $, Q = Z; + const ee = Object(o.resetTransparency)(this._data.backgroung || this._commonData + .background); + e.fillStyle = ee; + const te = 2 * n; + if (e.textAlign = J ? "right" : "left", e.textBaseline = "middle", J ? (Q = Z - H, + $ = Z - U - G - 1) : (Q = Z + H, $ = Z + U + G), b || c) { + const i = M ? B + N : I ? B + R : B; + if (((t, s, r) => { + J ? Object(h.drawRoundRectWithInnerBorder)(e, Q, Y, H, i, t, [te, 0, + 0, te + ], W, s, r) : Object(h.drawRoundRectWithInnerBorder)(e, Z, Y, H, + i, t, [0, te, te, 0], W, s, r) + })(ee, this._commonData.borderColor || ee, this._commonData.borderStyle), + this._data.separatorVisible && (e.fillStyle = t.paneBackgroundColor, e + .fillRect(J ? X - F : 0, Y, F, K - Y)), c) { + switch (this._data.labelIcon) { + case 0: + this._drawPlusIcon(e, Z, Q, Y, q, K, V); + break; + case 1: + this._drawClockIcon(e, Z, Q, q, V, n) + } + return + } + e.save(), e.translate($, (Y + K) / 2 + C), Object(l.drawScaled)(e, n, () => { + e.fillStyle = v, e.fillText(b, 0, 0) + }), e.restore() + } + I && (e.fillStyle = y, e.save(), e.translate($, (Y + K) / 2 + C + R), Object(l + .drawScaled)(e, n, () => { + e.fillText(Object(a.startWithLTR)(S), 0, 0) + }), e.restore()), M && (e.fillStyle = P, e.save(), e.translate($, (Y + K) / 2 + + C + N), Object(l.drawScaled)(e, n, () => { + e.fillText(Object(a.startWithLTR)(w), 0, 0) + }), e.restore()), e.restore() + } + height(e) { + const t = this._data, + i = (t.text ? 1 : 0) + (t.secondLine ? 1 : 0) + (t.thirdLine ? 1 : 0); + return t.visible && 0 !== i ? i * e.fontSize + (i - 1) * e.lineSpacing + e + .paddingTop + this._commonData.additionalPaddingTop + e.paddingBottom + this + ._commonData.additionalPaddingBottom : 0 + } + hitTest(e) { + const t = this._data.hitTestData; + if (void 0 === t || !this._data.visible) return null; + const i = Object(n.lastEventIsTouch)() ? 10 : 0, + o = Object(s.box)(new s.Point(t.xl - i, t.y - i), new s.Point(t.xl + t + .containerWidth + i, t.y + t.containerHeight + i)), + a = t.left && Object(r.pointInBox)(e, o), + l = Object(s.box)(new s.Point(t.xr - i, t.y - i), new s.Point(t.xr + t + .containerWidth + i, t.y + t.containerHeight + i)), + h = t.right && Object(r.pointInBox)(e, l); + if (a || h) { + const i = a ? "left" : "right"; + return new c.HitTestResult(c.HitTestResult.CUSTOM, { + cursorType: u.PaneCursorType.Default, + clickHandler: void 0 === t.clickHandler ? void 0 : t.clickHandler + .bind(this, e, i), + tapHandler: void 0 === t.clickHandler ? void 0 : t.clickHandler + .bind(this, e, i), + tooltip: t.tooltip + }) + } + return null + } + _drawPlusIcon(e, t, i, s, r, n, o) { + e.fillStyle = this._commonData.textColor, e.strokeStyle = this._commonData + .textColor, e.lineWidth = o; + const a = Math.abs(t - i); + let l = Math.round(.35 * a); + l % 2 != o % 2 && (l += 1); + let c = Math.round(.65 * a); + c % 2 != o % 2 && (c += 1); + const h = Math.floor((a - l) / 2), + u = Math.min(t, i), + d = u + Math.floor(a / 2 - o / 2); + e.fillRect(u + h, r, l, o), e.fillRect(d, s + h, o, l), e.beginPath(), e.arc(d + o / + 2, r + o / 2, c / 2, 0, 2 * Math.PI, !1), e.stroke() + } + _drawClockIcon(e, t, i, s, r, n) { + e.fillStyle = this._commonData.textColor, e.lineWidth = r; + const o = Math.abs(t - i); + let a = Math.round(.35 * o); + a % 2 != r % 2 && (a += 1); + let l = Math.round(.65 * o); + l % 2 != r % 2 && (l += 1); + const c = Math.min(t, i) + Math.floor(o / 2 - r / 2); + e.save(), e.translate(c + r / 2 - l / 2, s + r / 2 - l / 2), e.scale(n, n); + const h = new Path2D( + "M7.5 0.8a1 1 0 0 0 0 13.4 1 1 0 0 0 0-13.4zm0 1a1 1 0 0 1 0 11 1 1 0 0 1 0-11zm-.97-.25A3.5 3.5 0 0 0 3.5 0 3.5 3.5 0 0 0 0 3.5a3.5 3.5 0 0 0 1.75 3.03l.5-.86A2.5 2.5 0 0 1 1 3.5 2.5 2.5 0 0 1 3.5 1a2.5 2.5 0 0 1 2.17 1.25zm6.72 4.78A3.5 3.5 0 0 0 15 3.5 3.5 3.5 0 0 0 11.5 0a3.5 3.5 0 0 0-3.03 1.75l.86.5A2.5 2.5 0 0 1 11.5 1 2.5 2.5 0 0 1 14 3.5a2.5 2.5 0 0 1-1.25 2.17zM7 5h1v5H7zm3 2v1H5V7z" + ); + e.fill(h), e.restore() + } + } + i.d(t, "a", (function() { + return p + })); + class p { + constructor(e) { + this._commonRendererData = { + coordinate: 0, + textColor: "#FFF", + background: "#000", + additionalPaddingBottom: 0, + additionalPaddingTop: 0 + }, this._axisRendererData = { + text: "", + visible: !1, + separatorVisible: !1, + borderVisible: !1, + ignoreOffset: !1 + }, this._paneRendererData = { + text: "", + visible: !1, + separatorVisible: !0, + borderVisible: !1, + ignoreOffset: !0 + }, this._invalidated = !0, this._axisRenderer = new(e || d)(this + ._axisRendererData, this._commonRendererData), this._paneRenderer = new(e || + d)(this._paneRendererData, this._commonRendererData) + } + text() { + return this._updateRendererDataIfNeeded(), this._axisRendererData.text + } + secondLineText() { + return this._updateRendererDataIfNeeded(), this._axisRendererData.secondLine + } + thirdLineText() { + return this._updateRendererDataIfNeeded(), this._axisRendererData.thirdLine + } + background() { + return this._updateRendererDataIfNeeded(), this._commonRendererData.background + } + color() { + return this._updateRendererDataIfNeeded(), this.generateTextColor(this.background()) + } + generateTextColor(e) { + return Object(o.colorFromBackground)(e) + } + coordinate() { + return this._updateRendererDataIfNeeded(), this._commonRendererData.coordinate + } + floatCoordinate() { + return this._updateRendererDataIfNeeded(), this._commonRendererData + .floatCoordinate || this._commonRendererData.coordinate + } + update() { + this._invalidated = !0 + } + height(e) { + return this._updateRendererDataIfNeeded(), Math.max(this._axisRenderer.height(e), + this._paneRenderer.height(e)) + } + getFixedCoordinate() { + return this._commonRendererData.fixedCoordinate || 0 + } + setFixedCoordinate(e) { + this._commonRendererData.fixedCoordinate = e + } + isVisible() { + return this._updateRendererDataIfNeeded(), this._axisRendererData.visible || this + ._paneRendererData.visible + } + isAxisLabelVisible() { + return this._updateRendererDataIfNeeded(), this._axisRendererData.visible + } + isPaneLabelVisible() { + return this._updateRendererDataIfNeeded(), this._paneRendererData.visible + } + renderer() { + return this._updateRendererDataIfNeeded(), this._axisRenderer + } + paneRenderer() { + return this._updateRendererDataIfNeeded(), this._paneRenderer + } + setPaneRendererLabelIcon(e) { + this._paneRendererData.labelIcon = e + } + setPaneLabelVisible(e) { + this._paneRendererData.visible = e, this._invalidated = !0 + } + ignoreAlignment() { + return !1 + } + _updateRendererDataIfNeeded() { + this._invalidated && (this._updateRendererData(this._axisRendererData, this + ._paneRendererData, this._commonRendererData), this._invalidated = !1), this + ._axisRenderer.setData(this._axisRendererData, this._commonRendererData), this + ._paneRenderer.setData(this._paneRendererData, this._commonRendererData) + } + } + }, + Khfk: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LollipopRenderer", (function() { + return h + })); + var s = i("f6yo"), + r = i("aO4+"), + n = i("jFln"), + o = i("8Uy/"), + a = i("gAom"), + l = i("ikwP"), + c = i("Zp/P"); + class h { + constructor(e, t, i) { + this._data = e, this._hittest = t, this._textWidthCache = i + } + draw(e, t) { + const i = t.pixelRatio, + s = this._data.centerPoint, + n = Math.round(s.x * i), + o = Math.round(s.y * i), + a = Math.max(1, Math.floor(i)) % 2 / 2, + l = new r.Point(n + a, o - a); + this._drawLollipop(e, l, t), this._drawLabel(e, l, t.pixelRatio) + } + hitTest(e, t) { + const i = Object(c.interactionTolerance)().esd, + n = this._data.centerPoint.y - this._data.style.height / 2 - i, + o = this._data.centerPoint.x - this._data.style.width / 2 - i, + a = Object(r.box)(new r.Point(o, n), new r.Point(o + this._data.style.width + + 2 * i, n + this._data.style.height + 2 * i)); + return Object(s.pointInBox)(e, a) ? this._hittest : null + } + _drawLollipop(e, t, i) { + const s = this._data.style, + r = i.pixelRatio, + l = Math.max(1, Math.floor(r)); + let c = Math.round(s.width * r); + c % 2 != l % 2 && (c += 1); + const h = c / 2; + s.fillCircle && s.backgroundColor && (e.fillStyle = s.backgroundColor, Object(a + .createCircle)(e, t.x, t.y, h), e.fill()); + const u = Math.round(s.lineWidth * r); + e.strokeStyle = s.strokeStyle, e.lineWidth = u, Object(n.setLineStyle)(e, o + .LINESTYLE_SOLID); + const d = h - Math.round(1 * r + u / 2); + Object(a.createCircle)(e, t.x, t.y, d), s.fillCircle && s.fillStyle && (e + .fillStyle = s.fillStyle, e.fill()), e.stroke() + } + _drawLabel(e, t, i) { + const s = this._data.style.text, + r = s.label; + e.textAlign = "center", e.textBaseline = "middle", e.fillStyle = s.strokeStyle, e + .font = s.font; + const n = this._textWidthCache.yMidCorrection(e, r); + e.translate(t.x, t.y + ((s.deltaY || 0) + n) * i), Object(l.drawScaled)(e, i, + () => { + e.fillText(r, 0, 0) + }) + } + } + }, + KnF9: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("qFKp"); + class r { + constructor(e) { + this._shift = !1, this._control = !1, this._alt = !1, void 0 !== e && (this._shift = + Boolean(e.shiftKey), this._control = Boolean(Object(s.isMac)() ? e.metaKey : + e.ctrlKey), this._alt = Boolean(e.altKey)) + } + shift() { + return this._shift + } + control() { + return this._control + } + alt() { + return this._alt + } + shiftOnly() { + return this._shift && !this._control && !this._alt + } + controlOnly() { + return this._control && !this._shift && !this._alt + } + altOnly() { + return this._alt && !this._shift && !this._control + } + controlShift() { + return this._shift && this._control && !this._alt + } + static create(e = !1, t = !1, i = !1) { + return new r({ + shiftKey: e, + ctrlKey: t, + metaKey: t, + altKey: i + }) + } + } + }, + KtbP: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PanePriceAxisView", (function() { + return n + })); + var s = i("u+0B"); + class r { + constructor(e) { + this._priceAxisViewRenderer = null, this._rendererOptions = null, this._align = + "right", this._width = 0, this._textWidthCache = e + } + setParams(e, t, i, s) { + this._priceAxisViewRenderer = e, this._rendererOptions = t, this._width = i, this + ._align = s + } + draw(e, t) { + null !== this._rendererOptions && null !== this._priceAxisViewRenderer && this + ._priceAxisViewRenderer.draw(e, this._rendererOptions, this._textWidthCache, + this._width, this._align, t.pixelRatio) + } + hitTest(e) { + var t, i; + return void 0 === (null === (t = this._priceAxisViewRenderer) || void 0 === t ? + void 0 : t.hitTest) ? null : null === (i = this._priceAxisViewRenderer) || + void 0 === i ? void 0 : i.hitTest(e, this._width, this._align) + } + } + class n { + constructor(e, t, i) { + this._renderer = null, this._invalidated = !0, this._priceAxisView = e, this + ._textWidthCache = new s.TextWidthCache(50), this._dataSource = t, this + ._chartModel = i, this._fontSize = -1, this._panePriceAxisViewRenderer = new r( + this._textWidthCache) + } + update() { + this._invalidated = !0 + } + renderer(e, t) { + return this._invalidated && this._updateImpl(e, t), this._renderer + } + _updateImpl(e, t) { + this._priceAxisView.update(), this._renderer = null; + const i = this._chartModel.crossHairSource(), + s = this._dataSource === i ? i.pane : this._chartModel.paneForSource(this + ._dataSource); + if (null === s) return; + const r = this._priceScale(); + if (null === r) return; + let n = s.priceScalePosition(r); + if ("overlay" === n && (n = s.priceScalePosition(s.defaultPriceScale())), + "overlay" === n) return; + const o = this._chartModel.priceAxisRendererOptions(); + o.fontSize !== this._fontSize && (this._fontSize = o.fontSize, this._textWidthCache + .reset()), + this._panePriceAxisViewRenderer.setParams(this._priceAxisView.paneRenderer(), o, + t, n), this._renderer = this._panePriceAxisViewRenderer, this + ._invalidated = !1 + } + _priceScale() { + return this._dataSource.priceScale() + } + } + }, + "L/Ed": function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "ToolboxType", (function() { + return s + })), + function(e) { + e[e.Delete = 0] = "Delete" + }(s || (s = {})) + }, + L6rT: function(e, t, i) { + "use strict"; + + function s(e) { + return e.reduce((function(e, t, i) { + return ~e.indexOf(t) || e.push(t), e + }), []) + } + i.r(t), i.d(t, "uniq", (function() { + return s + })) + }, + LAp3: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return a + })); + var s = i("ogJP"), + r = i("5rJj"), + n = i.n(r); + class o extends n.a { + constructor(e, t) { + super(e, t, !1, { + names: ["width", "color", "visible"] + }) + } + _iterateLevels(e, t) { + for (const i in e.levels) + if (e.levels[i] && Object(s.isSameType)(e.levels[i], t.typecheck())) { + let s = t.tpl(); + for (const r in this._map.names) this._map.names.hasOwnProperty(r) && ( + s = t.fill(r, this._map.names[r], e.levels[i], s)); + e.levels[i] = s + } return e + } + } + + function a(e, t) { + return new o(e, t) + } + }, + LdoW: function(e, t) { + e.exports = + '' + }, + LxhU: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ResolutionKind", (function() { + return n + })), i.d(t, "SpecialResolutionKind", (function() { + return o + })), i.d(t, "Interval", (function() { + return h + })), i.d(t, "isHour", (function() { + return d + })); + const s = /^(\d*)([TSHDWMR])$/, + r = /^(\d+)$/; + var n, o; + ! function(e) { + e.Ticks = "ticks", e.Seconds = "seconds", e.Minutes = "minutes", e.Days = "days", e.Weeks = + "weeks", e.Months = "months", e.Range = "range", e.Invalid = "invalid" + }(n || (n = {})), + function(e) { + e.Hours = "hours" + }(o || (o = {})); + const a = {}; + a[n.Ticks] = 1e3, a[n.Seconds] = 1e3, a[n.Minutes] = 60 * a[n.Seconds], a[n.Days] = 1440 * a[n + .Minutes], a[n.Weeks] = 7 * a[n.Days]; + const l = { + T: n.Ticks, + S: n.Seconds, + D: n.Days, + W: n.Weeks, + M: n.Months, + R: n.Range + }, + c = new Set([n.Ticks, n.Seconds, n.Minutes]); + class h { + constructor(e, t) { + this._kind = n.Invalid, this._multiplier = 0, e !== n.Invalid && t > 0 && (this + ._kind = e, this._multiplier = t) + } + kind() { + return this._kind + } + multiplier() { + return this._multiplier + } + isValid() { + return this.kind() !== n.Invalid && this.multiplier() > 0 + } + isDWM() { + return this.isValid() && !this.isRange() && !this.isIntraday() && !this.isTicks() + } + isIntraday() { + const e = c.has(this.kind()); + return this.isValid() && e + } + isSeconds() { + return this.kind() === n.Seconds + } + isMinutes() { + return this.kind() === n.Minutes + } + isMinuteHours() { + return this.kind() === n.Minutes && d(this.multiplier()) + } + isDays() { + return this.kind() === n.Days + } + isWeeks() { + return this.kind() === n.Weeks + } + isMonths() { + return this.kind() === n.Months + } + isRange() { + return this.kind() === n.Range + } + isTicks() { + return this.kind() === n.Ticks + } + isTimeBased() { + return !this.isRange() + } + letter() { + return this.isValid() && this.kind() !== n.Minutes ? this.kind()[0].toUpperCase() : + "" + } + value() { + return this.isValid() ? this.kind() === n.Minutes ? this.multiplier() + "" : this + .multiplier() + this.letter() : "" + } + isEqualTo(e) { + if (!(e instanceof h)) throw new Error("Argument is not an Interval"); + return !(!this.isValid() || !e.isValid()) && (this.kind() === e.kind() && this + .multiplier() === e.multiplier()) + } + inMilliseconds(e = Date.now()) { + if (!this.isValid() || this.isRange()) return NaN; + if (this.isMonths()) { + const t = new Date(e); + t.setUTCMonth(t.getUTCMonth() + (this.multiplier() || 1)); + return +t - e + } + const t = this.multiplier(); + return a[this.kind()] * t + } + static isEqual(e, t) { + return e === t || h.parse(e).isEqualTo(h.parse(t)) + } + static parse(e) { + e = (e + "").toUpperCase().split(",")[0]; + let t = s.exec(e); + return null !== t ? "H" === t[2] ? new h(n.Minutes, 60 * u(t[1])) : new h(l[t[2]], + u(t[1])) : (t = r.exec(e), null !== t ? new h(n.Minutes, u(t[1])) : new h(n + .Invalid, 0)) + } + static kind(e) { + return h.parse(e).kind() + } + static isValid(e) { + return h.parse(e).isValid() + } + static isDWM(e) { + return h.parse(e).isDWM() + } + static isIntraday(e) { + return h.parse(e).isIntraday() + } + static isSeconds(e) { + return h.parse(e).isSeconds() + } + static isMinutes(e) { + return h.parse(e).isMinutes() + } + static isMinuteHours(e) { + return h.parse(e).isMinuteHours() + } + static isDays(e) { + return h.parse(e).isDays() + } + static isWeeks(e) { + return h.parse(e).isWeeks() + } + static isMonths(e) { + return h.parse(e).isMonths() + } + static isRange(e) { + return h.parse(e).isRange() + } + static isTicks(e) { + return h.parse(e).isTicks() + } + static isTimeBased(e) { + return h.parse(e).isTimeBased() + } + static normalize(e) { + const t = h.parse(e); + return t.isValid() ? t.value() : null + } + } + + function u(e) { + return 0 === e.length ? 1 : parseInt(e, 10) + } + + function d(e) { + return e >= 60 && !(e % 60) + } + }, + "M7/j": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "itemsRangeIsValid", (function() { + return h + })), i.d(t, "splitItems", (function() { + return u + })), i.d(t, "PaneRendererBaseline", (function() { + return d + })); + var s = i("aO4+"), + r = i("hBTJ"), + n = i("GEp6"), + o = i("Zp/P"), + a = i("Y7w9"), + l = i("cPgM"), + c = i("VdBB"); + + function h(e) { + if (0 === e.length) return !1; + const t = e.findIndex(e => Object(o.coordinateIsValid)(e.y)); + if (-1 === t) return !1; + let i = e.length - 1; + for (; i > t && !Object(o.coordinateIsValid)(e[i].y);) i--; + return !(t > i) + } + + function u(e, t) { + const i = [], + n = []; + let a = null; + for (let l = 0; l < e.length; l++) { + let c = e[l]; + const h = e[l + 1] || {}; + if (Object(o.coordinateIsValid)(c.y)) c.y <= t && i.push(c), c.y >= t && n.push(c), a = + c; + else { + if (null === a) continue; + c = a + } + if (Object(o.coordinateIsValid)(h.y) && (c.y > t && h.y < t || c.y < t && h.y > t)) + if (Math.abs(c.x - h.x) < 1) { + const e = new s.Point(c.x, t); + i.push(e), n.push(e) + } else { + const e = Object(r.intersectLineSegments)(c, h, new s.Point(c.x, t), new s + .Point(h.x, t)); + if (null !== e) { + const t = c.add(h.subtract(c).scaled(e)); + i.push(t), n.push(t) + } + } + } + return { + topItems: i, + bottomItems: n + } + } + class d extends l.ScaledPaneRenderer { + constructor() { + super(...arguments), this._data = null + } + setData(e) { + this._data = e + } + hitTest(e) { + if (null === this._data) return null; + const { + items: t, + topLineWidth: i, + bottomLineWidth: r + } = this._data, l = Object(o.interactionTolerance)().series + (i + r) / 4, h = + Object(a.lowerbound)(t, e, (e, t) => e.x <= t.x), u = Math.max(1, h - 1), + d = Math.min(t.length - 1, h + 1); + for (let i = u; i <= d; ++i) { + const r = t[i - 1], + o = t[i], + { + distance: a + } = Object(n.distanceToSegment)(new s.Point(r.x, r.y), new s.Point(o.x, + o.y), new s.Point(e.x, e.y)); + if (a <= l) return new c.HitTestResult(c.HitTestResult.REGULAR) + } + return null + } + _drawImpl(e) { + if (null === this._data) return; + const { + items: t, + baseLevelCoordinate: i, + bottom: s, + bottomFillColor1: r, + bottomFillColor2: n, + topFillColor1: o, + topFillColor2: a, + topLineColor: l, + bottomLineColor: c, + topLineWidth: d, + bottomLineWidth: p + } = this._data; + if (!h(t)) return; + const { + topItems: _, + bottomItems: m + } = u(t, i); + e.lineCap = "round", e.lineJoin = "round", 0 !== _.length && (e.beginPath(), e + .moveTo(_[0].x, i), this._makeLine(e, _, !0, 0), e.closePath(), e + .fillStyle = this._makeLinearGradient(e, o, a, i - s, i), e.fill(), e + .beginPath(), this._makeLine(e, _, !1, 0), e.lineWidth = d, e + .strokeStyle = l, e.stroke()), 0 !== m.length && (e.beginPath(), e + .moveTo(m[0].x, i), this._makeLine(e, m, !0, 1), e.closePath(), e + .fillStyle = this._makeLinearGradient(e, r, n, i, i + s), e.fill(), e + .beginPath(), this._makeLine(e, m, !1, 1), e.lineWidth = p, e + .strokeStyle = c, e.stroke()) + } + _makeLine(e, t, i, s) { + if (null === this._data) return; + const r = t.findIndex(e => Object(o.coordinateIsValid)(e.y)); + if (-1 === r) return; + const { + barSpacing: n, + baseLevelCoordinate: a + } = this._data, l = .25 * n; + let c; + const h = t.length; + for (let n = r; n < h; n++) { + const h = t[n], + u = t[n + 1] || {}; + if (Object(o.coordinateIsValid)(h.y)) { + if (0 === s) { + if (c && c.y >= a && h.y >= a) { + e.moveTo(h.x, h.y); + continue + } + } else if (c && c.y <= a && h.y <= a) { + e.moveTo(h.x, h.y); + continue + } + if (c && Object(o.coordinateIsValid)(c.y)) e.lineTo(h.x, h.y), i && ! + Object(o.coordinateIsValid)(u.y) && e.lineTo(h.x, a); + else if (u && Object(o.coordinateIsValid)(u.y)) i ? (n !== r && e + .lineTo(h.x, a), e.lineTo(h.x, h.y)) : e.moveTo(h.x, h.y); + else if (i) { + if (0 === n) continue; + n !== r && e.lineTo(h.x - l, a), e.lineTo(h.x - l, h.y), e.lineTo(h + .x + l, h.y), e.lineTo(h.x + l, a) + } else e.moveTo(h.x - l, h.y), e.lineTo(h.x + l, h.y); + c = h + } + } + } + _makeLinearGradient(e, t, i, s, r) { + const n = e.createLinearGradient(0, s, 0, r); + return n.addColorStop(0, t), n.addColorStop(1, i), n + } + } + }, + MA5A: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolCrossLine", (function() { + return a + })); + var s = i("Ocx9"), + r = i("p1SQ"), + n = i("GmZZ"), + o = i("Ss5c"); + class a extends o.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), this._priceAxisView = new r + .LineToolHorzLinePriceAxisView(this), this._timeAxisView = new n.a(this), i + .e("lt-pane-views").then(i.bind(null, "amUF")).then(({ + CrossLinePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Cross Line" + } + priceAxisViews(e, t) { + return this.isSourceHidden() ? null : t === this.priceScale() && this + .properties().showPrice.value() && this._model.paneForSource(this) === e ? [ + this._priceAxisView + ] : null + } + timeAxisViews() { + return this.isSourceHidden() ? null : this.properties().showTime.value() ? [this + ._timeAxisView + ] : null + } + updateAllViews() { + super.updateAllViews(), this._priceAxisView.update(), this._timeAxisView + .update() + } + canHasAlert() { + return !1 + } + lineColor() { + return this.properties().linecolor.value() + } + lineWidth() { + return this.properties().linewidth.value() + } + lineStyle() { + return this.properties().linestyle.value() + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolcrossline", e); + return a._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "xrdl")).then( + e => e.CrossLineDefinitionsViewModel) + } + static _configureProperties(e) { + o.LineDataSource._configureProperties(e) + } + } + }, + MROS: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ModelSelection", (function() { + return o + })); + var s = i("Y7w9"), + r = i("GxN8"), + n = i("CW80"); + class o { + constructor() { + this._items = [], this._set = new Set + } + isEmpty() { + return 0 === this._items.length + } + add(e) { + if (this._items.length > 0 && !Object(n.isLineTool)(this._items[0]) && this.clear(), + Object(n.isLineTool)(e)) { + const t = Object(s.lowerbound)(this._items, e, (e, t) => e.zorder() < t + .zorder()); + this._items.splice(t, 0, e) + } else this.clear(), this._items = [e]; + this._set.add(e) + } + canBeAddedToSelection(e) { + return 0 === this._items.length || Object(n.isLineTool)(this._items[0]) && Object(n + .isLineTool)(e) + } + isSelected(e) { + return this._set.has(e) + } + allSources() { + return this._items.slice(0) + } + dataSources() { + return this._items.filter(r.a) + } + lineDataSources() { + return this._items.filter(n.isLineTool) + } + customSources() { + return this._items.filter(e => !Object(r.a)(e)) + } + checkLineToolSelection() { + this._items.forEach(e => Object(n.isLineTool)(e) && e.calcIsActualSymbol()), this + ._items = this._items.filter(e => !Object(n.isLineTool)(e) || e + .isActualSymbol()) + } + remove(e) { + this._items = this._items.filter(t => t !== e), this._set.delete(e) + } + clear() { + this._items = [], this._set.clear() + } + notFixedSources() { + return this._items.filter(e => !Object(n.isLineTool)(e) || !e.isFixed()) + } + } + }, + MSvv: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyLineDataSource", (function() { + return g + })); + var s = i("Eyy1"), + r = i("ogJP"), + n = i("k9/m"), + o = i("Ss5c"), + a = i("Ocx9"), + l = i("0YCj"), + c = i.n(l), + h = i("jenN"), + u = i("ZAxB"), + d = i("gvrv"), + p = i("w4Ji"), + _ = i("GVHu"), + m = i("jCNj"), + f = i("OLhd"); + class g extends o.LineDataSource { + constructor(e, t, s, r) { + super(e, r), this._indexes = null, this._inputs = null, this._pointsetPoints = + null, this._loadedPlots = null, this._loadedGraphics = null, this + ._beingCreatedPaneView = null, this._anchorsPaneView = null, this + ._definitionsViewModel = null, this._alignerCache = null, Promise.all([i.e( + "lt-pane-views").then(i.bind(null, "pGCE")), i.e( + "lt-pane-views").then(i.bind(null, "AOzI"))]).then(t => { + const { + LineToolBeingCreatedPaneView: i + } = t[0], { + StudyLineDataSourceAnchorsPaneView: s + } = t[1]; + this._beingCreatedPaneView = new i(this, e), this._anchorsPaneView = + new s(this, this.model()), this._model.lightUpdate() + }), this._metaInfo = t, this._dataSource = new d.a(e.chartApi(), e + .mainSeries().seriesSource(), s, t), this._dataSource.dataCleared() + .subscribe(this, this._onDataCleared), this._dataSource.dataUpdated() + .subscribe(this, this._onDataUpdated) + } + destroy() { + this._dataSource.dataUpdated().unsubscribe(this, this._onDataUpdated), this + ._dataSource.dataCleared().unsubscribe(this, this._onDataCleared), this + ._dataSource.destroy(), null !== this._definitionsViewModel && (this + ._definitionsViewModel.destroy(), this._definitionsViewModel = null), + this._unsubscribeApplyInputsOnSeriesCompleted(), this._isDestroyed = !0, + super.destroy() + } + stop() { + super.stop(), this._isDestroyed || (this._dataSource.stop(), this.clearData()) + } + start() { + super.start(), this._isDestroyed || null === this._inputs || this._dataSource + .start() + } + metaInfo() { + return this._metaInfo + } + graphicsInfo() { + return this._metaInfo.graphics + } + series() { + return this._model.mainSeries() + } + translatedType() { + return this._metaInfo.description + } + name() { + return this._metaInfo.description + } + studyId() { + return this._metaInfo.id + } + setPoint(e, t, i) { + super.setPoint(e, this._preparePoint(t, i)) + } + move(e) {} + clearData() { + this._clearAllDataExceptPointsetPoints(), this._pointsetPoints = null, this + .updateAllViews() + } + data() { + return this.plots() + } + plots() { + return this._loadedPlots || this._dataSource.plots() + } + graphics() { + return this._loadedGraphics || this._dataSource.graphics() + } + firstValue() { + return this._model.mainSeries().firstValue() + } + state(e) { + const t = super.state(e); + let i; + this.metaInfo() instanceof c.a ? i = this.metaInfo().state() : (i = Object(r + .clone)(this.metaInfo()), i.id = c.a.parseIdString(i.id + (i + .version ? "-" + i.version : "")).fullId); + const s = { + ...t, + metaInfo: i + }; + return e && (s.data = this.plots().state(), s.nonseriesindexes = this._indexes, + s.graphics = Object(h.saveStudyGraphics)(this.graphics())), s + } + restoreData(e) { + void 0 !== e.data && (this._loadedPlots = new n.PlotList(Object(p + .studyPlotFunctionMap)(this._metaInfo), p + .studyEmptyPlotValuePredicate), this._loadedPlots.restoreState(e + .data)), this._indexes = e.nonseriesindexes ? e.nonseriesindexes : null, + this._loadedGraphics = e.graphics ? Object(h.loadStudyGraphics)(e + .graphics) : null + } + getPropertyDefinitionsViewModel() { + return null === this._definitionsViewModel ? this + ._getPropertyDefinitionsViewModelClass().then(e => null === e || this + ._isDestroyed ? null : (null === this._definitionsViewModel && (this + ._definitionsViewModel = new e(this._model.undoModel(), this)), + this._definitionsViewModel)) : Promise.resolve(this + ._definitionsViewModel) + } + paneViews(e) { + let t = []; + if (this.isSourceHidden()) return t; + if (this._isReady() && this._changeStatesStack.isEmpty()) { + const i = super.paneViews(e); + null !== i && (t = t.concat(i)) + } else null !== this._beingCreatedPaneView && t.push(this + ._beingCreatedPaneView); + return null !== this._anchorsPaneView && t.push(this._anchorsPaneView), t + } + propertiesChanged(e) { + super.propertiesChanged(e), this._onStudyInputsMayChange() + } + dataAndViewsReady() { + return super.dataAndViewsReady() && this._isReady() + } + endChanging(e, t) { + const i = super.endChanging(e, t); + return i.indexesChanged ? this.clearData() : this._updateAnchorsPrice(), i + } + moveData(e) { + this._dataSource.moveData(e) + } + static createPropertiesFromStudyMetaInfoAndState(e, t, i, s) { + const r = Object(_.prepareStudyPropertiesForLoadChart)(e, t, i, null, s); + return g._configureProperties(r), r + } + _isReady() { + return !0 + } + _updateAllPaneViews() { + var e, t; + super._updateAllPaneViews(), null === (e = this._beingCreatedPaneView) || + void 0 === e || e.update(), null === (t = this._anchorsPaneView) || + void 0 === t || t.update() + } + _getPointTime(e, t) { + const i = e.index, + s = this._model.timeScale().indexToTimePoint(i); + if (null !== s) return s; + if (t || void 0 === e.time) return null; + const r = this._model.mainSeries().symbolInfo(); + if (null === r) return null; + let n = this._model.properties().timezone.value(); + "exchange" === n && (n = r.timezone); + const o = Object(m.cal_to_utc)(Object(m.get_timezone)(n), e.time); + return this._getStartBarAligner()(o) / 1e3 + } + _updateAnchorsPrice() {} + _onPointsetUpdated(e) { + super._onPointsetUpdated(e), this._pointsetPoints = this._points.map(e => ({ + price: e.price, + index: e.index, + time: e.time + })), this._onStudyInputsMayChange() + } + _onDataCleared() { + this.updateAllViews(), + this._model.updateSource(this) + } + _onDataUpdated(e, t, i) { + this._updateAnchorsPrice(), this.updateAllViews(), this._model.updateSource( + this) + } + _onStudyInputsMayChange() { + let e = null; + null !== this._pointsetPoints && this._pointsetPoints.length === this + .pointsCount() && (e = this._studyInputs(this._pointsetPoints), null === + e && (this._clearAllDataExceptPointsetPoints(), this.updateAllViews())), + this._areInputsEqual(this._inputs, e) || this._applyStudyInputs(e) + } + _onMainSeriesSymbolResolved() { + super._onMainSeriesSymbolResolved(), this._alignerCache = null + } + _preparePoint(e, t) { + return super._preparePoint(this._alignPointToRangeOfActualData(e), t) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.resolve(null) + } + _subscribeApplyInputsOnSeriesCompleted() { + this._unsubscribeApplyInputsOnSeriesCompleted(), this._model.mainSeries() + .dataEvents().completed().subscribe(this, () => this + ._onStudyInputsMayChange(), !0) + } + _unsubscribeApplyInputsOnSeriesCompleted() { + this._model.mainSeries().dataEvents().completed().unsubscribeAll(this) + } + static _createPropertiesFromStudyIdAndState(e, t) { + const i = c.a.getStudyPropertyRootNameById(e), + s = new a.DefaultProperty(i, t); + return g._configureProperties(s), s + } + static _createPropertiesFromStudyMetaInfo(e, t) { + const i = Object(_.prepareStudyProperties)(e, null, null, t); + return g._configureProperties(i), i + } + static _configureProperties(e) { + o.LineDataSource._configureProperties(e) + } + _areInputsEqual(e, t) { + return null === t ? null === e : null !== e && Object(u.a)(this._metaInfo + .inputs, e, t) + } + _applyStudyInputs(e) { + const t = this._inputs; + this._inputs = e, null !== e && (this + ._unsubscribeApplyInputsOnSeriesCompleted(), this._dataSource.setInputs( + e), + null === t && this.isStarted() && !this._dataSource.isStarted() && this + ._dataSource.start()) + } + _clearAllDataExceptPointsetPoints() { + this._inputs = null, this._dataSource.clearData(), this._loadedPlots = null, + this._indexes = null, this._loadedGraphics = null + } + _getStartBarAligner() { + const e = this._model.mainSeries().interval(); + return null !== this._alignerCache && this._alignerCache.resolution === this + ._model.mainSeries().interval() || (this._alignerCache = { + resolution: e, + aligner: Object(f.createTimeToBarTimeAligner)(e, Object(s + .ensureNotNull)(this._model.mainSeries().symbolInfo())) + }), this._alignerCache.aligner + } + } + }, + MWAT: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PriceScaleSelectionStrategyEvenly", (function() { + return o + })), i.d(t, "PriceScaleSelectionStrategyAllRight", (function() { + return a + })), i.d(t, "PriceScaleSelectionStrategyAllLeft", (function() { + return l + })), i.d(t, "createPriceScaleSelectionStrategy", (function() { + return h + })), i.d(t, "allPriceScaleSelectionStrategyInfo", (function() { + return u + })); + var s = i("Eyy1"), + r = i("3ClC"); + class n { + constructor(e) { + this._priceScalesLimit = 8, this._metaInfo = e + } + metaInfo() { + return this._metaInfo + } + findSuitableScale(e, t, i, s) { + if (void 0 !== s) return this._tryToGetDesiredPriceScale(e, t, s, i); + if (Object(r.isStudy)(t)) { + const s = t.metaInfo(); + if ("Volume" === s.shortId && e.containsMainSeries()) return e + .createPriceScaleAtPosition("overlay"); + const n = t.desiredPriceScalePosition(); + if (null !== n) return this._tryToGetDesiredPriceScale(e, t, n, i); + if (void 0 !== i && (Object(r.isStudy)(i) || e.isMainPane()) && s + .is_price_study) return this._getPriceScaleTheSameAsForSource(i, e) + } + let n = !1; + if (Object(r.isStudy)(t)) { + const i = t.metaInfo().groupingKey; + if (void 0 !== i) { + const t = e.model().findNonOverlayStudyWithGroupingKey(i, e); + if (null !== t) return this._getPriceScaleTheSameAsForSource(t.study, t + .pane) + } + n = Boolean(t.metaInfo().is_price_study) + } else t === e.model().mainSeries() && (n = !0); + if (n) { + const t = this._findFirstScaleForPriceStudy(e); + if (null !== t) return t + } + return this.createNewPriceScaleIfPossible(e) + } + canCreateNewPriceScale(e) { + return e.leftPriceScales().length + e.rightPriceScales().length < this + ._priceScalesLimit + } + _getPriceScaleTheSameAsForSource(e, t) { + return t.isOverlay(e) ? t.createPriceScaleAtPosition("overlay") : Object(s + .ensureNotNull)(e.priceScale()) + } + _priceScaleIsPrice(e, t) { + const i = e.mainSource(); + return !!i && (i === t.mainSeries() || !!Object(r.isStudy)(i) && Boolean(i + .metaInfo().is_price_study)) + } + _findFirstScaleForPriceStudy(e) { + const t = e.model(); + for (let i = 0; i < this._priceScalesLimit; i++) { + if (e.rightPriceScales().length > i && this._priceScaleIsPrice(e + .rightPriceScales()[i], t)) return e.rightPriceScales()[i]; + if (e.leftPriceScales().length > i && this._priceScaleIsPrice(e + .leftPriceScales()[i], t)) return e.leftPriceScales()[i] + } + return null + } + _targetPriceScaleIndex(e, t) { + if (e.mainSource() === t.mainSeries()) return 0 + } + _tryToGetDesiredPriceScale(e, t, i, r) { + switch (i) { + case "left": + return this.canCreateNewPriceScale(e) ? e.createPriceScaleAtPosition( + "left") : e.createPriceScaleAtPosition("overlay"); + case "right": + return this.canCreateNewPriceScale(e) ? e.createPriceScaleAtPosition( + "right") : e.createPriceScaleAtPosition("overlay"); + case "as-series": + return void 0 !== r ? Object(s.ensureNotNull)(r.priceScale()) : e + .isMainPane() ? Object(s.ensureNotNull)(Object(s.ensureNotNull)(e + .mainDataSource()).priceScale()) : this + .createNewPriceScaleIfPossible(e); + case "overlay": + return e.createPriceScaleAtPosition("overlay") + } + } + } + class o extends n { + constructor(e) { + super(e) + } + apply(e) { + if (e.containsMainSeries()) { + const t = Object(s.ensureNotNull)(Object(s.ensureNotNull)(e.mainDataSource()) + .priceScale()); + e.movePriceScale(t, "right", 0) + } + const t = e.model(); + for (; e.leftPriceScales().length > e.rightPriceScales().length;) { + const i = e.leftPriceScales()[e.leftPriceScales().length - 1]; + e.movePriceScale(i, "right", this._targetPriceScaleIndex(i, t)) + } + for (; e.rightPriceScales().length - e.leftPriceScales().length > 1;) { + const i = e.rightPriceScales()[e.rightPriceScales().length - 1]; + e.movePriceScale(i, "left", this._targetPriceScaleIndex(i, t)) + } + } + createNewPriceScaleIfPossible(e) { + if (!this.canCreateNewPriceScale(e)) return e.createPriceScaleAtPosition("overlay"); + const t = e.leftPriceScales().length < e.rightPriceScales().length ? "left" : + "right"; + return e.createPriceScaleAtPosition(t) + } + } + class a extends n { + constructor(e) { + super(e) + } + apply(e) { + const t = e.model(); + e.leftPriceScales().slice(0).forEach(i => e.movePriceScale(i, "right", this + ._targetPriceScaleIndex(i, t))) + } + createNewPriceScaleIfPossible(e) { + return this.canCreateNewPriceScale(e) ? e.createPriceScaleAtPosition("right") : e + .createPriceScaleAtPosition("overlay") + } + } + class l extends n { + constructor(e) { + super(e) + } + apply(e) { + const t = e.model(); + e.rightPriceScales().slice(0).forEach(i => e.movePriceScale(i, "left", this + ._targetPriceScaleIndex(i, t))) + } + createNewPriceScaleIfPossible(e) { + return this.canCreateNewPriceScale(e) ? e.createPriceScaleAtPosition("left") : e + .createPriceScaleAtPosition("overlay") + } + } + const c = [{ + name: "left", + title: window.t("Stack On The Left"), + ctor: l + }, { + name: "right", + title: window.t("Stack On The Right"), + ctor: a + }, { + name: "auto", + title: window.t("Auto"), + ctor: o + }]; + + function h(e) { + const t = Object(s.ensureDefined)(c.find(t => t.name === e)); + return new t.ctor(t) + } + + function u() { + return c + } + }, + MXV9: function(e, t) { + e.exports = + '' + }, + MY2c: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return l + })); + var s = i("RDU5"), + r = i("aIyQ"), + n = i.n(r), + o = i("txPx"); + const a = Object(o.getLogger)("Common.UndoStack"); + class l { + constructor() { + this._commands = [], this._onChange = new n.a + } + onChange() { + return this._onChange + } + isEmpty() { + return 0 === this._commands.length + } + clear() { + this.isEmpty() || (this._commands.length = 0, this._onChange.fire()) + } + push(e) { + if (!(e instanceof s.UndoCommand)) throw new TypeError( + "argument must be an instance of UndoCommand"); + this._commands.push(e), this._onChange.fire(e) + } + pop() { + if (this.isEmpty()) return void a.logDebug("pop: undo stack is empty"); + const e = this._commands.pop(); + return this._onChange.fire(e), e + } + head() { + if (!this.isEmpty()) return this._commands[this._commands.length - 1] + } + } + }, + MbIA: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + var s = i("4kQX"), + r = i("gQ5K"); + const n = { + dateFormat: "yyyy-MM-dd", + timeFormat: "%h:%m:%s", + dateTimeSeparator: " " + }; + class o { + constructor(e = {}) { + const t = Object.assign({}, n, e); + this._dateFormatter = new r.DateFormatter(t.dateFormat), this._timeFormatter = new s + .TimeFormatter(t.timeFormat), this._separator = t.dateTimeSeparator + } + format(e) { + return `${this._dateFormatter.format(e)}${this._separator}${this._timeFormatter.format(e)}` + } + formatLocal(e) { + return `${this._dateFormatter.formatLocal(e)}${this._separator}${this._timeFormatter.formatLocal(e)}` + } + } + }, + MrEN: function(e, t, i) { + "use strict"; + var s = i("aIyQ"), + r = function(e, t) { + this._server = e, this._session = t, this.seriesCompleted = new s, this.seriesError = + new s + }; + r.prototype.onRequestMetadata = function(e, t) { + this._server.receiveLocalResponse({ + method: "studies_metadata", + params: [this._session, e, { + errors: [], + hash: "", + metainfo: t, + migrations: [] + }] + }) + }, r.prototype.onSymbolResolved = function(e, t) { + this._server.receiveLocalResponse({ + method: "symbol_resolved", + params: [this._session, e, t] + }) + }, r.prototype.onSymbolError = function(e, t) { + this._server.receiveLocalResponse({ + method: "symbol_error", + params: [this._session, e, t] + }) + }, r.prototype.onStudyError = function(e, t, i) { + this._server.receiveLocalResponse({ + method: "study_error", + params: [this._session, e, t, i] + }) + }, r.prototype.onSeriesLoading = function(e, t) { + this._server.receiveLocalResponse({ + method: "series_loading", + params: [this._session, e, t] + }) + }, r.prototype.onSeriesCompleted = function(e, t, i) { + this._server.receiveLocalResponse({ + method: "series_completed", + params: [this._session, e, i, t] + }), this.seriesCompleted.fire(e, t) + }, r.prototype.onSeriesError = function(e, t, i) { + this._server.receiveLocalResponse({ + method: "series_error", + params: [this._session, e, t, i] + }), this.seriesError.fire(e, t) + }, r.prototype.onStudyCompleted = function(e, t) { + this._server.receiveLocalResponse({ + method: "study_completed", + params: [this._session, e, t] + }) + }, r.prototype.onStudyLoading = function(e, t) { + this._server.receiveLocalResponse({ + method: "study_loading", + params: [this._session, e, t] + }) + }, r.prototype.onTickmarksUpdated = function(e, t) { + var i = { + method: "tickmark_update", + params: [this._session, { + index: e, + zoffset: 0, + changes: [], + marks: t, + index_diff: [] + }] + }; + this._server.receiveLocalResponse(i) + }, r.prototype.onTimescaleUpdate = function(e, t) { + var i = { + method: "timescale_update", + params: [this._session, this._prepareDataUpdateObjects(t), { + index: e.pointsIndex, + zoffset: 0, + changes: e.points, + marks: e.marks, + index_diff: e.indexChange, + baseIndex: e.baseIndex + }] + }; + this._server.receiveLocalResponse(i) + }, r.prototype.onTimescaleCompleted = function(e) { + this._server.receiveLocalResponse({ + method: "timescale_completed", + params: [this._session, e] + }) + }, r.prototype.onSeriesTimeframeUpdate = function(e, t, i, s, r) { + var n = { + method: "series_timeframe", + params: [this._session, e, t, i, s, null, !0, r] + }; + this._server.receiveLocalResponse(n) + }, r.prototype.onPointsetDataUpdate = function(e, t, i) { + this.onDataUpdate(e, t, i, null) + }, r.prototype._prepareDataUpdateObjects = function(e) { + var t = {}; + return e.forEach((function(e) { + t[e.objId] = { + series: e.data, + turnaround: e.turnaround + }, e.nonSeriesData && (e.nonSeriesData.data ? t[e.objId] + .nonseries = { + d: JSON.stringify(e.nonSeriesData.data), + indexes: e.nonSeriesData.indexes + } : t[e.objId].nonseries = { + d: "", + indexes: [] + }) + })), t + }, r.prototype.onDataUpdate = function(e, t, i, s) { + var r = { + method: "data_update", + params: [this._session, this._prepareDataUpdateObjects([{ + objId: e, + turnaround: t, + data: i, + nonSeriesData: s + }])] + }; + this._server.receiveLocalResponse(r) + }, r.prototype.onQuotesData = function(e) { + this._server.receiveLocalResponse({ + method: "quote_symbol_data", + params: e + }) + }, r.prototype.onDepthData = function(e) { + this._server.receiveLocalResponse({ + method: "dd", + params: e + }) + }, r.prototype.onDepthUpdate = function(e) { + this._server.receiveLocalResponse({ + method: "dpu", + params: e + }) + }, r.prototype.onClearData = function(e) { + this._server.receiveLocalResponse({ + method: "clear_data", + params: [this._session, e] + }) + }, TradingView.ChartapiMessagerInstances = [], e.exports = r + }, + "N+BX": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolBezierCubic", (function() { + return n + })); + var s = i("Ocx9"), + r = i("Ss5c"); + class n extends r.LineDataSource { + constructor(e, t) { + const s = t || n.createProperties(); + super(e, s), this._controlPoints = null, i.e("lt-pane-views").then(i.bind(null, + "a6on")).then(t => { + this._setPaneViews([new t.BezierCubicPaneView(this, e)]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Double Curve" + } + properties() { + return super.properties() + } + setLastPoint(e, t) { + super.setLastPoint(e, t), this._controlPoints = this._calculateControlPoints() + } + addPoint(e, t, i) { + const s = super.addPoint(e, t, i); + if (s) { + const e = this._calculateControlPoints(); + this._controlPoints = null, this._points.push(e[0]), this._points.push(e[ + 1]), i || (this.normalizePoints(), this.createServerPoints()), this + ._createPointProperty(2), this._createPointProperty(3) + } + return s + } + restorePoints(e, t, i) { + super.restorePoints(e, t, i), this._createPointProperty(2), this + ._createPointProperty(3) + } + controlPoints() { + return this._controlPoints + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolbeziercubic", e); + return n._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "b4fl")).then( + e => e.GeneralBezierDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e) + } + _calculateControlPoints() { + const e = this.pointToScreenPoint(this.points()[0])[0], + t = this.pointToScreenPoint(this.points()[1])[0], + i = t.subtract(e).scaled(.5).transposed().scaled(.3), + s = e.add(t).scaled(.33), + r = e.add(t).scaled(.67), + n = s.add(i), + o = r.subtract(i); + return [this.screenPointToPoint(n), this.screenPointToPoint(o)] + } + } + }, + N1UO: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyApi", (function() { + return v + })); + var s = i("Eyy1"), + r = i("aIyQ"), + n = i.n(r), + o = i("ogJP"), + a = i("9iCb"), + l = i("xo8u"), + c = i("gaBL"), + h = i("HGup"), + u = i("jRfx"), + d = i("/ToI"), + p = i("HZKX"), + _ = i("SwuQ"), + m = i("Yt+L"), + f = i("GD+X"), + g = i("bmVy"), + b = i("pZDF"); + class v { + constructor(e, t) { + this._onStudyCompleted = new n.a, this._onStudyError = new n.a, this._study = e, + this._chartWidget = t, this._undoModel = this._chartWidget.model(), this + ._model = this._undoModel.model(), this._study.onAboutToBeDestroyed().subscribe( + this, () => { + this._study.onStatusChanged().unsubscribeAll(this), this._study + .onAboutToBeDestroyed().unsubscribeAll(this) + }), this._study.onStatusChanged().subscribe(this, e => { + switch (e.type) { + case g.StudyStatusType.Completed: + this._onStudyCompleted.fire(); + break; + case g.StudyStatusType.Error: + this._onStudyError.fire() + } + }) + } + isUserEditEnabled() { + return this._study.userEditEnabled() + } + setUserEditEnabled(e) { + this._study.setUserEditEnabled(e) + } + getInputsInfo() { + return Object(b.getStudyInputsInfo)(this._study.metaInfo()) + } + getInputValues() { + const e = this._study.inputs({ + symbolsForChartApi: !1, + asObject: !0 + }); + return Object.keys(e).map(t => { + const i = e[t]; + return { + id: t, + value: Object(o.isObject)(i) ? i.v : i + } + }) + } + setInputValues(e) { + const t = this.getInputValues(); + for (const i of e) { + void 0 !== t.find(e => e.id === i.id) ? this._study.properties().inputs[i.id] + .setValue(i.value) : console.warn(`There is no such input: "${i.id}"`) + } + } + mergeUp() { + this._model.isMergeUpAvailableForSource(this._study) && new u.c(this._model, this + ._study, "").redo() + } + mergeDown() { + this._model.isMergeDownAvailableForSource(this._study) && new u.a(this._model, this + ._study, "").redo() + } + unmergeUp() { + this._model.isUnmergeAvailableForSource(this._study) && new h.c(this._model, this + ._study, "").redo() + } + unmergeDown() { + this._model.isUnmergeAvailableForSource(this._study) && new h.a(this._model, this + ._study, "").redo() + } + onDataLoaded() { + return this._onStudyCompleted + } + onStudyError() { + return this._onStudyError + } + mergeUpWithUndo() { + this._model.isMergeUpAvailableForSource(this._study) && this._undoModel + .mergeSourceUp(this._study) + } + mergeDownWithUndo() { + this._model.isMergeDownAvailableForSource(this._study) && this._undoModel + .mergeSourceDown(this._study) + } + unmergeUpWithUndo() { + this._model.isUnmergeAvailableForSource(this._study) && this._undoModel + .unmergeSourceUp(this._study) + } + unmergeDownWithUndo() { + this._model.isUnmergeAvailableForSource(this._study) && this._undoModel + .unmergeSourceDown(this._study) + } + priceScale() { + return new f.a(this._undoModel, Object(s.ensureNotNull)(this._study.priceScale())) + } + symbolSource() { + const e = Object(s.ensureNotNull)(this._study.symbolSource()); + return { + symbol: e.symbol(), + currencyId: e.currency(), + unitId: e.unit() + } + } + changePriceScale(e) { + const t = Object(s.ensureNotNull)(this._model.paneForSource(this._model + .mainSeries())), + i = Object(s.ensureNotNull)(this._model.paneForSource(this._study)); + switch (e) { + case "no-scale": + Object(s.assert)(i.actionNoScaleIsEnabled(this._study), + "Unable to leave a pane without any non-overlay price scale"), new d + .b(this._model, this._study, i, "overlay", "").redo(); + break; + case "as-series": + Object(s.assert)(i === t, "Study should be on the main pane"), new d.a(this + ._model, this._study, i, this._model.mainSeries().priceScale(), "") + .redo(); + break; + case "new-left": + new d.b(this._model, this._study, i, "left", "").redo(); + break; + case "new-right": + new d.b(this._model, this._study, i, "right", "").redo(); + break; + default: + const r = this._model.dataSourceForId(e); + if (null === r) throw new Error(`There is no study with entityId='${e}'`); + const n = i === this._model.paneForSource(r); + Object(s.assert)(n, "Both studies should be on the same pane"); + const o = Object(s.ensureNotNull)(r.priceScale()), + a = Object(c.sourceNewCurrencyOnPinningToPriceScale)(this._study, o, + this._model), + h = Object(_.sourceNewUnitOnPinningToPriceScale)(this._study, o, this + ._model); + new d.a(this._model, this._study, i, o, "").redo(), null !== a && new l.a(o, + a, this._undoModel.chartWidget(), "").redo(), null !== h && new m.a( + o, h, this._undoModel.chartWidget(), "").redo() + } + } + isVisible() { + return this._study.properties().visible.value() + } + setVisible(e) { + this._study.properties().visible.setValue(e) + } + bringToFront() { + this._model.bringToFront([this._study]) + } + sendToBack() { + this._model.sendToBack([this._study]) + } + applyOverrides(e) { + Object(a.applyOverridesToStudy)(this._study, e) + } + dataLength() { + return this._study.status().type !== g.StudyStatusType.Completed ? 0 : this._study + .metaInfo().plots.length > 0 ? this._study.data().size() : this._model + .mainSeries().bars().size() + } + isLoading() { + return this._study.isLoading() + } + async applyToEntireLayout() { + const e = new p.ActionsProvider(this._chartWidget), + t = (await e.contextMenuActionsForSources([this._study])).find(e => + "applyStudyToEntireLayout" === e.id); + t && t.execute() + } + } + }, + N22A: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("eqEH"); + const r = { + id: "TradingService" + }; + + function n() { + return Object(s.hasService)(r) ? Object(s.service)(r) : null + } + }, + NJRZ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineTool5PointsPattern", (function() { + return a + })); + var s = i("Eyy1"), + r = i("Ocx9"), + n = i("Ss5c"), + o = i("j3hX"); + class a extends n.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), this._loadPaneViews(e) + } + pointsCount() { + return 5 + } + name() { + return "XABCD Pattern" + } + properties() { + return super.properties() + } + static createProperties(e) { + const t = new r.DefaultProperty("linetool5pointspattern", e); + return a._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "/HOw")).then( + e => e.PatternWithBackgroundDefinitionViewModel) + } + _loadPaneViews(e) { + i.e("lt-pane-views").then(i.bind(null, "6MfG")).then(t => { + this._setPaneViews([new t.Pattern5pointsPaneView(this, e)]) + }) + } + static _configureProperties(e) { + n.LineDataSource._configureProperties(e), e.addChild("linesColors", new o + .LineToolColorsProperty([Object(s.ensureDefined)(e.child("color"))])), e + .addChild("textsColors", new o.LineToolColorsProperty([Object(s + .ensureDefined)(e.child("textcolor"))])) + } + } + }, + NSoL: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "clientSnapshot", (function() { + return y + })); + var s = i("aO4+"), + r = i("eJTA"), + n = i("zM7N"), + o = i("Y7w9"), + a = i("ikwP"), + l = i("zDbI"), + c = i("XlJ7"), + h = i("EsvI"), + u = i("Dq3s"), + d = i("Kxc7"), + p = i("4GHa"); + const _ = !d.enabled("widget_logo"); + + function m(e, t = null, i = null) { + let s = {}; + if ("number" == typeof e) return { + relativePositions: { + [e]: { + l: t, + t: i + } + }, + nextElementLeft: e, + nextElementTop: e + }; + const [r, ...n] = e; + if ("v" === r) { + let e = null; + for (const r of n) { + const n = m(r, t, i); + s = { + ...s, + ...n.relativePositions + }, i = n.nextElementTop, e = n.nextElementLeft + } + t = e + } + if ("h" === r) { + let e = null; + for (const r of n) { + const n = m(r, t, i); + s = { + ...s, + ...n.relativePositions + }, t = n.nextElementLeft, e = n.nextElementTop + } + i = e + } + return { + relativePositions: s, + nextElementTop: i, + nextElementLeft: t + } + } + const f = function(e) { + const t = {}; + for (const i of Object.keys(e)) { + const s = m(e[i]).relativePositions; + t[i] = s + } + return t + }(u); + + function g(e, t, i, s) { + return Object(a.drawScaled)(e, s, () => { + e.fillText(i, t.x / s, t.y / s) + }), e.measureText(i).width * s + } + + function b(e) { + return e.map(e => ({ + ...e, + title: "" + })) + } + + function v(e, t) { + const i = [{ + text: e.trim() + }]; + for (const e of t) e.visible && ("" !== i[i.length - 1].text && i.push({ + text: " " + }), e.title && i.push({ + text: e.title + }), i.push({ + text: e.value, + color: e.color + })); + return i + } + class S { + constructor(e, t) { + this._logoTextColor = null, this._snapshotData = e, t = t || {}, this._options = { + backgroundColor: h.themes[e.theme].getThemedColor("color-bg-primary"), + borderColor: h.themes[e.theme].getThemedColor("color-border"), + font: l.CHART_FONT_FAMILY, + fontSize: 12, + legendMode: "vertical", + hideResolution: !1, + header: void 0, + ...t + }; + const i = f[e.layout], + s = e.charts.map(e => function(e) { + const t = e.panes[0], + i = t.canvas.width + t.leftAxis.canvas.width + t.rightAxis.canvas + .width; + let s = 0; + for (const t of e.panes) s += t.canvas.height; + return void 0 !== e.timeAxis && (s += e.timeAxis.canvas.height), new a + .Size(i, s) + }(e)); + if (this._pixelRatio = e.hidpiRatio, this._chartsGeometry = e.charts.map((e, t) => + function e(t, i, s, r) { + let n = Math.round(10 * r), + o = Math.round(10 * r); + const a = s[t]; + if (null !== a.l) { + const t = e(a.l, i, s, r); + n = t.x + t.width + Math.round(5 * r) + } + if (null !== a.t) { + const t = e(a.t, i, s, r); + o = t.y + t.height + Math.round(5 * r) + } + const l = i[t]; + return { + x: n, + y: o, + width: l.w, + height: l.h + } + }(t, s, i, this._pixelRatio)), !_) { + let i = e.theme; + void 0 !== t.backgroundColor && (i = "black" === Object(r.rgbToBlackWhiteString) + (Object(r.parseRgb)(t.backgroundColor), 150) ? n.a.Dark : n.a.Light), + this._logoTextColor = h.themes[i].getThemedColor("color-text-primary") + } + this._headerDefaultTextColor = h.themes[e.theme].getThemedColor( + "color-text-primary") + } + async getImage() { + const e = this._pixelRatio; + let t = 0, + i = 0, + r = 0; + if (this._options.header) { + r = Math.ceil(1.4 * this._options.fontSize * e) * this._options.header.length + } + i += r; + let n = 0, + o = 0; + for (const e of this._chartsGeometry) n = Math.max(n, e.x + e.width), o = Math.max( + o, e.y + e.height); + const h = i; + t += n, i += o, t += Math.round(10 * e); + const u = _ ? Math.round(10 * e) : Math.round(35 * e), + d = i; + i += u; + const m = Object(a.createDisconnectedCanvas)(document, new a.Size(t, i), 1), + f = Object(a.getContext2D)(m); + f.font = Object(c.makeFont)(this._options.fontSize, this._options.font), f + .textBaseline = "top", f.fillStyle = this._options.backgroundColor, f.fillRect( + 0, 0, t, i), this._options.header && this._drawHeader(f, t, new s.Point(Math + .round(10 * e), Math.round(10 * e))); + for (let e = 0; e < this._snapshotData.charts.length; ++e) { + const t = this._snapshotData.charts[e], + i = this._chartsGeometry[e]; + this._drawChart(t, i, f, new s.Point(0, h)) + } + if (null !== this._logoTextColor) { + const t = await + + function(e, t, i) { + var s; + const r = (new DOMParser).parseFromString(p, "image/svg+xml"); + null === (s = null == r ? void 0 : r.firstElementChild) || void 0 === s || s + .setAttribute("color", i); + const n = URL.createObjectURL(new Blob([(new XMLSerializer) + .serializeToString(r) + ], { + type: "image/svg+xml" + })); + return new Promise(i => { + const s = new Image; + s.width = e, s.height = t, s.onload = () => { + i({ + image: s, + width: e, + height: t + }) + }, s.src = n + }) + }(Math.round(20 * e), Math.round(15 * e), this._logoTextColor); + f.fillStyle = this._logoTextColor, f.font = Object(c.makeFont)(13, l + .CHART_FONT_FAMILY); + const i = d + Math.round(u / 2 - t.height / 2); + ! function(e, t, i, s, r) { + e.save(), e.drawImage(s.image, t, i, s.width, s.height), e.textBaseline = + "bottom"; + const n = (t + s.width) / r + 3, + o = (i + s.height) / r; + Object(a.drawScaled)(e, r, () => { + e.fillText("TradingView", n, o) + }), e.restore() + }(f, Math.round(10 * e), i, t, e) + } + return m + } + _drawChart(e, t, i, r) { + i.save(), i.translate(t.x + r.x, t.y + r.y); + let n = 0; + for (const t of e.panes) { + let r = 0; + const o = t.leftAxis.canvas.width + Math.round(8 * this._pixelRatio), + a = n, + l = n + Math.round(10 * this._pixelRatio); + t.leftAxis.contentWidth > 0 && (i.drawImage(t.leftAxis.canvas, r, n), + r += t.leftAxis.canvas.width), i.drawImage(t.canvas, r, n), r += t + .canvas.width, t.rightAxis.contentWidth > 0 && i.drawImage(t.rightAxis + .canvas, r, n), "pane" === t.type && (i.fillStyle = e.colors.text, this + ._drawLegend(t, i, new s.Point(o, l), a)), n += t.canvas.height + } + if (void 0 !== e.timeAxis) { + let t = 0; + e.timeAxis.lhsStub.contentWidth > 0 && (i.drawImage(e.timeAxis.lhsStub.canvas, + t, n), t += e.timeAxis.lhsStub.canvas.width), i.drawImage(e.timeAxis + .canvas, t, n), t += e.timeAxis.canvas.width, e.timeAxis.rhsStub + .contentWidth > 0 && i.drawImage(e.timeAxis.rhsStub.canvas, t, n) + } + i.strokeStyle = this._options.borderColor, i.strokeRect(0, 0, t.width, t.height), i + .restore() + } + _drawHeader(e, t, i) { + const { + header: r + } = this._options; + if (!r) return; + e.save(), e.fillStyle = this._headerDefaultTextColor; + const n = Math.ceil(1.4 * this._options.fontSize * this._pixelRatio); + r.forEach((r, o) => { + this._drawLegendLine(e, new s.Point(i.x, i.y + n * o), t, [{ + ...r, + text: r.text.trim() + }], !0) + }), e.restore() + } + _drawLegend(e, t, i, r) { + let n = !0; + const o = Math.ceil(1.4 * this._options.fontSize * this._pixelRatio); + let a = i.x, + l = i.y; + if (e.mainSeriesText && l + o < r + e.canvas.height) { + const i = this._drawLegendLine(t, new s.Point(a, l), e.contentWidth * this + ._pixelRatio, v(e.mainSeriesText, e.mainSeriesValues), !0); + "horizontal" !== this._options.legendMode ? l += o : (a = i + 1.4 * this + ._options.fontSize * this._pixelRatio, n = !1) + } + for (let c = 0; c < e.studies.length; ++c) + if (l + o < r + e.canvas.height) { + const r = e.studies[c], + h = e.studiesValues[c]; + let u = null; + for (; null === u;) u = this._drawLegendLine(t, new s.Point(a, l), e + .contentWidth * this._pixelRatio, v(r, b(h)), n), "horizontal" !== + this._options.legendMode ? l += o : null === u ? (n = !0, a = i.x, l += + o) : (a = u + 1.4 * this._options.fontSize * this._pixelRatio, n = ! + 1) + } + } + _drawLegendLine(e, t, i, r, n) { + const a = r.map(e => e.text).join(""); + let l = t.x; + const c = function(e, t, i, s) { + if (e.measureText(t).width * s <= i) return { + text: t, + elided: !1 + }; + const r = e.measureText("...").width * s, + n = []; + for (let e = 0; e < t.length; ++e) n.push(e); + const a = Object(o.upperbound)(n, i, (n, o) => e.measureText(t.slice(0, o + + 1)).width * s + r > i); + return { + text: (t = t.slice(0, a)).trim(), + elided: !0 + } + }(e, a, i - l, this._pixelRatio); + if (c.elided && !n) return null; + const h = []; + let u = 0; + for (const e of r) { + if (u + e.text.length > c.text.length) break; + h.push(e.text), u += e.text.length + } + const d = h.join("").trim().length; + u = 0; + for (const i of r) { + if (u + i.text.length > d) break; + i.color && (e.save(), e.fillStyle = i.color), l += g(e, new s.Point(l, t.y), i + .text, this._pixelRatio), i.color && e.restore(), u += i.text.length + } + return c.elided && (l += g(e, new s.Point(l, t.y), "...", this._pixelRatio)), l + } + } + async function y(e, t) { + return new S(e, t).getImage() + } + }, + NhkU: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "l5Au", 7)).then(({ + PitchfanLinePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 3 + } + name() { + return "Pitchfan" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "D+Nk"))) + .PitchBaseDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolpitchfan", e, !1, { + range: [0, 8] + }); + return l._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("median").child("linewidth")], i = [e.child("median").child( + "color")], r = 0; r <= l.LevelsCount; r++) t.push(e.child("level" + r) + .child("linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.LevelsCount = 8, t.LineToolPitchfan = l + }, + NsVT: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("hY0g"), + r = i.n(s), + n = i("HySD"); + + function o(e, t) { + let i = 0; + for (const { + min: s, + max: r + } of t) { + if (e < s || r < s) continue; + const t = Math.min(e, r); + if (i = Math.max(i, t), e === i) break + } + return i + } + + function a(e) { + const t = []; + if (void 0 === e) return []; + Array.isArray(e) || (e = [e]); + for (const i of e) { + let e, s; + isFinite(i) ? e = s = Number(i) : (e = +i.min, s = +i.max), (e < 0 || isNaN(e)) && (e = + 0), isNaN(s) && (s = 1 / 0), e <= s && s > 0 && t.push({ + min: e, + max: s + }) + } + return t.sort((e, t) => e.min - t.min || e.max - t.max), t + } + + function l(e, t) { + if (e.length !== t.length) return !1; + for (let i = e.length; i--;) { + if (e[i].min !== t[i].min) return !1; + if (e[i].max !== t[i].max) return !1 + } + return !0 + } + var c = i("+GxX"), + h = i("Kxc7"); + i.d(t, "ChartPage", (function() { + return d + })); + const u = h.enabled("no_min_chart_width"); + class d { + constructor(e) { + this._processVisibility = e => { + const t = e.container.value(); + return this._affectsLayout(e.name) ? (t && t.classList.toggle("js-hidden", ! + 1), !0) : (t && t.classList.toggle("js-hidden", !0), !1) + }, this._setWidth = (e, t) => { + let i = t; + this._fullscreenArea !== e.name && (e.availWidth.setValue(t), e.canNegotiate + .width && (i = o(t, e.negotiations.width))); + const s = e.container.value(); + return s && (s.style.width = i + "px"), e.width.setValue(i), i + }, this._setHeight = (e, t) => { + let i = t; + this._fullscreenArea !== e.name && (e.availHeight.setValue(t), e + .canNegotiate.height && (i = o(t, e.negotiations.height))); + const s = e.container.value(); + return s && (s.style.height = i + "px"), e.height.setValue(i), i + }; + const t = e.container.value(); + if (!t) throw new Error("bridge.container.value() must be an element"); + this._container = t, this._availableAreas = ["left", "tradingpanel", "right", "top", + "bottom", "center", "topleft", "extratop" + ], this._areas = {}, this._bridge = e, this._width = e.width, this._height = e + .height, this._width.subscribe(() => this.recalculate()), this._height + .subscribe(() => this.recalculate()), this._bridge.visible.subscribe(() => this + ._updateVisibility()), this._bridge.fullscreen.subscribe(() => this + ._onParentFullscreenChange()), this.recalculate() + } + allocate(e) { + const t = e && e.areaName; + if (-1 === this._availableAreas.indexOf(t)) throw new Error( + "unknown options.areaName"); + this.free(t); + const i = this._createDOM(t), + s = { + name: t, + canNegotiate: { + width: "left" === t || "right" === t || "tradingpanel" === t || + "topleft" === t, + height: "top" === t || "bottom" === t || "topleft" === t || + "extratop" === t + }, + negotiations: { + width: [], + height: [] + }, + remove: () => { + for (const e in this._areas) this._areas[e] === s && this.free(e) + }, + negotiateWidth: e => { + if (!s.canNegotiate.width) return; + const t = a(e); + l(s.negotiations.width, t) || (s.negotiations.width = t, this + .recalculate()) + }, + negotiateHeight: e => { + if (!s.canNegotiate.height) return; + const t = a(e); + l(s.negotiations.height, t) || (s.negotiations.height = t, this + .recalculate()) + }, + requestFullscreen: () => { + this._fullscreenArea || ("right" !== t && "center" !== t || (this + ._fullscreenArea = t), "center" === t && this._bridge + .requestFullscreen(), this._updateFullscreen()) + }, + exitFullscreen: () => { + t === this._fullscreenArea && (this._fullscreenArea = void 0, + "center" === t && this._bridge.exitFullscreen(), this + ._updateFullscreen()) + }, + width: new r.a, + height: new r.a, + availWidth: new r.a, + availHeight: new r.a, + alive: new r.a(!0), + container: new r.a(i), + visible: new r.a(!0), + fullscreen: new r.a(!0), + rdState: new n.ResizerDetacherState + }; + return s.rdState.pushOwner(s), this._areas[t] = s, s.rdState.owner.subscribe(e => { + const i = s.container.value(); + if (e !== s) i && (i.innerHTML = "", i.parentElement && i.parentElement + .removeChild(i)); + else { + let e = null; + for (let i = this._availableAreas.indexOf(t); i--;) { + const t = this._availableAreas[i]; + if (this._affectsLayout(t)) { + e = this._areas[t].container.value(); + break + } + } + i && (e && i.parentElement ? i.insertAdjacentElement("afterend", + e) : this._container.appendChild(i)) + } + this.recalculate() + }, { + callWithLast: !0 + }), s.rdState.bridge() + } + free(e) { + const t = this._areas[e]; + if (!t) return; + this._areas[e] = void 0; + const i = t.container.value(); + i && i.parentElement && i.parentElement.removeChild(i), t.alive.setValue(!1) + } + recalculate() { + const e = {}; + this._recalcSingleRunToken = e; + const t = this._areas.topleft, + i = this._areas.left, + s = this._areas.tradingpanel, + r = this._areas.right, + n = this._areas.top, + o = this._areas.bottom, + a = this._areas.center, + l = this._areas.extratop, + c = this._width.value(), + h = this._height.value(); + let d = 0, + p = 0, + _ = 0, + m = 0, + f = 0, + g = 0, + b = 0, + v = 0; + if (e === this._recalcSingleRunToken && l && this._processVisibility(l) && (v = this + ._setHeight(l, h), this._setWidth(l, c)), e === this + ._recalcSingleRunToken && t && this._processVisibility(t)) { + b = this._setHeight(t, h), g = this._setWidth(t, c), g && (g += 4); + const e = t.container.value(); + e && (e.style.top = v + "px") + } + if (e === this._recalcSingleRunToken && i && this._processVisibility(i)) { + const e = i.container.value(); + e && (e.style.top = b + v + "px"), this._setHeight(i, h - b - v), _ = this + ._setWidth(i, c), _ && (_ += 4) + } + if (e === this._recalcSingleRunToken && s && this._processVisibility(s)) { + this._setHeight(s, h); + let e = c - _; + u || (e -= 300), f = this._setWidth(s, e) + } + if (e === this._recalcSingleRunToken && r && this._processVisibility(r)) { + this._setHeight(r, h - v); + let e = c - _ - f; + u || (e -= 300), m = this._setWidth(r, e); + const t = r.container.value(); + t && (t.style.top = v + "px") + } + const S = f + m, + y = S ? 4 : 0; + if (e === this._recalcSingleRunToken && n && this._processVisibility(n)) { + const e = Math.max(g, _), + t = n.container.value(); + t && (t.style.left = e + "px", t.style.top = v + "px"); + const i = c - e - f - m - y; + this._setWidth(n, i), d = this._setHeight(n, h) + } + let w = 0; + const P = c - _ - f - m - y; + if (e === this._recalcSingleRunToken && o && this._processVisibility(o)) { + const e = o.container.value(); + e && (e.style.left = _ + "px", e.classList.toggle("no-border-top-left-radius", ! + _), e.classList.toggle("no-border-top-right-radius", !S)), this + ._setWidth(o, P); + const t = h - d - v; + w = Math.min(300, t - 0), p = this._setHeight(o, t) + 4 + } + if (e === this._recalcSingleRunToken && a && this._processVisibility(a)) { + const e = a.container.value(); + e && (e.style.left = _ + "px", e.style.top = d + v + "px", e.classList.toggle( + "no-border-bottom-left-radius", !p || !_), e.classList.toggle( + "no-border-bottom-right-radius", !S || !p)), this._setWidth(a, P); + const t = h - d - p - v; + this._setHeight(a, Math.max(t, w)) + } + if (e === this._recalcSingleRunToken && s && this._affectsLayout("tradingpanel")) { + const e = s.container.value(); + e && (e.style.right = m + "px", e.style.top = v + "px") + } + e === this._recalcSingleRunToken && this._updateVisibility() + } + _affectsLayout(e) { + const t = this._areas[e]; + if (!t) return !1; + if (t.rdState.owner.value() !== t) return !1; + if (this._fullscreenArea && this._fullscreenArea !== e) return p(e); + if (this._width.value() <= 567 || this._height.value() <= 445) { + const t = ["center", "top", "left", "topleft", "extratop"]; + if (Object(c.isFeatureEnabled)("mobile_show_bottom_panel") && t.push("bottom"), + !t.includes(e)) return !1 + } + return !0 + } + _updateVisibility() { + const e = this._bridge.visible.value(); + for (let t = 0; t < this._availableAreas.length; t++) { + const i = this._availableAreas[t], + s = this._areas[i]; + s && (e && this._affectsLayout(i) ? s.visible.setValue(!0) : s.visible.setValue( + !1)) + } + } + _onParentFullscreenChange() { + this._bridge.fullscreen.value() || (this._fullscreenArea = void 0, this + ._updateFullscreen()) + } + _updateFullscreen() { + const e = void 0 !== this._fullscreenArea; + for (let t = 0; t < this._availableAreas.length; t++) { + const i = this._availableAreas[t], + s = this._areas[i]; + if (!s) continue; + if (i === this._fullscreenArea) { + s.fullscreen.setValue(!0); + continue + } + const r = s.container.value(); + r && r.classList.toggle("js-hidden", e && !p(i)) + } + this._updateVisibility(), this.recalculate() + } + _createDOM(e) { + const t = document.createElement("div"); + return t.classList.add("layout__area--" + e), t.style.position = "absolute", + "bottom" === e ? t.style.bottom = "0" : t.style.top = "0", "right" === e || + "tradingpanel" === e ? t.style.right = "0" : t.style.left = "0", t + } + } + + function p(e) { + const t = h.enabled("side_toolbar_in_fullscreen_mode"), + i = h.enabled("header_in_fullscreen_mode"); + return "center" === e || "left" === e && t || "top" === e && i + } + }, + Nu4p: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + i("YFKU"); + const s = { + shape_arrow_down: { + guiName: window.t("Arrow Down"), + id: "shape_arrow_down", + paneRendererClass: "PaneRendererArrowDown", + pineName: "shape.arrowdown", + icon: "arrow_down" + }, + shape_arrow_up: { + guiName: window.t("Arrow Up"), + id: "shape_arrow_up", + paneRendererClass: "PaneRendererArrowUp", + pineName: "shape.arrowup", + icon: "arrow_up" + }, + shape_circle: { + guiName: window.t("Circle"), + id: "shape_circle", + paneRendererClass: "PaneRendererCircleShape", + pineName: "shape.circle", + icon: "circle" + }, + shape_cross: { + guiName: window.t("Cross"), + id: "shape_cross", + paneRendererClass: "PaneRendererCrossShape", + pineName: "shape.cross", + icon: "cross" + }, + shape_diamond: { + guiName: window.t("Diamond"), + id: "shape_diamond", + paneRendererClass: "PaneRendererDiamond", + pineName: "shape.diamond", + icon: "diamond" + }, + shape_flag: { + guiName: window.t("Flag"), + id: "shape_flag", + paneRendererClass: "PaneRendererFlagShape", + pineName: "shape.flag", + icon: "flag" + }, + shape_label_down: { + guiName: window.t("Label Down"), + id: "shape_label_down", + paneRendererClass: "PaneRendererLabelDown", + pineName: "shape.labeldown", + icon: "label_down" + }, + shape_label_up: { + guiName: window.t("Label Up"), + id: "shape_label_up", + paneRendererClass: "PaneRendererLabelUp", + pineName: "shape.labelup", + icon: "label_up" + }, + shape_square: { + guiName: window.t("Square"), + id: "shape_square", + paneRendererClass: "PaneRendererSquare", + pineName: "shape.square", + icon: "square" + }, + shape_triangle_down: { + guiName: window.t("Triangle Down"), + id: "shape_triangle_down", + paneRendererClass: "PaneRendererTriangleApexDown", + pineName: "shape.triangledown", + icon: "triangle_down" + }, + shape_triangle_up: { + guiName: window.t("Triangle Up"), + id: "shape_triangle_up", + paneRendererClass: "PaneRendererTriangleApexUp", + pineName: "shape.triangleup", + icon: "triangle_up" + }, + shape_xcross: { + guiName: window.t("X Cross"), + id: "shape_xcross", + paneRendererClass: "PaneRendererXCross", + pineName: "shape.xcross", + icon: "x_cross" + } + } + }, + "O+9b": function(e, t, i) { + "use strict"; + var s = i("ocLq"), + r = i("LxhU"); + class n { + constructor(e, t) { + this._minTick = NaN, this._minPrice = NaN, this._maxPrice = NaN, this._low = NaN, + this._high = NaN, this._startPrice = NaN, this._indexLowVbP = NaN, this + ._indexHighVbP = NaN, this._rowSize = e, this._type = t + } + init(e, t, i, s, r) { + this._minTick = e, this._minPrice = t, this._maxPrice = i, this._low = s, this + ._high = r + } + getStartPrice() { + return this._startPrice + } + setStartPrice(e) { + this._startPrice = e + } + getIndexLowVbP() { + return this._indexLowVbP + } + setIndexLowVbP(e) { + this._indexLowVbP = e + } + getIndexHighVbP() { + return this._indexHighVbP + } + setIndexHighVbP(e) { + this._indexHighVbP = e + } + type() { + return this._type + } + } + class o extends n { + constructor(e) { + super(e, 0) + } + calculate() { + this.setStartPrice(this._minPrice); + const e = this.rowWidth(); + let t = Math.floor((this._low - this._minPrice) / e), + i = Math.ceil((this._high - this._minPrice) / e) - 1; + t = Math.max(t, 0), i = Math.max(i, 0), i = Math.min(i, this._rowSize - 1), t = Math + .min(t, i), this.setIndexLowVbP(t), this.setIndexHighVbP(i) + } + rowWidth() { + return Math.max((this._maxPrice - this._minPrice) / this._rowSize, this._minTick) + } + } + class a extends n { + constructor(e) { + super(e, 1) + } + calculate() { + this.setStartPrice(0); + const e = this.rowWidth(); + let t = Math.floor(this._low / e); + const i = Math.ceil(this._high / e) - 1; + t = Math.min(t, i), this.setIndexLowVbP(t), this.setIndexHighVbP(i) + } + rowWidth() { + return this._minTick * this._rowSize + } + } + var l = i("Kxc7"); + + function c() { + return 6e3 + } + + function h(e) { + switch (e) { + case "Up/Down": + return 2; + case "Total": + return 1; + default: + s.Std.error("Invalid study argument value: " + e) + } + } + i.d(t, "b", (function() { + return c + })), i.d(t, "c", (function() { + return h + })), i.d(t, "a", (function() { + return u + })); + class u { + findBasicResolutionForFromTo(e, t, i, n) { + const o = Object(s.getVolumeProfileResolutionForPeriod)(e.value(), t, i, n), + a = r.Interval.parse(o); + return l.enabled("charting_library_debug_mode") && console.log( + `Selected resolution ${a.value()} for (${e.value()}, ${t}, ${i})`), a + } + verifyRowSizeInput(e, t) { + "Number Of Rows" === t && e > 6e3 && s.Std.error( + 'Histogram is too large, please reduce "Row Size" input.') + } + _getRowsLayout(e, t) { + return "Number Of Rows" === e ? new o(t) : new a(t) + } + } + }, + OBgQ: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("jCNj"); + class r { + constructor(e, t, i) { + this.year = e, this.month = t, this.day = i + } + toString() { + return `${this.year}-${this.month}-${this.day}` + } + compareTo(e) { + return this.year > e.year || this.year === e.year && this.month > e.month || this + .year === e.year && this.month === e.month && this.day > e.day ? 1 : this + .year === e.year && this.month === e.month && this.day === e.day ? 0 : -1 + } + before(e) { + return -1 === this.compareTo(e) + } + toCalendar(e) { + return s.get_cal(s.get_timezone("Etc/UTC"), this.year, this.month - 1, this.day) + } + addDays(e) { + const t = this.toCalendar(s.get_timezone("Etc/UTC")); + return s.add_date(t, e), r.fromCalendar(t) + } + static fromCalendar(e) { + return new r(s.get_year(e), s.get_month(e) + 1, s.get_day_of_month(e)) + } + } + }, + OH2X: function(e, t, i) { + "use strict"; + t.LineToolFibRetracement = i("t2ex").LineToolFibRetracement, t.LineToolFibChannel = i("xnA2") + .LineToolFibChannel, t.LineToolFibSpeedResistanceArcs = i("Yjuu") + .LineToolFibSpeedResistanceArcs, t.LineToolProjection = i("68at").LineToolProjection, t + .LineToolTrendBasedFibExtension = i("ZtA1").LineToolTrendBasedFibExtension, t + .LineToolElliott = i("xz+e").LineToolElliott, t.LineToolFibCircles = i("4bfY") + .LineToolFibCircles, t.LineToolVertLine = i("n40Z").LineToolVertLine, t.LineToolCrossLine = + i("MA5A").LineToolCrossLine, t.LineToolBarsPattern = i("2bPF").LineToolBarsPattern, t + .LineToolTrendBasedFibTime = i("yUly").LineToolTrendBasedFibTime, t.LineToolFibTimeZone = i( + "FsE7").LineToolFibTimeZone, t.LineToolCircleLines = i("tG6Q").LineToolCircleLines, t + .LineToolDateRange = i("WkYF").LineToolDateRange, t.LineToolPriceRange = i("RDDl") + .LineToolPriceRange, t.LineToolDateAndPriceRange = i("UCMi").LineToolDateAndPriceRange, t + .LineToolParallelChannel = i("qcGP").LineToolParallelChannel, t.LineToolTrendAngle = i( + "nW7S").LineToolTrendAngle, t.LineToolTrendLine = i("WPQD").LineToolTrendLine, t + .LineToolInfoLine = i("yi8X").LineToolInfoLine, t.LineToolArrowMark = i("TohL") + .LineToolArrowMark, t.LineToolExecution = i("704P").LineToolExecution, t.LineToolPitchfan = + i("NhkU").LineToolPitchfan, t.LineToolGannSquare = i("Z0Sh").LineToolGannSquare, t + .LineToolFibSpeedResistanceFan = i("zZ5f").LineToolFibSpeedResistanceFan, t + .LineToolGannComplex = i("nd9+").LineToolGannComplex, t.LineToolGannFixed = i("TBaH") + .LineToolGannFixed, t.LineToolGannFan = i("4u8j").LineToolGannFan, t.LineToolFibWedge = i( + "9QkW").LineToolFibWedge, t.LineToolPitchfork = i("aDyP").LineToolPitchfork, t + .LineToolDisjointAngle = i("oIoN").LineToolDisjointChannel, t.LineToolFlatBottom = i("InMJ") + .LineToolFlatBottom, t.LineToolIcon = i("icPo").LineToolIcon, t.LineToolRotatedRectangle = + i("Az04").LineToolRotatedRectangle, t.LineToolFibSpiral = i("i80N").LineToolFibSpiral, t + .LineToolHeadAndShoulders = i("aILO").LineToolHeadAndShoulders, t.LineToolTriangle = i( + "isVH").LineToolTriangle, t.LineToolTrianglePattern = i("lNN+").LineToolTrianglePattern, + t.LineTool5PointsPattern = i("NJRZ").LineTool5PointsPattern, t.LineToolThreeDrivers = i( + "PYn8").LineToolThreeDrivers, t.LineToolABCD = i("pKDv").LineToolABCD, t + .LineToolPolyline = i("hP9j").LineToolPolyline, t.LineToolPath = i("YdVo").LineToolPath, t + .LineToolPrediction = i("Wh6B").LineToolPrediction, t.LineToolPriceLabel = i("zqZp") + .LineToolPriceLabel, t.LineToolArrowMarker = i("wiuq").LineToolArrowMarker, t.LineToolNote = + i("gLxC").LineToolNote, + t.LineToolNoteAbsolute = i("gLxC").LineToolNoteAbsolute, t.LineToolSignpost = i("gASG") + .LineToolSignpost, t.LineToolBrush = i("+hLl").LineToolBrush, t.LineToolArc = i("0Pxc") + .LineToolArc, t.LineToolCallout = i("odCa").LineToolCallout, t.LineToolBalloon = i("me8f") + .LineToolBalloon, t.LineToolText = i("V3Oj").LineToolText, t.LineToolHorzLine = i("/DxK") + .LineToolHorzLine, t.LineToolHorzRay = i("CJIV").LineToolHorzRay, t.LineToolRectangle = i( + "7qI1").LineToolRectangle, t.LineToolEllipse = i("V086").LineToolEllipse, t + .LineToolTimeCycles = i("kIXa").LineToolTimeCycles, t.LineToolSineLine = i("bv/X") + .LineToolSineLine, t.LineToolGhostFeed = i("XUCF").LineToolGhostFeed, t + .LineToolBezierQuadro = i("Xyly").LineToolBezierQuadro, t.LineToolBezierCubic = i("N+BX") + .LineToolBezierCubic, t.LineToolArrow = i("QQu0").LineToolArrow, t.LineToolRay = i("5ZUI") + .LineToolRay, t.LineToolExtended = i("CHw2").LineToolExtended, t.LineToolSchiffPitchfork = + i("v5F8").LineToolSchiffPitchfork, t.LineToolSchiffPitchfork2 = i("XFad") + .LineToolSchiffPitchfork2, t.LineToolInsidePitchfork = i("EqoR").LineToolInsidePitchfork, t + .LineToolTextAbsolute = i("V3Oj").LineToolTextAbsolute, t.LineToolArrowMarkLeft = i("TohL") + .LineToolArrowMarkLeft, t.LineToolArrowMarkRight = i("TohL").LineToolArrowMarkRight, t + .LineToolArrowMarkUp = i("TohL").LineToolArrowMarkUp, t.LineToolArrowMarkDown = i("TohL") + .LineToolArrowMarkDown, t.LineToolFlagMark = i("aIha").LineToolFlagMark, t + .LineToolCypherPattern = i("bTqm").LineToolCypherPattern, t.LineToolElliottImpulse = i( + "xz+e").LineToolElliottImpulse, t.LineToolElliottTriangle = i("xz+e") + .LineToolElliottTriangle, t.LineToolElliottTripleCombo = i("xz+e") + .LineToolElliottTripleCombo, t.LineToolElliottCorrection = i("xz+e") + .LineToolElliottCorrection, t.LineToolElliottDoubleCombo = i("xz+e") + .LineToolElliottDoubleCombo, t.LineToolRiskRewardLong = i("tDUI").LineToolRiskRewardLong, t + .LineToolRiskRewardShort = i("tDUI").LineToolRiskRewardShort, t.LineToolPosition = i("ziJ5") + .LineToolPosition, t.LineToolOrder = i("B4/o").LineToolOrder, t.LineToolHighlighter = i( + "SMvR").LineToolHighlighter, t.LineToolPriceNote = i("Zl0W").LineToolPriceNote + }, + "OK+B": function(e, t, i) { + "use strict"; + var s = i("Eyy1").assert, + r = i("eJTA"), + n = r.rgba, + o = r.rgbaToString, + a = r.parseRgb, + l = (i("vTIA").TradingSourcesHorizontalAlignment, i("cWHH")), + c = i("1Wlv").PriceScale, + h = i("8sOK").StudyStub, + u = i("CW80"), + d = u.createLineTool, + p = u.createLineToolProperties, + _ = u.createStudyLineToolProperties, + m = u.isLineToolName, + f = u.isStudyLineToolName, + g = i("Ss5c").LineDataSource, + b = i("OH2X").LineToolBarsPattern, + v = i("OH2X").LineToolCallout, + S = i("CW80").isLineTool, + y = i("HLXm"), + w = i("GVHu"), + P = w.Study, + C = w.prepareStudyPropertiesForLoadChart, + x = i("3ClC").createStudy, + T = i("qJq3").Series, + I = i("dfhE"), + M = i("n5al"), + O = i("0YCj"), + L = i("Kxc7"), + A = i("txPx").getLogger("Chart.Serialization"), + E = i("OH2X").LineToolParallelChannel, + k = i("OH2X").LineToolTrendAngle, + D = i("OH2X").LineToolGhostFeed, + V = i("OH2X").LineToolElliott, + B = i("7ktv").PriceDataSource, + R = i("iDOr").Pane, + N = i("Tmoa"), + j = i("jofe").createDeferredPromise, + F = i("ApcL").preferencesByWhiteList, + W = (A = i("txPx").getLogger("Chart.Serialization"), i("mPvX").LineToolsGroupModel), + H = i("bmVy").StudyStatusType; + const { + isLineToolState: U, + isMainSeriesState: z, + isStudyState: G + } = i("Vs8b"), { + reorderDataSourcesStateZOrder: q + } = i("2jby"); + l.prototype.state = function(e, t, i, s) { + for (var r = { + panes: [] + }, n = 0; n < this.panes().length; n++) r.panes.push(this.panes()[n].state(!0, e, ! + 1, t, i, s)); + r.timeScale = this._timeScale.state(e); + var o = null, + a = this.properties(), + l = a.tradingProperties.state(); + return r.chartProperties = { + paneProperties: a.paneProperties.state(), + scalesProperties: a.scalesProperties.state(), + publishedChartsTimelineProperties: o ? o.state(e) : void 0, + chartEventsSourceProperties: a.chartEventsSourceProperties.state(), + tradingProperties: l, + priceScaleSelectionStrategyName: a.priceScaleSelectionStrategyName.value() + }, a.chartEventsSourceProperties && (r.chartProperties.chartEventsSourceProperties = + a.chartEventsSourceProperties.state()), s || (r.lineToolsGroups = this + .lineToolsGroupModel().state(t)), r.version = this.version(), r.timezone = this + .timezone(), r.sessions = this.sessions().state(e), r.shouldBeSavedEvenIfHidden = + this._shouldBeSavedEvenIfHidden, r + }, l.prototype.chartPropertiesTransparencyMigrate = function(e) { + var t, i, s; + e.chartProperties.paneProperties.crossHairProperties && (s = e.chartProperties + .paneProperties.crossHairProperties, N.isHexColor(s.color) && (i = s + .transparency / 100, t = a(s.color), s.color = o(n(t, i)))), e + .chartProperties.paneProperties.dataWindowProperties && (s = e.chartProperties + .paneProperties.dataWindowProperties, N.isHexColor(s.color) && (i = s + .transparency / 100, t = a(s.color), s.color = o(n(t, i)))) + }, l.prototype.resetDeferredStudies = function() { + new Y(this).reset() + }, l.prototype._getExceedingChildStudies = function(e) { + for (var t = [], i = 0; i < e.length; ++i) t = t.concat(e[i].sources || []); + var s = 0; + for (var r = [], n = {}, o = 0, a = 1e6; t.length && --a;) { + var l = t[o]; + (l.ownerSource && n[l.ownerSource] || !l.ownerSource) && (n[l.id] = l, t.splice(t + .indexOf(l), 1), l.ownerSource && "Study" === l.type && l.state && l.state + .isChildStudy && ++s > 1 && r.push(l)), o = (o + 1) % t.length + } + return r + }, l.prototype.restoreState = function(e, t, i) { + new Y(this).reset(); + var s = {}; + if (!e.panes) return void A.logDebug("ChartModel.restoreState: invalid state"); + if (!Array.isArray(e.panes)) return void A.logDebug( + "ChartModel.restoreState: invalid state"); + if (e.panes.length < 1) return void A.logDebug( + "ChartModel.restoreState: invalid state"); + if (this._shouldBeSavedEvenIfHidden = void 0 === e.shouldBeSavedEvenIfHidden || e + .shouldBeSavedEvenIfHidden, e.chartProperties && !e.chartProperties.timezone && (e + .chartProperties.timezone = e.timezone), e.chartProperties) { + var r = TradingView.factoryDefaults("chartproperties").scalesProperties; + if (TradingView.merge(r, e.chartProperties.scalesProperties), !("showLastValue" in + r) || "showSeriesLastValue" in r || "showStudyLastValue" in r || (r + .showSeriesLastValueProperty = r.showLastValue, r + .showStudyLastValueProperty = r.showLastValue), "showSeriesLastValue" in + r && (s.showSeriesLastValueProperty = !0), "showStudyLastValue" in r && (s + .showStudyLastValueProperty = !0), e.chartProperties.paneProperties + .vertGridProperties = e.chartProperties.paneProperties.vertGridProperties || + TradingView.clone(e.chartProperties.paneProperties.gridProperties), + e.chartProperties.paneProperties.horzGridProperties = e.chartProperties + .paneProperties.horzGridProperties || TradingView.clone(e.chartProperties + .paneProperties.gridProperties), "backgroundType" in e.chartProperties + .paneProperties || (e.chartProperties.paneProperties.backgroundType = "solid"), + this._properties.paneProperties.mergeAndFire(e.chartProperties.paneProperties), + this._properties.scalesProperties.mergeAndFire(r), e.chartProperties.timezone && + this._properties.timezone.setValue(e.chartProperties.timezone), e + .chartProperties.chartEventsSourceProperties && this._properties + .chartEventsSourceProperties && this._properties.chartEventsSourceProperties + .mergeAndFire(e.chartProperties.chartEventsSourceProperties), e.chartProperties + .tradingProperties && this._properties.tradingProperties) { + e.chartProperties.tradingProperties.lineLength; + 0, this._properties.tradingProperties.mergeAndFire(e.chartProperties + .tradingProperties) + } + this._timeScale.restoreState(e.timeScale, t), this._updateDateTimeFormatter() + } + if (e.timeScale && this._timeScale.restoreState(e.timeScale, t), !this.readOnly()) { + var n = this._getExceedingChildStudies(e.panes); + if (n.length) { + for (var o = e.panes.length - 1; o >= 0; --o) { + for (var a = (d = e.panes[o]).sources.length - 1; a >= 0; --a) { + var l = d.sources[a]; + ~n.indexOf(l) && d.sources.splice(a, 1) + } + d.sources.length || e.panes.splice(o, 1) + } + 0 + } + } + const c = e.version || 0; + var h = e.panes; + this.panes()[0].restoreState(h[0], t, c, s, i, !0); + var u = 1; + for (o = 1; o < e.panes.length; o++) { + var d, p = e.panes[o]; + if (0 !== p.sources.length)(d = this.panes()[u] || this.createPane()).restoreState( + p, t, c, s, i, !0), d.mainDataSource() ? u += 1 : this.removePane(d); + else A.logWarn("Empty pane detected - restoring is skipped. idx=" + o + ", state=" + + JSON.stringify(p)) + } + this._invalidateBarColorerCaches(); + var _ = this.dataSources(), + m = 0; + for (o = 0; o < _.length; o++) { + var f = _[o]; + TradingView.isInherited(f.constructor, g) && (m++, f.calcIsActualSymbol()) + } + this.updateTimeScaleBaseIndex(), this.recalculateAllPanes(), this.fullUpdate(), this + .syncESD(); + var b = TVLocalStorage.getItem("linetools_limit") || 1e3; + return window.is_authenticated && window.user && window.user.settings && (b = window + .user.settings.linetools_limit || b), e.sessions && this.sessions() + .restoreState(e.sessions, t), e.lineToolsGroups && (this._lineToolsGroupModel = W + .fromState(this, e.lineToolsGroups)), m > b && m % 100 == 0 ? { + lines_limit_exceeded: !0, + line_tools_count: m + } : (this.panes().forEach(function(e) { + this._dataSourceCollectionChanged.fire(e) + }.bind(this)), this._lineToolsGroupModel.fireChangedAll(), {}) + }, R.prototype.state = function(e, t, i, s, r, n) { + var o = {}, + a = new Map; + + function l(e) { + if (a.has(e)) return a.get(e); + var o = null, + l = i && !e.isSavedInStudyTemplates() || !e.state || S(e) && n || !(o = e.state( + t, r)) || !e.isSavedInChart(t) || s && e.isActualSymbol && !e + .isActualSymbol() || e.isPhantom() ? null : o; + return a.set(e, l), l + } + if (e) { + o.sources = []; + for (var c = 0; c < this.m_dataSources.length; c++) { + var h = l(this.m_dataSources[c]); + null !== h && o.sources.push(h) + } + } + + function u(e) { + return null !== a.get(e) + } + + function d(e) { + return !n || !S(e) + } + o.leftAxisesState = this._leftPriceScales.map((function(e) { + var t = {}; + return t.state = e.state(), t.sources = e.dataSources().filter(u) + .filter(d).map((function(e) { + return e.id() + })), t + })), o.rightAxisesState = this._rightPriceScales.map((function(e) { + var t = {}; + return t.state = e.state(), t.sources = e.dataSources().filter(u) + .filter(d).map((function(e) { + return e.id() + })), t + })), o.overlayPriceScales = {}; + for (c = 0; c < this.m_dataSources.length; c++) { + var p = this.m_dataSources[c]; + if (this.isOverlay(p) && p.isSavedInChart(t)) { + var _ = p.priceScale(); + o.overlayPriceScales[p.id()] = _ ? _.state() : null + } + } + return o.stretchFactor = this._stretchFactor, this.m_mainDataSource && (o.mainSourceId = + this.m_mainDataSource.id()), o.priceScaleRatio = this._currentPriceScaleRatio, o + }, R.prototype.sourceById = function(e) { + for (var t = 0; t < this.m_dataSources.length; t++) + if (this.m_dataSources[t].id() === e) return this.m_dataSources[t]; + return null + }, R.prototype.isESDStudy = function(e) { + return "Script$TV_EARNINGS@tv-scripting" === e.id || + "Script$TV_DIVIDENDS@tv-scripting" === e.id || "Script$TV_SPLITS@tv-scripting" === e + .id || "ESD$TV_EARNINGS@tv-scripting" === e.id || + "ESD$TV_DIVIDENDS@tv-scripting" === e.id || "ESD$TV_SPLITS@tv-scripting" === e.id || + "Earnings@tv-basicstudies" === e.id || "Dividends@tv-basicstudies" === e.id || + "Splits@tv-basicstudies" === e.id + }, R.prototype.isStudyToSkip = function(e) { + return !!this.isESDStudy(e) + }, R.prototype.restoreState = function(e, t, i, s, r, n) { + s = s || {}, e.stretchFactor && (this._stretchFactor = e.stretchFactor); + var o = {}; + if (e.sources) { + var a = e.sources.filter((function(e) { + return !!e && ("MainSeries" === e.type || (!e.points || !e.points + .some((function(e) { + return null === e.time_t || !isFinite(e + .time_t) + })) || (A.logNormal("Dropped invalid " + e.type + + ". Reason: non-numeric point time"), !1))) + }), this); + const c = a.findIndex(z); - 1 !== c && this.model().mainSeries().setObsoleteZOrder( + a[c].zorder), i < 3 && q(a); + var l = -1 !== this.m_dataSources.indexOf(this._model.mainSeries()); + this.clearSeries(n), this.m_mainDataSource = null, l && this + ._addSourceToCollections(this._model.mainSeries(), n), + function() { + var t = a.find((function(t) { + return t.id === e.mainSourceId + })); + if (void 0 !== t) + if (TradingView[t.type] && m(t.type)) { + for (var i = null, s = 0; s < a.length; s++) { + var r = a[s]; + if (!TradingView[t.type] || !m(r.type)) { + if (null !== i) return void A.logWarn( + "Pane contains more than 1 possibly main sources - auto fix cannot be applied" + ); + i = r + } + } + if (null !== i) { + var n = e.mainSourceId, + o = 0; + e.mainSourceId = i.id, a.forEach((function(e) { + e.ownerSource === n && (e.ownerSource = i.id, + o += 1) + })), A.logNormal( + "Auto fix broken pane is applied, changed line tools=" + + o + ", changed from=" + n + " to=" + i.id) + } else A.logWarn( + "Pane contains only line tools - possible we need to remove this pane?" + ) + } else A.logNormal( + "The type of main source is not line tool - fix is unnecessary"); + else A.logWarn("There is no main source with id " + e.mainSourceId + + ", total sources=" + a.length) + }(); + for (var h = 0; h < a.length; h++) { + if ("study_Sessions" === (u = a[h]).type) { + this.model().sessions().restoreOldState(u, t); + break + } + } + for (h = 0; h < a.length; h++) { + var u; + if ("study_Sessions" !== (u = a[h]).type) { + var d = u.id; + null === this._model.dataSourceForId(u.id) || "MainSeries" === u.type ? (o[ + d] = u.ownerSource, z(u) ? this._restoreMainSeries(u, t, l, s, + r, n) : G(u) ? this.restoreStudy(u, t, s, n) : U(u) ? (u + .state && (u.state.zOrderVersion = 2), + this.restoreLineTool(u, t, void 0, n)) : TradingView[u.type] && + TradingView[u.type].createFromState && this._restoreSpecialSource(u, + t, n)) : A.logError("Duplicate id while restoring pane: " + u + .type + "," + u.id) + } + } + } + var p, _, f = new Set, + b = this; + + function v(e) { + var t = defaults("chartproperties").paneProperties.axisProperties, + i = new c(b.model().properties().scalesProperties, t); + return i.restoreState(e.state), e.sources.forEach((function(e) { + var s = b.dataSourceForId(e); + s && function e(t, i, s) { + f.has(t) || (f.add(t), void 0 !== s.m_showSymbolLabels && + t instanceof T && b.model().properties() + .scalesProperties.showSymbolLabels.setValue(s + .m_showSymbolLabels), L(t, i), b._model + .children(t, !0).forEach((function(t) { + e(t, i, s) + }))) + }(s, i, t) + })), 0 === i.dataSources().length ? null : i + } + if (e.leftAxisesState) p = e.leftAxisesState.map(v).filter((function(e) { + return null !== e + })); + else { + var S = v({ + state: e.leftAxisState, + sources: e.leftAxisSources + }); + p = null !== S ? [S] : [] + } + if (this._leftPriceScales.slice().forEach(function(e) { + this.removePriceScale(e) + }.bind(this)), this._leftPriceScales = [], p.forEach((function(e) { + b._placePriceScale(e, "left") + })), e.rightAxisesState) _ = e.rightAxisesState.map(v).filter((function(e) { + return null !== e + })); + else { + var y = v({ + state: e.rightAxisState, + sources: e.rightAxisSources + }); + _ = null !== y ? [y] : [] + } + this._rightPriceScales.forEach(function(e) { + this.removePriceScale(e) + }.bind(this)), this._rightPriceScales = [], _.forEach((function(e) { + b._placePriceScale(e, "right") + })), this._currentPriceScaleRatio = e.priceScaleRatio || e.leftPriceScaleRatio || e + .rightPriceScaleRatio || null; + var w = new Map; + for (h = 0; h < this.m_dataSources.length; h++) { + var C = this.m_dataSources[h]; + if (!f.has(C)) { + var x; + if (e.overlayPriceScales && e.overlayPriceScales[C.id()]) { + var I = e.overlayPriceScales[C.id()]; + w.has(I.id) ? x = w.get(I.id) : ((x = new c(this._model.properties() + .scalesProperties)).setHeight(this.m_height), I + .m_isAutoScale = !0, I.m_isLog = !1, I.m_isPercentage = !1, I + .m_isLockScale = !1, x.restoreState(I), w.set(I.id, x)) + } else(x = new c(this._model.properties().scalesProperties)).setHeight(this + .m_height); + L(C, x) + } + } + for (var d in o) { + var M = o[d]; + if (M)(C = this.dataSourceForId(d)) && this.dataSourceForId(d).setOwnerSource(this + .dataSourceForId(M)) + } + if (e.mainSourceId && !this.containsMainSeries() && (this.m_mainDataSource = this + .dataSourceForId(e.mainSourceId)), !this.m_mainDataSource) + for (h = 0; h < this.m_dataSources.length; h++) { + C = this.m_dataSources[h]; + if (TradingView.isInherited(C.constructor, B)) { + this.m_mainDataSource = C; + break + } + } + for (h = 0; h < this.m_dataSources.length; h++) { + C = this.m_dataSources[h]; + if (TradingView.isInherited(C.constructor, g)) C.ownerSource() || C.setOwnerSource( + this.mainDataSource()), C.isFixed() && C.restoreFixedPoints(); + else if (TradingView.isInherited(C.constructor, P)) { + var O = C.properties(); + O.linkedToSeries && O.linkedToSeries.value() && (C.ownerSource() || C + .setOwnerSource(this.model().mainSeries())) + } + } + + function L(e, t) { + b.removeSourceFromPriceScale(e), e.setPriceScale(t), t.addDataSource(e) + } + this._updateMargins(), this._cachedOrderedSources.clear() + }, R.prototype._restoreMainSeries = function(e, t, i, s, r, n) { + var o = e.id, + a = e.state; + if (a && r && (a.style = r.style || a.style, a.interval = r.interval || a.interval, + a.symbol = r.symbol || a.symbol, r.symbol && delete a.currencyId), a && (a + .style, I.STYLE_HILO), a && ["candleStyle", "hollowCandleStyle", "haStyle"] + .forEach((function(e) { + a[e] && (a[e].wickUpColor = a[e].wickUpColor || a[e].wickColor, a[e] + .wickDownColor = a[e].wickDownColor || a[e].wickColor) + })), a && (a.statusViewStyle = a.statusViewStyle || {}, !a.statusViewStyle + .symbolTextSource)) { + var l = !!a.statusViewStyle.showSymbolAsDescription; + a.statusViewStyle.symbolTextSource = l ? "ticker" : "description" + } + if (a && (a.extendedHours ? a.sessionId = "extended" : a.sessionId || (a.sessionId = + "regular"), delete a.extendedHours), !i) { + var c = this._model.mainSeries(); + this._model.paneForSource(c).removeDataSource(c, !1, n), this + ._addSourceToCollections(c, n) + } + const h = this.model().mainSeries(), + u = h.properties(); + if (this.m_mainDataSource = h, (g = a && a.style ? a.style : void 0) === T.STYLE_PNF && + "ATR" === u.pnfStyle.inputs.style.value() ? u.pnfStyle.inputs.style._value = + "Traditional" : g === T.STYLE_RENKO && "ATR" === u.renkoStyle.inputs.style + .value() && (u.renkoStyle.inputs.style._value = "Traditional"), a && !a + .hasOwnProperty( + "showSessions") && (a.showSessions = !1), a && t && (a.showCountdown = !1), a && + (t && !("showSeriesLastValueProperty" in s) && "showLastValue" in a && this._model + .properties().scalesProperties.showSeriesLastValue.setValue(a.showLastValue), + delete a.showLastValue), a) + for (var d = { + haStyle: M.chartStyleStudyId(T.STYLE_HEIKEN_ASHI, !0), + renkoStyle: M.chartStyleStudyId(T.STYLE_RENKO, !0), + pbStyle: M.chartStyleStudyId(T.STYLE_PB, !0), + kagiStyle: M.chartStyleStudyId(T.STYLE_KAGI, !0), + pnfStyle: M.chartStyleStudyId(T.STYLE_PNF, !0), + rangeStyle: M.chartStyleStudyId(T.STYLE_RANGE, !0) + }, p = this._model.studyVersioning(), _ = h.styleStudyInfos(), m = Object + .keys(I.SYMBOL_STRING_DATA), f = 0; f < m.length; f++) { + var g = m[f], + b = I.STYLE_SHORT_NAMES[g] + "Style", + v = b in e ? e[b].studyId : d[b]; + if (null != (g = a[b])) { + var S = g.inputs, + y = O.parseIdString(v), + w = _[b].studyId, + P = O.parseIdString(w), + C = p.updateStudyInputs(y.id, y.version, P.version, S, null); + g.inputs = C + } + } + const x = h.sessionId(); + h.restoreState(e, t), this.changeSourceId(h, o), h.sessionId() !== x && u.sessionId + .listeners().fire(u.sessionId) + }, R.prototype.restoreStudy = function(e, t, i, s) { + if (t && void 0 === e.data && void 0 === e.nonSeriesData && void 0 === e.indexes) A + .logError("Cannot restore (skipping) study without data " + e.id + ", " + e.metaInfo + .id); + else { + var r = e.id, + n = e.state, + o = e.zorder, + a = e.ownerSource, + l = TradingView.clone(e.metaInfo); + if (Object.assign(l, O.parseIdString(l.id)), !this.isStudyToSkip(l) || t) { + var c = n, + u = this._model.studyVersioning(), + d = u.patchPropsStateAndMetaInfo(c, l, { + oldShowStudyLastValueProperty: t && !i.showStudyLastValueProperty + }); + c = d.propsState, l = d.metaInfo; + var p = new h(this._model, e, l.shortDescription); + p.setId(r), p.setZorder(o); + var _ = this; + if (t) f(null); + else { + var m = u.updateMetaInfoAsync(l); + m.sync ? f(m.result) : m.result.then((function(e) { + f(e) + })).catch((function(e) { + p.setFailed("error: " + e) + })) + } + return p && (p.setZorder(o), this._addSourceToCollections(p, s), this + ._processMainSourceChange()), this._cachedOrderedSources.clear(), p + } + A.logNormal("Skipping study " + l.id) + } + + function f(i) { + p.setStatus({ + type: H.Undefined + }); + var s = i || new O(l), + n = new Y(_._model); + + function o(o) { + var a = C(l, i, c, null, u, o), + h = x(_._model, a, o || _._model.mainSeries(), s); + if (h.setId(r), h.setOwnFirstValue(void 0 === e.ownFirstValue ? null : e + .ownFirstValue), t) { + var d = u.patchStudyData(l, e.data, e.nonSeriesData, e.indexes); + h.restoreData(d.data, d.nsData, d.indexes) + } + _._model.replaceStudyStub(p, h) || (p = h), n.add(r, h) + } + a && e.state.isChildStudy ? n.get(a).then(o) : o() + } + }, R.prototype.restoreLineTool = function(e, t, i, r) { + delete e.state.lastUpdateTime, i = void 0 === i || i, V.migrateState(e), y.migrateState( + e); + var n = e.type, + o = e.id, + a = e.state, + l = i ? e.zorder : this.newLineToolZOrder(); + s(m(n), "invalid data source type:" + n + " (expected to be a Line Tool)"); + var c, h, u = null; + if (f(n)) { + var g = (e = (u = this._model.studyVersioning()).patchPointsBasedStudyState(e)) + .metaInfo; + Object.assign(g, O.parseIdString(g.fullId)); + var S = u.updateMetaInfo(g) || g; + h = _(n, g, S, a, u), t ? h.merge({ + fixedSize: !1 + }) : h.merge({ + fixedSize: !0 + }), c = d(n, this._model, h, S, !0) + } else h = p(n, a), t ? h.merge({ + fixedSize: !1 + }) : h.merge({ + fixedSize: !0 + }), c = d(n, this._model, h, null, !0); + c.setId(o), c.linkKey().setValue(e.linkKey || null); + var w = e.alertId; + w && c.canHasAlert() && "function" == typeof c.setAlert && L.enabled("alerts") && !this + ._model.readOnly() && !this._model.isJustClonedChart() && c.setAlert(w, { + noChartSave: !0 + }); + var P = e.indexes ? e.indexes : []; + if (P = P.slice(0, e.points.length), c.isFixed() ? c.restorePositionPercents(e + .positionPercents) : c.restorePoints(e.points, P, t), c instanceof b || + c instanceof v || c instanceof k || c instanceof D || c instanceof E || + c instanceof E) c.restoreData(e); + else if (t && c.restoreData) { + var C = e; + u && (C.graphics = u.patchPointsBasedStudyData(C.metaInfo, C.graphics)), c + .restoreData(C) + } + var x = null == e.version ? 1 : e.version, + T = null == c.version ? 1 : c.version; + return x !== T && "function" == typeof c.migrateVersion && c.migrateVersion(x, T, { + pane: this, + model: this._model, + properties: h + }), void 0 !== l && c.setZorder(l), this._addSourceToCollections(c, r), this + ._cachedOrderedSources.clear(), c + }, R.prototype._restoreSpecialSource = function(e, t, i) { + var s = TradingView[e.type]; + if (s && s.createFromState) { + var r = s.createFromState(e, t, this._model); + r && (r.setId(e.id), this._addSourceToCollections(r, i), r.zorder && r.setZorder(r + .zorder)) + } + }, l.prototype.restoreTheme = function(e, t, i) { + var s = { + hollowCandle: { + related: "candle" + } + }; + for (var r in s) + if (!e.mainSourceProperties[r + "Style"]) { + var n = e.mainSourceProperties[s[r].related + "Style"]; + e.mainSourceProperties[r + "Style"] = TradingView.clone(n) + } this._undoModel.chartLoadTheme(this, e, t, i) + }, l.prototype.preferences = function() { + return F(this, this.mainSeries()) + }; + var Y = function() { + var e = [], + t = []; + + function i(s) { + var r = e.indexOf(s); + return ~r ? t[r] : this instanceof i ? (this._source = s, this._studies = {}, this + ._deferreds = {}, e.push(s), void t.push(this)) : new i(s) + } + return i.prototype.add = function(e, t) { + this._deferreds[e] && (this._deferreds[e].resolve(t), delete this._deferreds[ + e]), this._studies[e] = t + }, i.prototype.get = function(e) { + return this._studies[e] ? Promise.resolve(this._studies[e]) : (this._deferreds[ + e] || (this._deferreds[e] = j()), this._deferreds[e].promise) + }, i.prototype.reset = function() { + var i = e.indexOf(this._source); + ~i && (e.splice(i, 1), t.splice(i, 1)) + }, i + }(); + e.exports = l + }, + OLhd: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "createDwmAligner", (function() { + return c + })), i.d(t, "isAlignmentEnabled", (function() { + return h + })), i.d(t, "createTimeToBarTimeAligner", (function() { + return u + })); + var s = i("jCNj"), + r = i("Kxc7"), + n = i("LxhU"), + o = i("ZmuQ"), + a = i("IiTo"); + const l = new o.b("Etc/UTC", "0000-0000:1234567"); + + function c(e, t) { + if (!h() || !n.Interval.isDWM(e)) return null; + const i = new o.b(t.timezone, t.session, t.session_holidays, t.corrections), + r = Object(a.newBarBuilder)(e, i, l); + return { + timeToSessionStart: e => r.tradingDayToSessionStart(e), + timeToExchangeTradingDay: e => { + const t = s.utc_to_cal(i.timezone, e), + r = i.spec.correctTradingDay(t); + return s.set_hms(r, 0, 0, 0, 0, s.get_timezone("Etc/UTC")), r.getTime() + } + } + } + + function h() { + return !r.enabled("disable_resolution_rebuild") + } + + function u(e, t) { + if (!h()) return e => e; + const i = new o.b(t.timezone, t.session, t.session_holidays, t.corrections), + s = Object(a.newBarBuilder)(e, i, i, !1); + return e => s.alignTimeIfPossible(e) + } + }, + Ocx9: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("wZIs"), + r = i("tc+8"); + + function n(e, t, i, r) { + var n = e ? s.defaults : s.factoryDefaults, + a = t.startsWith("study_") ? TradingView.clone(n("study")) : {}, + l = TradingView.clone(n(t, r)); + return t.startsWith("study_") && l.inputs && delete l.inputs.symbol, + "linetoolicon" === t && e && (l.icon = s.defaults(t).icon), l = o(l, i), + TradingView.merge(a, l), a + } + + function o(e, t) { + var i = {}; + for (var s in e) t.indexOf(s) < 0 && (i[s] = e[s]); + return i + } + + function a(t, i, s, o) { + var l; + void 0 === o && (o = !0), this._defaultName = t, s ? l = i : (l = n(o, t, [], null), + i && TradingView.merge(l, i)), r.call(this, l), this._defaultName = t, this + ._useUserPreferences = o, this.listeners().subscribe(this, a.prototype + .onPropertyChanged), this._exclusions = [], this + ._restoreFactoryDefaultsEvent = new e + } + inherit(a, r), a._saveDefaults = !1, a.prototype.preferences = function() { + return this.state(this._exclusions) + }, a.prototype.mergePreferences = function(e) { + this.mergeAndFire(o(e, this._exclusions)) + }, a.prototype.addExclusion = function(e) { + this._exclusions.indexOf(e) < 0 && this._exclusions.push(e) + }, a.prototype.restoreFactoryDefaults = function() { + var e = n(!1, this._defaultName, this._exclusions, null); + this.mergeAndFire(e), this._defaultName.startsWith("study_") && !this + ._defaultName.startsWith("study_VbPFixed") || this.saveDefaults(), this + ._restoreFactoryDefaultsEvent.fire() + }, a.prototype.onRestoreFactoryDefaults = function() { + return this._restoreFactoryDefaultsEvent + }, a.prototype.onPropertyChanged = function() { + !a._saveDefaults || this._defaultName.startsWith("study_") && !this._defaultName + .startsWith("study_VbPFixed") || this.saveDefaults() + }, a.prototype.saveDefaults = function() { + this._useUserPreferences && s.saveDefaults(this._defaultName, this + .preferences()) + }, a.prototype.clone = function(e) { + for (var t = new a(this._defaultName, this.state(), e && e.replaceByState, this + ._useUserPreferences), i = 0; i < this._exclusions.length; ++i) t + .addExclusion(this._exclusions[i]); + return t + }, t.DefaultProperty = a, t.saveDefaultProperties = function(e) { + a._saveDefaults = e + } + }).call(this, i("aIyQ")) + }, + OiSa: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isDrawingToolbarVisible", (function() { + return c + })); + var s = i("Vdly"), + r = i("Kxc7"), + n = i("hY0g"), + o = i.n(n); + const a = !r.enabled("hide_left_toolbar_by_default"), + l = s.getBool("ChartDrawingToolbarWidget.visible", a), + c = new o.a(l) + }, + OsWk: function(e, t) { + e.exports = + '' + }, + OwDf: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PivotPointsStandardLastPricesView", (function() { + return o + })); + var s = i("k9/m"); + const r = ["p", "s1", "r1", "s2", "r2", "s3", "r3", "s4", "r4", "s5", "r5"], + n = { + P: "P", + S1: "S1/R1", + S2: "S2/R2", + S3: "S3/R3", + S4: "S4/R4", + S5: "S5/R5", + R1: "S1/R1", + R2: "S2/R2", + R3: "S3/R3", + R4: "S4/R4", + R5: "S5/R5" + }; + class o { + constructor(e) { + this._visiblePivots = new Set, this._invidated = !0, this._prices = [], this + ._source = e + } + visiblePivots() { + return this._visiblePivots + } + update() { + this._invidated = !0 + } + prices() { + return this._invidated && (this._updateImpl(), this._invidated = !1), this._prices + } + _updateImpl() { + this._visiblePivots.clear(); + const e = this._source.model(), + t = this._source.priceScale(); + if (null === t) return; + if (e.timeScale().isEmpty() || t.isEmpty()) return; + const i = e.timeScale().visibleBarsStrictRange(); + if (null === i) return; + if (!this._source.customData() || !this._source.customData().pivots) return; + const o = e.mainSeries().bars().search(i.lastBar(), s.PlotRowSearchMode + .NearestLeft); + if (null === o) return; + const a = o.index, + l = this._source.customData().pivots, + c = this._source.indexes(), + h = this._source.properties(), + u = this._source.firstValue(); + for (let e = 0; e < l.length; e++) { + if (!l[e]) continue; + const i = c[l[e].startIndex], + s = c[l[e].endIndex], + o = h.inputs.showHistoricalPivots.value(); + if (i <= a && (s >= a || o)) { + this._visiblePivots.add(l[e]), this._prices = []; + for (let i = 0; i < r.length; i++) { + const s = r[i], + o = l[e][s]; + if (void 0 === o || null === u) continue; + const a = t.priceToCoordinate(o, u), + c = s.toUpperCase(), + d = n[c], + p = h.levelsStyle.colors[d].value(); + this._prices.push({ + formatted: t.formatPrice(o, u), + price: o, + coordinate: a, + color: p + }) + } + } + } + } + } + }, + Owlf: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + const s = "large" + }, + Oy0l: function(e, t, i) {}, + PAcw: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "GridRenderer", (function() { + return n + })); + var s = i("jFln"), + r = i("gAom"); + class n { + constructor() { + this._data = null + } + setData(e) { + this._data = e + } + draw(e, t) { + if (null === this._data) return; + const i = t.pixelRatio, + n = Math.max(1, Math.floor(i)); + e.lineWidth = n; + const o = Math.ceil(this._data.h * i), + a = Math.ceil(this._data.w * i); + if (e.save(), e.lineCap = "butt", this._data.vertLinesVisible) { + e.strokeStyle = this._data.vertLinesColor, Object(s.setLineStyle)(e, this._data + .vertLineStyle); + for (const t of this._data.timeMarks) { + const s = Math.round(t.coord * i); + Object(r.drawVerticalLine)(e, s, 0, o) + } + } + if (this._data.horzLinesVisible) { + e.strokeStyle = this._data.horzLinesColor, Object(s.setLineStyle)(e, this._data + .horzLineStyle); + for (const t of this._data.priceMarks) { + const s = Math.round(t.coord * i); + Object(r.drawHorizontalLine)(e, s, 0, a) + } + } + e.restore() + } + hitTest(e) { + return null + } + } + }, + PL0c: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("aO4+").Point, + r = i("2kV1").StudyStatusView, + n = i("it7y").StudyDataWindowView, + o = i("Qq0B").NonSeriesStudy, + a = i("UHyS").StandardPivotPointsPriceAxisView, + l = i("KtbP").PanePriceAxisView, + c = i("VdBB").HitTestResult, + h = i("Zy3/").CompositeRenderer, + u = i("c44N").areEqualPaneRenderParams, + d = i("2EnG").StandardPivotPointsImageCache, + p = i("OwDf").PivotPointsStandardLastPricesView, + _ = i("Fdrt").PaneRendererStandardPivotLabel, + m = i("l4sv").HorizontalLineRenderer; + class f { + constructor(e, t) { + this._model = e, this._source = t, this._pivots = [], this._textCache = {} + } + setCache(e) { + this._cache = e + } + priceAxisViews(e, t) { + return this._priceAxisViews + } + mergeLabel(e, t, i) { + var s = "" + t; + void 0 === e[s] ? (e[s] = {}, e[s].text = i, e[s].ids = [this.complete( + i)]) : (e[s].text += "/" + i, e[s].ids.push(this.complete(i))) + } + complete(e) { + return "P" === e ? e : "S" + e[1] + "/R" + e[1] + } + update() { + this._invalidated = !0 + } + _updateImpl() { + if (this._source.pricesView().prices(), this._pivots = [], this._source + .customData() && this._source.customData().pivots && this._source + .properties().visible.value()) { + var e = this._source.customData().pivots, + t = this._source._indexes, + i = this._model.timeScale(), + s = this._source.priceScale(); + if (s && !s.isEmpty() && !i.isEmpty() && e) { + var r = i.visibleBarsStrictRange(), + n = r.firstBar(), + o = r.lastBar(); + if (this._source.ownerSource()) + for (var a = this._source.ownerSource().firstValue(), l = 0; l < + e.length; l++) + if (e[l]) { + var c = t[e[l].startIndex], + h = t[e[l].endIndex]; + if (!(h < n || c > o)) { + var u = {}, + d = this._source.properties().levelsStyle + .visibility; + d.P.value() && this.mergeLabel(u, e[l].p, "P"), d[ + "S1/R1"].value() && (this.mergeLabel(u, e[l] + .s1, "S1"), this.mergeLabel(u, e[l].r1, + "R1")), d["S2/R2"].value() && (this + .mergeLabel(u, e[l].s2, "S2"), + this.mergeLabel(u, e[l].r2, "R2")), d[ + "S3/R3"].value() && (this.mergeLabel(u, e[l] + .s3, "S3"), this.mergeLabel(u, e[l].r3, + "R3")), d["S4/R4"].value() && (this + .mergeLabel(u, e[l].s4, "S4"), this + .mergeLabel(u, e[l].r4, "R4")), d["S5/R5"] + .value() && (this.mergeLabel(u, e[l].s5, "S5"), + this.mergeLabel(u, e[l].r5, "R5")); + var p = i.indexToCoordinate(c), + _ = i.indexToCoordinate(h); + for (var m in u) { + var f = parseFloat(m), + g = s.priceToCoordinate(f, a); + this._pivots.push({ + x1: p, + x2: _, + y: g, + label: u[m].text, + labelIds: u[m].ids, + src: e[l] + }) + } + } + } + } + } + } + renderer() { + this._invalidated && (this._updateImpl(), this._invalidated = !1); + for (var e = new h, t = this._source.properties().levelsStyle.colors, i = + this._source.properties().levelsStyle.widths, r = this._source + .visiblePivots(), n = 0; n < this._pivots.length; n++) { + var o = this._pivots[n]; + if (r.has(o.src)) { + var a = { + width: this._model.timeScale().width(), + height: this._source.priceScale().height(), + color: t[o.labelIds[0]].value(), + linewidth: i[o.labelIds[0]].value(), + linestyle: CanvasEx.LINESTYLE_SOLID, + y: o.y, + left: o.x1, + right: o.x2 + }, + l = new m; + if (l.setData(a), l.setHitTest(new c(c.REGULAR)), e.append(l), this + ._source.properties().levelsStyle.showLabels.value()) { + var u = function(e) { + return this._source.getCache(e) + }.bind(this); + e.append(new _(u, new s(o.x1, o.y), o.label)) + } + } + } + return e + } + } + t.study_PivotPointsStandard = class extends o { + constructor(e, t, i, s) { + super(e, t, i, s); + for (var r = ["P", "S1/R1", "S2/R2", "S3/R3", "S4/R4", "S5/R5"], n = + this.properties().levelsStyle.visibility, o = 0; o < r + .length; o++) n[r[o]].listeners().subscribe(this, this + .processHibernate); + this._cacheDrawParams = null, this._cache = null + } + indexes() { + return this._indexes + } + getCache(e) { + return this.createCacheIfRequred(e), this._cache + } + createCacheIfRequred(e) { + if (null === this._cache || null == this._cacheDrawParams || !u(e, this + ._cacheDrawParams)) { + this._cache && this._cache.destroy(); + var t = this._getActualCacheParams(); + this._cache = new d(e, t.font, t.fontSize, t.backColors), this + ._cache.setPrices(this._pricesView.prices()), this + ._cacheDrawParams = e, this._cacheInvalidated = !1, this._cache + .reset(t), this._cache.setPrices(this._pricesView.prices()) + } + } + lastValueData(e, t, i) { + var s = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", + "R5" + ].indexOf(e.toUpperCase()), + r = this._pricesView.prices()[s]; + return null != r ? r : { + noData: !0 + } + } + priceLabelText(e) { + return this._metaInfo.shortDescription + ":" + e.toUpperCase() + } + pricesView() { + return this._pricesView + } + _getActualCacheParams() { + var e = {}; + return e.font = this.properties().font.value(), e.fontSize = this + .properties().fontsize.value(), e.backColors = [this.properties() + .levelsStyle.colors.P.value(), this.properties().levelsStyle + .colors["S1/R1"].value(), this.properties().levelsStyle.colors[ + "S1/R1"].value(), this.properties().levelsStyle.colors[ + "S2/R2"].value(), this.properties().levelsStyle.colors[ + "S2/R2"].value(), this.properties().levelsStyle.colors[ + "S3/R3"].value(), this.properties().levelsStyle.colors[ + "S3/R3"].value(), this.properties().levelsStyle.colors[ + "S4/R4"].value(), this.properties().levelsStyle.colors[ + "S4/R4"].value(), this.properties().levelsStyle.colors[ + "S5/R5"].value(), this.properties().levelsStyle.colors[ + "S5/R5"].value() + ], e + } + updateAllViews() { + super.updateAllViews(), + this._pricesView.update() + } + _createViews() { + this._cache && (this._cache.destroy(), this._cache = null), this + ._priceAxisViews = []; + var e = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", + "R5" + ]; + this._paneViews.length = 0, this._labelPaneViews = []; + var t = new f(this._model, this); + t.setCache(this._cache), this._paneViews.push(t), this._mainPaneView = + t; + for (var i = 0; i < e.length; i++) { + var s = new a(this, { + name: e[i], + cache: this._cache + }); + this._priceAxisViews.push(s), this._labelPaneViews.push(new l(s, + this, this._model)) + } + this._dataWindowView || (this._dataWindowView = new n(this, this + ._model)), this._statusView || (this._statusView = new r(this, + this._model.properties().scalesProperties.textColor)), this + ._legendView = null, this._pricesView = new p(this) + } + visiblePivots() { + return this._pricesView.visiblePivots() + } + _postProcessGraphics() {} + isVisible() { + if (!this.properties().visible.value() || !this.isActualInterval()) + return !1; + for (var e = ["P", "S1/R1", "S2/R2", "S3/R3", "S4/R4", "S5/R5"], t = + this.properties().levelsStyle.visibility, i = 0; i < e + .length; i++) + if (t[e[i]].value()) return !0; + return !1 + } + stop() { + super.stop(), this._cache && (this._cache.destroy(), this._cache = null) + } + priceRange(t, i) { + if (!this.customData() || !this.customData().pivots || !this._indexes) + return null; + if (!this.priceScale()) return null; + for (var s = this.customData().pivots, r = this._indexes, n = null, o = + 0; o < s.length; o++) + if (s[o]) { + var a = r[s[o].startIndex]; + if (!(r[s[o].endIndex] < t || a > i)) { + var l = [], + c = this._properties.levelsStyle.visibility; + c.P.value() && l.push(s[o].p), c["S1/R1"].value() && l.push( + s[o].s1, s[o].r1), c["S2/R2"].value() && l.push(s[o] + .s2, s[o].r2), c["S3/R3"].value() && l.push(s[o].s3, + s[o].r3), c["S4/R4"].value() && l.push(s[o].s4, s[o] + .r4), c["S5/R5"].value() && l.push(s[o].s5, s[o].r5); + for (var h = 0; h < l.length; h++) l[h] && (null === n ? n = + new e(l[h], l[h]) : n.apply(l[h], l[h])) + } + } return this.priceScale().isLog() && n ? new e(this.priceScale() + .priceToLogical(n.minValue()), this.priceScale().priceToLogical( + n.maxValue())) : n + } + } + }).call(this, i("Qb4w").PriceRange) + }, + PT1i: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "Linking", (function() { + return h + })), i.d(t, "linking", (function() { + return u + })); + var s = i("hbEN"), + r = i("hY0g"), + n = i.n(r), + o = i("Kxc7"), + a = i("txPx"); + const l = Object(a.getLogger)("Linking"); + var c; + ! function(e) { + e[e.NotBound = 0] = "NotBound", e[e.BoundToWidget = 1] = "BoundToWidget", e[e.BoundToModel = + 2] = "BoundToModel" + }(c || (c = {})); + class h { + constructor() { + this._watchedSymbol = new n.a, this._seriesShortSymbol = new n.a, this._proSymbol = + new n.a, this._watchedInterval = new n.a, this._watchedIntraday = new n.a, this + ._watchedSeconds = new n.a, this._watchedTicks = new n.a, this + ._watchedSupportedResolutions = new n.a, this._symbolNamesList = new n.a, this + ._chartWidgetBindingState = c.NotBound, this._activeChartWidget = null, this + ._watchedSymbolListenerBound = this._watchedSymbolListener.bind(this), this + ._watchedIntervalListenerBound = this._watchedIntervalListener.bind(this), this + ._onSymbolLinkBound = this._onSymbolLink.bind(this), this._searchCharts = null, + this._searchChartsLoadDebounced = null, this._selfEmit = !1, this + ._preventFeedBySymbol = !1, this._feedBySymbolDebounceCounter = 0 + } + get symbol() { + return this._watchedSymbol + } + get proSymbol() { + return this._proSymbol + } + get symbolNamesList() { + return this._symbolNamesList + } + get seriesShortSymbol() { + return this._seriesShortSymbol.readonly() + } + get interval() { + return this._watchedInterval + } + get intraday() { + return this._watchedIntraday.readonly() + } + get seconds() { + return this._watchedSeconds.readonly() + } + get ticks() { + return this._watchedTicks.readonly() + } + get supportedResolutions() { + return this._watchedSupportedResolutions.readonly() + } + get preventFeedBySymbol() { + return this._preventFeedBySymbol + } + bindToChartWidget(e) { + if (this.unbindFromChartWidget(), this._activeChartWidget = e, e.hasModel()) + return void this._onChartModelCreated(e.model()); + e.modelCreated().subscribe(this, this._onChartModelCreated), this + ._chartWidgetBindingState = c.BoundToWidget; + const t = e.properties().childs().mainSeriesProperties.childs(); + this._watchedSymbol.setValue(t.symbol.value()), this._watchedInterval.setValue(t + .interval.value()) + } + unbindFromChartWidget() { + switch (this._chartWidgetBindingState) { + case c.BoundToWidget: + if (!this._activeChartWidget) throw new Error("ChartWidget is undefined"); + this._activeChartWidget.modelCreated().unsubscribe(this, this + ._onChartModelCreated); + break; + case c.BoundToModel: + this._symbolProperty().unsubscribe(this, this._onSymbolPropertyChange), this + ._watchedSymbol.unsubscribe(this._watchedSymbolListenerBound), this + ._mainSeries().dataEvents().symbolResolved().unsubscribe(this, this + ._updateSeriesSymbolInfo), this._mainSeries().dataEvents() + .symbolError().unsubscribe(this, this._updateSeriesSymbolInfo), this + ._intervalProperty().unsubscribe(this, this._onIntervalPropertyChange), + this._watchedInterval.unsubscribe(this._watchedIntervalListenerBound), + delete this._watchedSymbol.hook, delete this._watchedSymbol.writeLock + } + this._activeChartWidget = null, this._chartWidgetBindingState = c.NotBound + } + getChartWidget() { + return this._activeChartWidget + } + bindToChartWidgetCollection(e) { + this._chartWidgetCollection = e, this.unbindFromChartWidget(), e.activeChartWidget + .subscribe(e => { + this.unbindFromChartWidget(), this.bindToChartWidget(e) + }, { + callWithLast: !0 + }) + } + bindToSearchCharts(e) { + this.unbindFromSearchCharts(), this._searchCharts = e, e.onSearchBySymbol.subscribe( + this, this._onSearchBySymbol), e.loadingSymbol.subscribe(e => { + !1 === e && (this._feedBySymbolDebounceCounter = 0) + }), this._watchedSymbol.subscribe(this._onSymbolLinkBound) + } + unbindFromSearchCharts() { + this._searchCharts && (this._searchCharts.onSearchBySymbol.unsubscribe(this, this + ._onSearchBySymbol), this._watchedSymbol.unsubscribe(this + ._onSymbolLinkBound), this._searchCharts = null) + } + setPreventFeedBySymbol(e) { + this._preventFeedBySymbol = e + } + _onSearchBySymbol(e) { + if (!e.resolved_symbol) throw new Error("no resolved_symbol"); + this._selfEmit = !0, this._watchedSymbol.setValue(e.resolved_symbol), this + ._selfEmit = !1 + } + _onSymbolLink(e) { + if (!this._selfEmit) { + if (!this._searchCharts) { + const e = "No search charts defined"; + throw l.logError(e), new Error(e) + } + this._preventFeedBySymbol || this._loadSearchCharts(e) + } + } + _loadSearchCharts(e) { + if (!this._searchCharts) { + const e = "No search charts defined"; + throw l.logError(e), new Error(e) + } + if (this._searchChartsLoadDebounced) return void(this._feedBySymbolDebounceCounter < + 100 && (this._feedBySymbolDebounceCounter++, this + ._searchChartsLoadDebounced(e))); + const t = e => this._searchCharts ? (!0 === this._searchCharts.loadingSymbol + .value() ? this._feedBySymbolDebounceCounter < 100 && (this + ._feedBySymbolDebounceCounter++, this._searchChartsLoadDebounced = + Object(s.default)(t, 2e3), this._searchChartsLoadDebounced(e)) : this + ._searchChartsLoadDebounced = null, this._searchCharts.feedBySymbol.call( + this._searchCharts, e)) : () => {}; + !0 === this._searchCharts.loadingSymbol.value() ? this + ._feedBySymbolDebounceCounter < 100 && (this._feedBySymbolDebounceCounter++, + this._searchChartsLoadDebounced = Object(s.default)(t, 2e3), this + ._searchChartsLoadDebounced(e)) : this._searchCharts.feedBySymbol(e) + } + _mainSeries() { + if (!this._activeChartWidget) throw new Error("ChartWidget is undefined"); + return this._activeChartWidget.model().mainSeries() + } + _properties() { + return this._mainSeries().properties() + } + _symbolProperty() { + return this._properties().symbol + } + _intervalProperty() { + return this._properties().interval + } + _watchedSymbolListener(e) { + this._symbolProperty().value() !== e && this._chartWidgetCollection.setSymbol(e) + } + _sendSnowplowAnalytics() { + if (!window.user.do_not_track) throw new Error("unsupported") + } + _onSymbolPropertyChange() { + const e = this._symbolProperty().value() !== this._watchedSymbol.value(); + this._watchedSymbol.setValue(this._symbolProperty().value()), e && this + ._chartWidgetCollection.setSymbol(this._symbolProperty().value()) + } + _onSymbolResolved(e) { + const t = this._mainSeries().symbolInfo(); + t && this._applyValuesFromSymbolInfo(t) + } + _applyValuesFromSymbolInfo(e) { + const t = e.pro_name || o.enabled("trading_terminal") && (e.full_name || e.name) || + ""; + this._proSymbol.setValue(t), e.aliases && this._symbolNamesList.setValue(e.aliases) + } + _updateSeriesSymbolInfo() { + this._seriesShortSymbol.setValue(this._properties().shortName.value()); + const e = this._mainSeries().symbolInfo(); + e ? (this._applyValuesFromSymbolInfo(e), e.hasOwnProperty("supported_resolutions") ? + this._watchedSupportedResolutions.setValue(e.supported_resolutions) : this + ._watchedSupportedResolutions.setValue(void 0), this._watchedIntraday + .setValue(!!e.has_intraday), this._watchedSeconds.setValue(!!e.has_seconds), + this._watchedTicks.setValue(!!e.has_ticks)) : (this._watchedIntraday + .deleteValue(), this._watchedSeconds.deleteValue(), this._watchedTicks + .deleteValue(), this._proSymbol.deleteValue()) + } + _watchedIntervalListener(e) { + this._intervalProperty().value() !== e && this._chartWidgetCollection.setResolution( + e) + } + _onIntervalPropertyChange() { + const e = this._intervalProperty().value() !== this._watchedInterval.value(); + this._watchedInterval.setValue(this._intervalProperty().value()), e && this + ._chartWidgetCollection.setResolution(this._intervalProperty().value()) + } + _onChartModelCreated(e) { + if (!this._activeChartWidget) throw new Error("ChartWidget is undefined"); + this._chartWidgetBindingState = c.BoundToModel, this._activeChartWidget + .modelCreated().unsubscribe(this, this._onChartModelCreated); + const t = this._symbolProperty(); + t.subscribe(this, this._onSymbolPropertyChange), this._watchedSymbol.setValue(t + .value()), + this._watchedSymbol.subscribe(this._watchedSymbolListenerBound); + const i = this._mainSeries(); + i.dataEvents().symbolResolved().subscribe(this, this._onSymbolResolved), this + ._watchedSymbol.hook = e => (i.symbolSameAsCurrent(e) && (e = i.symbol()), e), i + .dataEvents().symbolResolved().subscribe(this, this._updateSeriesSymbolInfo), i + .dataEvents().symbolError().subscribe(this, this._updateSeriesSymbolInfo), i + .dataEvents().symbolNotPermitted().subscribe(this, this + ._updateSeriesSymbolInfo), i.dataEvents().symbolGroupNotPermitted() + .subscribe( + this, this._updateSeriesSymbolInfo), this._updateSeriesSymbolInfo(); + const s = this._intervalProperty(); + s.subscribe(this, this._onIntervalPropertyChange), this._watchedInterval.setValue(s + .value()), this._watchedInterval.subscribe(this + ._watchedIntervalListenerBound), this._activeChartWidget.readOnly() && (this + ._watchedSymbol.writeLock = !0) + } + } + window.TradingView = window.TradingView || {}; + const u = new h; + window.TradingView.Linking = u + }, + PYn8: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolThreeDrivers", (function() { + return o + })); + var s = i("Ocx9"), + r = i("Ss5c"), + n = i("j3hX"); + class o extends r.LineDataSource { + constructor(e, t) { + const s = t || o.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "S6aM")).then(t => { + this._setPaneViews([new t.LineToolThreeDrivesPaneView(this, e)]) + }) + } + pointsCount() { + return 7 + } + name() { + return "Three Drives Pattern" + } + properties() { + return super.properties() + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolthreedrivers", e); + return o._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "aMeN")).then( + e => e.PatternWithoutBackgroundDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e), e.addChild("linesColors", new n + .LineToolColorsProperty([e.childs().color])), e.addChild("textsColors", + new n.LineToolColorsProperty([e.childs().textcolor])), e.addChild( + "linesWidths", new n.LineToolWidthsProperty([e.childs().linewidth])), e + .hasChild("backgroundsColors") && e.removeProperty("backgroundsColors") + } + } + }, + PzPU: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "copyToClipboardImageOfChart", (function() { + return r + })), i.d(t, "getImageOfChartSilently", (function() { + return n + })), i.d(t, "copyToClipboardClientScreenshot", (function() { + return o + })), i.d(t, "downloadClientScreenshot", (function() { + return a + })); + const s = () => i.e("take-chart-image-impl").then(i.bind(null, "13es")); + + function r(e, t = {}) { + return s().then(i => i.copyToClipboardImageOfChart(e, t)) + } + + function n(e, t = {}) { + return s().then(i => i.getImageOfChartSilently(e, t)) + } + + function o(e) { + return s().then(t => t.copyToClipboardClientScreenshot(e)) + } + + function a(e) { + return s().then(t => t.downloadClientScreenshot(e)) + } + }, + Q19o: function(e, t, i) { + "use strict"; + var s = i("Eyy1").ensureNotNull, + r = i("jA0t"), + n = i("9iCb").applyOverridesToStudy, + o = i("0YCj"), + a = i("5JMW"), + l = a.LineDataSourceApi, + c = a.isLineToolRiskReward, + h = i("N1UO").StudyApi, + u = i("ltKl").SeriesApi, + d = i("QrSB").SelectionApi, + p = i("mf9N").PaneApi, + _ = i("OLhd").createDwmAligner, + m = i("LxhU").Interval, + f = i("2jXJ").supportedLineTools, + g = i("vwKG").showTooManyStudiesNotice, + b = i("ogJP"), + v = b.isNumber, + S = b.deepEquals, + y = i("CW80").createLineToolProperties, + w = i("CW80").prepareLineToolPropertiesByOwnerSource, + P = i("96Yh").lineToolEntityInfo, + C = i("lReN").LineToolsGroupControllerApi, + x = i("ocrj").RemoveSourcesCommand, + T = i("e92V").isLineDrawnWithPressedButton, + I = i("FDyI").ChartWidgetApiBase, + M = i("mMWL"); + + function O(e, t) { + return t.map((function(t) { + return e.dataSourceForId(t) + })) + } + e.exports = class extends I { + constructor(e, t) { + super(e, t), this._panes = new WeakMap, this._studies = new WeakMap, this + ._lineDataSources = new WeakMap, this._selectionApi = null, this + ._prevVisibleRange = null, this._chartWidget.onAboutToBeDestroyed() + .subscribe(this, this._destroy, !0), this._chartWidget.withModel(this, ( + function() { + this._chartWidget.model().timeScale().logicalRangeChanged() + .subscribe(this, this._onLogicalRangeChanged) + })) + } + id() { + return this._chartWidget.id() + } + _getPaneApi(e) { + var t = this._panes.get(e); + return void 0 === t && (t = new p(e, this._chartWidget), this._panes.set(e, t)), + t + } + _getStudyApi(e) { + var t = this._studies.get(e); + return void 0 === t && (t = new h(e, this._chartWidget), this._studies.set(e, + t)), t + } + _getLineDataSourceApi(e) { + var t = this._lineDataSources.get(e); + return void 0 === t && (t = new l(e, this._chartWidget.model().model(), { + apiPointsToDataSource: this._convertUserPointsToDataSource.bind( + this), + dataSourcePointsToPriced: e => { + var t = this._chartWidget.model().mainSeries() + .syncModel(), + i = this._chartWidget.model().timeScale(); + return e.map(e => { + var s = i.normalizeBarIndex(e.index); + return { + price: e.price, + time: this._convertTimeToPublic(t + .projectTime(s.time_t, s.offset) + ) + } + }) + } + }), this._lineDataSources.set(e, t)), t + } + executeActionById(e) { + this._chartWidget.executeActionById(e) + } + getCheckableActionState(e) { + return this._chartWidget.getCheckableActionState(e) + } + setZoomEnabled(e) { + this._chartWidget.model().model().setZoomEnabled(e) + } + setScrollEnabled(e) { + this._chartWidget.model().model().setScrollEnabled(e) + } + refreshMarks() { + this._chartWidget.refreshMarks() + } + clearMarks() { + this._chartWidget.clearMarks() + } + symbol() { + return this._chartWidget.getSymbol() + } + symbolExt() { + var e = this._chartWidget.model().mainSeries().symbolInfo(); + return e ? { + symbol: e.name, + full_name: e.full_name, + exchange: e.exchange, + description: e.description, + type: e.type, + pro_name: e.pro_name + } : null + } + resolution() { + return this._chartWidget.model().mainSeries().properties().interval.value() + } + resetData() { + this._chartWidget.model().mainSeries().rerequestData() + } + setEntityVisibility(e, t) { + console.warn( + "`setEntityVisibility` is deprecated. Use shape/study API instead"); + var i = this._chartWidget.model().model().dataSourceForId(e); + if (i) { + var s = i.properties(); + s && s.visible && s.visible.setValue(t) + } + } + availableZOrderOperations(e) { + var t = O(this._chartWidget.model().model(), e); + return this._chartWidget.model().availableZOrderOperations(t) + } + sendToBack(e) { + var t = O(this._chartWidget.model().model(), e); + this._chartWidget.model().sendToBack(t) + } + bringToFront(e) { + var t = O(this._chartWidget.model().model(), e); + this._chartWidget.model().bringToFront(t) + } + insertAfter(e, t) { + var i = this._chartWidget.model().model(), + s = O(i, e), + r = i.dataSourceForId(t); + this._chartWidget.model().insertAfter(s, r) + } + insertBefore(e, t) { + var i = this._chartWidget.model().model(), + s = O(i, e), + r = i.dataSourceForId(t); + this._chartWidget.model().insertBefore(s, r) + } + bringForward(e) { + var t = O(this._chartWidget.model().model(), e); + this._chartWidget.model().bringForward(t) + } + sendBackward(e) { + var t = O(this._chartWidget.model().model(), e); + this._chartWidget.model().sendBackward(t) + } + showPropertiesDialog(e) { + var t = this._chartWidget.model().model().dataSourceForId(e); + if (null === t) throw new Error("Study or shape " + e + " does not exist"); + this._chartWidget.showChartPropertiesForSource(t) + } + getAllShapes() { + return this._chartWidget.model().model().allLineTools().map(P).filter((function( + e) { + return null !== e.name + })) + } + removeAllShapes() { + this._chartWidget.removeAllDrawingTools() + } + removeAllStudies() { + this._chartWidget.removeAllStudies() + } + removeEntity(e, t) { + var i = this._chartWidget.model().chartModel().dataSourceForId(e); + i ? t && t.disableUndo ? new x(this._chartWidget.model().chartModel(), [i], "") + .redo() : this._chartWidget.model().removeSource(i, !0, !0) : console.warn( + "Can't find a source with id: " + e) + } + removeEntityWithUndo(e) { + var t = this._chartWidget.model().chartModel().dataSourceForId(e); + this._chartWidget.model().removeSource(t, !1) + } + selection() { + return null === this._selectionApi && (this._selectionApi = new d(this + ._chartWidget.model().model())), this._selectionApi + } + createStudyTemplate(e) { + return this._chartWidget.model().model().studyTemplate(e.saveSymbol, e + .saveInterval) + } + drawOnAllCharts(e) { + M.drawOnAllCharts.setValue(e) + } + applyStudyTemplate(e) { + this._chartWidget.model().applyStudyTemplate(e, "" + 1e3 * Math.random()) + } + setVisibleRange(e, t) { + return new Promise(function(i) { + this._chartWidget.setVisibleTimeRange(e.from, e.to, t, i) + }.bind(this)) + } + getVisibleRange() { + var e = { + from: 0, + to: 0 + }, + t = this._chartWidget.model().timeScale(); + if (t.isEmpty()) return e; + var i = t.coordinateToVisibleIndex(0), + s = t.coordinateToVisibleIndex(t.width() - 1), + r = this._convertIndexToPublicTime(s); + return null === r || (e.from = this._convertIndexToPublicTime(Math.max(t + .points().firstIndex(), i)), e.to = r), e + } + getVisiblePriceRange() { + return console.warn( + "`getVisiblePriceRange` is deprecated. Use Price Scale API instead"), + this._chartWidget.model().mainSeries() ? this._chartWidget.model() + .mainSeries().priceScale().priceRangeInPrice() : null + } + scrollPosition() { + return this._chartWidget.model().timeScale().rightOffset() + } + defaultScrollPosition() { + return this._chartWidget.model().timeScale().defaultRightOffsetProperty() + .value() + } + _createTradingPrimitive(e, t) { + var i = this; + var r, n, o = this._chartWidget.model().model(), + a = o.paneForSource(o.mainSeries()); + return (t ? o : this._chartWidget.model()).createLineTool(a, (r = TradingView + .CLOSE_PLOT, { + index: (n = s(i._chartWidget.model().mainSeries().bars() + .last())).index, + price: n.value[r] + }), e)._adapter + } + createOrderLine(e) { + e = e || {}; + return this._createTradingPrimitive("LineToolOrder", e.disableUndo) + } + createPositionLine(e) { + e = e || {}; + return this._createTradingPrimitive("LineToolPosition", e.disableUndo) + } + createExecutionShape(e) { + e = e || {}; + return this._createTradingPrimitive("LineToolExecution", e.disableUndo) + } + createShape(e, t) { + return this.createMultipointShape([e], t) + } + _alignPoints(e) { + var t = this._chartWidget.model().model(), + i = t.mainSeries(), + s = i.interval(); + if (t.timeScale().isEmpty() || !m.isDWM(s)) return e; + var r = _(s, i.symbolInfo()); + return null === r ? e : e.map((function(e) { + return r.timeToSessionStart(1e3 * e) / 1e3 + })) + } + _convertUserPointsToDataSource(e) { + var t = this._chartWidget.model().model(), + i = t.mainSeries(), + s = t.timeScale().points(), + r = i.data(); + if (t.timeScale().isEmpty()) return null; + var n = e.map((function(e) { + return e.time || 0 + })), + o = this._alignPoints(n); + + function a(e, t, n) { + var o = s.closestIndexLeft(e) || 0, + a = { + index: o + }, + l = s.valueAt(o); + if (e > l && o === s.lastIndex())(c = i.syncModel().distance(l, e)) + .success && (a.index = a.index + c.result); + else if (e < l && o === s.firstIndex()) { + var c; + (c = i.syncModel().distance(e, l)).success && (a.index = a.index - c + .result) + } + if (v(t)) a.price = t; + else { + var h = n ? ["open", "high", "low", "close"].indexOf(n) + 1 : 1; + h <= 0 && (h = 1), a.price = r.valueAt(o)[h] + } + return a + } + for (var l = [], c = 0; c < e.length; c++) { + var h = e[c]; + l.push(a(o[c], h.price, h.channel)) + } + return l + } + createMultipointShape(e, t, i) { + var s = t.disableUndo ? this._chartWidget.model().model() : this._chartWidget + .model(), + r = this._chartWidget.model().model(), + n = r.mainSeries(); + if (!r.timeScale().isEmpty()) { + var o = r.dataSourceForId(t.ownerStudyId) || n, + a = r.paneForSource(o), + l = this._convertUserPointsToDataSource(e), + h = f[t.shape] || f.flag; + if (h.onlySelectable) throw new Error('Cannot create "' + t.shape + + '" shape'); + if ("LineToolPolyline" === h.name || "LineToolPath" === h.name || + "LineToolGhostFeed" === h.name) l[0].price === l[l.length - 1].price && + l[0].index === l[l.length - 1].index || l.push(l[0]); + else if ("LineToolIcon" === h.name) { + if (t.icon = t.icon || t.overrides && t.overrides.icon, !t + .hasOwnProperty("icon")) throw new Error( + "icon must be specified in options"); + t.overrides = t.overrides || {}, t.overrides.icon = t.icon + } + var u = y(h.name); + if (w(u, o), t.overrides) + for (var d in t.overrides) u[d] ? u[d].mergeAndFire(t.overrides[d]) : c( + h.name) && -1 !== ["profitLevel", "stopLevel"].indexOf(d) && u + .addProperty(d, t.overrides[d]); + void 0 !== u.text && t.text && u.text.setValue(t.text); + var p = s.createLineTool(a, l[0], h.name, u, void 0, o); + if (c(h.name)) { + if (l.length > 2) throw new Error("Wrong points count for " + t.shape + + ". Required 1 or 2"); + 2 === l.length && (p.startChanging(1, l[1]), p.setPoint(1, l[1]), p + .endChanging()) + } else { + var _ = p.pointsCount(); + if (_ !== l.length && -1 !== _) throw new Error( + "Wrong points count for " + t.shape + ". Required " + _); + for (var m = T(h.name), g = 1; g < l.length && this._chartWidget.model() + .lineBeingCreated(); g++) s.continueCreatingLine(l[g], null, g < l + .length - 1 || m); + m && (s.finishLineTool(p), s.continueCreatingLine(l[l.length - 1], null, + !1)) + } + if (t.lock && p.setUserEditEnabled(!1), t.disableSelection && p + .setSelectionEnabled(!1), t.disableSave && (p.customization + .disableSave = !0), t.hasOwnProperty("showInObjectsTree") && (p + .customization.showInObjectsTree = t.showInObjectsTree), + t.zOrder) { + var b = this._chartWidget.model().availableZOrderOperations([p]); + "top" === t.zOrder && b.bringToFrontEnabled ? s.bringToFront([p]) : + "bottom" === t.zOrder && b.sendToBackEnabled && s.sendToBack([p]) + } + return p.id() + } + } + getShapeById(e) { + var t = this._chartWidget.model().model().getLineToolById(e); + if (null === t) throw new Error("There is no such shape"); + return this._getLineDataSourceApi(t) + } + createStudy(e, t, i, s, a, l) { + if ("function" == typeof a) return console.warn( + '"createStudy" does not take "callback" parameter anymore'), Promise + .resolve(null); + if (l = l || {}, "string" != typeof e) return this._createStudy(e); + if (l.checkLimit && !this._chartWidget.model().canCreateStudy()) return g(), + Promise.resolve(null); + e = e.toLowerCase(); + var c = l.disableUndo ? this._chartWidget.model().model() : this._chartWidget + .model(), + h = o.findStudyMetaInfoByDescription(c.studiesMetaData(), e).id, + u = c.createStudyInserter({ + type: "java", + studyId: h + }); + return u.setForceOverlay(t), l.priceScale && u.setPreferredPriceScale(function( + e) { + switch (e) { + case "no-scale": + return "overlay"; + case "as-series": + return "as-series"; + case "new-left": + return "left"; + case "new-right": + return "right"; + default: + throw new Error('The pricescale "' + e + + '" is invalid, the only valid options are "no-scale", "as-series", "new-left" and "new-right".' + ) + } + }(l.priceScale)), l.allowChangeCurrency && u.setAllowChangeCurrency(!0), l + .allowChangeUnit && u.setAllowChangeUnit(!0), s && (s = r + .getStudyRecordFromArray([e].concat(s), this._chartWidget).inputs), u + .insert((function() { + return Promise.resolve(s || {}) + })).then((function(e) { + return a && n(e, a), i && e.setUserEditEnabled(!1), e.id() + })) + } + getStudyById(e) { + var t = this._chartWidget.model().model().getStudyById(e); + if (null === t) throw new Error("There is no such study"); + return this._getStudyApi(t) + } + getSeries() { + var e = this._chartWidget.model(), + t = e.mainSeries(); + return new u(t, e) + } + chartType() { + return this._chartWidget.model().mainSeries().properties().style.value() + } + priceFormatter() { + return this._chartWidget.model().mainSeries().priceScale().formatter() + } + dataReady(e) { + var t = !this._chartWidget.hasModel() || !this._chartWidget.model() + .mainSeries() || this._chartWidget.model().mainSeries().data().isEmpty(); + return e && (t ? this.onDataLoaded().subscribe(null, e, !0) : e()), !t + } + _onLogicalRangeChanged() { + var e = this._chartWidget.model().mainSeries(), + t = e.data().isEmpty(); + if (null !== this._chartWidget.model().timeScale().visibleBarsStrictRange() && + t) e.dataEvents().completed().subscribe(this, this._onLogicalRangeChanged, ! + 0); + else { + var i = this.getVisibleRange(); + null !== this._prevVisibleRange && S(this._prevVisibleRange, i)[0] || (this + ._prevVisibleRange = i, this._visibleBarsChanged.fire(i)) + } + } + _destroy() { + super._destroy(), this._chartWidget.hasModel() && this._chartWidget.model() + .timeScale().logicalRangeChanged().unsubscribe(this, this + ._onLogicalRangeChanged) + } + setTimezone(e) { + this._chartWidget.setTimezone(e) + } + getTimezone() { + return this._chartWidget.getTimezone() + } + getPanes() { + return this._chartWidget.model().chartModel().panes().map((function(e) { + return this._getPaneApi(e) + }), this) + } + canZoomOut() { + return !this._chartWidget.model().zoomStack().isEmpty() + } + zoomOut() { + this.canZoomOut() && this._chartWidget.model().zoomFromViewport() + } + shapesGroupController() { + return new C(this._chartWidget.model().lineToolsGroupController(), this + ._chartWidget.model()) + } + isSelectBarRequested() { + return this._chartWidget.selectPointMode().value() + } + requestSelectBar() { + if (this.isSelectBarRequested()) return Promise.reject("already requested"); + var e = this; + return new Promise((function(t, i) { + e._chartWidget.requestSelectPoint("time").then((function(i) { + t(e._convertTimeToPublic(i.point.time)) + })).catch((function() { + i("cancelled") + })) + })) + } + cancelSelectBar() { + this.isSelectBarRequested() && this._chartWidget.cancelRequestSelectPoint() + } + } + }, + QCyK: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "spreadStudyItem", (function() { + return n + })); + var s = i("7dm8"); + class r extends s.a { + _doCalculation(e, t, i, s) { + return e * t - i * s + } + } + const n = { + name: "Spread", + metainfo: { + _metainfoVersion: 15, + defaults: s.b, + plots: s.d, + styles: s.e, + description: "Spread", + shortDescription: "Spread", + is_price_study: !1, + inputs: s.c, + id: "Spread@tv-basicstudies-1" + }, + constructor: r + } + }, + QIuV: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("ivNn").fixComputationError; + class n extends s { + constructor(e, t) { + super(e, t), this.customization.forcePriceAxisLabel = !0, this.customization + .disableErasing = !0, this.customization.showInObjectsTree = !1, this + .setSelectionEnabled(!1) + } + isSynchronizable() { + return !1 + } + pointsCount() { + return n.POINTS_COUNT + } + hasContextMenu() { + return !1 + } + state() { + return null + } + startMoving() { + s.prototype.startMoving.apply(this, arguments), this._cursorMoved = !1 + } + endMoving() { + s.prototype.endMoving.apply(this, arguments), this._cursorMoved = !1 + } + _correctPoints(e) { + this._currentMovingPoint && this._startMovingPoint ? this._currentMovingPoint + .logical.price - this._startMovingPoint.logical.price && (this._cursorMoved = ! + 0) : this._cursorMoved = !1; + for (var t = 1 / this.priceScale().mainSource().base(), i = 0; i < e.length; i++) { + var s = e[i]; + this._cursorMoved && (s.price = this._currentMovingPoint.logical.price), s + .price = r(t * Math.round(s.price / t)), e[i] = s + } + } + userEditEnabled() { + return !0 + } + movable() { + return !1 + } + canBeHidden() { + return !1 + } + isUserDeletable() { + return !1 + } + showInObjectTree() { + return !1 + } + doesMovingAffectsUndo() { + return !1 + } + isAvailableInFloatingWidget() { + return !1 + } + timeAxisViews() { + return null + } + cloneable() { + return !1 + } + copiable() { + return !1 + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + n.POINTS_COUNT = 1, e.exports.LineToolTrading = n + }, + QQu0: function(e, t, i) { + "use strict"; + var s = i("WPQD").LineToolTrendLine, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Arrow" + } + static createProperties(e) { + var t = new r("linetoolarrow", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolArrow = n + }, + QTwd: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "RestoreDefaultsPreferencesUndoCommand", (function() { + return h + })); + var s = i("Eyy1"), + r = i("RDU5"), + n = i("ApcL"), + o = i("3t3b"), + a = i("x2L+"), + l = i("N22A"), + c = i("GDWD"); + class h extends r.UndoCommand { + constructor(e) { + super("Apply All Chart Properties"), this._trading = null, this + ._oldShowSellBuyButtons = null, this._oldNoConfirmEnabled = null, + this._oldShowOnlyRejectionNotifications = null, this + ._oldShowPricesWithZeroVolume = null, this._oldShowPricesWithSpread = null, + this._oldOrderExecutedSoundEnabled = null, this._prevWatermarkPreferences = + null, this._model = e, this._trading = Object(l.a)(), null !== this + ._trading && (this._oldShowSellBuyButtons = this._trading.showSellBuyButtons + .value(), this._oldNoConfirmEnabled = this._trading.noConfirmEnabled + .value(), this._oldShowOnlyRejectionNotifications = this._trading + .showOnlyRejectionNotifications.value(), this + ._oldShowPricesWithZeroVolume = this._trading.showPricesWith() + .zeroVolume.value(), this._oldShowPricesWithSpread = this._trading + .showPricesWith().spread.value(), this._oldOrderExecutedSoundEnabled = + this._trading.orderExecutedSoundParams.enabled.value()), this + ._defaultsPreferences = Object(n.defaultsPreferencesByWhiteList)(this + ._model, this._model.mainSeries()), this._oldPreferences = e + .preferences(), this._prevDateFormat = o.dateFormatProperty.value(), this + ._prevAddPlusButton = c.addPlusButtonProperty.value(), this + ._prevShowOpenMarkerStatus = a.b.value(); + const t = this._model.watermarkSource(); + null !== t && (this._prevWatermarkPreferences = t.properties().state()) + } + redo() { + null !== this._trading && (this._trading.showSellBuyButtons.setValue(!0), this + ._trading.noConfirmEnabled.setValue(!1), this._trading + .showOnlyRejectionNotifications.setValue(!1), this._trading + .showPricesWith().zeroVolume.setValue(!0), this._trading + .showPricesWith().spread.setValue(!0), this._trading + .orderExecutedSoundParams.enabled.setValue(!1)), this._model + .applyPreferences(this._defaultsPreferences), this._model.mainSeries() + .onChartStyleChanged(), this._model.updateScales(), Object(o + .restoreDateFormatSettingsValue)(), Object(c + .restoreAddPlusButtonSettingsValue)(), Object(a.a)(); + const e = this._model.watermarkSource(); + null !== e && e.restorePropertiesDefaults() + } + undo() { + null !== this._trading && (this._trading.showSellBuyButtons.setValue(Object(s + .ensureNotNull)(this._oldShowSellBuyButtons)), this._trading + .noConfirmEnabled.setValue(Object(s.ensureNotNull)(this + ._oldNoConfirmEnabled)), this._trading + .showOnlyRejectionNotifications.setValue(Object(s.ensureNotNull)(this + ._oldShowOnlyRejectionNotifications)), this._trading + .showPricesWith().zeroVolume.setValue(Object(s.ensureNotNull)(this + ._oldShowPricesWithZeroVolume)), this._trading.showPricesWith() + .spread.setValue(Object(s.ensureNotNull)(this + ._oldShowPricesWithSpread)), this._trading.orderExecutedSoundParams + .enabled.setValue(Object(s.ensureNotNull)(this + ._oldOrderExecutedSoundEnabled))), this._model.applyPreferences(this + ._oldPreferences), this._model.mainSeries().onChartStyleChanged(), this + ._model.updateScales(), o.dateFormatProperty.setValue(this._prevDateFormat), + a.b.setValue(this._prevShowOpenMarkerStatus), c.addPlusButtonProperty + .setValue(this._prevAddPlusButton); + const e = this._model.watermarkSource(); + null !== e && null !== this._prevWatermarkPreferences && e.properties() + .mergeAndFire(this._prevWatermarkPreferences) + } + } + }, + Qb4w: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PriceRange", (function() { + return o + })); + var s = i("ogJP"), + r = i("txPx"); + const n = Object(r.getLogger)("Chart.PriceRange"); + class o { + constructor(e, t) { + if (null !== e && "object" == typeof e) { + const t = e; + this._minValue = t.m_minValue, this._maxValue = t.m_maxValue + } else { + const i = e; + this._minValue = i, void 0 !== t && (this._maxValue = t) + } + } + equals(e) { + return this._minValue === e._minValue && this._maxValue === e._maxValue + } + clone() { + return new o(this._minValue, this._maxValue) + } + minValue() { + return this._minValue + } + setMinValue(e) { + this._minValue = e + } + maxValue() { + return this._maxValue + } + setMaxValue(e) { + this._maxValue = e + } + length() { + return this._maxValue - this._minValue + } + isEmpty() { + return this._maxValue === this._minValue || this._maxValue != this._maxValue || this + ._minValue != this._minValue + } + serialize() { + return { + m_maxValue: this._maxValue, + m_minValue: this._minValue + } + } + state() { + return { + max: this._maxValue, + min: this._minValue + } + } + merge(e) { + return new o(Math.min(this.minValue(), e.minValue()), Math.max(this.maxValue(), e + .maxValue())) + } + apply(e, t) { + this._minValue = Math.min(this._minValue, e), this._maxValue = Math.max(this + ._maxValue, t) + } + set(e, t) { + this._minValue = e, this._maxValue = t + } + scaleAroundCenter(e) { + if (!Object(s.isNumber)(e)) return void n.logDebug( + "PriceRange.scaleAroundCenter: invalid coeff"); + if (0 === this._maxValue - this._minValue) return; + const t = .5 * (this._maxValue + this._minValue); + let i = this._maxValue - t, + r = this._minValue - t; + i *= e, r *= e, this._maxValue = t + i, this._minValue = t + r + } + shift(e) { + Object(s.isNumber)(e) ? (this._maxValue += e, this._minValue += e) : n.logDebug( + "PriceRange.shift: invalid coeff") + } + containsStrictly(e) { + return e.minValue() > this._minValue && e.maxValue() < this._maxValue + } + static compare(e, t) { + return null === e || null === t ? e === t : e.equals(t) + } + } + }, + QfUd: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return a + })); + var s = i("hY0g"), + r = i.n(s), + n = i("ogJP"); + + function o(e, t) { + return Object(n.deepEquals)(e, t)[0] + } + class a extends r.a { + constructor(e, t = o) { + super(e), this._comparator = t + } + setValue(e, t) { + !1 === this._comparator(this.value(), e) && super.setValue(e, t) + } + } + }, + QloM: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "TabNames", (function() { + return s + })), + function(e) { + e.background = "Background", e.coordinates = "Coordinates", e.drawings = "Drawings", e + .events = "Events", e.eventsAndAlerts = "Events & Alerts", e.inputs = "Inputs", e + .properties = "Properties", e.scales = "Scales", e.legend = "Legend", e.sourceCode = + "Source Code", e.style = "Style", e.symbol = "Symbol", e.timezoneSessions = + "Timezone/Sessions", e.trading = "Trading", e.visibility = "Visibility", e.text = + "Text" + }(s || (s = {})) + }, + Qq0B: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "NonSeriesStudy", (function() { + return n + })); + var s = i("Eyy1"), + r = i("GVHu"); + class n extends r.Study { + clearData() { + this._customData = null, this._indexes = null + } + restoreData(e, t, i) { + r.Study.prototype.restoreData.call(this, e), this._customData = t, this + ._indexes = i + } + state(e) { + const t = super.state(e); + return e && (t.nonSeriesData = this._customData, t.indexes = this._indexes), t + } + customData() { + return this._customData + } + _setPaneViews(e) { + this._paneViews = e, this.model().lightUpdate() + } + _onDataUpdated(e, t, i) { + null !== t && (t.indexes_replace ? (Object(s.assert)("nochange" !== i), this + ._indexes = i) : (this._customData = t.data, "nochange" !== i && ( + this._indexes = i))), super._onDataUpdated(e, t, i) + } + } + }, + QrSB: function(e, t, i) { + "use strict"; + + function s(e, t) { + const i = e.dataSourceForId(t); + if (null === i) throw new Error(`Chart has no study or shape with id "${t}"`); + return i + } + i.r(t), i.d(t, "SelectionApi", (function() { + return r + })); + class r { + constructor(e) { + this._model = e + } + add(e) { + Array.isArray(e) ? this._model.selectionMacro(t => { + e.map(s.bind(null, this._model)).forEach(e => t.addSourceToSelection(e)) + }) : this.add([e]) + } + canBeAddedToSelection(e) { + const t = s(this._model, e); + return this._model.selection().canBeAddedToSelection(t) + } + set(e) { + Array.isArray(e) ? this._model.selectionMacro(t => { + t.clearSelection(), e.map(s.bind(null, this._model)).forEach(e => t + .addSourceToSelection(e)) + }) : this.set([e]) + } + remove(e) { + Array.isArray(e) ? this._model.selectionMacro(t => { + e.map(s.bind(null, this._model)).forEach(e => t + .removeSourceFromSelection(e)) + }) : this.remove([e]) + } + contains(e) { + const t = s(this._model, e); + return this._model.selection().isSelected(t) + } + allSources() { + return this._model.selection().dataSources().map(e => e.id()) + } + isEmpty() { + return this._model.selection().isEmpty() + } + clear() { + this._model.selectionMacro(e => { + e.clearSelection() + }) + } + onChanged() { + return this._model.onSelectedSourceChanged() + } + } + }, + Qtjj: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TimeSynchronizer", (function() { + return l + })); + var s = i("LxhU"), + r = i("jCNj"), + n = i.n(r), + o = i("IiTo"); + let a = null; + class l { + constructor(e, t) { + var i, r; + this._sourceTargetBarBuilder = null, this._cache = new Map, this._source = e, this + ._target = t, this._isResolutionTheSame = s.Interval.isEqual(e.getResolution(), + t.getResolution()), this._isSessionTheSame = (i = e.getSymbolInfo(), r = t + .getSymbolInfo(), i.timezone === r.timezone && i.session === r.session), + this._shouldCorrectTradingDay = s.Interval.isDWM(e.getResolution()) && !this + ._isSessionTheSame + } + sourceTimeToTargetTime(e) { + if (this._isSessionTheSame && this._isResolutionTheSame) return e; + if (!this._source.isValid() || !this._target.isValid()) return e; + let t = this._cache.get(e); + if (void 0 === t) { + let i = 1e3 * e; + if (this._shouldCorrectTradingDay) { + let e = n.a.utc_to_cal(this._source.getSession().timezone, i); + e = this._source.getSession().spec.correctTradingDay(e); + const t = new Date(e); + n.a.set_hms(t, 0, 0, 0, 0, this._source.getSession().timezone), i = t + .valueOf() + } + const s = this._sourceTargetBuilder(); + s.moveTo(i); + const r = s.indexOfBar(i); + t = s.startOfBar(Math.max(0, r)) / 1e3, this._cache.set(e, t) + } + return t + } + _sourceTargetBuilder() { + if (null === this._sourceTargetBarBuilder) { + const e = this._isSessionTheSame ? this._target.getSession() : (null === a && ( + a = new o.SessionInfo("Etc/UTC", "24x7")), a); + this._sourceTargetBarBuilder = Object(o.newBarBuilder)(this._target + .getResolution(), this._target.getSession(), e) + } + return this._sourceTargetBarBuilder + } + } + }, + RBvv: function(e) { + e.exports = JSON.parse( + '{"color-bg-primary":"color-white","color-bg-primary-hover":"color-cold-gray-100","color-bg-secondary":"color-white","color-bg-highlight":"color-cold-gray-50","color-bg-scroll-buttons":"color-cold-gray-100","color-legacy-bg-scroll-buttons":"color-cold-gray-850","color-legacy-bg-widget":"color-white","color-text-primary":"color-cold-gray-900","color-text-secondary":"color-cold-gray-500","color-text-tertiary":"color-cold-gray-400","color-text-disabled":"color-cold-gray-300","color-accent-content":"color-cold-gray-900","color-box-shadow":"color-cold-gray-300","color-divider":"color-cold-gray-150","color-divider-hover":"color-cold-gray-100","color-active-hover-text":"color-cold-gray-900","color-alert-text":"color-cold-gray-900","color-border-table":"color-cold-gray-100","color-brand":"color-tv-blue-500","color-brand-active":"color-tv-blue-700","color-brand-hover":"color-tv-blue-600","color-chart-page-bg":"color-cold-gray-150","color-common-tooltip-bg":"color-cold-gray-800","color-danger":"color-ripe-red-400","color-danger-hover":"color-ripe-red-500","color-danger-active":"color-ripe-red-600","color-depthrenderer-stroke-style":"color-cold-gray-100","color-highlight-new":"color-tan-orange-50","color-input-bg":"color-white","color-input-publish-bg":"color-white","color-link":"color-tv-blue-500","color-link-hover":"color-tv-blue-600","color-link-active":"color-tv-blue-700","color-list-nth-child-bg":"color-cold-gray-50","color-pane-bg":"color-white","color-pane-secondary-bg":"color-cold-gray-100","color-popup-menu-item-hover-bg":"color-cold-gray-100","color-popup-menu-separator":"color-cold-gray-150","color-screener-description":"color-cold-gray-650","color-success":"color-minty-green-500","color-success-hover":"color-minty-green-600","color-success-active":"color-minty-green-700","color-toolbar-button-text":"color-cold-gray-900","color-toolbar-button-text-hover":"color-cold-gray-900","color-toolbar-button-text-active":"color-tv-blue-500","color-toolbar-button-text-active-hover":"color-tv-blue-600","color-toolbar-button-background-hover":"color-cold-gray-100","color-toolbar-button-background-secondary-hover":"color-cold-gray-150","color-toolbar-toggle-button-background-active":"color-tv-blue-500","color-toolbar-toggle-button-background-active-hover":"color-tv-blue-600","color-toolbar-interactive-element-text-normal":"color-cold-gray-900","color-toolbar-interactive-element-text-hover":"color-cold-gray-900","color-toolbar-opened-element-bg":"color-cold-gray-100","color-tooltip-bg":"color-cold-gray-800","color-tv-dialog-caption":"color-cold-gray-650","color-tv-dropdown-item-hover-bg":"color-cold-gray-100","color-underlined-text":"color-cold-gray-500","color-widget-pages-bg":"color-white","color-warning":"color-tan-orange-500","color-growing":"color-minty-green-400","color-falling":"color-ripe-red-400","color-forex-icon":"color-cold-gray-750","color-list-item-active-bg":"color-tv-blue-400","color-list-item-hover-bg":"color-tv-blue-50","color-list-item-text":"color-cold-gray-800","color-price-axis-label-back":"color-cold-gray-150","color-price-axis-label-text":"color-cold-gray-650","color-price-axis-gear":"color-cold-gray-900","color-price-axis-gear-hover":"color-black","color-price-axis-highlight":"color-cold-gray-150","color-bid":"color-tv-blue-500","color-border":"color-cold-gray-150","color-border-chat-fields":"color-cold-gray-250","color-border-hover":"color-cold-gray-250","color-button-hover-bg":"color-cold-gray-150","color-depthrenderer-fill-style":"color-cold-gray-650","color-disabled-border-and-color":"color-cold-gray-150","color-disabled-input":"color-cold-gray-150","color-empty-container-message":"color-cold-gray-500","color-icons":"color-cold-gray-500","color-input-textarea-readonly":"color-cold-gray-650","color-input-placeholder-text":"color-cold-gray-350","color-item-active-blue":"color-tv-blue-50","color-item-hover-active-bg":"color-tv-blue-100","color-item-hover-bg":"color-tv-blue-100","color-item-hover-blue":"color-tv-blue-100","color-item-selected-blue":"color-tv-blue-50","color-item-active-text":"color-white","color-item-active-bg":"color-tv-blue-500","color-list-item":"color-cold-gray-450","color-news-highlight":"color-tv-blue-100","color-placeholder":"color-cold-gray-350","color-row-hover-active-bg":"color-cold-gray-100","color-sb-scrollbar-body-bg":"color-cold-gray-200","color-section-separator-border":"color-cold-gray-300","color-separator-table-chat":"color-cold-gray-150","color-tag-active-bg":"color-cold-gray-200","color-tag-hover-bg":"color-cold-gray-150","color-text-regular":"color-cold-gray-700","color-tv-button-checked":"color-cold-gray-550","color-scroll-bg":"color-cold-gray-400","color-scroll-border":"color-cold-gray-100","color-widget-border":"color-cold-gray-100","color-scroll-buttons-arrow":"color-white","color-control-intent-default":"color-cold-gray-200","color-control-intent-success":"color-minty-green-600","color-control-intent-primary":"color-tv-blue-500","color-control-intent-warning":"color-tan-orange-500","color-control-intent-danger":"color-ripe-red-500","color-pre-market":"color-tan-orange-600","color-pre-market-bg":"color-tan-orange-400","color-post-market":"color-tv-blue-500","color-post-market-bg":"color-tv-blue-400","color-market-open":"color-minty-green-500","color-market-open-bg":"color-minty-green-400","color-market-closed":"color-cold-gray-400","color-market-holiday":"color-cold-gray-400","color-invalid-symbol":"color-ripe-red-400","color-invalid-symbol-hover":"color-ripe-red-700","color-replay-mode":"color-tv-blue-500","color-replay-mode-icon":"color-white","color-replay-mode-hover":"color-tv-blue-600","color-notaccurate-mode":"color-berry-pink-700","color-notaccurate-mode-bg":"color-berry-pink-400","color-delay-mode":"color-tan-orange-700","color-delay-mode-bg":"color-tan-orange-400","color-eod-mode":"color-grapes-purple-700","color-eod-mode-bg":"color-grapes-purple-400","color-data-problem":"color-ripe-red-600","color-data-problem-bg":"color-ripe-red-400","color-data-problem-hover":"color-ripe-red-700","color-list-item-bg-highlighted":"color-tv-blue-50","color-list-item-bg-selected":"color-tv-blue-100","color-list-item-bg-highlighted-hover":"color-tv-blue-100","color-list-item-bg-selected-hover":"color-tv-blue-200","color-screener-header-bg":"color-white","color-screener-header-bg-hover":"color-cold-gray-100","color-marker-flagged":"color-ripe-red-400","color-marker-flagged-hovered":"color-ripe-red-600","color-ask":"color-ripe-red-400","color-sell":"color-ripe-red-400","color-buy":"color-tv-blue-500","color-neutral":"color-cold-gray-500","color-pro":"color-minty-green-400","color-pro-hover":"color-minty-green-600","color-pro-plus":"color-tv-blue-500","color-pro-plus-hover":"color-tv-blue-600","color-pro-premium":"color-tan-orange-500","color-pro-premium-hover":"color-tan-orange-700","color-trial":"color-cold-gray-500","color-trial-hover":"color-cold-gray-600","color-mod":"color-ripe-red-400","color-mod-hover":"color-ripe-red-600","color-top":"color-banana-yellow-700","color-top-hover":"color-banana-yellow-800","color-ad":"color-banana-yellow-a700","color-broker-featured":"color-minty-green-400","color-broker-featured-hover":"color-minty-green-600","color-alert-status-active":"color-minty-green-400","color-alert-status-stopped":"color-ripe-red-500","color-alert-status-triggered":"color-tan-orange-500","color-covid19-confirmed":"color-ripe-red-500","color-covid19-recovered":"color-minty-green-500","color-covid19-deaths":"color-cold-gray-450","color-overlay":"color-cold-gray-400","color-search-button-hover":"color-cold-gray-150","color-brand-light":"color-tv-blue-500","color-common-tooltip-text":"color-cold-gray-100","color-replay-data-mode":"color-radical-red","color-legacy-success":"color-keppel-1","color-collapse-tabs-border":"color-athens-gray-3","color-site-widget-hover":"color-athens-gray-1","color-attention":"color-sunglow","color-card-border":"color-cold-gray-150","color-card-border-hover":"color-cold-gray-300"}' + ) + }, + RDDl: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolPriceRange", (function() { + return n + })); + var s = i("Ocx9"), + r = i("Ss5c"); + class n extends r.LineDataSource { + constructor(e, t) { + super(e, t || n.createProperties()), i.e("lt-pane-views").then(i.bind(null, + "VghZ")).then(e => { + this._setPaneViews([new e.PriceRangePaneView(this, this._model)]) + }) + } + pointsCount() { + return 2 + } + properties() { + return super.properties() + } + name() { + return "Price Range" + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolpricerange", e); + return n._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Ax76"))) + .GeneralDatePriceRangeDefinitionsViewModel + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e) + } + } + }, + RDU5: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "UndoCommand", (function() { + return s + })); + class s { + constructor(e, t = !0) { + this._customFlags = {}, this._text = e, this._executeOnPush = t + } + text() { + return this._text + } + executeOnPush() { + return this._executeOnPush + } + customFlag(e) { + return this._customFlags[e] + } + setCustomFlag(e, t) { + this._customFlags[e] = t + } + canMerge(e) { + return !1 + } + merge(e) { + throw new Error("Should be re-implemented in child classes") + } + } + }, + RTYN: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PositionAveragePriceAxisView", (function() { + return r + })); + var s = i("4TVt"); + class r extends s.LineToolPriceAxisView { + _formatPrice(e, t) { + return this._source.formatter().format(e) + } + } + }, + RXmj: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("FIi8").deepExtend, + r = i("ogJP").deepEquals, + n = i("zUrt").backend, + o = i("l+oz").ChartSaverBase; + window.t( + "The publication preview could not be loaded. Please disable your browser extensions and try again." + ); + + function a(e, t) { + e.content = JSON.stringify(t) + } + t.ChartSaver = class extends o { + constructor(t) { + super(t), this._chartAboutToBeSavedDelegate = new e, this + ._chartSavedDelegate = new e, this._prevChartState = null, this + ._chartSizeLimitExceededDelegate = new e + } + chartSizeLimitExceeded() { + return this._chartSizeLimitExceededDelegate + } + chartAboutToBeSaved() { + return this._chartAboutToBeSavedDelegate + } + chartSaved() { + return this._chartSavedDelegate + } + whenReadyToSave(e) { + var t = this._chartWidgetCollection.activeChartWidget.value().model() + .mainSeries(); + if (t.hasDelayedSymbolIntervalChange()) { + var i, s = null; + i = function() { + t.dataEvents().symbolError().unsubscribe(null, s, !0), e() + }, s = function() { + t.dataEvents().symbolResolved().unsubscribe(null, i, !0) + }, t.dataEvents().symbolResolved().subscribe(null, i, !0), t + .dataEvents().symbolError().subscribe(null, s, !0) + } else e() + } + saveToJSON() { + var e = this._getCommonSavingInfo(!1); + return a(e, this._getChartWidgetCollectionState(!1, !0)), e + } + _fillAsyncInfo(e, t) { + var i = JSON.parse(e.content), + r = this._chartWidgetCollection; + return (t ? r.asyncState() : r.activeChartWidget.value().asyncState()) + .then((function(t) { + return e.content = JSON.stringify(s(i, t)), e + })) + } + _getChartWidgetCollectionState(e, t, i, s, r) { + return e || (t = !0, s = !1), t ? this._chartWidgetCollection.state(!!e, + i, s, r) : this._chartWidgetCollection.activeChartWidget.value() + .state(!!e, i, s, r) + } + publishChart(e) {} + publishScript(e, t, i) {} + onPublish(e, t) {} + saveChartLineTools(e, t) { + var i = (void 0)(), + s = this._chartWidgetCollection.metaInfo.uid.value(); + return i.saveLineToolsAndGroups(s, e, t) + } + _saveLineToolsToStorage() { + return Promise.resolve() + } + _saveChartImpl(e, t, i, s, r, o) { + var a = i, + l = s; + if (a = function(s) { + t.id.value() || (t.id.setValue(s), t.uid.setValue(s)), + "function" == typeof i && i(t, e) + }, !e.name) return console.warn( + "Saving chart with empty name is not allowed"), void s(); + n.saveChart(e.name, e.short_name, e.resolution, e, t).then(a.bind(this)) + .catch(l.bind(this)) + } + _saveChart(e, t, i, s) { + var n = this._chartWidgetCollection.metaInfo, + o = function(o) { + return r(this._prevChartState, o)[0] && null != n.id.value() ? ( + this._chartSavedDelegate.fire(!0), void(t && t(n, o))) : + this._saveChartImpl(o, n, t, i, s, e) + }.bind(this); + this._saveLineToolsToStorage().then((function() { + var t = e(!0); + return o(t) + })).catch((function(t) { + var i = e(!1); + return o(i) + })) + } + saveChartSilently(e, t, i) { + i = i || {}; + var s = function(e) { + var t = e && (void 0)("remove_line_tools_from_content"), + s = this._getChartWidgetCollectionState(!1, void 0, void 0, + void 0, t), + r = this._getCommonSavingInfo(!1, t); + return a(r, s), i.chartName && (r.name = i.chartName), r.name && + 0 !== r.name.length || !i.defaultChartName || (r.name = i + .defaultChartName), i.autoSave && (r.autoSave = !0), r + }.bind(this); + this._isSaveInProcess = !0, this._chartAboutToBeSavedDelegate.fire(), + this._saveChart(s, function(t, i) { + this._chartWidgetCollection.metaInfo.name.setValue(i.name), + this._prevChartState = i, this._chartSavedDelegate.fire( + !0), this._isSaveInProcess = !1, e && e({ + uid: t.uid.value(), + data: i + }), delete this._prevChartState.savingToken + }.bind(this), function() { + this._chartSavedDelegate.fire(!1), this._isSaveInProcess = ! + 1, t && t.apply(null, arguments) + }.bind(this), i) + } + isSaveInProcess() { + return this._isSaveInProcess + } + } + }).call(this, i("aIyQ")) + }, + RspR: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "property", (function() { + return n + })), i.d(t, "availableValues", (function() { + return o + })), i.d(t, "actualBehavior", (function() { + return a + })); + var s = i("+jnJ"), + r = i("1ANp"); + const { + property: n, + availableValues: o, + actualBehavior: a + } = Object(s.a)("PaneButtons.visibility", r.navigationButtonsVisibilityKey) + }, + S8xo: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "MouseEventHandler", (function() { + return h + })); + var s = i("qFKp"), + r = i("Eyy1"), + n = i("ogJP"), + o = i("GUQs"), + a = i("VaSN"); + const l = s.isSafari ? "click" : "auxclick", + c = { + treatVertTouchDragAsPageScroll: !1, + treatHorzTouchDragAsPageScroll: !1 + }; + class h { + constructor(e, t, i) { + this._clickCount = 0, this._clickTimeoutId = null, this._clickPosition = { + x: Number.NEGATIVE_INFINITY, + y: Number.POSITIVE_INFINITY + }, this._tapCount = 0, this._tapTimeoutId = null, this._tapPosition = { + x: Number.NEGATIVE_INFINITY, + y: Number.POSITIVE_INFINITY + }, this._longTapTimeoutId = null, this._longTapActive = !1, this + ._mouseMoveStartPosition = null, this._touchMoveStartPosition = null, this + ._touchMoveExceededManhattanDistance = !1, this._cancelClick = !1, this + ._cancelTap = !1, this._unsubscribeOutsideMouseEvents = null, this + ._unsubscribeOutsideTouchEvents = null, this._unsubscribeMobileSafariEvents = + null, this._unsubscribeMousemove = null, this._unsubscribeRootMouseEvents = + null, this._unsubscribeRootTouchEvents = null, this._startPinchMiddlePoint = + null, + this._startPinchDistance = 0, this._pinchPrevented = !1, this + ._preventTouchDragProcess = !1, this._mousePressed = !1, this + ._lastTouchEventTimeStamp = 0, this._activeTouchId = null, this + ._acceptMouseLeave = !s.CheckMobile.iOS(), this._onFirefoxOutsideMouseUp = + e => { + this._mouseUpHandler(e) + }, this._onMobileSafariDoubleClick = e => { + if (this._firesTouchEvents(e)) { + const t = this._makeCompatEvent(e); + if (++this._tapCount, this._tapTimeoutId && this._tapCount > 1) { + const { + manhattanDistance: i + } = this._touchMouseMoveWithDownInfo(u(e), this._tapPosition); + i < 30 && !this._cancelTap && this._processTouchEvent(t, this + ._handler.doubleTapEvent), this._resetTapTimeout() + } + } else { + const t = this._makeCompatEvent(e); + if (++this._clickCount, this._clickTimeoutId && this._clickCount > 1) { + const { + manhattanDistance: i + } = this._touchMouseMoveWithDownInfo(u(e), this._clickPosition); + i < 5 && !this._cancelClick && this._processMouseEvent(t, this + ._handler.mouseDoubleClickEvent), this._resetClickTimeout() + } + } + }, this._target = e, this._handler = t, this._options = Object(n.merge)(Object(n + .clone)(c), i || {}), this._init() + } + destroy() { + null !== this._unsubscribeOutsideMouseEvents && (this + ._unsubscribeOutsideMouseEvents(), this._unsubscribeOutsideMouseEvents = + null), null !== this._unsubscribeOutsideTouchEvents && (this + ._unsubscribeOutsideTouchEvents(), this._unsubscribeOutsideTouchEvents = + null), null !== this._unsubscribeMousemove && (this._unsubscribeMousemove(), + this._unsubscribeMousemove = null), null !== this + ._unsubscribeRootMouseEvents && (this._unsubscribeRootMouseEvents(), this + ._unsubscribeRootMouseEvents = null), null !== this + ._unsubscribeRootTouchEvents && (this._unsubscribeRootTouchEvents(), this + ._unsubscribeRootTouchEvents = null), null !== this + ._unsubscribeMobileSafariEvents && (this._unsubscribeMobileSafariEvents(), this + ._unsubscribeMobileSafariEvents = null), this._clearLongTapTimeout(), this + ._resetClickTimeout() + } + _mouseEnterHandler(e) { + this._unsubscribeMousemove && this._unsubscribeMousemove(); + const t = this._mouseMoveHandler.bind(this); + if (this._unsubscribeMousemove = () => { + this._target.removeEventListener("mousemove", t) + }, this._target.addEventListener("mousemove", t), this._firesTouchEvents(e)) + return; + const i = this._makeCompatEvent(e); + this._processMouseEvent(i, this._handler.mouseEnterEvent), this + ._acceptMouseLeave = !0 + } + _resetClickTimeout() { + null !== this._clickTimeoutId && clearTimeout(this._clickTimeoutId), this + ._clickCount = 0, this._clickTimeoutId = null, this._clickPosition = { + x: Number.NEGATIVE_INFINITY, + y: Number.POSITIVE_INFINITY + } + } + _resetTapTimeout() { + null !== this._tapTimeoutId && clearTimeout(this._tapTimeoutId), this._tapCount = 0, + this._tapTimeoutId = null, this._tapPosition = { + x: Number.NEGATIVE_INFINITY, + y: Number.POSITIVE_INFINITY + } + } + _mouseMoveHandler(e) { + if (this._mousePressed || null !== this._touchMoveStartPosition) return; + if (this._firesTouchEvents(e)) return; + const t = this._makeCompatEvent(e); + this._processMouseEvent(t, this._handler.mouseMoveEvent), this._acceptMouseLeave = ! + 0 + } + _touchMoveHandler(e) { + const t = _(e.changedTouches, Object(r.ensureNotNull)(this._activeTouchId)); + if (null === t) return; + if (this._lastTouchEventTimeStamp = p(e), null !== this._startPinchMiddlePoint) + return; + if (this._preventTouchDragProcess) return; + this._pinchPrevented = !0; + const i = this._touchMouseMoveWithDownInfo(u(t), Object(r.ensureNotNull)(this + ._touchMoveStartPosition)), + { + xOffset: s, + yOffset: n, + manhattanDistance: a + } = i; + if (this._touchMoveExceededManhattanDistance || !(a < 5)) { + if (!this._touchMoveExceededManhattanDistance) { + const e = .5 * s, + t = n >= e && !this._options.treatVertTouchDragAsPageScroll, + i = e > n && !this._options.treatHorzTouchDragAsPageScroll; + t || i || (this._preventTouchDragProcess = !0), this + ._touchMoveExceededManhattanDistance = !0, this._cancelTap = !0, this + ._clearLongTapTimeout(), this._resetTapTimeout() + } + if (!this._preventTouchDragProcess) { + const i = this._makeCompatEvent(e, t); + this._processTouchEvent(i, this._handler.touchMoveEvent), Object(o.a)(e) + } + } + } + _mouseMoveWithDownHandler(e) { + if (0 !== e.button) return; + const t = this._touchMouseMoveWithDownInfo(u(e), Object(r.ensureNotNull)(this + ._mouseMoveStartPosition)), + { + manhattanDistance: i + } = t; + if (i >= 5 && (this._cancelClick = !0, this._resetClickTimeout()), this + ._cancelClick) { + const t = this._makeCompatEvent(e); + this._processMouseEvent(t, this._handler.pressedMouseMoveEvent) + } + } + _touchMouseMoveWithDownInfo(e, t) { + const i = Math.abs(t.x - e.x), + s = Math.abs(t.y - e.y); + return { + xOffset: i, + yOffset: s, + manhattanDistance: i + s + } + } + _touchEndHandler(e) { + let t = _(e.changedTouches, Object(r.ensureNotNull)(this._activeTouchId)); + if (null === t && 0 === e.touches.length && (t = e.changedTouches[0]), null === t) + return; + this._activeTouchId = null, this._lastTouchEventTimeStamp = p(e), this + ._clearLongTapTimeout(), this._touchMoveStartPosition = null, this + ._unsubscribeRootTouchEvents && (this._unsubscribeRootTouchEvents(), this + ._unsubscribeRootTouchEvents = null); + const i = this._makeCompatEvent(e, t); + if (this._processTouchEvent(i, this._handler.touchEndEvent), ++this._tapCount, this + ._tapTimeoutId && this._tapCount > 1) { + const { + manhattanDistance: e + } = this._touchMouseMoveWithDownInfo(u(t), this._tapPosition); + e < 30 && !this._cancelTap && this._processTouchEvent(i, this._handler + .doubleTapEvent), this._resetTapTimeout() + } else this._cancelTap || (this._processTouchEvent(i, this._handler.tapEvent), this + ._handler.tapEvent && Object(o.a)(e)); + 0 === this._tapCount && Object(o.a)(e), 0 === e.touches.length && this + ._longTapActive && (this._longTapActive = !1, Object(o.a)(e)) + } + _mouseUpHandler(e) { + if (0 !== e.button) return; + const t = this._makeCompatEvent(e); + if (this._mouseMoveStartPosition = null, this._mousePressed = !1, this + ._unsubscribeRootMouseEvents && (this._unsubscribeRootMouseEvents(), this + ._unsubscribeRootMouseEvents = null), s.isFF) { + this._target.ownerDocument.documentElement.removeEventListener("mouseleave", + this._onFirefoxOutsideMouseUp) + } + if (!this._firesTouchEvents(e)) + if (this._processMouseEvent(t, this._handler.mouseUpEvent), ++this._clickCount, + this._clickTimeoutId && this._clickCount > 1) { + const { + manhattanDistance: i + } = this._touchMouseMoveWithDownInfo(u(e), this._clickPosition); + i < 5 && !this._cancelClick && this._processMouseEvent(t, this._handler + .mouseDoubleClickEvent), this._resetClickTimeout() + } else this._cancelClick || this._processMouseEvent(t, this._handler + .mouseClickEvent) + } + _clearLongTapTimeout() { + null !== this._longTapTimeoutId && (clearTimeout(this._longTapTimeoutId), this + ._longTapTimeoutId = null) + } + _touchStartHandler(e) { + if (null !== this._activeTouchId) return; + const t = e.changedTouches[0]; + this._activeTouchId = t.identifier, this._lastTouchEventTimeStamp = p(e); + const i = this._target.ownerDocument.documentElement; + this._cancelTap = !1, this._touchMoveExceededManhattanDistance = !1, this + ._preventTouchDragProcess = !1, this._touchMoveStartPosition = u(t), this + ._unsubscribeRootTouchEvents && (this._unsubscribeRootTouchEvents(), this + ._unsubscribeRootTouchEvents = null); { + const t = this._touchMoveHandler.bind(this), + s = this._touchEndHandler.bind(this); + this._unsubscribeRootTouchEvents = () => { + i.removeEventListener("touchmove", t), i.removeEventListener("touchend", + s) + }, i.addEventListener("touchmove", t, { + passive: !1 + }), i.addEventListener("touchend", s, { + passive: !1 + }), this._clearLongTapTimeout(), this._longTapTimeoutId = setTimeout(this + ._longTapHandler.bind(this, e), 240) + } + const s = this._makeCompatEvent(e, t); + this._processTouchEvent(s, this._handler.touchStartEvent), this._tapTimeoutId || ( + this._tapCount = 0, this._tapTimeoutId = setTimeout(this._resetTapTimeout + .bind(this), 500), this._tapPosition = u(t)) + } + _wheelClickHandler(e) { + if (1 !== e.button) return; + if (this._firesTouchEvents(e)) return; + const t = this._makeCompatEvent(e); + this._processMouseEvent(t, this._handler.wheelClickEvent) + } + _mouseDownHandler(e) { + if (0 !== e.button) return; + const t = this._target.ownerDocument.documentElement; + s.isFF && t.addEventListener("mouseleave", this._onFirefoxOutsideMouseUp), this + ._cancelClick = !1, this._mouseMoveStartPosition = u(e), this + ._unsubscribeRootMouseEvents && (this._unsubscribeRootMouseEvents(), this + ._unsubscribeRootMouseEvents = null); { + const e = this._mouseMoveWithDownHandler.bind(this), + i = this._mouseUpHandler.bind(this); + this._unsubscribeRootMouseEvents = () => { + t.removeEventListener("mousemove", e), t.removeEventListener("mouseup", + i) + }, t.addEventListener("mousemove", e), t.addEventListener("mouseup", i) + } + if (this._mousePressed = !0, this._firesTouchEvents(e)) return; + const i = this._makeCompatEvent(e); + this._processMouseEvent(i, this._handler.mouseDownEvent), this._clickTimeoutId || ( + this._clickCount = 0, this._clickTimeoutId = setTimeout(this + ._resetClickTimeout.bind(this), 500), this._clickPosition = u(e)) + } + _init() { + this._target.addEventListener("mouseenter", this._mouseEnterHandler.bind(this)), + this._target.addEventListener("touchcancel", this._clearLongTapTimeout.bind( + this)); { + const e = this._target.ownerDocument, + t = e => { + this._handler.mouseDownOutsideEvent && (e.target && this._target + .contains(e.target) || this._handler.mouseDownOutsideEvent()) + }; + this._unsubscribeOutsideTouchEvents = () => { + e.removeEventListener("touchstart", t) + }, this._unsubscribeOutsideMouseEvents = () => { + e.removeEventListener("mousedown", t) + }, e.addEventListener("mousedown", t), e.addEventListener("touchstart", t, { + passive: !0 + }) + } + s.CheckMobile.iOS() && (this._unsubscribeMobileSafariEvents = () => { + this._target.removeEventListener("dblclick", this + ._onMobileSafariDoubleClick) + }, this._target.addEventListener("dblclick", this + ._onMobileSafariDoubleClick)), this._target.addEventListener("mouseleave", + this._mouseLeaveHandler.bind(this)), this._target.addEventListener( + "contextmenu", this._contextMenuHandler.bind(this)), + this._target.addEventListener("touchstart", this._touchStartHandler.bind( + this), { + passive: !0 + }), Object(o.b)(this._target), this._target.addEventListener("mousedown", this + ._mouseDownHandler.bind(this)), this._target.addEventListener(l, this + ._wheelClickHandler.bind(this)), this._initPinch(), this._target + .addEventListener("touchmove", () => {}, { + passive: !1 + }) + } + _initPinch() { + void 0 === this._handler.pinchStartEvent && void 0 === this._handler.pinchEvent && + void 0 === this._handler.pinchEndEvent || (this._target.addEventListener( + "touchstart", e => this._checkPinchState(e.touches), { + passive: !0 + }), this._target.addEventListener("touchmove", e => { + if (2 === e.touches.length && null !== this + ._startPinchMiddlePoint && void 0 !== this._handler.pinchEvent + ) { + const t = d(e.touches[0], e.touches[1]) / this + ._startPinchDistance; + this._handler.pinchEvent(this._startPinchMiddlePoint, t), + Object(o.a)(e) + } + }, { + passive: !1 + }), this._target.addEventListener("touchend", e => { + this._checkPinchState(e.touches) + })) + } + _checkPinchState(e) { + 1 === e.length && (this._pinchPrevented = !1), 2 !== e.length || this + ._pinchPrevented || this._longTapActive ? this._stopPinch() : this._startPinch( + e) + } + _startPinch(e) { + const t = this._target.getBoundingClientRect() || { + left: 0, + top: 0 + }; + this._startPinchMiddlePoint = { + x: (e[0].clientX - t.left + (e[1].clientX - t.left)) / 2, + y: (e[0].clientY - t.top + (e[1].clientY - t.top)) / 2 + }, this._startPinchDistance = d(e[0], e[1]), void 0 !== this._handler + .pinchStartEvent && this._handler.pinchStartEvent(), this._clearLongTapTimeout() + } + _stopPinch() { + null !== this._startPinchMiddlePoint && (this._startPinchMiddlePoint = null, + void 0 !== this._handler.pinchEndEvent && this._handler.pinchEndEvent()) + } + _mouseLeaveHandler(e) { + if (this._unsubscribeMousemove && this._unsubscribeMousemove(), this + ._firesTouchEvents(e)) return; + if (!this._acceptMouseLeave) return; + const t = this._makeCompatEvent(e); + this._processMouseEvent(t, this._handler.mouseLeaveEvent), this + ._acceptMouseLeave = !s.CheckMobile.iOS() + } + _longTapHandler(e) { + const t = _(e.touches, Object(r.ensureNotNull)(this._activeTouchId)); + if (null === t) return; + const i = this._makeCompatEvent(e, t); + this._processTouchEvent(i, this._handler.longTapEvent), this._processTouchEvent(i, + this._handler.touchContextMenuEvent), this._cancelTap = !0, this + ._longTapActive = !0 + } + _contextMenuHandler(e) { + if (Object(o.a)(e), null !== this._touchMoveStartPosition) return; + if (this._firesTouchEvents(e)) return; + const t = this._makeCompatEvent(e); + this._processMouseEvent(t, this._handler.contextMenuEvent), this._cancelClick = !0 + } + _firesTouchEvents(e) { + return e.sourceCapabilities && void 0 !== e.sourceCapabilities.firesTouchEvents ? e + .sourceCapabilities.firesTouchEvents : p(e) < this._lastTouchEventTimeStamp + + 500 + } + _processTouchEvent(e, t) { + Object(a.setLastEventIsTouch)(!0), t && t.call(this._handler, e) + } + _processMouseEvent(e, t) { + "mouseleave" !== e.srcType && Object(a.setLastEventIsTouch)(!1), t && t.call(this + ._handler, e) + } + _makeCompatEvent(e, t) { + const i = t || e, + s = this._target.getBoundingClientRect() || { + left: 0, + top: 0 + }; + return { + clientX: i.clientX, + clientY: i.clientY, + pageX: i.pageX, + pageY: i.pageY, + screenX: i.screenX, + screenY: i.screenY, + localX: i.clientX - s.left, + localY: i.clientY - s.top, + ctrlKey: e.ctrlKey, + altKey: e.altKey, + shiftKey: e.shiftKey, + metaKey: e.metaKey, + isTouch: !e.type.startsWith("mouse") && "contextmenu" !== e.type && "click" !== + e.type, + srcType: e.type, + target: i.target, + view: e.view, + preventDefault: () => { + "touchstart" !== e.type && Object(o.a)(e) + } + } + } + } + + function u(e) { + return { + x: e.pageX, + y: e.pageY + } + } + + function d(e, t) { + const i = e.clientX - t.clientX, + s = e.clientY - t.clientY; + return Math.sqrt(i * i + s * s) + } + + function p(e) { + return e.timeStamp || performance.now() + } + + function _(e, t) { + for (let i = 0; i < e.length; ++i) + if (e[i].identifier === t) return e[i]; + return null + } + }, + SMvR: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolHighlighter", (function() { + return n + })); + var s = i("Ocx9"), + r = i("DVnF"); + class n extends r.a { + constructor(e, t) { + super(e, t || n.createProperties()), this._loadPaneViews(e) + } + properties() { + return super.properties() + } + smooth() { + return this.properties().childs().smooth.value() + } + name() { + return "Highlighter" + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolhighlighter", e); + return n._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "/a/6")).then( + e => e.HighlighterDefinitionsViewModel) + } + _loadPaneViews(e) { + i.e("lt-pane-views").then(i.bind(null, "uRW3")).then(t => { + this._setPaneViews([new t.HighlighterPaneView(this, e)]) + }) + } + static _configureProperties(e) { + r.a._configureProperties(e) + } + } + }, + Si3H: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("0YCj"), + n = i.n(r), + o = i("ogJP"); + i.d(t, "migrateMetaInfoAndPropState", (function() { + return l + })); + const a = [new class { + targetMetaInfoVersion() { + return 47 + } + migrateMetaInfo(e) { + const t = e, + i = e; + if (i._metainfoVersion = 47, !t.defaults || void 0 === t.defaults.precision) + return void(i.format = { + type: "inherit" + }); + const s = t.defaults && t.defaults.precision, + r = Object(o.isNumber)(s) ? s : parseInt(s); + 0 === r ? i.format = { + type: "volume" + } : isFinite(r) ? i.format = { + type: "price", + precision: r + } : i.format = { + type: "inherit" + }, delete t.defaults.precision + } + migratePropState(e) {} + }, new class { + targetMetaInfoVersion() { + return 50 + } + migrateMetaInfo(e) { + const t = e, + i = e; + if (i._metainfoVersion = 50, void 0 === t.defaults || void 0 === t.defaults + .ohlcPlots || void 0 === t.ohlcPlots) return; + const r = t.ohlcPlots, + n = t.defaults.ohlcPlots, + o = Object(s.ensureDefined)(Object(s.ensureDefined)(i.defaults) + .ohlcPlots); + for (const e of Object.keys(n)) { + const t = n[e]; + if ("ohlc_candles" === t.plottype) { + let i = !1; + const s = r[e]; + void 0 !== s && (i = !!s.drawBorder, delete s.drawBorder), o[e] = { + borderColor: "#000000", + drawBorder: i, + ...t + } + } + } + } + migratePropState(e) {} + }]; + + function l(e, t) { + const i = n.a.versionOf(e), + r = e; + void 0 === r._serverMetaInfoVersion && (r._serverMetaInfoVersion = i), a.forEach(r => { + i < 0 || i >= r.targetMetaInfoVersion() || (r.migrateMetaInfo(e), void 0 !== + t && r.migratePropState(t), Object(s.assert)(e._metainfoVersion === r + .targetMetaInfoVersion())) + }) + } + a.sort((function(e, t) { + return e.targetMetaInfoVersion() - t.targetMetaInfoVersion() + })) + }, + SqfW: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return n + })), i.d(t, "a", (function() { + return o + })); + var s = i("tqok"), + r = i("hsV8"); + + function n(e, t) { + if (e.index >= t.length) return null; + const i = t[e.index]; + return i === s.INVALID_TIME_POINT_INDEX ? null : { + startPrice: e.startPrice, + endPrice: e.endPrice, + index: i, + extendTop: e.extendTop, + extendBottom: e.extendBottom + } + } + + function o(e, t, i) { + const s = Object(r.ensureTimePointIndexIndex)(i.indexOf(e.index)); + return { + id: t, + ...e, + index: s + } + } + }, + Ss5c: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("dOnf").deepCopy, + n = i("4TVt").LineToolPriceAxisView, + o = i("fJhV").LineDataSourceTimeAxisView, + a = i("mMWL"), + l = i("LxhU").Interval, + c = i("txPx").getLogger("Chart.LineDataSource"), + h = i("FQhm"), + u = i("aIyQ"), + d = i("tc+8"), + p = i("Ocx9").DefaultProperty, + _ = i("Kxc7"), + m = i("0qMc").lineToolsLocalizedNames, + f = _.enabled("datasource_copypaste"), + g = i("ng+v").LineDataSourceBase, + b = i("0C7r").intervalsVisibilitiesDefaults; + class v extends g { + constructor(e, t) { + super(e, t), this._onTemplateApplying = new u, this._onTemplateApplied = new u, this + ._properties.hasChild("interval") || this._properties.addChild("interval", + new d(e.mainSeries().interval())), this.calcIsActualSymbol(), this + ._properties.intervalsVisibilities.listeners().subscribe(this, v.prototype + .calcIsActualSymbol); + var i = this; + if (this._properties.listeners().subscribe(this, (function(e) { + i.propertiesChanged() + })), this._createPointsProperties(), this.pointsCount() > 0) + for (var s = 0; s < this.pointsCount(); s++) this._priceAxisViews.push(this + .createPriceAxisView(s)), this._timeAxisViews.push(new o(this, s)); + this._properties.visible.listeners().subscribe(this, (function(e) { + var t = !1 === a.hideAllDrawings().value(); + e.value() ? e.value() && t && h.emit("drawing_event", this._id, + "show") : (i._model.selection().isSelected(this) && i._model + .selectionMacro((function(e) { + e.removeSourceFromSelection(i) + })), t && h.emit("drawing_event", this._id, "hide")), i + ._onSourceHiddenMayChange() + })), a.hideAllDrawings().subscribe(this, this._onSourceHiddenMayChange), this + .customization = { + forcePriceAxisLabel: !1, + disableErasing: !1, + disableSave: !1, + showInObjectsTree: !0 + }, this._syncStateExclusions = [], this._definitionsViewModel = null, this + ._isDestroyed = !1, this._syncLineStyleMuted = !1 + } + getType() { + return TradingView.className(this.constructor) + } + isSavedInChart(e) { + return !this.customization.disableSave + } + setSavingInChartEnabled(e) { + this.customization.disableSave = !e + } + showInObjectTree() { + return this.customization.showInObjectsTree + } + isAvailableInFloatingWidget() { + return !0 + } + setShowInObjectsTreeEnabled(e) { + this.customization.showInObjectsTree = e + } + visibilityKeyByInterval(e) { + var t, i = l.parse(e); + return v.IntervalsVisibilities.forEach((function(e) { + e.kind === i.kind() && e.from <= i.multiplier() && e.to >= i + .multiplier() && (t = e.key) + })), t + } + priceScale() { + return this._ownerSource ? this._ownerSource.m_priceScale : null + } + symbol() { + return this._properties.symbol.value() + } + properties() { + return this._properties + } + isSavedInStudyTemplates() { + return !1 + } + state(e) { + var t = { + type: TradingView.className(this.constructor), + id: this.id(), + state: this.properties().state(this._propertiesStateExclusions()), + points: r(this._timePoint), + zorder: this.zorder() + }; + return this.linkKey().value() && (t.linkKey = this.linkKey().value()), delete t + .state.points, e && (t.indexes = this._points), this.ownerSource() && (t + .ownerSource = this.ownerSource().id()), this.isFixed() && (t + .positionPercents = this._positionPercents || this.calcPositionPercents()), + "version" in this && 1 !== this.version && (t.version = this.version), this + .hasAlert.value() && (t.alertId = this._alertId), t + } + _propertiesStateExclusions() { + return null + } + template() { + return this.properties().preferences() + } + applyTemplate(e) { + this._onTemplateApplying.fire(e), this._applyTemplateImpl(e), this + .calcIsActualSymbol(), this.updateAllViews(), this.model().lightUpdate(), this + ._onTemplateApplied.fire() + } + _applyTemplateImpl(e) { + var t = this.properties(); + t.mergePreferences(e), t.saveDefaults(), this.propertiesChanged() + } + restoreExternalState(e) { + this.properties().mergeAndFire(e) + } + restorePositionPercents(e) { + this._positionPercents = e + } + propertiesChanged(e) { + this.calcIsActualInterval(), this.updateAllViewsAndRedraw(), e || this + ._syncLineStyleIfNeeded() + } + syncLineStyleState() { + const e = this.properties().state(this._syncStateExclusions); + return delete e.interval, e + } + _syncLineStyleIfNeeded() { + !this._syncLineStyleMuted && this.linkKey().value() && a.changeLineStyle({ + linkKey: this.linkKey().value(), + state: this.syncLineStyleState(), + model: this._model + }) + } + _muteSyncLineStyle() { + this._syncLineStyleMuted = !0 + } + _unmuteSyncLineStyleWithoutApplyingChanges() { + this.propertiesChanged(), this._syncLineStyleMuted = !1 + } + fixedPoints() { + var e = []; + if (this._positionPercents && !this.priceScale().isEmpty()) + for (var t = 0; t < this._positionPercents.length; t++) { + var i = this._positionPercents[t], + r = this._model.timeScale().width() * i.x, + n = this.priceScale().height() * i.y; + e.push(new s(r, n)) + } else + for (t = 0; t < this._fixedPoints.length; t++) e.push(this._fixedPoints[t] + .clone()); + return this._lastPoint && e.push(this._lastPoint.clone()), this + ._currentMovingPoint && this._startMovingPoint && this._correctFixedPoints(e), e + } + addFixedPoint(e) { + this._fixedPoints.push(e); + var t = this._fixedPoints.length === this.pointsCount(); + return t && this.calcPositionPercents(), t + } + calcPositionPercents() { + if (!this.priceScale() || this.priceScale().isEmpty()) return []; + this._positionPercents = []; + for (var e = 0; e < this._fixedPoints.length; e++) { + var t = this._fixedPoints[e], + i = t.x / this._model.timeScale().width(), + s = t.y / this.priceScale().height(); + this._positionPercents.push({ + x: i, + y: s + }) + } + return this._positionPercents + } + calcMiddlePoint(e, t) { + return new s((e.x + t.x) / 2, (e.y + t.y) / 2) + } + getPointByPosition(e, t, i, s) { + return [t, i, s][e] + } + restoreFixedPoints() { + this._fixedPoints = this.fixedPoints() + } + dataWindowView() { + return null + } + statusView() { + return null + } + isSynchronizable() { + return this.priceScale() === this._model.mainSeries().priceScale() + } + priceAxisViews(e, t) { + if (t !== this.priceScale() || this.isSourceHidden()) return null; + if (this._model.lineBeingEdited() === this) { + var i = this._model.linePointBeingEdited(); + if (null !== i && i < this._priceAxisViews.length) { + var s = this._priceAxisViews.slice(), + r = s[i]; + return s.splice(i, 1), s.push(r), s + } + return this._priceAxisViews + } + return this._priceAxisViews + } + timeAxisViews() { + if (this.isSourceHidden()) return null; + if (this._model.lineBeingEdited() === this) { + var e = this._model.linePointBeingEdited(); + if (null !== e && e < this._timeAxisViews.length) { + var t = this._timeAxisViews.slice(), + i = t[e]; + return t.splice(e, 1), t.push(i), t + } + return this._timeAxisViews + } + return this._timeAxisViews + } + updateAllViews() { + if (!this._isActualSymbol || !this._isActualCurrency || !this._isActualUnit) + return null; + if (!this._properties.visible.value()) return null; + this._updateAllPaneViews(); + for (var e = this._priceAxisViews, t = 0; t < e.length; t++) e[t].update(); + for (e = this._timeAxisViews, t = 0; t < e.length; t++) e[t].update() + } + setLastFixedPoint(e) { + this._lastFixedPoint = e, this.updateAllViews() + } + title() { + return this.translatedType() + } + translatedType() { + return void 0 !== m[this.toolname] ? m[this.toolname] : "Line Tool" + } + name() { + return "Line Tool" + } + isBeingEdited() { + return this === this._model.lineBeingEdited() || this === this._model + .sourceBeingMoved + } + isFixed() { + return !1 + } + isLocked() { + return this.properties().frozen && this.properties().frozen.value() + } + pointToScreenPoint(e) { + var t = this._model.timeScale(), + i = this.priceScale(), + r = this.ownerSource().firstValue(); + if (!i || i.isEmpty() || t.isEmpty() || null == r) return [new s(0, 0), new s(0, + 0)]; + var n = t.indexToCoordinate(e.index, !0), + o = e.price, + a = i.priceToCoordinate(o, r), + l = new s(n, a); + n = t.indexToCoordinate(e.index, !1), a = i.priceToCoordinate(o, r); + return [l, new s(n, a)] + } + screenPointToPoint(e) { + var t = this._model.timeScale(), + i = this.priceScale(), + s = t.coordinateToIndex(e.x), + r = this.ownerSource().firstValue(); + if (null !== r && isFinite(r)) return { + price: i.coordinateToPrice(e.y, r), + index: s + } + } + tags() { + return [this.toolname] + } + createPriceAxisView(e) { + return new n(this, { + pointIndex: e + }) + } + alertId() { + return this._alertId + } + setAlert(e, t) { + throw new Error("not implemented") + } + removeAlert() { + delete this._alertId, delete this._alert, this.hasAlert.setValue(!1) + } + _processAlertHandlers(e) { + var t, i, s = this; + if ("unsubscribe" !== (e = "subscribe" === e ? "subscribe" : "unsubscribe") || s + ._alertCallbacks) { + i = "subscribe" === e ? "on" : "off", t = s.properties(); + var r = s._alertCallbacks || { + remove: s.removeAlert.bind(s), + hovered: function(e, t) { + var i = s._model.hoveredSource() === s; + t && !i ? s._model.setHoveredSource(s, null) : !t && i && s + ._model.setHoveredSource(null, null) + }, + selected: function(e, t) { + t && s._model.selectionMacro((function(e) { + e.addSourceToSelection(s) + })) + }, + synchronizeSilently: function(e) { + s.synchronizeAlert(!1) + } + }; + s._alertCallbacks || (s._alertCallbacks = r), s.getAlert().then((function(n) { + n && (n[i]("destroy", r.remove), n[i]("change:hovered", r + .hovered), n[i]("change:selected", r.selected), t + .extendLeft && t.extendLeft[e](s, r + .synchronizeSilently), t.extendRight && t + .extendRight[e] + (s, r.synchronizeSilently)) + })) + } + } + editAlert(e) {} + getAlert() { + throw new Error("not implemented") + } + getAlertSync() { + return null + } + synchronizeAlert(e) {} + _getUndoHistory() { + return this._model._undoModel.undoHistory() + } + stateForAlert() { + if (!this.canHasAlert()) return null; + var e = this.state(); + e.id = this.idForAlert(), e.uniqueId = this.idForAlert(), e.title = this.title(), e + .interval = this._model.mainSeries().interval(); + var t = this._getAlertPlots(); + return t && (e.plots = t), e + } + _getAlertPlots() { + return null + } + _linePointsToAlertPlot(e, t, i, s) { + if (2 !== e.length) return c.logError("[Drawing Alert] Wrong points"), null; + var r = this._model.timeScale(); + return !r || r.isEmpty() ? null : { + type: "LinePlot", + title: t || this.title(), + timestamp: r.indexToTimePoint(0), + offset1: e[0].index, + offset2: e[1].index, + price1: e[0].price, + price2: e[1].price, + extendBackward: i || !1, + extendForward: s || !1 + } + } + getAlertIsActive() { + return !1 + } + geometry() { + var e = this; + return this.points().map((function(t) { + return function(t) { + var i = t.x / e._model.timeScale().width(), + r = t.y / e.priceScale().height(); + return new s(i, r) + }(e.pointToScreenPoint(t)[0]) + })) + } + model() { + return this._model + } + isForcedDrawPriceAxisLabel() { + return this.customization.forcePriceAxisLabel + } + _getPropertyDefinitionsViewModelClass() { + return Promise.resolve(null) + } + getPropertyDefinitionsViewModel() { + if (null === this._definitionsViewModel) { + var e = this; + return e._getPropertyDefinitionsViewModelClass().then((function(t) { + return null === t || e._isDestroyed ? null : (null === e + ._definitionsViewModel && (e._definitionsViewModel = + new t(e._model.undoModel(), e)), e + ._definitionsViewModel) + })) + } + return Promise.resolve(this._definitionsViewModel) + } + hasEditableCoordinates() { + return !0 + } + getSourceIcon() { + return { + type: "loadSvg", + svgId: "linetool." + this.getType() + } + } + destroy() { + super.destroy(), this.stop(), null !== this._definitionsViewModel && (this + ._definitionsViewModel.destroy(), this._definitionsViewModel = null), + null !== this._ownerSource && (this._ownerSource.currencyChanged() + .unsubscribeAll(this), this._ownerSource.unitChanged().unsubscribeAll(this) + ), a.hideAllDrawings().unsubscribeAll(this), this._isDestroyed = !0 + } + getOrderTemplate() { + return null + } + copiable() { + return f + } + cloneable() { + return null !== this._ownerSource && null !== this._ownerSource.firstValue() + } + movable() { + return !0 + } + static _configureProperties(e) { + if (g._addCollectedProperties(e), e.hasChild("symbolStateVersion") || e.addChild( + "symbolStateVersion", new d(g._initialSymbolStateVersion())), e.hasChild( + "zOrderVersion") || e.addChild("zOrderVersion", new d(g + ._initialZOrderVersion())), e.hasChild("visible") || e.addChild("visible", + new d(!0)), e.hasChild("frozen") || e.addChild("frozen", new d(!1)), e + .hasChild("symbol") || e.addChild("symbol", new d("")), e.hasChild( + "currencyId") || e.addChild("currencyId", new d(null)), e.hasChild( + "unitId") || + e.addChild("unitId", new d(null)), e instanceof p && (e.addExclusion( + "symbolStateVersion"), e.addExclusion("zOrderVersion"), e.addExclusion( + "visible"), e.addExclusion("frozen"), e.addExclusion("symbol"), e + .addExclusion("currencyId"), e.addExclusion("unitId")), e.hasChild( + "intervalsVisibilities")) { + const t = e.childs().intervalsVisibilities, + i = t.state(); + t.merge(b), t.merge(i) + } else e.addChild("intervalsVisibilities", new d(b)); + e.hasChild("title") || e.addChild("title", new d("")), e instanceof p && (e + .addExclusion("symbolInfo"), e.addExclusion("points"), e.addExclusion( + "interval"), e.addExclusion("title")), e.hasChild("singleChartOnly") && + e.removeProperty("singleChartOnly") + } + } + v.prototype.version = 1, t.LineToolPriceAxisView = n, t.LineDataSource = v + }, + SwuQ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "unitConvertibleGroups", (function() { + return n + })), i.d(t, "sourceNewUnitOnPinningToPriceScale", (function() { + return o + })); + var s = i("/tGj"), + r = i("n5al"); + + function n(e, t, i) { + const s = Object(r.symbolUnitConvertibleGroupsIfExist)(e); + if (null !== s) return s; + const n = i.unitGroupById(t); + return null === n ? [] : [n] + } + + function o(e, t, i, r) { + let o = null; + if (i.unitConversionEnabled() && Object(s.isSymbolSource)(e)) { + const s = i.availableUnits(), + a = t.unit(s), + l = e.unit(), + c = null === l ? [] : n(e.symbolInfo(), l, s); + null !== a && null !== a.selectedUnit && !a.allUnitsAreOriginal && a.selectedUnit !== + l && (r && null === l || null !== l && s.convertible(l, c)) && (o = a.selectedUnit) + } + return o + } + }, + SzKR: function(e, t, i) {}, + T6Of: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LimitedPrecisionNumericFormatter", (function() { + return r + })); + var s = i("ogJP"); + class r { + constructor(e = 1) { + this._precision = e + } + format(e) { + Object(s.isNumber)(e) || (e = parseFloat(e)); + const t = e.toFixed(this._precision), + i = Math.pow(10, -this._precision); + return Math.max(parseFloat(t), i) + "" + } + parse(e) { + const t = parseFloat(e); + return isNaN(t) ? { + res: !1 + } : { + res: !0, + value: t, + suggest: this.format(t) + } + } + } + }, + TBaH: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolGannFixed", (function() { + return a + })); + var s = i("aO4+"), + r = i("Ss5c"), + n = i("j3hX"), + o = i("LAp3"); + class a extends r.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), this._constructor = "LineToolGannFixed", i + .e("lt-pane-views").then(i.bind(null, "wdUH")).then(({ + GannFixedPaneView: e + }) => { + this._setPaneViews([new e(this, this.model())]) + }), this.properties().childs().reverse.subscribe(this, this._reversePoints) + } + pointsCount() { + return 2 + } + name() { + return "Gann Square Fixed" + } + properties() { + return super.properties() + } + axisPoints() { + const e = this.points(), + t = this.getScreenPoints(); + return e.length < 2 || t.length < 2 ? [] : [e[0], this.screenPointToPoint(t[1])] + } + getScreenPoints() { + const e = this.points(); + if (e.length < 2) return []; + const t = this._calcAngle(); + if (null === t) return []; + const [i, r] = e, n = this.pointToScreenPoint(i)[0], o = this + .pointToScreenPoint(r)[0], a = Math.sqrt(Math.pow(n.x - o.x, 2) + Math.pow(n + .y - o.y, 2)), l = new s.Point(Math.cos(t), -Math.sin(t)), c = l + .normalized(), h = c.x < 0 ? -1 : 1, u = c.y < 0 ? -1 : 1; + return [n.addScaled(l, a), n.add(new s.Point(5 * a * h, 5 * a * u))] + } + levelsCount() { + return this.properties().childs().levels.childCount() + } + levels() { + const e = [], + t = this.properties().childs(), + i = t.levels.childCount(); + for (let s = 0; s < i; s++) { + const i = t.levels.childs()[s].childs(); + e.push({ + index: s, + visible: i.visible.value(), + color: i.color.value(), + width: i.width.value() + }) + } + return e + } + fanLinesCount() { + return this.properties().childs().fanlines.childCount() + } + fanLines() { + const e = [], + t = this.properties().childs(), + i = t.fanlines.childCount(); + for (let s = 0; s < i; s++) { + const i = t.fanlines.childs()[s].childs(); + e.push({ + index: s, + visible: i.visible.value(), + x: i.x.value(), + y: i.y.value(), + color: i.color.value(), + width: i.width.value() + }) + } + return e + } + arcsCount() { + return this.properties().childs().arcs.childCount() + } + arcs() { + const e = [], + t = this.properties().childs(), + i = t.arcs.childCount(); + for (let s = 0; s < i; s++) { + const i = t.arcs.childs()[s].childs(); + e.push({ + index: s, + visible: i.visible.value(), + x: i.x.value(), + y: i.y.value(), + color: i.color.value(), + width: i.width.value() + }) + } + return e + } + arcsBackgroundTransparency() { + return this.properties().childs().arcsBackground.childs().transparency.value() + } + isArcsBackgroundFilled() { + return this.properties().childs().arcsBackground.childs().fillBackground.value() + } + static createProperties(e) { + const t = Object(o.a)("linetoolgannfixed", e); + return a._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "WfUZ")).then( + e => e.GannComplexAndFixedDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e); + const t = [], + i = [], + s = e.childs(); { + const e = s.levels.childCount(); + for (let r = 0; r < e; r++) { + const e = s.levels.childs()[r].childs(); + t.push(e.width), i.push(e.color) + } + } { + const e = s.fanlines.childCount(); + for (let r = 0; r < e; r++) { + const e = s.fanlines.childs()[r].childs(); + t.push(e.width), i.push(e.color) + } + } { + const e = s.arcs.childCount(); + for (let r = 0; r < e; r++) { + const e = s.arcs.childs()[r].childs(); + t.push(e.width), i.push(e.color) + } + } + e.addChild("linesColors", new n.LineToolColorsProperty(i)), e.addChild( + "linesWidths", new n.LineToolWidthsProperty(t)) + } + _calcAngle() { + const e = this.points(); + if (e.length < 2) return null; + const [t, i] = e, s = this.pointToScreenPoint(t)[0]; + let r = this.pointToScreenPoint(i)[0].subtract(s); + if (r.length() <= 0) return null; + r = r.normalized(); + let n = Math.acos(r.x); + return r.y > 0 && (n = -n), n + } + _reversePoints() { + const [e, t] = this._points; + this._points[0] = t, this._points[1] = e, this.normalizePoints(), this.restart() + } + } + }, + TCfT: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("sQaR"); + i.d(t, "CompareDialogRenderer", (function() { + return r + })); + class r extends s.a { + constructor(e) { + super(), this._dialog = null, this._subscribe = e => { + this._setVisibility(e) + }, this._chartWidgetCollection = e + } + show() { + this._load().then(e => { + var t, i; + null === (t = this._dialog) || void 0 === t || t.hide(), null === ( + i = this._dialog) || void 0 === i || i.visible() + .unsubscribe(this._subscribe), this._dialog = e, e.visible() + .subscribe(this._subscribe), e.show() + }) + } + hide() { + var e; + null === (e = this._dialog) || void 0 === e || e.hide() + } + _load() { + return Promise.all([i.e("compare-model").then(i.bind(null, "cK0E")), Promise + .all([i.e("redux"), i.e("react"), i.e(1), i.e(3), i.e(4), i.e(8), i + .e(9), i.e(11), i.e(12), i.e(13), i.e(14), i.e(19), i.e(21), + i.e(26), i.e(69), i.e(82), i.e(0), i.e(2), i.e(7), i.e(10), + i.e(18), i.e(20), i.e(25), i.e("add-compare-dialog") + ]).then(i.bind(null, "a+BI")) + ]).then(([e, t]) => { + const i = new e.CompareModel(this._chartWidgetCollection); + return t.getCompareDialogRenderer(i) + }) + } + } + }, + TMWk: function(e, t, i) { + "use strict"; + var s = i("Eyy1").assert, + r = i("ogJP").clone, + n = i("GVHu").Study, + o = i("k9/m").PlotList, + a = i("w4Ji").studyPlotFunctionMap, + l = i("w4Ji").studyEmptyPlotValuePredicate; + class c { + constructor(e, t, i) { + this._strategyPlotIndex = e, this._targetPlotIndex = t, this._startIndex = i + } + rebuildData(e) { + var t = this._targetPlotIndex + 1, + i = this._strategyPlotIndex + 1, + s = null, + r = null; + e.range(this._startIndex || e.firstIndex(), e.lastIndex()).each((function(n, o) { + var a = o[t], + l = o[i] ? Math.round(o[i]) : null; + if (o[t] = null, o[i] = null, !l || l > 0) return !1; + var c = n + l, + h = { + pointIndex: c, + value: a + }; + if (r) { + if (r.pointIndex !== h.pointIndex) { + c >= 0 && (e.valueAt(c)[t] = a); + var u = !1; + s && (u = s.value <= r.value && r.value <= a || s.value >= r + .value && r.value >= a), u ? r.pointIndex >= 0 && (e + .valueAt(r.pointIndex)[t] = null) : s = r, r = h + } + } else r = h; + return !1 + })) + } + } + t.study_ScriptWithDataOffset = class extends n { + constructor(e, t, i, s) { + super(e, t, i, s), this._underlyingData = new o(a(s), l) + } + clearData() { + super.clearData(), this._underlyingData.clear() + } + _mergeData(e) { + this._invalidateLastNonEmptyPlotRowCache(); + var t = this._underlyingData.firstIndex(); + this._underlyingData.merge(e), t !== this._underlyingData.firstIndex() && (this + .m_data = new o(a(this._metaInfo), l)); + var i = this.m_data.lastIndex(); + this._underlyingData.range(i, this._underlyingData.lastIndex()).each(function(e, + t) { + return this.m_data.add(e, r(t)), !1 + }.bind(this)), this._plotsForStrategyProcessing().forEach((function(e) { + new c(e.strategyIndex, e.targetIndex, i).rebuildData(this + .m_data) + }), this) + } + _plotsForStrategyProcessing() { + var e = []; + return this._metaInfo.plots.forEach((function(t, i) { + if ("dataoffset" === t.type) { + var r = this._metaInfo.plots.findIndex((function(e) { + return e.id === t.target + })); + s(r >= 0, "target plot not found for strategy plot " + t + .id); + var n = { + strategyIndex: i, + targetIndex: r + }; + e.push(n) + } + }), this), e + } + } + }, + TTFo: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "fromPercent", (function() { + return n + })), i.d(t, "toPercent", (function() { + return o + })), i.d(t, "toPercentRange", (function() { + return a + })), i.d(t, "fromIndexedTo100", (function() { + return l + })), i.d(t, "toIndexedTo100", (function() { + return c + })), i.d(t, "toIndexedTo100Range", (function() { + return h + })), i.d(t, "toLog", (function() { + return u + })), i.d(t, "fromLog", (function() { + return d + })); + var s = i("Qb4w"), + r = i("Hr11"); + + function n(e, t) { + return t < 0 && (e = -e), e / 100 * t + t + } + + function o(e, t) { + const i = 100 * (e - t) / t; + return t < 0 ? -i : i + } + + function a(e, t) { + const i = o(e.minValue(), t), + r = o(e.maxValue(), t); + return new s.PriceRange(i, r) + } + + function l(e, t) { + return t < 0 && (e = -e), (e -= 100) / 100 * t + t + } + + function c(e, t) { + const i = 100 * (e - t) / t + 100; + return t < 0 ? -i : i + } + + function h(e, t) { + const i = c(e.minValue(), t), + r = c(e.maxValue(), t); + return new s.PriceRange(i, r) + } + + function u(e) { + const t = Math.abs(e); + if (t < 1e-8) return 0; + const i = Object(r.log10)(t + 1e-4) + 4; + return e < 0 ? -i : i + } + + function d(e) { + const t = Math.abs(e); + if (t < 1e-8) return 0; + const i = Math.pow(10, t - 4) - 1e-4; + return e < 0 ? -i : i + } + }, + TcSq: function(e, t, i) { + "use strict"; + + function s(e) { + return e === r(e) + } + + function r(e) { + const t = e.indexOf("$"), + i = e.indexOf("@"); + return t < 0 && i >= 0 ? null : e.substring(Math.max(t + 1, 0), i >= 0 ? i : e.length) + } + + function n(e) { + return e.startsWith("PUB;") + } + + function o(e) { + return e.startsWith("USER;") + } + + function a(e) { + return e.startsWith("STD;") + } + + function l(e) { + return e.includes("Candlestick%1Pattern%1") + } + + function c(e) { + return e.startsWith("EDGR_") + } + i.r(t), i.d(t, "isPineIdString", (function() { + return s + })), i.d(t, "extractPineId", (function() { + return r + })), i.d(t, "isPublishedPineId", (function() { + return n + })), i.d(t, "isCustomPineId", (function() { + return o + })), i.d(t, "isStandardPineId", (function() { + return a + })), i.d(t, "isCandleStickId", (function() { + return l + })), i.d(t, "isEdgrPineId", (function() { + return c + })) + }, + TlGQ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "visitObject", (function() { + return n + })); + var s = i("ogJP"); + + function r(e, t, i) { + return Object(s.isArray)(e) ? function(e, t, i) { + return e.map(e => { + const s = r(e, t, i), + n = t(s); + return void 0 !== n ? n : s + }) + }(e, t, i) : Object(s.isObject)(e) && (Object(s.isHashObject)(e) || i && i + .visitInstances) ? function(e, t, i) { + const s = {}; + return Object.keys(e).forEach(n => { + const o = r(e[n], t, i), + a = t(o); + s[n] = void 0 !== a ? a : o + }), s + }(e, t, i) : e + } + + function n(e, t, i) { + const s = r(e, t, i), + n = t(s); + return void 0 !== n ? n : s + } + }, + TmNs: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("KcY8"), + r = i("Eyy1"), + n = i("jFln"), + o = i("8Uy/"), + a = i("gAom"); + class l { + constructor(e, t) { + this.setData(e, t) + } + setData(e, t) { + this._data = e, this._commonData = t + } + draw(e, t, i, s, l, c) { + if (!this._data.visible) return; + let h = this._commonData.coordinate; + void 0 !== this._commonData.fixedCoordinate && (h = this._commonData + .fixedCoordinate), e.lineWidth = Math.max(1, Math.floor(Object(r + .ensureDefined)(this._data.linewidth) * c)), e.lineCap = "butt", Object(n + .setLineStyle)(e, void 0 === this._data.linestyle ? o.LINESTYLE_DOTTED : + this._data.linestyle), e.strokeStyle = this._commonData.textColor, Object(a + .drawHorizontalLine)(e, Math.round(h * c), 0, Math.ceil(s * c)) + } + height(e) { + return 0 + } + } + i.d(t, "PriceLineAxisView", (function() { + return c + })), i.d(t, "SeriesPriceLineAxisView", (function() { + return h + })), i.d(t, "StudyPriceLineAxisView", (function() { + return u + })); + class c extends s.a { + constructor(e) { + super(e || l) + } + ignoreAlignment() { + return !0 + } + _updateRendererData(e, t, i) { + if (t.visible = !1, e.visible = !1, !this._isVisible()) return; + const s = this._value(); + s.noData || (i.background = "", i.textColor = this._priceLineColor(s.color), i + .coordinate = s.coordinate, i.floatCoordinate = s.floatCoordinate, e + .linewidth = this._lineWidth(), e.linestyle = this._lineStyle(), e + .backgroundAreaVisible = this._backgroundAreaVisible(), e + .backgroundAreaColor = this._backgroundAreaColor(), e + .backgroundAreaHeight = this._backgroundAreaHeight(), e.visible = !0) + } + _lineStyle() { + return o.LINESTYLE_DOTTED + } + _backgroundAreaVisible() { + return !1 + } + _backgroundAreaColor() { + return "" + } + _backgroundAreaHeight() { + return 0 + } + } + class h extends c { + constructor(e) { + super(), this._series = e + } + _value() { + return this._series.lastValueData(void 0, !0) + } + _priceLineColor(e) { + return this._series.priceLineColor(e) + } + _lineWidth() { + return this._series.properties().priceLineWidth.value() + } + _isVisible() { + const e = this._series.model().properties().scalesProperties.showSeriesLastValue + .value(); + return this._series.properties().showPriceLine.value() && e + } + } + class u extends c { + constructor(e, t) { + super(), this._study = e, this._plotname = t + } + _value() { + return this._study.lastValueData(this._plotname, !0) + } + _lineWidth() { + return this._study.properties().styles[this._plotname].linewidth.value() + } + _lineStyle() { + return o.LINESTYLE_DOTTED + } + _priceLineColor(e) { + return e + } + _isVisible() { + const e = this._study.model().properties().scalesProperties.showStudyLastValue + .value(); + return this._study.properties().styles[this._plotname].trackPrice.value() && e + } + } + }, + Tmoa: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "generateColor", (function() { + return r + })), i.d(t, "alphaToTransparency", (function() { + return n + })), i.d(t, "transparencyToAlpha", (function() { + return o + })), i.d(t, "applyTransparency", (function() { + return a + })), i.d(t, "resetTransparency", (function() { + return l + })), i.d(t, "getLuminance", (function() { + return c + })), i.d(t, "isHexColor", (function() { + return h + })), i.d(t, "colorFromBackground", (function() { + return u + })), i.d(t, "gradientColorAtPercent", (function() { + return d + })), i.d(t, "isColorDark", (function() { + return p + })), i.d(t, "rgbaFromInteger", (function() { + return _ + })), i.d(t, "rgbaToInteger", (function() { + return m + })), i.d(t, "colorToInteger", (function() { + return f + })); + var s = i("eJTA"); + + function r(e, t, i) { + if (t = t || 0, !h(e)) return i ? Object(s.rgbaToString)(Object(s.rgba)(Object(s.parseRgb)( + e), Object(s.normalizeAlphaComponent)(o(t)))) : e; + const [r, n, a] = Object(s.parseRgb)(e), l = Object(s.normalizeAlphaComponent)(o(t)); + return Object(s.rgbaToString)([r, n, a, l]) + } + + function n(e) { + return 100 * (1 - e) + } + + function o(e) { + if (e < 0 || e > 100) throw new Error("invalid transparency"); + return 1 - e / 100 + } + + function a(e, t) { + if ("transparent" === e) return e; + const i = Object(s.parseRgba)(e), + r = i[3]; + return Object(s.rgbaToString)(Object(s.rgba)(i[0], i[1], i[2], o(t) * r)) + } + + function l(e) { + return "transparent" === e || h(e) ? e : Object(s.rgbaToString)(Object(s.rgba)(Object(s + .parseRgb)(e), Object(s.normalizeAlphaComponent)(1))) + } + + function c(e) { + const t = Object(s.parseRgb)(e).map(e => (e /= 255) <= .03928 ? e / 12.92 : Math.pow((e + + .055) / 1.055, 2.4)); + return Number((.2126 * t[0] + .7152 * t[1] + .0722 * t[2]).toFixed(3)) + } + + function h(e) { + return 0 === e.indexOf("#") + } + + function u(e) { + return "black" === Object(s.rgbToBlackWhiteString)(Object(s.parseRgb)(e), 150) ? "#ffffff" : + "#000000" + } + + function d(e, t, i) { + const [r, n, o, a] = Object(s.parseRgba)(e), [l, c, h, u] = Object(s.parseRgba)(t), d = + Object(s.rgba)(Math.round(r + i * (l - r)), Math.round(n + i * (c - n)), Math.round(o + + i * (h - o)), a + i * (u - a)); + return Object(s.rgbaToString)(d) + } + + function p(e) { + return c(l(e)) < .5 + } + + function _(e) { + const t = (e = Math.round(e)) % 256; + e -= t; + const i = (e /= 256) % 256; + e -= i; + const s = (e /= 256) % 256; + e -= s; + return `rgba(${t},${i},${s},${(e /= 256) / 255})` + } + + function m(e) { + const t = Math.round(255 * e[3]); + return e[0] + 256 * e[1] + 65536 * e[2] + 16777216 * t + } + + function f(e) { + const t = Object(s.tryParseRgba)(e); + return null === t ? 0 : m(t) + } + }, + TohL: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolArrowMark", (function() { + return l + })), i.d(t, "LineToolArrowMarkLeft", (function() { + return c + })), i.d(t, "LineToolArrowMarkUp", (function() { + return h + })), i.d(t, "LineToolArrowMarkRight", (function() { + return u + })), i.d(t, "LineToolArrowMarkDown", (function() { + return d + })); + var s = i("Ocx9"), + r = i("Ss5c"), + n = i("tc+8"), + o = i.n(n), + a = i("j3hX"); + class l extends r.LineDataSource { + constructor(e, t, s) { + const r = t || l.createProperties(null, s); + super(e, r), this._textPaneView = null, i.e("lt-pane-views").then(i.bind(null, + "ct+2")).then(({ + ArrowMarkPaneView: t + }) => { + const i = [new t(this, e)]; + this._setPaneViews(i) + }) + } + paneViews(e) { + const t = super.paneViews(); + return null !== t && this._textPaneView && t.push(this._textPaneView), t + } + pointsCount() { + return 1 + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e + } + static createProperties(e, t) { + const i = new s.DefaultProperty(t, e); + return l._configureProperties(i), i + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "5sLb")).then( + e => e.ArrowMarkDefinitionsViewModel) + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e), e.addChild("linesColors", new a + .LineToolColorsProperty([e.childs().arrowColor])), e.addChild( + "textsColors", new a.LineToolColorsProperty([e.childs().color])), e + .hasChild("text") || e.addChild("text", new o.a("")), e.addExclusion("text") + } + } + l.version = 2; + class c extends l { + constructor(e, t) { + super(e, t, "linetoolarrowmarkleft") + } + direction() { + return "left" + } + name() { + return "Arrow Mark Left" + } + textAlignParams() { + return { + horzAlign: "left", + vertAlign: "middle", + offsetX: 22, + offsetY: 3 + } + } + static createProperties(e) { + return l.createProperties(e, "linetoolarrowmarkleft") + } + } + class h extends l { + constructor(e, t) { + super(e, t, "linetoolarrowmarkup") + } + direction() { + return "up" + } + name() { + return "Arrow Mark Up" + } + textAlignParams() { + return { + horzAlign: "center", + vertAlign: "top", + offsetX: 0, + offsetY: 20 + } + } + static createProperties(e) { + return l.createProperties(e, "linetoolarrowmarkup") + } + } + class u extends l { + constructor(e, t) { + super(e, t, "linetoolarrowmarkright") + } + direction() { + return "right" + } + name() { + return "Arrow Mark Right" + } + textAlignParams() { + return { + horzAlign: "right", + vertAlign: "middle", + offsetX: 22, + offsetY: 3, + forceTextAlign: !0 + } + } + static createProperties(e) { + return l.createProperties(e, "linetoolarrowmarkright") + } + } + class d extends l { + constructor(e, t) { + super(e, t, "linetoolarrowmarkdown") + } + direction() { + return "down" + } + name() { + return "Arrow Mark Down" + } + textAlignParams() { + return { + horzAlign: "center", + vertAlign: "bottom", + offsetX: 0, + offsetY: 20 + } + } + static createProperties(e) { + return l.createProperties(e, "linetoolarrowmarkdown") + } + } + }, + "U0+/": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyMetaInfoRepository", (function() { + return h + })); + i("YFKU"); + var s = i("Eyy1"), + r = i("0YCj"), + n = i.n(r), + o = i("Si3H"), + a = i("lCO3"), + l = i("txPx"); + const c = Object(l.getLogger)("Chart.Studies.StudyMetaInfoRepository", { + color: "#606" + }); + class h { + constructor(e) { + this._nextRequestNumber = 1, this._rawStudiesMetaInfo = [], this._isReady = !1, this + ._metaInfoQueryQueue = [], this._javaMetaInfoQueryQueue = [], this + ._javaStudiesMetaInfo = [], this._pineMetaInfoCache = [], this + ._studiesMigrations = [], this._gateway = e + } + requestMetaInfo() { + this._requestStarted(); + const e = this._makeNextRequestId(); + return c.logNormal("Requesting metainfo #" + e), new Promise(t => { + c.logNormal("Requesting studies metadata #" + e), this._gateway + .requestMetadata(e, i => { + c.logNormal(`Requesting studies metadata #${e} finished`); + const s = i.params[1].metainfo.slice(); + this._processLibraryMetaInfo(s), this._requestFinished(), + t() + }) + }) + } + findById(e) { + if (!this._isReady) return this._enqueueMetaInfoQuery(e); + const t = this._findStudyMetaInfo(e); + return null !== t ? Promise.resolve(t) : "pine" === e.type ? this._compilePine(e) : + Promise.reject(`unexpected study id=${e.studyId} with type=${e.type}`) + } + findByIdSync(e) { + return this._findStudyMetaInfo(e) + } + isReady() { + return this._isReady + } + findAllJavaStudies() { + return this._isReady ? Promise.resolve(this._javaStudiesMetaInfo) : this + ._enqueueJavaMetaInfoQuery() + } + getInternalMetaInfoArray() { + return this._javaStudiesMetaInfo + } + getMigrations() { + return this._studiesMigrations + } + addPineMetaInfo(e) { + return d(this._pineMetaInfoCache, e) + } + _processMigrations(e) { + throw new Error("not implemented") + } + _processSiteMetaInfo(e, t) { + throw new Error("not implemented") + } + _processLibraryMetaInfo(e) { + for (const t of e) u(t), d(this._javaStudiesMetaInfo, t); + this._javaStudiesMetaInfo = this._javaStudiesMetaInfo.sort((e, t) => { + const i = e.description_localized || e.description, + s = t.description_localized || t.description; + return i > s ? 1 : i < s ? -1 : 0 + }), + n.a.overrideDefaults(this._javaStudiesMetaInfo) + } + _requestStarted() { + this._isReady = !1, this._javaStudiesMetaInfo = [], this._pineMetaInfoCache = [], + this._studiesMigrations = [], this._rawStudiesMetaInfo = [] + } + _requestFinished() { + this._isReady = !0, this._processPendingMetaInfoQueries(), this + ._processPendingFullMetaInfoQueries() + } + _enqueueMetaInfoQuery(e) { + return new Promise(t => { + this._metaInfoQueryQueue.push({ + studyDescriptor: e, + resolver: t + }) + }) + } + _enqueueJavaMetaInfoQuery() { + return new Promise(e => { + this._javaMetaInfoQueryQueue.push({ + resolver: e + }) + }) + } + _processPendingMetaInfoQueries() { + for (; this._metaInfoQueryQueue.length;) { + const e = this._metaInfoQueryQueue.shift(); + this.findById(e.studyDescriptor).then(e.resolver) + } + } + _processPendingFullMetaInfoQueries() { + for (; this._javaMetaInfoQueryQueue.length;) { + this._javaMetaInfoQueryQueue.shift().resolver(this._javaStudiesMetaInfo) + } + } + _findStudyMetaInfo(e) { + return "java" === e.type ? this._javaStudiesMetaInfo.find(t => t.id === e + .studyId) || null : this._pineMetaInfoCache.find(t => t.scriptIdPart === e + .pineId && (void 0 === e.pineVersion || Object(s.ensureDefined)(t.pine) + .version === e.pineVersion)) || null + } + _makeNextRequestId() { + return "metadata_" + this._nextRequestNumber++ + } + _compilePine(e) { + throw new Error("unsupported") + } + } + + function u(e) { + e.description_localized = window.t(e.description, { + context: "study" + }) + } + + function d(e, t) { + const i = new n.a(t); + Object(o.migrateMetaInfoAndPropState)(i); + let s = !0; + const r = e.findIndex(e => e.id === i.id); + if (-1 === r) e.push(i); + else { + const t = e[r], + n = void 0 !== t.pine ? a.Version.parse(t.pine.version) : null, + o = void 0 !== i.pine ? a.Version.parse(i.pine.version) : null; + null === o || null === n || o.isGreaterOrEqual(n) ? (t.removeDefaults(), e[r] = i) : + s = !1 + } + return s && i.createDefaults(), i + } + }, + UAFa: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("i6cO"), + r = i("23IT"), + n = i("Eyy1"); + const o = new Map([ + [s.ColorerType.Main, "color"], + [s.ColorerType.Text, "textColor"], + [s.ColorerType.Border, "borderColor"], + [s.ColorerType.Wick, "wickColor"], + [s.ColorerType.Up, "colorup"], + [s.ColorerType.Down, "colordown"] + ]); + class a { + constructor(e) { + this._plotStyle = e + } + getPlotPointStyle(e, t) { + const i = t ? Object(s.clearStyle)(t) : Object(s.createEmptyStyle)(); + return o.forEach((e, t) => { + this._plotStyle[e] && (i.colors[t] = this._plotStyle[e].value()) + }), i.lineWidth = this._plotStyle.linewidth ? this._plotStyle.linewidth + .value() : void 0, i.lineStyle = this._plotStyle.linestyle ? this._plotStyle + .linestyle.value() : void 0, i + } + isColorDefined() { + return !0 + } + singleColor() { + return !0 + } + getDefaultPlotPointStyle() { + return null + } + } + class l { + constructor(e, t, i, s) { + this._palettes = new Map, this._metaInfo = e, this._properties = t, this._indexes = + s, this._plotStyle = t.styles[i]; + const r = Object(n.ensureDefined)(this._metaInfo.palettes); + s.forEach((t, i) => { + const s = e.plots[t]; + if (s && "palette" in s) { + const e = r[s.palette], + t = this._properties.palettes[s.palette]; + e && t && this._palettes.set(i, { + palette: e, + props: t + }) + } + }) + } + getPlotPointStyle(e, t) { + const i = t ? Object(s.clearStyle)(t) : Object(s.createEmptyStyle)(); + if (this._palettes.has(s.ColorerType.Main)) { + const t = Object(n.ensureDefined)(this._indexes.get(s.ColorerType.Main)), + r = e[t + 1]; + if (null != r) { + const e = Object(n.ensureDefined)(this._palettes.get(s.ColorerType.Main)), + t = e.palette, + o = e.props, + a = Object(n.ensureDefined)(t.valToIndex ? t.valToIndex[r] : r), + l = o.colors[a]; + i.lineWidth = l.width.value(), i.lineStyle = l.style.value() + } + } + return Object.keys(s.ColorerType).forEach(t => { + const s = parseInt(t); + if (this._palettes.has(s)) { + const t = Object(n.ensureDefined)(this._indexes.get(s)), + r = e[t + 1]; + if (null != r) { + const e = Object(n.ensureDefined)(this._palettes.get(s)), + t = Object(n.ensureDefined)(e.palette.valToIndex ? e.palette + .valToIndex[r] : r), + o = e.props.colors[t]; + i.colors[s] = o.color.value() + } else i.colors[s] = "transparent" + } else if (this._plotStyle) { + const e = o.get(s); + void 0 !== e && this._plotStyle[e] && (i.colors[s] = this + ._plotStyle[e].value()) + } + }), i + } + getDefaultPlotPointStyle() { + const e = Object(n.ensureDefined)(this._palettes.get(s.ColorerType.Main)).props + .colors[0]; + if (null != e) { + return { + colors: [e.color.value(), void 0, void 0, void 0, void 0, void 0, void 0], + lineWidth: e.width.value() + } + } + return null + } + isColorDefined() { + return !!this._palettes.size + } + singleColor() { + return !1 + } + } + var c = i("Tmoa"); + class h { + constructor(e) { + this._indexes = e + } + getPlotPointStyle(e, t) { + const i = t ? Object(s.clearStyle)(t) : Object(s.createEmptyStyle)(); + return this._indexes.forEach((t, s) => { + const r = e[t + 1]; + if (null != r) { + const e = Object(c.rgbaFromInteger)(r); + i.colors[s] = e + } else i.colors[s] = "transparent" + }), i + } + isColorDefined() { + return !0 + } + singleColor() { + return !1 + } + getDefaultPlotPointStyle() { + return null + } + } + i.d(t, "createStudyPlotColorProvider", (function() { + return d + })); + const u = new Map([ + [s.ColorerType.Main, function(e, t) { + const i = Object(r.isColorerPlot)(t) || Object(r.isOhlcColorerPlot)(t); + return "target" in t && t.target === e && i + }], + [s.ColorerType.Text, function(e, t) { + const i = Object(r.isTextColorerPlot)(t); + return "target" in t && t.target === e && i + }], + [s.ColorerType.Background, function(e, t) { + return Object(r.isBgColorerPlot)(t) && t.id === e + }], + [s.ColorerType.Border, function(e, t) { + const i = Object(r.isCandleBorderColorerPlot)(t); + return "target" in t && t.target === e && i + }], + [s.ColorerType.Wick, function(e, t) { + const i = Object(r.isCandleWickColorerPlot)(t); + return "target" in t && t.target === e && i + }], + [s.ColorerType.Up, function(e, t) { + const i = Object(r.isUpColorerPlot)(t); + return "target" in t && t.target === e && i + }], + [s.ColorerType.Down, function(e, t) { + const i = Object(r.isDownColorerPlot)(t); + return "target" in t && t.target === e && i + }] + ]); + + function d(e, t, i) { + const { + colorers: s + } = function(e, t) { + const i = e.plots, + s = i.findIndex(e => e.id === t), + r = new Map; + return i.forEach((e, i) => { + u.forEach((s, n) => { + s(t, e) && r.set(n, i) + }) + }), { + plotIndex: -1 === s ? null : s, + colorers: r + } + }(e, i); + if (s.size) return e.isRGB ? new h(s) : new l(e, t, i, s); { + const e = t.ohlcPlots; + if (e && e[i]) return new a(e[i]); + const s = t.styles[i]; + return new a(s) + } + } + }, + UCMi: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolDateAndPriceRange", (function() { + return a + })); + var s = i("Eyy1"), + r = i("Ocx9"), + n = i("Ss5c"), + o = i("585y"); + class a extends n.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), this._volumeCalculator = null, i.e( + "lt-pane-views").then(i.bind(null, "UcQu")).then(e => { + this._setPaneViews([new e.DateAndPriceRangePaneView(this, this + ._model)]) + }) + } + destroy() { + super.destroy(), + null !== this._volumeCalculator && this._volumeCalculator.destroy() + } + pointsCount() { + return 2 + } + properties() { + return super.properties() + } + name() { + return "Date and Price Range" + } + volume() { + if (null === this._volumeCalculator) return NaN; + const e = this.points(); + return this._volumeCalculator.volume(e[0].index, e[1].index) + } + setOwnerSource(e) { + e === this._model.mainSeries() && (Object(s.assert)(null === this + ._volumeCalculator), this._volumeCalculator = new o.a(this._model + .mainSeries())), super.setOwnerSource(e) + } + static createProperties(e) { + const t = new r.DefaultProperty("linetooldateandpricerange", e); + return a._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Ax76"))) + .GeneralDatePriceRangeDefinitionsViewModel + } + static _configureProperties(e) { + n.LineDataSource._configureProperties(e) + } + } + }, + UCjq: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("YFKU"), + r = i("Eyy1"), + n = i("aO4+"), + o = i("qFKp"), + a = i("VaSN"), + l = i("FQhm"), + c = i("ogJP"), + h = i("FIi8"), + u = i("VdBB"), + d = i("vTIA"), + p = i("KnF9"), + _ = i("3ClC"), + m = i("GxN8"), + f = i("CW80"), + g = i("mMWL"), + b = i("bOGh"), + v = i("fTGZ"), + S = i("ikwP"), + y = i("gAom"), + w = i("mE5r"), + P = i("1IXQ"); + + function C(e, t) { + return e.position - t.position + } + + function x(e, t, i) { + const s = (e.position - t.position) / (e.time - t.time); + return Math.sign(s) * Math.min(Math.abs(s), i) + } + class T { + constructor(e, t, i, s) { + this._position1 = null, this._position2 = null, this._position3 = null, this + ._position4 = null, this._animationStartPosition = null, this._durationMsecs = + 0, this._speedPxPerMsec = 0, this._terminated = !1, this._minSpeed = e, this + ._maxSpeed = t, this._dumpingCoeff = i, this._minMove = s + } + addPosition(e, t) { + if (null !== this._position1) { + if (this._position1.time === t) return void(this._position1.position = e); + if (Math.abs(this._position1.position - e) < this._minMove) return + } + this._position4 = this._position3, this._position3 = this._position2, this + ._position2 = this._position1, this._position1 = { + time: t, + position: e + } + } + start(e, t) { + if (null === this._position1 || null === this._position2) return; + if (t - this._position1.time > 50) return; + let i = 0; + const s = x(this._position1, this._position2, this._maxSpeed), + r = C(this._position1, this._position2), + n = [s], + o = [r]; + if (i += r, null !== this._position3) { + const e = x(this._position2, this._position3, this._maxSpeed); + if (Math.sign(e) === Math.sign(s)) { + const t = C(this._position2, this._position3); + if (n.push(e), o.push(t), i += t, null !== this._position4) { + const e = x(this._position3, this._position4, this._maxSpeed); + if (Math.sign(e) === Math.sign(s)) { + const t = C(this._position3, this._position4); + n.push(e), o.push(t), i += t + } + } + } + } + let a = 0; + for (let e = 0; e < n.length; ++e) a += o[e] / i * n[e]; + Math.abs(a) < this._minSpeed || (this._animationStartPosition = { + position: e, + time: t + }, this._speedPxPerMsec = a, this._durationMsecs = function(e, t) { + const i = Math.log(t); + return Math.log(1 * i / -e) / i + }(Math.abs(a), this._dumpingCoeff)) + } + getPosition(e) { + const t = Object(r.ensureNotNull)(this._animationStartPosition), + i = e - t.time; + return t.position + this._speedPxPerMsec * (Math.pow(this._dumpingCoeff, i) - 1) / + Math.log(this._dumpingCoeff) + } + finished(e) { + return null === this._animationStartPosition || this._progressDuration(e) === this + ._durationMsecs + } + terminated() { + return this._terminated + } + terminate() { + this._terminated = !0 + } + _progressDuration(e) { + const t = e - Object(r.ensureNotNull)(this._animationStartPosition).time; + return Math.min(t, this._durationMsecs) + } + } + var I = i("hY0g"), + M = i.n(I), + O = i("1AAW"), + L = i("XcdR"), + A = i("7MWe"), + E = i("HZKX"), + k = i("5VQP"), + D = i("7ktv"), + V = i("Fixu"), + B = i("e92V"), + R = i("QloM"), + N = i("Kxc7"), + j = i("//lt"), + F = i("+6II"), + W = i("JWMC"), + H = i("7KDR"), + U = i("ZBiT"), + z = i("zL3Q"), + G = i("/3z9"), + q = i("H0vP"), + Y = i("m/3z"); + + function K(e) { + return "startMoving" in e && "move" in e && "endMoving" in e + } + i.d(t, "PaneWidgetBase", (function() { + return ce + })); + const J = parseInt(U["css-value-pane-controls-padding-left"]), + Z = parseInt(U["css-value-pane-controls-padding-right"]), + X = ["AlertLabel"]; + + function $(e) { + return !(null === e || !Object(_.isStudy)(e)) && "Volume@tv-basicstudies" === e.metaInfo() + .id + } + + function Q(e, t, i) { + e.drawBackground && e.drawBackground(t, i) + } + + function ee(e, t, i) { + e.draw(t, i) + } + + function te(e, t) { + return e.paneViews(t) + } + + function ie(e, t) { + return e.topPaneViews() + } + + function se(e, t) { + return e.labelPaneViews(t) + } + + function re(e, t) { + const i = e.strategyOrdersPaneView(); + return null === i ? null : [i] + } + + function ne(e, t) { + return null === e || null === e.hittest || e.source !== t ? null : e.hittest.data() + } + const oe = { + contextMenuEnabled: !0, + contextMenu: E.defaultContextMenuOptions, + priceScaleContextMenuEnabled: !0, + legendWidgetEnabled: !0, + controlsEnabled: !0, + propertyPagesEnabled: !0, + sourceSelectionEnabled: !0, + countdownEnabled: !0 + }, + ae = new Map([ + [u.AreaName.Text, "Text"], + [u.AreaName.Style, "Style"] + ]), + le = !N.enabled("display_legend_on_all_charts"); + class ce { + constructor(e, t, i, s) { + this._legendWidget = null, this._paneControls = null, this._isDestroyed = !1, this + ._trackCrosshairOnlyAfterLongTap = Object(a.lastEventIsTouch)(), this + ._startTrackPoint = null, this._exitTrackingModeOnNextTry = !1, this + ._startMoveSourceParams = null, this._startChangeLineToolParams = null, this + ._preventSourceChange = !1, this._clonningAtMoveLineTools = null, this + ._startCloningPoint = null, this._size = new S.Size(0, 0), this + ._themedTopColor = null, this._themedBottomColor = null, this + ._initCrossHairPosition = null, this._firstZoomPoint = null, this._editDialog = + null, this._processing = !1, this._touchMove = !1, this._startTouchPoint = null, + this._isSelecting = !1, this._prevHoveredHittest = null, this._contextMenuX = 0, + this._contextMenuY = 0, this._startScrollingPos = null, this._isScrolling = !1, + this._scrollPriceScale = null, this._scrollXAnimation = null, this + ._scrollYAnimation = null, this._prevPinchScale = 1, this._pinching = !1, this + ._wasPinched = !1, this._longTap = !1, this._contextMenuOpenedOnLastTap = !1, + this._paneControlsResizeObserver = null, this._hideNotMainSourcesInLegendSpawn = + null, this._hideWholeLegend = null, this._lastClickedSource = null, this + ._customLegendWidgetsFactoryMap = new Map, this._prevMoveEventPosition = null, + this._onMagnetStateChangedListener = this._onMagnetStateChanged.bind(this), this + ._onShiftKeyStateChangedListener = this._onShiftKeyStateChanged.bind(this), this + ._currentCursorClassName = "", this._lastFinishedToolId = null, this + ._needResetMeasureLater = !1, this._currentChangingLineToolHitTest = null, this + ._lastCommonTooltipData = null, + this._canvasConfiguredHandler = () => this._state && this._chartModel() + .lightUpdate(), this._topCanvasConfiguredHandler = () => this._state && this + ._chartModel().lightUpdate(), this._recalculateLegendVisibility = () => { + const e = Object(r.ensureNotNull)(this._hideWholeLegend), + t = this._chartModel().crossHairSource().measurePane(); + null !== t ? e.setValue(t === this._state) : e.setValue(Object(g + .toolIsMeasure)(g.tool.value())) + }, this._chart = e, this._state = t, this._options = Object(c.merge)(Object(c + .clone)(oe), i), this._paneWidgetsSharedState = s, this._state && (this + ._state.onDestroyed().subscribe(this, this._onStateDestroyed, !0), this + ._state.dataSourcesCollectionChanged().subscribe(this, this + ._onDataSourcesCollectionChanged)); + const n = { + contextMenuEnabled: this._options.priceScaleContextMenuEnabled, + pressedMouseMoveScale: this._options.handleScale.axisPressedMouseMove.price, + mouseWheelScale: this._options.handleScale.mouseWheel, + currencyConversionEnabled: this._options.currencyConversionEnabled, + unitConversionEnabled: this._options.unitConversionEnabled, + countdownEnabled: this._options.countdownEnabled, + croppedTickMarks: this._options.croppedTickMarks + }; + void 0 !== this._options.priceScaleContextMenu && (n.contextMenu = this._options + .priceScaleContextMenu); + const o = (e, t, i, s, r) => new P.PriceAxisWidget(this, this._chartUndoModel(), i, + t, e, n, s, r), + l = e.properties().childs().scalesProperties, + h = this._chartModel().rendererOptionsProvider(), + u = { + backgroundBasedTheme: e.backgroundBasedTheme(), + rendererOptionsProvider: h, + getBackgroundTopColor: () => this._chartModel().backgroundTopColor() + .value(), + getBackgroundBottomColor: () => this._chartModel().backgroundColor().value() + }, + d = { + showLabels: !1 + }; + this._lhsPriceAxisesContainer = new w.a(l, "left", o, u, d), this + ._rhsPriceAxisesContainer = new w.a(l, "right", o, u, d), this._paneCell = + document.createElement("td"), this._paneCell.classList.add("chart-markup-table", + "pane"), this._div = document.createElement("div"), this._div.classList.add( + "chart-gui-wrapper"), this._paneCell.appendChild(this._div), this + ._canvasBinding = Object(S.createBoundCanvas)(this._div, new S.Size(16, 16)), + this._canvasBinding.subscribeCanvasConfigured(this._canvasConfiguredHandler); + const p = this._canvasBinding.canvas; + p.style.position = "absolute", p.style.left = "0", p.style.top = "0", this + ._topCanvasBinding = Object(S.createBoundCanvas)(this._div, new S.Size(16, 16)), + this._topCanvasBinding.subscribeCanvasConfigured(this + ._topCanvasConfiguredHandler); + const _ = this._topCanvasBinding.canvas; + _.style.position = "absolute", _.style.left = "0", _.style.top = "0", this + ._rowElement = document.createElement("tr"), this._rowElement.appendChild(this + ._lhsPriceAxisesContainer.getElement()), this._rowElement.appendChild(this + ._paneCell), this._rowElement.appendChild(this._rhsPriceAxisesContainer + .getElement()), this._options.legendWidgetEnabled && (this._options + .customLegendWidgetFactories && (this._customLegendWidgetsFactoryMap = this + ._options.customLegendWidgetFactories), this + ._loadAndCreateLegendWidget()), this._state && !this._chart.readOnly() && + this._options.controlsEnabled && this._loadAndCreatePaneControlsWidget(), + Object(z.a)().subscribe(this._onMagnetStateChangedListener), + Object(Y.d)().subscribe(this._onShiftKeyStateChangedListener), this._paneCell + .addEventListener("dragover", e => { + e.dataTransfer && Array.from(e.dataTransfer.files).some( + blobImageFilter) && e.preventDefault() + }) + } + destroy() { + this._chart.onPaneWidgetDestroyed(this), this._customLegendWidgetsFactoryMap + .clear(), this._topCanvasBinding.unsubscribeCanvasConfigured(this + ._topCanvasConfiguredHandler), this._topCanvasBinding.destroy(), this + ._canvasBinding.unsubscribeCanvasConfigured(this._canvasConfiguredHandler), this + ._canvasBinding.destroy(), null !== this._hideNotMainSourcesInLegendSpawn && + this._hideNotMainSourcesInLegendSpawn.destroy(), this._legendWidget && (this + ._legendWidget.destroy(), this._legendWidget = null), null !== this + ._paneControlsResizeObserver && this._paneControlsResizeObserver.disconnect(), + null !== this._paneControls && (this._paneControls.destroy(), this + ._paneControls = null), this._lhsPriceAxisesContainer.destroy(), this + ._rhsPriceAxisesContainer.destroy(), this.hasState() && (this.state() + .onDestroyed().unsubscribeAll(this), this.state() + .dataSourcesCollectionChanged().unsubscribeAll(this)), Object(z.a)() + .unsubscribe(this._onMagnetStateChangedListener), Object(Y.d)().unsubscribe(this + ._onShiftKeyStateChangedListener), this._paneWidgetsSharedState + .onPaneDestroyed(this), null !== this._hideWholeLegend && (g.tool.unsubscribe( + this._recalculateLegendVisibility), this._chartModel().crossHairSource() + .measuringEnabled().unsubscribeAll(this)) + } + size() { + return this._size + } + setSize(e) { + Object(r.assert)(e.w >= 0 && e.h >= 0, "Try to set invalid size to PaneWidget " + + JSON.stringify(e)), this._size.equals(e) || (this._size = e, this + ._canvasBinding.resizeCanvas({ + width: e.w, + height: e.h + }), this._topCanvasBinding.resizeCanvas({ + width: e.w, + height: e.h + }), this._paneCell.style.width = e.w + "px", this._paneCell.style.height = e + .h + "px", this._div.style.width = e.w + "px", this._div.style.height = e + .h + "px", this._rowElement.classList.toggle("js-hidden", 0 === e.h), + null !== this._legendWidget && this._legendWidget.updateWidgetModeBySize(e), + null !== this._paneControls && this._paneControls.updateWidgetModeByWidth(e + .w)) + } + width() { + return this._size.w + } + height() { + return this._size.h + } + backgroundColor() { + return this._chartModel().backgroundColor().value() + } + processDoubleClickOnSource(e, t) { + e.id() !== this._lastFinishedToolId && this._showEditDialogForSource(e, t) + } + setCursorForTool(e, t, i) { + if (t && t.control() && e) return void this._setCursorClassName("pointer"); + if (void 0 !== i) { + switch (i) { + case j.PaneCursorType.VerticalResize: + this._setCursorClassName("ns-resize"); + break; + case j.PaneCursorType.HorizontalResize: + this._setCursorClassName("ew-resize"); + break; + case j.PaneCursorType.DiagonalNeSwResize: + this._setCursorClassName("nesw-resize"); + break; + case j.PaneCursorType.DiagonalNwSeResize: + this._setCursorClassName("nwse-resize"); + break; + case j.PaneCursorType.Default: + this._setCursorClassName("default"); + break; + case j.PaneCursorType.Pointer: + this._setCursorClassName("pointer"); + break; + case j.PaneCursorType.Grabbing: + this._setCursorClassName("grabbing") + } + return + } + const s = g.tool.value(); + if (Object(g.toolIsCursor)(s)) { + if (null !== this._paneWidgetsSharedState.draggingSource() || this + ._isScrolling || this._chartUndoModel() && this._chartUndoModel().model() + .sourcesBeingMoved().length) return void this._setCursorClassName( + "grabbing"); + if (e && this._options.sourceSelectionEnabled) return void this + ._setCursorClassName("pointer") + } + if ("eraser" === s) return void this._setCursorClassName("eraser"); + if ("zoom" === s) return void this._setCursorClassName("zoom-in"); + const r = g.cursorTool.value(); + "dot" !== r ? "arrow" !== r ? this._setCursorClassName("") : this + ._setCursorClassName("default") : this._setCursorClassName("dot") + } + showContextMenuForSelection(e) { + const t = this._chartUndoModel().selection(); + if (t.isEmpty()) return; + const i = t.dataSources().filter(e => e.hasContextMenu()); + this.showContextMenuForSources(i, e) + } + async showContextMenuForSources(e, t, i) { + if (!e.length) return Promise.resolve(null); + const s = e[0], + r = Object(c.merge)(Object(c.clone)(this._options.contextMenu), i || {}), + n = new E.ActionsProvider(this._chart, r); + if (s === this._chartUndoModel().crossHairSource()) return s.handleContextMenuEvent( + t), Promise.resolve(null); { + const i = await n.contextMenuActionsForSources(e); + return 0 === i.length ? Promise.resolve(null) : k.ContextMenuManager.createMenu( + i).then(e => (e.show(t), e)) + } + } + leftPriceAxisesContainer() { + return this._lhsPriceAxisesContainer + } + rightPriceAxisesContainer() { + return this._rhsPriceAxisesContainer + } + setPriceAxisSizes(e, t, i) { + this._priceAxisesContainer(e).setSizes(t, i) + } + state() { + return Object(r.ensureNotNull)(this._state) + } + hasState() { + return null !== this._state + } + setState(e) { + this._state !== e && (this.hasState() && (this.state().onDestroyed().unsubscribeAll( + this), this.state().dataSourcesCollectionChanged().unsubscribeAll( + this)), this._state = e, this.hasState() && (this.state().onDestroyed() + .subscribe(this, this._onStateDestroyed, !0), this.state() + .dataSourcesCollectionChanged().subscribe(this, this + ._onDataSourcesCollectionChanged), this.updatePriceAxisWidgets())) + } + getScreenshotData(e) { + const t = [], + i = []; + let s, r = []; + const n = this.state().sourcesByGroup().allExceptSpecialSources().slice().reverse(), + o = this._chart.properties().childs().paneProperties.childs().legendProperties + .childs(); + for (const a of n) { + const n = a.statusView(); + Object(_.isStudy)(a) && (o.showLegend.value() || (null == e ? void 0 : e + .showCollapsedStudies)) ? a.properties().visible.value() && n && o + .showStudyTitles.value() && (t.push(a.statusProvider(null == e ? void 0 : e + .status).text()), i.push(a.valuesProvider().getValues(null))) : a === + this._chartModel().mainSeries() && n && o.showSeriesTitle.value() && (s = a + .statusProvider((null == e ? void 0 : e.status) || {}).text(), r = a + .valuesProvider().getValues(null)) + } + return { + type: "pane", + leftAxis: this._lhsPriceAxisesContainer.getScreenshotData(), + rightAxis: this._rhsPriceAxisesContainer.getScreenshotData(), + content: this._canvasBinding.canvas.toDataURL(), + canvas: this._canvasBinding.canvas, + contentWidth: this._size.w, + contentHeight: this._size.h, + studies: t, + studiesValues: i, + containsMainSeries: this.containsMainSeries(), + mainSeriesText: s, + mainSeriesValues: r + } + } + hardResetCanvas() { + this._size.equals(new S.Size(0, 0)) || (Object(S.hardResizeCanvas)(this + ._canvasBinding, this._size), + Object(S.hardResizeCanvas)(this._topCanvasBinding, this._size), this + ._lhsPriceAxisesContainer.hardResetCanvas(), this._rhsPriceAxisesContainer + .hardResetCanvas()) + } + updatePriceAxisWidgets() { + if (!this.hasState()) return; + const e = this._chartModel(), + t = e.paneForSource(e.mainSeries()); + if (!t) return; + const i = e.priceScaleSlotsCount(), + s = this.state(), + r = s.visibleLeftPriceScales(), + n = s.visibleRightPriceScales(); + this._lhsPriceAxisesContainer.setScales(r, i.left, t.leftPriceScales().length, i + .left + i.right), this._rhsPriceAxisesContainer.setScales(n, i.right, t + .rightPriceScales().length, i.left + i.right) + } + update() { + this.hasState() && (this._lhsPriceAxisesContainer.update(), this + ._rhsPriceAxisesContainer.update(), null !== this._legendWidget && this + ._legendWidget.update(), this.updateControls()) + } + updateStatusWidget(e = q.InvalidationLevel.None) { + this.hasState() && null !== this._legendWidget && (e === q.InvalidationLevel.Full ? + this._legendWidget.updateLayout() : this._legendWidget.update()) + } + updateControls() { + this.hasState() && null !== this._paneControls && this._paneControls.update() + } + updateThemedColors(e, t) { + this._themedTopColor = e, this._themedBottomColor = t, this._updateByThemedColors() + } + statusWidget() { + return this._legendWidget + } + getElement() { + return this._rowElement + } + canvasElement() { + return this._canvasBinding.canvas + } + hasCanvas(e) { + return this._canvasBinding.canvas === e || this._topCanvasBinding.canvas === e + } + pinchStartEvent() { + null === this._paneWidgetsSharedState.scrollingPane() && null === this + ._paneWidgetsSharedState.pinchingPane() && (this._onTouchEvent(), this._options + .handleScale.pinch && (this._terminateActiveAnimations(), this + ._prevPinchScale = 1, this._pinching = !0, this._wasPinched = !0, this + ._paneWidgetsSharedState.setPinchingPane(this))) + } + pinchEvent(e, t) { + if (null !== this._paneWidgetsSharedState.scrollingPane() || this + ._paneWidgetsSharedState.pinchingPane() !== this) return; + if (this._onTouchEvent(), !this._options.handleScale.pinch) return; + const i = 10 * (t - this._prevPinchScale); + this._prevPinchScale = t, this._chartModel().zoomTime(e.x, i, !0), this + ._prevPinchScale = t + } + pinchEndEvent() { + null === this._paneWidgetsSharedState.scrollingPane() && this + ._paneWidgetsSharedState.pinchingPane() === this && (this._onTouchEvent(), this + ._pinching = !1, this._paneWidgetsSharedState.setPinchingPane(null)) + } + mouseClickEvent(e) { + this._onMouseEvent(), this._mouseClickOrTapEvent(e) + } + tapEvent(e) { + this._preventTouchEventsExceptPinch() || (this._onTouchEvent(), this + ._mouseClickOrTapEvent(e)) + } + mouseDownEvent(e) { + this._onMouseEvent(), this.hasState() && this._mouseDownOrTouchStartEvent(e, Object( + r.ensureNotNull)(this._dataSourceAtPoint(e.localX, e.localY))) + } + touchStartEvent(e) { + if (this._paneWidgetsSharedState.startTouch(this), this + ._preventTouchEventsExceptPinch()) return; + const t = this._chartModel().crossHairSource(), + i = !this._trackCrosshairOnlyAfterLongTap && t.pane === this._state && Number + .isFinite(t.originX()) && Number.isFinite(t.originY()) && Math.abs(t.originX() - + e.localX) + Math.abs(t.originY() - e.localY) < 5; + this._onTouchEvent(), this._chart.setActivePaneWidget(this); + const s = Object(r.ensureNotNull)(this._dataSourceAtPoint(e.localX, e.localY)); + i && (s.source === t || t.selectPointMode().value() ? this.startTrackingMode(new n + .Point(e.localX, e.localY), new n.Point(e.localX, e.localY)) : !this + ._chart.readOnly() && Object(f.isLineTool)(s.source) && s.source + .userEditEnabled() && this._chartUndoModel().selectionMacro(e => { + var t; + e.clearSelection(), e.addSourceToSelection(s.source, null === (t = s + .hittest) || void 0 === t ? void 0 : t.data()) + })), this._mouseDownOrTouchStartEvent(e, s), this._mouseOrTouchMoveEvent(e) + } + mouseUpEvent(e) { + this._onMouseEvent(), this._mouseUpOrTouchEndEvent(e) + } + touchEndEvent(e) { + this._paneWidgetsSharedState.endTouch(this), this + ._preventTouchEventsExceptPinch() || (this._onTouchEvent(), this + ._mouseOrTouchLeaveEvent(e), this._mouseUpOrTouchEndEvent(e)) + } + mouseMoveEvent(e) { + this._onMouseEvent(), this._mouseOrTouchMoveEvent(e) + } + pressedMouseMoveEvent(e) { + this._onMouseEvent(), this._pressedMouseOrTouchMoveEvent(e) + } + touchMoveEvent(e) { + this._preventTouchEventsExceptPinch() || (this._onTouchEvent(), this + ._pressedMouseOrTouchMoveEvent(e)) + } + mouseLeaveEvent(e) { + this._onMouseEvent(), this._mouseOrTouchLeaveEvent(e) + } + mouseDoubleClickEvent(e) { + this._onMouseEvent(), this._mouseDoubleClickOrDoubleTapEvent(e) + } + wheelClickEvent(e) { + var t, i; + if (this._chart.readOnly()) return; + const s = this._dataSourceAtPoint(e.localX, e.localY); + if (null === s || s.isCustom || null === s.source) return; + if (((null === (t = s.hittest) || void 0 === t ? void 0 : t.result()) || 0) <= u + .HitTestResult.MOVEPOINT_BACKGROUND) return; + const n = new p.a(e), + o = null === (i = s.hittest) || void 0 === i ? void 0 : i.eraseMarker(); + if (n.control() && void 0 !== o && s.source.processErase) return void s.source + .processErase(this._chartUndoModel(), o); + const a = this._chartUndoModel(); + a.selection().isSelected(s.source) || a.selectionMacro(e => { + e.clearSelection(); + const t = Object(r.ensureNotNull)(s.source); + e.addSourceToSelection(t, ne(s, t)) + }), this._chart.removeSelectedSources() + } + doubleTapEvent(e) { + this._preventTouchEventsExceptPinch() || (this._onTouchEvent(), this + ._mouseDoubleClickOrDoubleTapEvent(e)) + } + longTapEvent(e) { + this._preventTouchEventsExceptPinch() || (this._onTouchEvent(), this._longTap = !0, + null === this._startTrackPoint && this._trackingModeShouldBeActive() && this + .startTrackingMode(new n.Point(e.localX, e.localY), new n.Point(e.localX, e + .localY), new p.a(e))) + } + mouseEnterEvent(e) { + this._onMouseEvent(), this.hasState() && (this._chart.setActivePaneWidget(this), + this._setCursorPosition(e.localX, e.localY, new p.a(e))) + } + contextMenuEvent(e) { + this._onMouseEvent(), this._contextMenuEvent(e) + } + touchContextMenuEvent(e) { + this._preventTouchEventsExceptPinch() || (this._onTouchEvent(), this + ._contextMenuEvent(e)) + } + mouseDownOutsideEvent() { + this._processOutsideClick({ + hittest: null, + isCustom: !1, + renderer: null, + source: null + }) + } + cancelZoom() { + this._chartModel().crossHairSource().clearSelection(), this._firstZoomPoint = null, + this._preventCrossHairMove() && this._clearCursorPosition() + } + startTrackingMode(e, t, i) { + this._startChangeLineToolParams = null, this._startMoveSourceParams = null, this + ._currentChangingLineToolHitTest = null, this._chartUndoModel().selectionMacro( + e => e.clearSelection()), this._startTrackPoint = e, this + ._exitTrackingModeOnNextTry = !1, this._setCursorPosition(t.x, t.y, i), + this._initCrossHairPosition = this._chartModel().crossHairSource() + .currentPoint() + } + setDragToAnotherPaneCursor() { + this._setCursorClassName("grabbing") + } + cloneLineTools(e, t) { + return this._chartUndoModel().cloneLineTools(e, t) + } + exitTrackingMode() { + null !== this._state && null !== this._startTrackPoint && (this + ._exitTrackingModeOnNextTry = !0, this._tryExitTrackingMode()) + } + trackingModeEnabled() { + return null !== this._state && null !== this._startTrackPoint + } + addCustomWidgetToLegend(e, t) { + this._options.legendWidgetEnabled && (this._customLegendWidgetsFactoryMap.set(e, t), + null !== this._legendWidget && this._legendWidget.addCustomWidgetToLegend(e, + t)) + } + containsMainSeries() { + return !!this.hasState() && this.state().containsMainSeries() + } + paint(e, t) { + if (!this._chartUndoModel() || !this.hasState()) return; + this._state && (e.priceScaleSideMaxLevel("left") > q.InvalidationLevel.Cursor || e + .priceScaleSideMaxLevel("right") > q.InvalidationLevel.Cursor) && (this + ._recalculatePriceScales(), this._chartModel() + .updateCrosshairPositionByOriginCoords()); + const i = e.fullInvalidation(); + if (i > q.InvalidationLevel.Cursor) { + const e = this._chartModel().crossHairSource(), + t = e.originX(), + i = e.originY(); + if (e.pane === this._state && Number.isFinite(t) && Number.isFinite(i)) { + const e = this._dataSourceAtPoint(t, i); + null !== e && this._updateHoveredSource(e, Object(Y.b)()) + } + } + if (this._lhsPriceAxisesContainer.paint(e + .getterForPriceScaleInvalidationLevelBySide("left")), this + ._rhsPriceAxisesContainer.paint(e.getterForPriceScaleInvalidationLevelBySide( + "right")), i !== q.InvalidationLevel.None) { + if (i > q.InvalidationLevel.Cursor) { + const e = Object(r.ensureNotNull)(this._canvasBinding.canvas.getContext( + "2d")); + e.setTransform(1, 0, 0, 1, 0, 0); + const i = this._canvasRenderParams(); + this._drawBackground(e, i), this._state && this._drawSources(e, i, t) + } + if (this._state) { + const e = Object(r.ensureNotNull)(this._topCanvasBinding.canvas.getContext( + "2d")); + e.setTransform(1, 0, 0, 1, 0, 0); + const t = this._topCanvasRenderParams(); + e.clearRect(0, 0, Math.ceil(this._size.w * t.pixelRatio), Math.ceil(this + ._size.h * t.pixelRatio)), this._drawSeriesTopViews(e, t), this + ._drawCrossHair(e, t), this._drawActiveLineTools(e, t) + } + } + } + cancelCreatingLineTool() { + const e = this._chartUndoModel(), + t = this._chartUndoModel().lineBeingCreated(); + if (t) + if (t.pointsCount() <= 0) { + const i = t.points(); + if (i.length > 2) { + const s = i[i.length - 2]; + e.continueCreatingLine(s), this._finishTool(t) + } else e.cancelCreatingLine() + } else e.cancelCreatingLine(); + null !== this._firstZoomPoint && this.cancelZoom(), this.setCursorForTool() + } + cancelMeasuring() { + this._chartUndoModel().crossHairSource().clearMeasure(), Object(g.resetToCursor)(), + this.setCursorForTool() + } + _topCanvasRenderParams() { + return { + pixelRatio: this._topCanvasBinding.pixelRatio, + physicalWidth: this._topCanvasBinding.canvas.width, + physicalHeight: this._topCanvasBinding.canvas.height, + cssWidth: this._chartModel().timeScale().width(), + cssHeight: this.height() + } + } + _canvasRenderParams() { + return { + pixelRatio: this._canvasBinding.pixelRatio, + physicalWidth: this._canvasBinding.canvas.width, + physicalHeight: this._canvasBinding.canvas.height, + cssWidth: this._chartModel().timeScale().width(), + cssHeight: this.height() + } + } + _tryExitTrackingMode(e) { + this._exitTrackingModeOnNextTry && (this._startTrackPoint = null, e || this + ._clearCursorPosition()) + } + _tryStartMeasure(e, t, i, s, r) { + return !(!Object(g.toolIsMeasure)(g.tool.value()) || t.startMeasurePoint()) && (e + .isTouch || this._preventCrossHairMove() || this._setCursorPosition(e + .localX, e.localY, i), s = this._chartModel().magnet().align(s, r, this + .state()), t.startMeasuring({ + price: s, + index: r + }, this.state()), !0) + } + _tryFinishMeasure(e, t) { + if (t.startMeasurePoint() && !t.endMeasurePoint()) { + let i = t.price; + const s = t.index; + return i = this._chartModel().magnet().align(i, s, this.state()), t + .finishMeasure({ + price: i, + index: s + }), e.isTouch ? Object(g.resetToCursor)() : this._needResetMeasureLater = ! + 0, this._preventCrossHairMove() && this._clearCursorPosition(), !0 + } + return !1 + } + _tryStartZoom(e, t, i, s) { + const r = this._chart.model().model().zoomEnabled(); + if ("zoom" === g.tool.value() && r) { + const r = this._chartUndoModel(), + n = r.timeScale().indexToCoordinate(i) - .5 * r.timeScale().barSpacing(); + return this._firstZoomPoint = { + price: t, + index: i, + x: n, + y: e.localY + }, this._preventCrossHairMove() || this._setCursorPosition(e.localX, e + .localY, s), this._chartModel().crossHairSource().startSelection(this + .state()), !0 + } + return !1 + } + _finishZoom(e) { + const t = this.state(), + i = t.defaultPriceScale(), + s = Object(r.ensureNotNull)(t.mainDataSource()).firstValue(), + n = i.coordinateToPrice(e.localY, Object(r.ensureNotNull)(s)), + o = this._chartUndoModel(), + a = Math.round(o.timeScale().coordinateToIndex(e.localX)), + l = Object(r.ensureNotNull)(this._firstZoomPoint); + a !== l.index && o.zoomToViewport(l.index, a, l.price, n, t), this._chartModel() + .crossHairSource().clearSelection(), this._firstZoomPoint = null, Object(g + .resetToCursor)(), this._preventCrossHairMove() && this + ._clearCursorPosition() + } + _tryFinishZoom(e) { + return null !== this._firstZoomPoint && (this._finishZoom(e), !0) + } + _tryHandleEraserMouseDown(e, t) { + if (e.source && "eraser" === g.tool.value() && !e.isCustom && (!(i = e.source) || !i + .customization || !i.customization.disableErasing)) { + const i = this._chartUndoModel(); + if (null !== e.hittest && (Object(f.isLineTool)(e.source) || Object(_.isStudy)(e + .source))) { + const s = e.hittest.eraseMarker(); + return t.control() && void 0 !== s && e.source.processErase ? e.source + .processErase(i, s) : i.removeSource(e.source, !1), !0 + } + } + var i; + return !1 + } + _tryStartChangingLineTool(e, t, i, s) { + var n, o; + if (e.isTouch && null !== this._startTrackPoint) return !1; + const a = t.hittest; + if ((!e.isTouch || !this._preventSourceChange) && a && Object(f.isLineTool)(t + .source) && a.result() === u.HitTestResult.CHANGEPOINT) { + const l = this._chartUndoModel(), + c = Object(r.ensure)(null === (n = this.state().mainDataSource()) || + void 0 === n ? void 0 : n.firstValue()), + h = Object(r.ensureNotNull)(t.source.priceScale()).coordinateToPrice(e + .localY, c); + l.selectionMacro(e => { + e.clearSelection(), e.addSourceToSelection(t.source, a.data()) + }); + const u = l.model().magnet().align(h, s, this.state()), + d = null === (o = a.data()) || void 0 === o ? void 0 : o.pointIndex; + return this._startChangeLineToolParams = { + source: t.source, + startPoint: { + index: s, + price: u + }, + screenPoint: { + x: e.localX, + y: e.localY + }, + pointIndex: d, + envState: i + }, !0 + } + return this._startChangeLineToolParams = null, !1 + } + _tryStartCloning(e, t, i, s) { + if (i.control()) { + const t = this._chartUndoModel().selection().dataSources().filter(e => e + .cloneable()); + if (s && s.cloneable() && t.push(s), t.length > 0) return this + ._clonningAtMoveLineTools = t.map(e => e.id()), this + ._startCloningPoint = new n.Point(e.localX, e.localY), !0 + } + return !1 + } + _tryFinishClonning(e, t, i) { + const s = this._chartUndoModel(), + o = this._chartModel(); + if (t.control() && this._clonningAtMoveLineTools) { + const a = new n.Point(e.localX, e.localY), + l = Object(r.ensureNotNull)(this._startCloningPoint).subtract(a).length(), + c = []; + for (const e of this._clonningAtMoveLineTools) { + const t = o.dataSourceForId(e); + null !== t && c.push(t) + } + if (0 === c.length) return !1; + if (l > 8) { + const o = this.cloneLineTools(c, !0).map(e => Object(r.ensureNotNull)(s + .model().dataSourceForId(e))); + s.selectionMacro(e => { + e.clearSelection(); + let t = null; + o.forEach(s => { + null === t && (t = ne(i, s)), e + .addSourceToSelection(s, t) + }) + }); + const a = new n.Point(e.localX, e.localY), + l = Object(r.ensureNotNull)(o[0].priceScale()), + h = Object(r.ensureNotNull)(this.state().mainDataSource()).firstValue(), + u = { + index: s.timeScale().coordinateToIndex(e.localX), + price: l.coordinateToPrice(e.localY, Object(r.ensureNotNull)(h)) + }; + s.startMovingSources(o, { + logical: u, + screen: a + }, null, t), this._clonningAtMoveLineTools = null, this + ._startCloningPoint = null + } + return !0 + } + return !1 + } + _mouseDownEventForLineTool(e, t, i, s) { + var o, a; + const l = g.tool.value(); + if (!this.hasState() || Object(B.isLineToolDrawWithoutPoints)(l)) return; + const c = this._chartUndoModel(); + let h = !1, + u = null; + Object(g.hideAllDrawings)().value() && Object(g.hideAllIndicators)().setValue(!1), + Object(g.hideAllDrawings)().setValue(!1), Object(g.lockDrawings)().setValue(!1), + e.isTouch && (Object(f.isLineToolName)(l) && !Object(B + .isLineDrawnWithPressedButton)(l) || c.lineBeingCreated()) && this + ._initToolCreationModeParams(e); + const d = c.lineBeingCreated(); + if (d && !Object(B.isLineDrawnWithPressedButton)(d.toolname)) { + const l = Object(r.ensure)(null === (o = d.ownerSource()) || void 0 === o ? + void 0 : o.firstValue()); + if (e.isTouch) { + if (!this._startTouchPoint) { + this._startTouchPoint = new n.Point(e.pageX, e.pageY); + const t = d.points(), + i = t[t.length - 1], + s = c.timeScale().indexToCoordinate(i.index), + o = Object(r.ensureNotNull)(d.priceScale()).priceToCoordinate(i + .price, l); + return void(this._initCrossHairPosition = new n.Point(s, o)) + } + } else { + u = d; + const n = c.model().paneForSource(d); + if (n !== this._state && null !== n) { + const i = this._externalPaneXCoord(n, e.localX), + s = this._externalPaneYCoord(n, e.localY); + h = c.continueCreatingLine({ + index: Math.round(c.timeScale().coordinateToIndex(i)), + price: Object(r.ensure)(null === (a = d.priceScale()) || + void 0 === a ? void 0 : a.coordinateToPrice(s, l)) + }, t) + } else { + const e = c.model().magnet().align(s, i, this.state()); + h = c.continueCreatingLine({ + index: i, + price: e + }, t) + } + } + } else if (!e.isTouch || Object(B.isLineDrawnWithPressedButton)(l)) { + const e = { + index: i, + price: c.model().magnet().align(s, i, this.state()) + }; + u = c.createLineTool(this.state(), e, l), c.lineBeingCreated() || (h = !0) + } + const p = Object(r.ensureNotNull)(this._dataSourceAtPoint(e.localX, e.localY)); + u && c.selectionMacro(e => { + var t; + return e.addSourceToSelection(Object(r.ensureNotNull)(u), null === (t = + p.hittest) || void 0 === t ? void 0 : t.data()) + }), h && u && (this._finishTool(u, p), + e.preventDefault()) + } + _handleSelectionMouseDownAndGetJustDeselectedSource(e, t, i) { + const s = this._chartUndoModel(); + let r = null; + if (null === t.source || t.source.isSelectionEnabled()) { + let n = e.isTouch ? Boolean(t.hittest && t.hittest.result() >= u.HitTestResult + .MOVEPOINT_BACKGROUND) : Boolean(t.hittest && t.hittest.result() > u + .HitTestResult.MOVEPOINT_BACKGROUND); + this._preventSourceChange && (n = !1), s.selectionMacro(e => { + var s; + n && t.source ? (i.control() || e.selection().isSelected(t + .source) || e.clearSelection(), i.control() && e + .selection() + .isSelected(t.source) ? (r = t.source, e + .removeSourceFromSelection(t.source)) : e + .addSourceToSelection(t.source, null === (s = t.hittest) || + void 0 === s ? void 0 : s.data()), e.selection() + .allSources().length > 1 && Object(W.trackEvent)("GUI", + "Multiselect", "Click Select")) : i.control() || e + .clearSelection() + }) + } + return r + } + _processMouseMoveWhileZoom(e, t) { + this._preventCrossHairMove() || this._setCursorPosition(e.localX, e.localY, t) + } + _updateCommonTooltip(e, t) { + let i = null; + if (null !== e && null !== e.hittest) { + const t = e.hittest.data(); + t && (i = t.tooltip || null) + } + const s = this._lastCommonTooltipData; + if (null === s && null === i) return; + if (null === i || "" === i.text) return this._lastCommonTooltipData = null, + void Object(F.a)(t); + if (s && i.text === s.text && i.rect && s.rect && i.rect.x === s.rect.x && i.rect + .y === s.rect.y && i.rect.w === s.rect.w && i.rect.h === s.rect.h) return; + this._lastCommonTooltipData = i; + const r = Object(c.clone)(i); + if (void 0 !== r.rect) { + const e = this._paneCell.getBoundingClientRect(); + r.rect.x += e.left, r.rect.y += e.top + } + Object(F.b)(r) + } + _setCursorPositionOnExternalPane(e, t, i, s) { + t = this._externalPaneXCoord(e, t), i = this._externalPaneYCoord(e, i); + this._chart.paneByState(e)._setCursorPosition(t, i, s) + } + _setCursorPosition(e, t, i) { + this._chartModel().setAndSaveCurrentPosition(this._correctXCoord(e), this + ._correctYCoord(t), this.state(), i) + } + _setCursorClassName(e) { + let t = ""; + e && (t = "pane--cursor-" + e), this._currentCursorClassName !== t && (this + ._currentCursorClassName && this._paneCell.classList.remove(this + ._currentCursorClassName), t && this._paneCell.classList.add(t), this + ._currentCursorClassName = t, this._paneCell.style.cursor) + } + _processMouseUpOrTouchEndHandler(e) { + var t; + null === (t = Object(r.ensureNotNull)(this._dataSourceAtPoint(e.localX, e.localY)) + .hittest) || void 0 === t || t.tryCallMouseUpOrTouchEndHandler(e) + } + _crossHairShouldBeVisible() { + const e = this._chartModel().crossHairSource(); + return Object(f.isLineToolName)(g.tool.value()) || Object(g.toolIsMeasure)(g.tool + .value()) || e.startMeasurePoint() && !e.endMeasurePoint() || null !== this + ._firstZoomPoint || null !== this._chartModel().lineBeingEdited() || null !== + this._chartModel().lineBeingCreated() + } + _clearCursorPosition() { + this._chartModel().clearCurrentPosition() + } + _dataSourceAtPoint(e, t) { + let i = null, + s = null, + r = null; + if (!this.hasState()) return null; + const o = this.state(), + a = o.height(), + l = o.width(); + let c = !1; + if (this._currentChangingLineToolHitTest) return this + ._currentChangingLineToolHitTest; + const h = (e, t, n, o) => { + const a = r ? r.result() : 0; + e.result() > a && (r = e, i = t, s = n, c = o) + }, + u = this._canvasRenderParams(), + p = new n.Point(e, t), + _ = this._chartUndoModel(); + this._hitTestChartSources(u, [_.crossHairSource()], p, h), + this._hitTestCustomSources(u, o.customSources(d.CustomSourceLayer.Topmost), p, + h); + const m = o.sourcesByGroup(); + this._hitTestChartSources(u, m.tradingSources(), p, h), this._hitTestCustomSources( + u, o.customSources(d.CustomSourceLayer.Foreground), p, h); + const f = [...this._chartModel().multiPaneSources(o), ...m.hitTestSources()]; + if (this._hitTestChartSources(u, f, p, h), this.containsMainSeries()) { + const e = _.barsMarksSources(); + for (let t = 0; t < e.length; ++t) { + const i = e[t], + s = i.paneViews(o) || []; + let r, n; + for (let e = 0; e < s.length; e++) r = s[e].renderer(a, l), null !== r && ( + n = r.hitTest(p, u), n && h(n, i, r, !1)) + } + const t = _.activeStrategySource().value(); + if (null !== t) { + const e = t.strategyOrdersPaneView(); + if (null !== e) { + const i = e.renderer(a, l); + if (null !== i) { + const e = i.hitTest(p, u); + e && h(e, t, i, !1) + } + } + } + } + return null === i && this._hitTestCustomSources(u, o.customSources(d + .CustomSourceLayer.Background), p, h), { + source: i, + hittest: r, + renderer: s, + isCustom: c + } + } + _hitTestCustomSources(e, t, i, s) { + const n = Object(r.ensureNotNull)(this._state), + o = n.height(), + a = n.width(); + for (let r = t.length - 1; r >= 0; --r) { + const l = t[r], + c = l.paneViews(n); + if (0 !== c.length) + for (let t = c.length - 1; t >= 0; --t) { + const r = c[t].renderer(o, a); + if (null !== r) { + const t = r.hitTest(i, e); + null !== t && s(t, l, r, !0) + } + } + } + } + _hitTestChartSources(e, t, i, s) { + const n = Object(r.ensureNotNull)(this._state), + o = n.height(), + a = n.width(); + for (let r = t.length; 0 < r--;) { + const l = t[r], + c = l.paneViews(n); + if (null !== c) + for (let t = c.length; 0 < t--;) { + const r = c[t].renderer(o, a); + if (r && r.hitTest) { + const t = r.hitTest(i, e); + null !== t && s(t, l, r, !1) + } + } + } + } + _tryStartMovingLineTool(e, t, i, s) { + var o, a; + if (null === t.source || !t.source.movable() || null !== this._startTrackPoint) + return !1; + if (!this._preventSourceChange) { + const l = this._chartUndoModel(), + c = Object(r.ensureNotNull)(Object(r.ensureNotNull)(this._state) + .mainDataSource()).firstValue(), + h = Object(r.ensureNotNull)(t.source.priceScale()).coordinateToPrice(e + .localY, Object(r.ensureNotNull)(c)), + u = (t.source.isSelectionEnabled() ? l.selection().allSources() : [t + .source + ]).filter(K), + d = new n.Point(e.localX, e.localY), + p = { + index: s, + price: h + }, + _ = null === (a = null === (o = t.hittest) || void 0 === o ? void 0 : o + .data()) || void 0 === a ? void 0 : a.activeItem; + return this._startMoveSourceParams = { + source: u, + startPoint: { + logical: p, + screen: d + }, + itemIndex: void 0 === _ ? null : _, + envState: i + }, !0 + } + return this._startMoveSourceParams = null, !1 + } + _chartModel() { + return this._chart.model().model() + } + _chartUndoModel() { + return this._chart.model() + } + _externalPaneXCoord(e, t) { + t += this._div.getBoundingClientRect().left + document.body.scrollLeft; + const i = Object(r.ensureNotNull)(this._chart.paneByState(e)), + s = i._div.getBoundingClientRect().left + document.body.scrollLeft; + return i._correctXCoord(t - s) + } + _externalPaneYCoord(e, t) { + t += this._div.getBoundingClientRect().top + document.body.scrollTop; + const i = Object(r.ensureNotNull)(this._chart.paneByState(e)), + s = i._div.getBoundingClientRect().top + document.body.scrollTop; + return i._correctYCoord(t - s) + } + _correctXCoord(e) { + return Math.max(0, Math.min(e, this._size.w - 1)) + } + _correctYCoord(e) { + return Math.max(0, Math.min(e, this._size.h - 1)) + } + _processScroll(e) { + if (!this._chart.model().model().scrollEnabled()) return; + const t = Date.now(); + this._startScrollingPos || this._preventScroll() || (this._startScrollingPos = { + x: e.clientX, + y: e.clientY, + timestamp: t, + localX: e.localX, + localY: e.localY + }), null !== this._scrollXAnimation && this._scrollXAnimation.addPosition(e + .localX, t), null !== this._scrollYAnimation && this._scrollYAnimation + .addPosition(e.localY, t); + const i = this._chartUndoModel(); + let s = this.state().defaultPriceScale(); + if (this._startScrollingPos && !this._isScrolling && (this._startScrollingPos.x !== + e.clientX || this._startScrollingPos.y !== e.clientY)) return i + .beginUndoMacro("scroll").setCustomFlag("doesnt_affect_save", !0), null === + this._scrollXAnimation && this._options.useKineticScroll && (this + ._scrollXAnimation = new T(.2, 7, .997, 15), this._scrollXAnimation + .addPosition(this._startScrollingPos.localX, this._startScrollingPos + .timestamp), this._scrollXAnimation.addPosition(e.localX, t)), this + ._scrollYAnimation, i.selection().isEmpty() || (s = i.selection() + .allSources()[0].priceScale()), null === s || s.isEmpty() || (this + ._scrollPriceScale = s, i.startScrollPrice(this.state(), s, e.localY)), + i.startScrollTime(e.localX), this._isScrolling = !0, this + .setCursorForTool(), void this._paneWidgetsSharedState.setScrollingPane( + this); + this._isScrolling && (null !== this._scrollPriceScale && i.scrollPriceTo(this + .state(), this._scrollPriceScale, e.localY), i.scrollTimeTo(e.localX)) + } + _finishScroll() { + const e = this._chartUndoModel(); + e.endScrollTime(), null !== this._scrollPriceScale && e.endScrollPrice(this.state(), + this._scrollPriceScale), e.endUndoMacro(), this._isScrolling = !1, this + ._startScrollingPos = null, this._scrollPriceScale = null, this + .setCursorForTool(), this._paneWidgetsSharedState.setScrollingPane(null) + } + _endScroll(e) { + if (!this._isScrolling) return !1; + const t = this._isScrolling && this._scrollUndoCommandInStack(); + if (this._isScrolling) { + const i = Date.now(); + null !== this._scrollXAnimation && this._scrollXAnimation.start(e.localX, i), + null !== this._scrollYAnimation && this._scrollYAnimation.start(e.localY, + i); + const s = this._chartUndoModel(); + if ((null === this._scrollXAnimation || this._scrollXAnimation.finished(i)) && ( + null === this._scrollYAnimation || this._scrollYAnimation.finished(i))) + return this._finishScroll(), t; + const r = s.timeScale(), + n = this._scrollXAnimation, + o = this._scrollYAnimation, + a = () => { + if ((null === n || n.terminated()) && (null === o || o.terminated())) + return; + const e = Date.now(); + let t = null === n || n.finished(e); + const i = null === o || o.finished(e); + if (null !== n && !n.terminated()) { + const i = r.rightOffset(); + s.scrollTimeTo(n.getPosition(e)), i === r.rightOffset() && (t = !0, + this._scrollXAnimation = null) + } + null === o || o.terminated() || null === this._scrollPriceScale || s + .scrollPriceTo(this.state(), this._scrollPriceScale, o.getPosition( + e)), t && i ? this._finishScroll() : requestAnimationFrame(a) + }; + requestAnimationFrame(a) + } + return t + } + _terminateActiveAnimations() { + const e = Date.now(), + t = null === this._scrollXAnimation || this._scrollXAnimation.finished(e), + i = null === this._scrollYAnimation || this._scrollYAnimation.finished(e); + null === this._scrollXAnimation && null === this._scrollYAnimation || t && i || this + ._finishScroll(), null !== this._scrollXAnimation && (this._scrollXAnimation + .terminate(), this._scrollXAnimation = null), + null !== this._scrollYAnimation && (this._scrollYAnimation.terminate(), this + ._scrollYAnimation = null) + } + _preventScroll() { + return this._trackCrosshairOnlyAfterLongTap && this._longTap || this + ._contextMenuOpenedOnLastTap || Object(f.isLineToolName)(g.tool.value()) || + Boolean(this._chartUndoModel().lineBeingCreated()) || null !== this + ._startTrackPoint + } + _isSelectPointModeEnabled() { + return this._chartUndoModel().crossHairSource().selectPointMode().value() + } + _preventCrossHairMove() { + return !!this._trackCrosshairOnlyAfterLongTap && (null === this._chart + .trackingModePaneWidget() && (!!this._contextMenuOpenedOnLastTap || !this + ._crossHairShouldBeVisible() && null === this._startTrackPoint)) + } + _finishTool(e, t = null) { + const i = this._chartUndoModel(), + s = g.tool.value(); + if (Object(g.resetToCursor)(), this._preventCrossHairMove() && this + ._clearCursorPosition(), i.selectionMacro(i => { + i.addSourceToSelection(e, ne(t, e)) + }), Object(B.isTextToolName)(s)) { + const t = i.createUndoCheckpoint(); + this._chart.showChartPropertiesForSource(e, R.TabNames.text, void 0, t) + } + this._lastFinishedToolId = e.id(), Object(V.c)(e) + } + _alignSourcesThatBeingMoved(e, t, i, s) { + const r = this._chartUndoModel(), + o = r.timeScale().coordinateToIndex(t); + r.model().sourcesBeingMoved().forEach(e => { + const a = e.convertYCoordinateToPriceForMoving(i, this.state() + .mainDataSource()); + null !== a && (this.setCursorForTool(), r.moveSources({ + screen: new n.Point(t, i), + logical: { + index: o, + price: a + } + }, s)) + }) + } + _resetMeasureIfRequired() { + this._needResetMeasureLater && (Object(g.resetToCursor)(), this + ._needResetMeasureLater = !1) + } + _drawBackground(e, t) { + const i = Math.ceil(t.pixelRatio * this._size.w), + s = Math.ceil(t.pixelRatio * this._size.h), + r = this._chartModel(), + n = r.backgroundTopColor().value(), + o = r.backgroundColor().value(); + n === o ? Object(S.clearRect)(e, 0, 0, i + 1, s + 1, o) : Object(y + .clearRectWithGradient)(e, 0, 0, i + 1, s + 1, n, o) + } + _drawWatermark(e, t) { + const i = this._chartModel().watermarkSource(); + if (null === i) return; + const s = this.state(); + if (!s.containsMainSeries()) return; + const r = i.paneViews(), + n = s.height(), + o = s.width(); + for (const i of r) { + e.save(); + const s = i.renderer(n, o); + s && s.draw(e, t), e.restore() + } + } + _drawCrossHair(e, t) { + const i = this._chartUndoModel().crossHairSource(); + !i.visible && Object(g.lockTimeAxis)().value() && (i.setLockedPosition(Object(r + .ensureNotNull)(this._state)), i.updateAllViews()), this._drawSourceImpl(e, + t, te, ee, i) + } + _drawActiveLineTools(e, t) { + const i = this._chartModel(), + s = [i.lineBeingCreated(), i.lineBeingEdited(), ...i.sourcesBeingMoved(), i + .customSourceBeingMoved() + ].filter(e => !!e); + for (const r of s) { + (i.paneForSource(r) === this.state() || Object(m.a)(r) && r + .isMultiPaneEnabled()) && this._drawSourceImpl(e, t, te, ee, r) + } + } + _drawSeriesTopViews(e, t) { + this.state().containsMainSeries() && this._drawSourceImpl(e, t, ie, ee, this + ._chartUndoModel().mainSeries()) + } + _drawSources(e, t, i) { + const s = this.state(), + r = s.model(), + n = s.sourcesByGroup(), + o = n.tradingSources(), + a = [...r.multiPaneSources(s), ...n.generalSources()], + l = n.phantomSources(), + h = s.customSources(d.CustomSourceLayer.Background).slice(), + u = s.customSources(d.CustomSourceLayer.Foreground).slice(), + p = s.customSources(d.CustomSourceLayer.Topmost).slice(); { + const e = r.panes(); + for (let t = e.length - 1; t >= 0; t--) e[t].createDrawingsCaches() + } + this._drawSourceImpl(e, t, te, ee, r.gridSource()), this._drawWatermark(e, t); + for (const i of h) this._drawSourceImpl(e, t, te, Q, i); + for (const i of a) this._drawSourceImpl(e, t, te, Q, i); + for (const i of u) this._drawSourceImpl(e, t, te, Q, i); + for (const i of l) this._drawSourceImpl(e, t, te, Q, i); + const _ = new Set; + [r.lineBeingCreated(), r.lineBeingEdited(), ...r.sourcesBeingMoved(), r + .customSourceBeingMoved() + ].filter(c.notNull).forEach(e => _.add(e.id())); + let f = r.hoveredSource(); + null !== f && ($(f) || _.has(f.id()) || Object(m.a)(f) && !a.includes(f) ? f = + null : _.add(f.id())); + const g = r.selection().allSources().filter(e => !(Object(m.a)(e) && !a.includes( + e)) && (!_.has(e.id()) && !$(e))); + g.forEach(e => _.add(e.id())); { + for (const i of h) this._drawSourceImpl(e, t, te, ee, i, _); + for (const i of a) this._drawSourceImpl(e, t, te, ee, i, _); + for (const i of u) this._drawSourceImpl(e, t, te, ee, i, _); + const i = r.activeStrategySource().value(); + i && this.containsMainSeries() && this._drawSourceImpl(e, t, re, ee, i) + } + for (const i of o) this._drawSourceImpl(e, t, te, Q, i); + for (const i of p) this._drawSourceImpl(e, t, te, Q, i); + for (const i of o) this._drawSourceImpl(e, t, te, Q, i); + for (const i of p) this._drawSourceImpl(e, t, te, Q, i); + for (const i of a) this._drawSourceImpl(e, t, se, ee, i, _); + for (const i of u) this._drawSourceImpl(e, t, se, ee, i, _); + this._drawBarsMarks(e, t, i); + for (const i of o) this._drawSourceImpl(e, t, te, ee, i, _); + for (const i of p) this._drawSourceImpl(e, t, te, ee, i, _); + for (const i of g) this._drawSourceImpl(e, t, te, ee, i); + for (const i of g) this._drawSourceImpl(e, t, se, ee, i); + f && (this._drawSourceImpl(e, t, te, ee, f), this._drawSourceImpl(e, t, se, ee, f)); + for (const i of l) this._drawSourceImpl(e, t, te, ee, i, _); { + const e = r.panes(); + for (let t = e.length - 1; t >= 0; t--) e[t].clearDrawingCaches() + } + } + _drawSourceImpl(e, t, i, s, r, n) { + if (n && n.has(r.id())) return; + const o = this.state(), + a = o.height(), + l = o.width(), + c = i(r, this.state()); + if (c) + for (const i of c) { + const r = i.renderer(a, l); + r && (e.save(), s(r, e, t), e.restore()) + } + } + _drawBarsMarks(e, t, i) { + if (this.containsMainSeries() && !i) { + const i = this._chartUndoModel().barsMarksSources(); + for (const s of i) this._drawSourceImpl(e, t, te, ee, s) + } + } + _updateByThemedColors() { + null !== this._legendWidget && this._legendWidget.updateThemedColors(this + ._themedTopColor), null !== this._paneControls && this._paneControls + .updateThemedColors(this._themedTopColor) + } + _scrollUndoCommandInStack() { + const e = this._chartUndoModel().undoHistory().undoStack(); + if (e.isEmpty()) return !1; + const t = e.head(); + if (!(t instanceof b.a)) return !1; + if (t.isEmpty()) return !1; + const i = t.commands()[0]; + return i instanceof A.PriceScaleChangeUndoCommand || i instanceof L.a + } + _onStateDestroyed() { + this.setState(null) + } + _getHideNotMainSourcesValue() { + return le && !this._chart.isActive() && !this._chart.crossHairSyncEnabled() + } + _onDataSourcesCollectionChanged() { + this._startMoveSourceParams = null + } + _processMouseEnterLeaveMoveHandlers(e, t) { + var i, s, r, n; + null !== this._prevHoveredHittest && this._prevHoveredHittest.renderer !== e + .renderer && (Object(u.tryCallHandler)(t, null === (s = null === (i = this + ._prevHoveredHittest.hittest) || void 0 === i ? void 0 : i + .data()) || void 0 === s ? void 0 : s.mouseLeaveHandler), + this._prevHoveredHittest = null), t.isTouch || (e.hittest && (null === (r = + this._prevHoveredHittest) || void 0 === r ? void 0 : r.renderer) !== e + .renderer && (e.hittest.tryCallMouseEnterHandler(t), this + ._prevHoveredHittest = e), null === (n = e.hittest) || void 0 === n || n + .tryCallMouseMoveHandler(t)) + } + _startChangeOrMoveLineToolIfNeeded() { + if (null !== this._startChangeLineToolParams) { + const e = this._startChangeLineToolParams; + this._chartUndoModel().startChangingLinetool(e.source, e.startPoint, e + .pointIndex, e.envState) + } + if (null !== this._startMoveSourceParams) { + const e = this._startMoveSourceParams; + this._chartUndoModel().startMovingSources(e.source, e.startPoint, e.itemIndex, e + .envState) + } + this._startMoveSourceParams = null, this._startChangeLineToolParams = null + } + _trackingModeShouldBeActive() { + return !(!this._trackCrosshairOnlyAfterLongTap || this + ._contextMenuOpenedOnLastTap || this._crossHairShouldBeVisible()) && this + ._longTap + } + _processOutsideClick(e) { + let t = null; + const i = this._chartModel(); + if (e.source && (t = e.isCustom ? i.customSourceName(e.source) : e.source.id()), + null !== this._lastClickedSource && this._lastClickedSource.id !== t) { + const e = this._lastClickedSource.id; + let t = this._lastClickedSource.isCustom ? i.customSourceForName(e) : i + .dataSourceForId(e); + null !== t || this._lastClickedSource.isCustom || (t = this._chartUndoModel() + .barMarksSourceForId(e)), null !== t && t.onClickOutside && (t + .onClickOutside(), this._chartModel().updateSource(t)) + } + this._lastClickedSource = null !== t ? { + id: t, + isCustom: e.isCustom + } : null + } + _mouseClickOrTapEvent(e) { + var t, i, s; + if (!this.hasState()) return; + const n = this._dataSourceAtPoint(e.localX, e.localY), + o = n && n.source, + a = this._chartUndoModel(), + c = Boolean(null === (i = null === (t = null == n ? void 0 : n.hittest) || + void 0 === t ? void 0 : t.data()) || void 0 === i ? void 0 : i + .hideCrosshairLinesOnHover); + this._processOutsideClick(Object(r.ensureNotNull)(n)), !this + ._isSelectPointModeEnabled() || c || e.isTouch && this.trackingModeEnabled() && + !this._exitTrackingModeOnNextTry || a.crossHairSource().trySelectCurrentPoint(), + (null === (s = null == n ? void 0 : n.hittest) || void 0 === s ? void 0 : s + .tryCallClickOrTapHandler(e)) && a.model().updateSource(Object(r + .ensureNotNull)(o)), !e.isTouch || this._isSelectPointModeEnabled() || n && + n.source === a.crossHairSource() || this._tryExitTrackingMode(), o instanceof v + .BarsMarksContainer && n && n.hittest && n.hittest.data() && o.onClicked(Object( + r.ensureNotNull)(n.hittest).data()), o && Object(f.isLineTool)(o) && Object( + l.emit)("drawing_event", o.id(), "click"), this._resetMeasureIfRequired() + } + _mouseDownOrTouchStartEvent(e, t) { + var i; + if (e.isTouch && (this._longTap = !1, this._exitTrackingModeOnNextTry = null !== + this._startTrackPoint, this._paneWidgetsSharedState.clearDraggingSource()), + this._contextMenuOpenedOnLastTap = !1, this._lastFinishedToolId = null, this + ._terminateActiveAnimations(), e.isTouch && this + ._switchTrackingModeFromAnotherPaneIfNeeded(e), document.activeElement !== + document.body && document.activeElement !== document.documentElement) document + .activeElement && document.activeElement.blur ? document.activeElement.blur() : + document.body.focus(); + else { + const e = document.getSelection(); + null !== e && e.removeAllRanges() + } + Object(l.emit)("mouse_down", { + clientX: e.clientX, + clientY: e.clientY, + pageX: e.pageX, + pageY: e.pageY, + screenX: e.screenX, + screenY: e.screenY + }), this._updateCommonTooltip(null); + const s = this._chartUndoModel(), + o = new p.a(e); + s.mainSeries().clearGotoDateResult(), this.hideInplaceEditor(); + const c = this.state().defaultPriceScale(); + if (c.isEmpty() || s.timeScale().isEmpty()) return; + const h = s.crossHairSource(); + if (!e.isTouch && !Object(B.isLineDrawnWithPressedButton)(g.tool.value())) { + const t = s.lineBeingCreated(), + i = null !== t ? s.model().paneForSource(t) : null; + null !== i && i !== this._state ? this._setCursorPositionOnExternalPane(i, e + .localX, e.localY, o) : this._setCursorPosition(e.localX, e.localY, o) + } + e.isTouch && Object(f.isLineToolName)(g.tool.value()) && (Object(B + .isLineDrawnWithPressedButton)(g.tool.value()) || null !== h.pane ? + Object(B.isLineDrawnWithPressedButton)(g.tool.value()) && this + ._clearCursorPosition() : this._chart.updateCrossHairPositionIfNeeded()); + const d = Object(r.ensureNotNull)(this.state().mainDataSource()).firstValue(); + if (null === d) return void(this._chart.readOnly() || (this + ._handleSelectionMouseDownAndGetJustDeselectedSource(e, t, o), t + .source && t.source instanceof D.PriceDataSource && t.source + .isDraggable() && this._paneWidgetsSharedState.trySetDraggingSource( + t.source, this))); + const _ = c.coordinateToPrice(e.localY, d), + m = this._chartModel().timeScale().coordinateToIndex(e.localX); + if (h.startMeasurePoint() && h.endMeasurePoint() && h.clearMeasure(), o.shift() && + Object(g.toolIsCursor)(g.tool.value()) && s.selection().isEmpty() && g.tool + .setValue("measure"), (e.isTouch || !this._tryStartMeasure(e, h, o, _, m)) && (e + .isTouch || !this._tryFinishMeasure(e, h)) && !this._tryFinishZoom(e) && ! + this._tryStartZoom(e, _, m, o)) { + if (e.isTouch && (null !== this._startTrackPoint ? (this + ._initCrossHairPosition = h.currentPoint(), this._startTrackPoint = + new n.Point(e.localX, e.localY)) : this + ._isSelectPointModeEnabled() && null === this._chart + .trackingModePaneWidget() && this.startTrackingMode(new n.Point(e + .localX, e.localY), new n.Point(e.localX, e.localY), new p.a(e))), e + .isTouch && (this._preventSourceChange = null === t.source || !s.selection() + .isSelected(t.source)), !this._isSelectPointModeEnabled() && !this + ._isScrolling) { + if (e.isTouch && (Object(g.toolIsMeasure)(g.tool.value()) || null !== h + .measurePane())) return void this._initToolCreationModeParams(e); + if (Object(f.isLineToolName)(g.tool.value()) || s.lineBeingCreated()) + return o.shift() || s.selectionMacro(e => e.clearSelection()), void this + ._mouseDownEventForLineTool(e, o, m, _) + } + if (null === (i = t.hittest) || void 0 === i || i + .tryCallMouseDownOrTouchStartHandler(e), !this._chart.readOnly()) { + const i = this._handleSelectionMouseDownAndGetJustDeselectedSource(e, t, o); + if (t.hittest && t.source) { + const i = t.hittest.data(); + if (t.isCustom) { + if (t.hittest.hasPressedMoveHandler(e)) return void s.model() + .setMovingCustomSource(t.source, i) + } else if ((null == i ? void 0 : i.areaName) === u.AreaName + .SourceItemMove) { + const r = null == i ? void 0 : i.activeItem; + if (void 0 !== r) return void s.startCustomMoving(t.source, r, e) + } + } + if (this._tryHandleEraserMouseDown(t, o)) return; + const r = t.source && Object(f.isLineTool)(t.source) && t.source.isLocked && + t.source.isLocked(); + if (!(Object(g.lockDrawings)().value() || r) && !t.isCustom) { + if (t.source && !t.source.userEditEnabled()) return; + if (this._tryStartChangingLineTool(e, t, o, m)) return void(this + ._currentChangingLineToolHitTest = t); + if (this._currentChangingLineToolHitTest = null, t.hittest && ((b = t + .hittest.result()) === u.HitTestResult.MOVEPOINT || b === u + .HitTestResult.MOVEPOINT_BACKGROUND && Object(a + .lastEventIsTouch)())) { + if (this._tryStartCloning(e, t, o, i)) return; + if (this._tryStartMovingLineTool(e, t, o, m)) return + } + } + if (t.source && t.source instanceof D.PriceDataSource && t.source + .isDraggable() && this._paneWidgetsSharedState.trySetDraggingSource(t + .source, this)) return + } + var b; + t && t.hittest && t.hittest.result() === u.HitTestResult.REGULAR || (this + ._processing = !0) + } + } + _mouseUpOrTouchEndEvent(e) { + var t, i; + if (!this.hasState()) return; + const s = e.isTouch && null !== this._startTrackPoint, + n = e.isTouch && this._wasPinched; + e.isTouch && (this._wasPinched = !1, this._longTap = !1), this + ._startMoveSourceParams = null, this._startChangeLineToolParams = null, this + ._currentChangingLineToolHitTest = null; + const o = this._chartUndoModel(), + c = o.model().customSourceMovingHitTestData(); + null !== c || o.customMoveBeingProcessed() || this._processMouseUpOrTouchEndHandler( + e), this._isSelecting = !1; + const h = o.model(), + d = h.crossHairSource(), + _ = this._dataSourceAtPoint(e.localX, e.localY), + m = null == _ ? void 0 : _.hittest; + if (d.selection() && null === this._firstZoomPoint) { + const e = this.state().lineToolsForArea(d.selection()); + o.selectionMacro(t => { + let i = null; + e.forEach(e => { + null === i && (i = ne(_, e)), t.addSourceToSelection(e, + i) + }) + }), d.clearSelection(), Object(W.trackEvent)("GUI", "Multiselect", + "Area Select") + } + Object(l.emit)("mouse_up", { + clientX: e.clientX, + clientY: e.clientY, + pageX: e.pageX, + pageY: e.pageY, + screenX: e.screenX, + screenY: e.screenY + }); + const b = e.isTouch && this._touchMove; + e.isTouch && (this._touchMove = !1); + const v = new p.a(e), + S = g.tool.value(); + if (e.isTouch && !b && (Object(g.toolIsMeasure)(S) || null !== d.measurePane())) { + if (null === d.measurePane() && d.pane !== this._state) return void this + ._setCursorPosition(e.localX, e.localY); + if (this._tryStartMeasure(e, d, v, d.price, d.index)) return; + if (this._tryFinishMeasure(e, d)) return + } + if (e.isTouch && !b && !Object(B.isLineDrawnWithPressedButton)(S) && Object(f + .isLineToolName)(S) && !o.lineBeingCreated()) { + if (this._chart.justActivated()) return; + if (d.pane !== this._state) return void this._setCursorPosition(e.localX, e + .localY, v); + const i = d.currentPoint(), + s = this.state().defaultPriceScale(), + n = Object(r.ensure)(null === (t = this.state().mainDataSource()) || + void 0 === t ? void 0 : t.firstValue()), + a = { + index: Math.round(o.timeScale().coordinateToIndex(i.x)), + price: s.coordinateToPrice(i.y, n) + }, + l = Object(r.ensureNotNull)(o.createLineTool(this.state(), a, S)); + return o.selectionMacro(e => { + e.addSourceToSelection(l) + }), o.lineBeingCreated() || (this._finishTool(l, _), e.preventDefault()), + void(this._startTouchPoint = null) + } + const y = o.lineBeingCreated(); + if (y && !Object(B.isLineDrawnWithPressedButton)(y.toolname) && e.isTouch && this + ._startTouchPoint) { + if (this._startTouchPoint = null, !b) { + const t = y.points()[y.points().length - 1], + i = o.continueCreatingLine({ + index: t.index, + price: t.price + }, new p.a(e)); + this._initCrossHairPosition = null, i && (this._finishTool(y, _), e + .preventDefault()) + } + return + } + if (null !== this._firstZoomPoint && this._firstZoomPoint.draggingMode) + return void this._finishZoom(e); + if (this._processing = !1, o.customMoveBeingProcessed() && o.endCustomMoving(), + null !== c && (c.beingMoved && (Object(u.tryCallHandler)(e, c.mouseUpHandler, c + .touchEndHandler), this.setCursorForTool()), h.setMovingCustomSource( + null, null)), h.lineBeingEdited()) return o.endChangingLinetool(!1), void( + this._preventCrossHairMove() && this._clearCursorPosition()); + if (Object(B.isLineDrawnWithPressedButton)(S) && !this + ._isSelectPointModeEnabled()) { + const t = o.lineBeingCreated(); + null !== t && (Object(V.c)(t), t.finish()); + const s = this.state().defaultPriceScale(); + if (s.isEmpty()) return; + if (!t) return; + const n = Object(r.ensure)(null === (i = t.ownerSource()) || void 0 === i ? + void 0 : i.firstValue()), + a = s.coordinateToPrice(e.localY, n), + l = { + index: Math.round(o.timeScale().coordinateToIndex(e.localX)), + price: a + }; + return void o.continueCreatingLine(l) + } + if (h.sourcesBeingMoved().length) return o.endMovingSource(!1), h + .sourcesBeingMoved().filter(f.isLineTool).forEach(e => { + this.setCursorForTool(e) + }), void h.invalidate(q.InvalidationMask.cursor()); + if (!this._chart.readOnly()) { + const t = e.localX >= 0 && e.localX < this._size.w; + if ((!_ || _.source !== d) && t) { + const t = o.timeScale().coordinateToIndex(e.localX); + h.onSyncScrollNeeded(t) + } + } + const w = this._isScrolling, + P = this._endScroll(e), + C = this._paneWidgetsSharedState.draggingSource(); + if (null !== C) { + const t = e.target, + i = this._chart.paneByCanvas(t); + i && i !== this && (P && o.undoHistory().undo(), o.mergeToPane(C, i.state())); + if (this._chart.timeAxisByCanvas(t)) + if (h.isUnmergeAvailableForSource(C)) P && o.undoHistory().undo(), o + .unmergeToNewBottomPane(C); + else { + const e = h.panes(), + t = Object(r.ensureNotNull)(h.paneForSource(C)), + i = e.indexOf(t); + i !== e.length - 1 && (P && o.undoHistory().undo(), t.isMaximized() && + this._chart.toggleMaximizePane(), o.movePane(i, e.length - 1)) + } this._paneWidgetsSharedState.clearDraggingSource(); + const s = this._chart.getTimeScale(); + s && s.restoreDefaultCursor(); + const n = this._chart.paneWidgets(); + for (let e = 0; e < n.length; e++) { + const t = n[e]; + t === this && _ && !_.isCustom ? t.setCursorForTool(_.source || void 0) : t + .setCursorForTool(), t.leftPriceAxisesContainer() + .restoreDefaultCursor(), t.rightPriceAxisesContainer() + .restoreDefaultCursor() + } + } + this._chart.readOnly() || s || v.control() || w || n || _ && _.source && (m && m + .result() > u.HitTestResult.MOVEPOINT_BACKGROUND || Object(a + .lastEventIsTouch)()) && o.selectionMacro(e => { + e.clearSelection(); + const t = Object(r.ensureNotNull)(_.source); + e.addSourceToSelection(t, ne(_, t)) + }), e.isTouch && (this._touchMove = !1) + } + _mouseOrTouchMoveEvent(e) { + if (!this.hasState()) return; + this._resetMeasureIfRequired(); + const t = Object(r.ensureNotNull)(this._dataSourceAtPoint(e.localX, e.localY)); + this._processMouseEnterLeaveMoveHandlers(t, e); + const i = this._chartUndoModel(); + if (!i) return; + const s = e.localX, + o = e.localY; + this._prevMoveEventPosition = new n.Point(s, o); + const a = new p.a(e); + if (null === this._firstZoomPoint) { + if (this._updateHoveredSource(t, a, e), !e.isTouch && i.lineBeingCreated()) { + const e = i.lineBeingCreated(), + t = null === e ? null : i.model().paneForSource(e); + if (null !== t && t !== this._state) return void this + ._setCursorPositionOnExternalPane(t, s, o, a) + } + e.isTouch || this._setCursorPosition(s, o, a) + } else this._processMouseMoveWhileZoom(e, a) + } + _pressedMouseOrTouchMoveEvent(e) { + var t; + if (!this.hasState() || this._pinching) return; + this._resetMeasureIfRequired(), this._startChangeOrMoveLineToolIfNeeded(), e + .isTouch && (this._touchMove = !0, this._preventSourceChange = !1); + const i = new p.a(e), + s = this._chartUndoModel(), + o = s.crossHairSource(), + a = e.localX, + l = e.localY; + if (this._prevMoveEventPosition = new n.Point(a, l), null !== this._firstZoomPoint) + return this._processMouseMoveWhileZoom(e), void(this._firstZoomPoint + .draggingMode = !0); + const c = g.tool.value(); + if (e.isTouch && this._startTouchPoint && Object(f.isLineToolName)(c) && !Object(B + .isLineDrawnWithPressedButton)(c) && !s.lineBeingCreated() && !this + ._isSelectPointModeEnabled()) return void this + ._updateCrosshairPositionInToolCreationMode(e, this.state()); + const h = o.measurePane(); + if (e.isTouch && this._startTouchPoint && (Object(g.toolIsMeasure)(c) || null !== + h)) return void this._updateCrosshairPositionInToolCreationMode(e, h || this + .state()); + const d = s.lineBeingCreated(); + if (e.isTouch && d && !Object(B.isLineDrawnWithPressedButton)(d.toolname)) { + if (this._startTouchPoint) { + const t = Object(r.ensureNotNull)(s.lineBeingCreated()), + i = Object(r.ensureNotNull)(s.model().paneForSource(t)); + this._updateCrosshairPositionInToolCreationMode(e, i) + } + return + } + if (e.isTouch && null !== this._startTrackPoint) { + this._exitTrackingModeOnNextTry = !1; + const e = Object(r.ensureNotNull)(this._initCrossHairPosition), + t = new n.Point(a, l).subtract(this._startTrackPoint), + s = e.add(t); + this._setCursorPosition(s.x, s.y, i) + } else e.isTouch && this._preventCrossHairMove() || this._setCursorPosition(a, l, + i); + const _ = this._isSelectPointModeEnabled(); + if (Object(f.isLineToolName)(c) && !Object(B.isLineDrawnWithPressedButton)(c) && ! + _ && !i.control()) return; + if (Object(B.isLineDrawnWithPressedButton)(c) && !_) { + const i = this.state().defaultPriceScale(); + if (i.isEmpty()) return; + const o = s.lineBeingCreated(); + if (!o) return; + const a = new n.Point(e.localX, e.localY), + l = Object(r.ensure)(null === (t = o.ownerSource()) || void 0 === t ? + void 0 : t.firstValue()); + return a.price = i.coordinateToPrice(e.localY, l), a.index = Math.round(s + .timeScale().coordinateToIndex(e.localX)), void s.continueCreatingLine( + a) + } + if (null !== this._paneWidgetsSharedState.draggingSource()) { + const t = e.target, + i = this._chart.paneByCanvas(t); + i && (i !== this ? i.setDragToAnotherPaneCursor() : i.setCursorForTool()); + const s = this._chart.timeAxisByCanvas(t); + s && s.setCursor("grabbing") + } + if (s.timeScale().isEmpty()) return; + const m = this._options.handleScroll; + if ((!m.pressedMouseMove || e.isTouch) && (!m.horzTouchDrag && !m.vertTouchDrag || ! + e.isTouch)) return; + if (s.customMoveBeingProcessed()) return void s.processCustomMove(e); + const b = s.model().customSourceMovingHitTestData(); + if (null !== b && (this._updateCommonTooltip(null, !0), s.model() + .processingCustomSourceMove(), Object(u.tryCallHandler)(e, b + .pressedMouseMoveHandler, b.touchMoveHandler), !Object(u + .shouldDefaultActionBeExecuted)(e, b, "pressedMouseMoveHandler", + "touchMoveHandler"))) return; + if (s.model().lineBeingEdited()) return void this._setCursorPosition(a, l, i); + if (s.model().sourcesBeingMoved().length) return void this + ._alignSourcesThatBeingMoved(s.model().sourcesBeingMoved(), e.localX, e + .localY, i); + const v = this._dataSourceAtPoint(e.localX, e.localY); + if (this._tryFinishClonning(e, new p.a(e), v)) return; + const S = Object(g.toolIsMeasure)(c) || o.startMeasurePoint() && o + .endMeasurePoint(); + this._chart.readOnly() || !i.control() || Object(f.isLineToolName)(c) || S ? (this + ._processScroll(e), this._preventScroll() && !this + ._preventCrossHairMove() && null === this._startTrackPoint && this + ._setCursorPosition(e.localX, e.localY, new p.a(e))) : this._isSelecting || + (o.startSelection(this.state()), this._isSelecting = !0) + } + _mouseOrTouchLeaveEvent(e) { + var t, i; + if (!this.hasState()) return; + const s = this._chartUndoModel(); + if (!s) return; + const r = s.crossHairSource(); + e.isTouch || null !== r.measurePane() && null === r.endMeasurePoint() || this + ._clearCursorPosition(), s.model().setHoveredSource(null, null), null !== this + ._prevHoveredHittest && (Object(u.tryCallHandler)(e, null === (i = null === (t = + this._prevHoveredHittest.hittest) || void 0 === t ? void 0 : t + .data()) || void 0 === i ? void 0 : i.mouseLeaveHandler), this + ._prevHoveredHittest = null), this._updateCommonTooltip(null), this._chart + .unsetActivePaneWidget() + } + _mouseDoubleClickOrDoubleTapEvent(e) { + var t; + if (!this.hasState()) return; + const i = !this._chart.readOnly() && !Object(f.isLineToolName)(g.tool.value()) && + Object(r.ensureNotNull)(this._dataSourceAtPoint(e.localX, e.localY)) || null; + if (null === i) return; + if (i.isCustom) return void(null === (t = i.hittest) || void 0 === t || t + .tryCallDblClickOrDblTapHandler(e)); + let s = i.hittest && i.source || null; + s && i.hittest && i.hittest.result() <= u.HitTestResult.MOVEPOINT_BACKGROUND && !e + .isTouch && (s = null), s && !s.isSelectionEnabled() && (s = null), s ? this + .processDoubleClickOnSource(s, i.hittest ? i.hittest : void 0) : this._chart + .readOnly() || Object(f.isLineToolName)(g.tool.value()) || this + ._chartUndoModel().lineBeingCreated() || !this._chartUndoModel().selection() + .isEmpty() || this._chart.toggleMaximizePane(this) + } + _contextMenuEvent(e) { + var t; + const i = this._chartUndoModel(); + if (i.crossHairSource().startMeasurePoint() && !this + ._trackCrosshairOnlyAfterLongTap) return i.crossHairSource().clearMeasure(), + void Object(g.resetToCursor)(!0); + if (this._pinching) return; + if (null === this._firstZoomPoint || this._trackCrosshairOnlyAfterLongTap || this + .cancelZoom(), this.hideInplaceEditor()) return; + if (!Object(g.toolIsCursor)(g.tool.value()) || this._isSelectPointModeEnabled()) { + if (e.isTouch) return; + return Object(g.resetToCursor)(!0), this.setCursorForTool(), void(i + .lineBeingCreated() && i.cancelCreatingLine()) + } + if (!this._options.contextMenuEnabled) return; + const s = this._dataSourceAtPoint(e.localX, e.localY), + r = s ? s.source : null; + if (e.isTouch && null !== this._startTrackPoint) { + if (this._preventSourceChange) return; + this._clearCursorPosition() + } + e.isTouch && (this._contextMenuOpenedOnLastTap = !0, this._startTrackPoint = null), + this._contextMenuX = e.localX, this._contextMenuY = e.localY; + const n = s && s.hittest ? s.hittest.result() : 0, + o = n >= u.HitTestResult.REGULAR || n >= u.HitTestResult.MOVEPOINT_BACKGROUND && + e.isTouch; + this._chart.updateActions(), + i.selectionMacro(t => { + null !== r && o ? t.selection().isSelected(r) || (t.clearSelection(), t + .addSourceToSelection(r, ne(s, r))) : (this._options.contextMenu + .general && this._contextMenu(e).then(t => { + null !== t && t.show(e) + }), t.clearSelection()) + }), s && o && null !== r && (Object(m.a)(r) && r.hasContextMenu() ? r + .isSelectionEnabled() ? this.showContextMenuForSelection(e) : this + .showContextMenuForSources([r], e) : null === (t = s.hittest) || void 0 === + t || t.tryCallContextMenuHandler(e)) + } + _onMouseEvent() { + this._preventSourceChange = !1, this._startTrackPoint = null, this + ._trackCrosshairOnlyAfterLongTap = !1 + } + _onTouchEvent() { + this._trackCrosshairOnlyAfterLongTap = !0 + } + _switchTrackingModeFromAnotherPaneIfNeeded(e) { + const t = this._chart.trackingModePaneWidget(); + if (null !== t && t !== this) { + const i = this._chartModel().crossHairSource().currentPoint(); + t._exitTrackingModeOnNextTry = !0, t._tryExitTrackingMode(!0), this + .startTrackingMode(new n.Point(e.localX, e.localY), new n.Point(i.x, e + .localY), new p.a(e)) + } + } + _contextMenu(e) { + const t = e => e instanceof H.Separator, + i = this._customActions(); + if (N.enabled("disable_no_source_context_menu")) return Promise.resolve(null); + const s = this._initActions(e).filter(e => null !== e); + i.remove.forEach(e => { + for (let t = 0; t < s.length; t++) { + const i = s[t]; + if (i instanceof H.Action && i.getLabel() === e) { + s.splice(t, 1); + break + } + } + }); + const r = i.top.concat(s).concat(i.bottom); + for (let e = r.length - 1; e > 0; e--) t(r[e]) && t(r[e - 1]) && r.splice(e, 1); + return r.length && t(r[0]) && r.splice(0, 1), r.length && t(r[r.length - 1]) && r + .splice(r.length - 1, 1), k.ContextMenuManager.createMenu(r, { + statName: "ChartContextMenu" + }) + } + _initActions(e) { + var t; + const i = this._chart.actions(), + r = []; + r.push(i.chartReset), r.push(new H.Separator), N.enabled("datasource_copypaste") && + !this.state().isEmpty() && (r.push(new H.Action({ + label: Object(s.t)("Paste %s").replace("%s", "").trim(), + shortcutHint: Object(G.humanReadableHash)(G.Modifiers.Mod + 86), + statName: "Paste", + onExecute: () => this._chart.chartWidgetCollection().clipboard + .uiRequestPaste(this.state()) + })), r.push(new H.Separator)), r[r.length - 1] instanceof H.Separator || r.push( + new H.Separator); + return window.widgetbar && (!window.widgetbar._customization || window.widgetbar + ._customization.watchlist) && i.addToWatchlist && r.push(i.addToWatchlist), + N.enabled("text_notes") && r.push(i.addToTextNotes), r[r.length - + 1] instanceof H.Separator || r.push(new H.Separator), r.push(this + ._createLockTimeAxisAction(e)), r.push(new H.Separator), r.push(Object(E + .createLinesAction)(this._chart)), N.enabled("charting_library_base") || r + .push(i.applyColorTheme), r[r.length - 1] instanceof H.Separator || r.push(new H + .Separator), this._chart.applyIndicatorsToAllChartsAvailable() && (r.push(i + .applyStudiesToAllCharts), r.push(new H.Separator)), r.push(i + .paneRemoveAllDrawingTools), r.push(i.paneRemoveAllStudies), r.push(new H + .Separator), (null === (t = window.pro) || void 0 === t ? void 0 : t + .hasPackage("mtp-mtpredictor")) && this.state().containsMainSeries() && r + .push(Object(E.createMTPredictorActions)(this._chart, this.state(), this + ._contextMenuX, this._contextMenuY), new H.Separator), r.push(i + .hideAllMarks), r.push(new H.Separator), N.enabled( + "show_chart_property_page") && r.push(i.chartProperties), + r[r.length - 1] instanceof H.Separator && r.pop(), r + } + _loadAndCreateLegendWidget() { + Promise.all([i.e("react"), i.e(72), i.e(7), i.e("chart-widget-gui")]).then(i.bind( + null, "sAH5")).then(e => { + if (this._isDestroyed) return; + const t = e.LegendWidget, + i = Object(h.deepExtend)({}, this._options.legendWidget); + i.canShowSourceCode = !this._chart.onWidget() && !o.CheckMobile.any(), i + .readOnlyMode = i.readOnlyMode || this._chart.readOnly(), i + .statusesWidgets = { + sourceStatusesEnabled: this._options + .sourceStatusesWidgetEnabled, + sourceStatuses: this._options.sourceStatusesWidget || {}, + marketStatusEnabled: this._options.marketStatusWidgetEnabled, + marketStatus: this._options.marketStatusWidget || {}, + dataUpdateModeEnabled: this._options.chartWarningWidgetEnabled, + dataUpdateMode: this._options.chartWarningWidget || {}, + dataProblemEnabled: this._options.dataProblemWidgetEnabled + }; + const s = new M.a(this._getHideNotMainSourcesValue()); + this._hideNotMainSourcesInLegendSpawn = Object(O.a)(() => ({}), this + ._chart.chartWidgetCollection().activeChartWidget, this._chart + .chartWidgetCollection().lock.crosshair), this + ._hideNotMainSourcesInLegendSpawn.subscribe(() => { + s.setValue(this._getHideNotMainSourcesValue()) + }), this._hideWholeLegend = new M.a(!1), g.tool.subscribe(this + ._recalculateLegendVisibility), this._chartModel() + .crossHairSource().measuringEnabled().subscribe(this, this + ._recalculateLegendVisibility), this._legendWidget = new t(this + ._chartUndoModel(), this, this._chart.backgroundTopTheme(), s, + this._hideWholeLegend, i, { + showContextMenuForSelection: this + .showContextMenuForSelection.bind(this), + showContextMenuForSources: this.showContextMenuForSources + .bind(this), + updateActions: this._chart.updateActions.bind(this._chart), + showChartPropertiesForSource: this._chart + .showChartPropertiesForSource.bind(this._chart), + showGeneralChartProperties: this._chart + .showGeneralChartProperties.bind(this._chart), + showObjectsTreeDialog: this._chart.showObjectsTreeDialog + .bind(this._chart) + }), this._div.appendChild(this._legendWidget.getElement()), this + ._legendWidget.updateLayout(), this._legendWidget + .updateWidgetModeBySize(this._size), this._legendWidget + .updateThemedColors(this._themedTopColor); + for (const e of Array.from(this._customLegendWidgetsFactoryMap.keys())) + this._legendWidget.addCustomWidgetToLegend(e, Object(r + .ensureDefined)(this._customLegendWidgetsFactoryMap.get(e))) + }) + } + _loadAndCreatePaneControlsWidget() { + Promise.all([Promise.all([i.e("react"), i.e(72), i.e(7), i.e("chart-widget-gui")]) + .then(i.bind(null, "lvAK")), Promise.all([i.e("react"), i.e(72), i.e(7), + i.e("chart-widget-gui") + ]).then(i.bind(null, "MjAr")) + ]).then(([e, t]) => { + if (this._isDestroyed) return; + const i = e.PaneControlsWidget; + this._paneControls = new i(this._chartUndoModel(), this, { + backgroundThemeName: this._chart.backgroundTopTheme() + }, { + toggleMaximizePane: this._chart.toggleMaximizePane.bind(this + ._chart) + }, this._div), this._paneControls.updateWidgetModeByWidth(this._size + .w), this._paneControls.updateThemedColors(this + ._themedTopColor), this._paneControlsResizeObserver = new t + .default( + this._handleRestrictLegendWidth.bind(this)), this + ._paneControlsResizeObserver.observe(this._paneControls + .getElement()) + }) + } + _handleRestrictLegendWidth(e) { + if (null === this._legendWidget || null === this._paneControls) return; + const t = e[e.length - 1].contentRect.width, + i = 0 === t ? 0 : t + J + Z; + this._legendWidget.addMargin(i) + } + _onMagnetStateChanged() { + this._chart.isActive() && this._isToolActionActiveOnPane(!0) && this._chartModel() + .crossHairSource().visible && this._updateLineToolUsingMagnetOrShift() + } + _onShiftKeyStateChanged() { + this._chart.isActive() && this._isToolActionActiveOnPane(!1) && this._chartModel() + .crossHairSource().visible && this._updateLineToolUsingMagnetOrShift(p.a.create( + Object(Y.d)().value())) + } + _isToolActionActiveOnPane(e) { + const t = this._chartModel(), + i = t.lineBeingCreated() || t.lineBeingEdited() || t.sourcesBeingMoved() + .length > 0 && t.sourcesBeingMoved()[0]; + return i ? t.paneForSource(i) === this._state : e && Object(f.isLineToolName)(g.tool + .value()) && t.crossHairSource().pane === this._state + } + _updateLineToolUsingMagnetOrShift(e) { + if (null === this._prevMoveEventPosition) return; + const { + x: t, + y: i + } = this._prevMoveEventPosition, s = this._chartModel().sourcesBeingMoved(); + s.length > 0 ? this._alignSourcesThatBeingMoved(s, t, i, e) : this + ._setCursorPosition(t, i, e) + } + _showEditDialogForSource(e, t) { + if (this._options.propertyPagesEnabled && e.userEditEnabled()) + if (e === this._chartUndoModel().mainSeries()) this._chart + .showGeneralChartProperties(R.TabNames.symbol); + else if (Object(f.isLineTool)(e) || Object(_.isStudy)(e)) { + let i; + const s = null == t ? void 0 : t.data(); + if (null != s) { + const e = s.areaName; + void 0 !== e && (i = ae.get(e)) + } + this._chart.showChartPropertiesForSource(e, i).then(e => { + this._editDialog = e + }) + } + } + _initToolCreationModeParams(e) { + this._startTouchPoint = new n.Point(e.pageX, e.pageY), this._initCrossHairPosition = + this._chartModel().crossHairSource().currentPoint() + } + _updateCrosshairPositionInToolCreationMode(e, t) { + if (t !== this._state) { + const i = this._chart.paneByState(t); + return i._startTouchPoint = this._startTouchPoint, i._initCrossHairPosition = + this._initCrossHairPosition, void i + ._updateCrosshairPositionInToolCreationMode(e, t) + } + const i = this._chartModel().crossHairSource(); + this._chart.justActivated() && (this._initCrossHairPosition = i.currentPoint()); + const s = e.pageX, + o = e.pageY, + a = Object(r.ensureNotNull)(this._initCrossHairPosition), + l = new n.Point(s, o).subtract(Object(r.ensureNotNull)(this._startTouchPoint)), + c = a.add(l); + this._setCursorPosition(c.x, c.y, new p.a(e)) + } + _priceAxisesContainer(e) { + return "left" === e ? this._lhsPriceAxisesContainer : this._rhsPriceAxisesContainer + } + _recalculatePriceScales() { + const e = this.state(); + for (const t of e.leftPriceScales()) e.recalculatePriceScale(t); + for (const t of e.rightPriceScales()) e.recalculatePriceScale(t); + for (const t of e.sourcesByGroup().overlayPriceScaleSources()) Object(f.isLineTool)( + t) || e.recalculatePriceScale(t.priceScale()) + } + _createLockTimeAxisAction(e) { + const t = Object(g.lockTimeAxis)().value(); + return new H.Action({ + label: Object(s.t)("Lock Vertical Line On Time Axis"), + statName: "LockCursorInTime", + checkable: !0, + checked: t, + onExecute: () => this._toggleLockTimeAxis(e.localX, !t) + }) + } + _toggleLockTimeAxis(e, t) { + if (t) { + const t = this._chartUndoModel().timeScale(), + i = t.coordinateToIndex(e), + s = t.points().roughTime(i); + null !== s && g.lockTimeAxisTime.setValue(s) + } + Object(g.lockTimeAxis)().setValue(t) + } + _preventTouchEventsExceptPinch() { + return this._paneWidgetsSharedState.hasTouchesOnOtherPanes(this) || null !== this + ._paneWidgetsSharedState.pinchingPane() + } + _updateHoveredSource(e, t, i) { + var s, r, n; + const o = this._chartUndoModel(), + a = o.model(); + let l = !1; + const c = e && e.source, + h = this._chart.readOnly(); + if (h && !Object(f.isLineTool)(e.source) || this._editDialog && this._editDialog + .visible().value()) h && (a.setHoveredSource(null, null), this + .setCursorForTool()); + else { + const d = g.tool.value(); + let p = null; + if (!this._processing && (Object(g.toolIsCursor)(d) || "eraser" === d && !h || t + .control() || !o.lineBeingCreated())) { + const { + hittest: t + } = e; + l = Boolean(null === (s = null == t ? void 0 : t.data()) || void 0 === s ? + void 0 : s.hideCrosshairLinesOnHover) || !!c && Object(f.isLineTool) + (c) && -1 !== X.indexOf(c.toolname), t && t.result() > u.HitTestResult + .MOVEPOINT_BACKGROUND ? (p = c, !(null == c ? void 0 : c + .isHoveredEnabled()) || "eraser" === d && c === o.mainSeries() ? + a.setHoveredSource(null, null) : a.setHoveredSource(c, null == t ? + void 0 : t.data())) : a.setHoveredSource(null, null) + } + h ? this.setCursorForTool(p, t, j.PaneCursorType.Default) : this._options + .sourceSelectionEnabled && (this._isSelectPointModeEnabled() ? this + ._setCursorClassName("pointer") : this.setCursorForTool(p, t, null === ( + n = null === (r = null == e ? void 0 : e.hittest) || void 0 === + r ? void 0 : r.data()) || void 0 === n ? void 0 : n.cursorType)); + const _ = o.model().customSourceBeingMoved(), + m = null !== _ ? [_] : o.model().sourcesBeingMoved(), + b = e.source; + if ((!m.length || null !== b && -1 === m.indexOf(b)) && this + ._updateCommonTooltip(e), !h && null !== e.hittest && i && e.hittest + .hasPressedMoveHandler(i)) { + switch ((e.hittest.data() || {}).cursorType) { + case j.PaneCursorType.VerticalResize: + this._setCursorClassName("ns-resize"); + break; + case j.PaneCursorType.HorizontalResize: + this._setCursorClassName("we-resize"); + break; + case j.PaneCursorType.DiagonalNeSwResize: + this._setCursorClassName("nesw-resize"); + break; + case j.PaneCursorType.DiagonalNwSeResize: + this._setCursorClassName("nwse-resize") + } + } + } + this._preventCrossHairMove() && this._clearCursorPosition(), this._chartModel() + .crossHairSource().setLinesShouldBeHidden(l) + } + } + }, + UHyS: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StandardPivotPointsPriceAxisView", (function() { + return n + })); + var s = i("KcY8"); + const r = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5"]; + class n extends s.a { + constructor(e, t) { + super(), this._source = e, this._data = t; + const i = t.name; + this._completeName = "P" === i.toUpperCase() ? "P" : `S${i[1]}/R${i[1]}` + } + _updateRendererData(e, t, i) { + e.visible = !1, t.visible = !1; + const s = this._source.properties(); + if (!s.visible.value()) return; + const n = this._completeName, + o = s.levelsStyle.visibility; + if (!o[n] || !o[n].value()) return; + const a = this._source.model().timeScale(), + l = this._source.priceScale(); + if (a.isEmpty() || null === a.visibleBarsStrictRange() || null !== l && l + .isEmpty()) return; + const c = this._source.customData(); + if (!c || !c.pivots) return; + const h = this._source.pricesView().prices()[r.indexOf(this._data.name + .toUpperCase())]; + if (!h) return; + i.background = h.color, i.textColor = this.generateTextColor(h.color), i + .coordinate = h.coordinate, i.floatCoordinate = h.floatCoordinate; + const u = this._source.model().properties().scalesProperties; + u.showStudyLastValue.value() && (e.text = h.formatted, e.visible = !0), u + .showStudyPlotLabels.value() && (t.text = this._source.priceLabelText(this + ._data.name), t.visible = !0) + } + } + }, + USzt: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return c + })); + var s = i("Eyy1"), + r = i("cBZt"), + n = i("MSvv"), + o = i("jenN"), + a = i("wYrq"); + const l = Object(r.studyIdString)("VbPFixed", "tv-volumebyprice"); + class c extends n.StudyLineDataSource { + constructor(e, t, i, s) { + const r = i || e.studyMetaInfoRepository().findByIdSync({ + type: "java", + studyId: l + }), + n = t || c._createPropertiesFromStudyMetaInfo(r, e.studyVersioning()); + super(e, r, "vbpfixed_", n), Object(o.createGraphicsPaneViews)(this, e).then( + t => { + if (s = e.mainSeries(), r.plots.length > 0) { + const i = new a.a(this, s, e, r.plots[0].id); + t.push(i) + } + if (r.plots.length > 1) { + const i = new a.a(this, s, e, r.plots[1].id); + t.push(i) + } + if (r.plots.length > 2) { + const i = new a.a(this, s, e, r.plots[2].id); + t.push(i) + } + this._setPaneViews(t) + }), this.clearData() + } + pointsCount() { + return 2 + } + boundToSymbol() { + return !1 + } + offset(e) { + return 0 + } + getMinFirstBarIndexForPlot() { + return -1 / 0 + } + calcIsActualSymbol() { + this._isActualSymbol = !0, this._isActualCurrency = !0, this._isActualUnit = !0, + this.calcIsActualInterval() + } + cloneable() { + return !1 + } + isSynchronizable() { + return !1 + } + static createProperties(e) { + const t = super._createPropertiesFromStudyIdAndState(l, e); + return c._configureProperties(t), t + } + static studyId() { + return l + } + _studyInputs(e) { + Object(s.assert)(2 === e.length, "all the line tool points should be defined"); + const [t, i] = e, r = Math.max(t.index, i.index), n = this._model.mainSeries() + .bars().lastIndex(), o = this._getPointTime(t.index <= i.index ? t : i, !0), + a = this._getPointTime(i.index >= t.index ? i : t, !0); + return null === o || null === a ? (this + ._subscribeApplyInputsOnSeriesCompleted(), null) : { + rowsLayout: this.properties().inputs.rowsLayout.value(), + rows: this.properties().inputs.rows.value(), + volume: this.properties().inputs.volume.value(), + vaVolume: this.properties().inputs.vaVolume.value(), + first_bar_time: 1e3 * o, + last_bar_time: 1e3 * a, + subscribeRealtime: n === r + } + } + _isReady() { + return !Object(o.isStudyGraphicsEmpty)(this.graphics()) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(61), i.e(62), i.e( + "study-property-pages-with-definitions")]).then(i.bind(null, "cKLu")) + .then(e => e.StudyLineDataSourceDefinitionsViewModel) + } + _updateAnchorsPrice() { + let e = null, + t = null; + this.graphics().hhists().forEach(i => { + i.forEach(i => { + const s = i.priceLow, + r = i.priceHigh; + (!e || s < e) && (e = s), (!t || r > t) && (t = r) + }) + }), null !== e && null !== t && (this._timePoint.length && (this._timePoint[ + 0].price = t, this._timePoint[1].price = e), this._points.length && + (this._points[0].price = t, this._points[1].price = e)) + } + } + }, + UlDV: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "RestrictedToolsetBootloader", (function() { + return r + })); + var s = i("cZRT"); + class r extends s.a { + _startLoading() { + return Promise.all([i.e("react"), i.e(1), i.e(4), i.e(6), i.e(11), i.e(12), i.e( + 13), i.e(14), i.e(22), i.e(24), i.e(28), i.e(29), i.e(41), i.e( + 51), i.e(52), i.e(64), i.e(66), i.e(69), i.e(70), i.e(71), i.e( + 0), i.e(5), i.e(7), i.e(10), i.e(38), i.e(57), i.e( + "restricted-toolset")]).then(i.bind(null, "miV2")).then(e => e + .getRestrictedToolSet()) + } + } + }, + Ulff: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + const s = { + common: i("HGP3").colorsPalette["color-tv-blue-500"], + active: "#143EB3" + } + }, + UqOQ: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return l + })); + var s = i("aIyQ"), + r = i.n(s), + n = i("e3/o"); + + function o(e) { + return e.properties().visible.value() + } + + function a(e) { + return !o(e) + } + class l { + constructor(e, t, i) { + this._onChanged = new r.a, this._lineToolsSet = new Set, this._lineTools = [...e], + this._lineToolsSet = new Set(this._lineTools), this._name = t, this.id = i || + Object(n.randomHashN)(6), this.instanceId = Object(n.randomHashN)(6) + } + lineTools() { + return this._lineTools + } + name() { + return this._name + } + setName(e) { + this._doAndFireOnChange(() => { + this._name = e + }) + } + isActualSymbol() { + return this._lineTools.length > 0 && this._lineTools[0].isActualSymbol() && this + ._lineTools[0].isActualCurrency() && this._lineTools[0].isActualUnit() + } + symbol() { + return this._lineTools[0].symbol() + } + currencyId() { + var e; + return null !== (e = this._lineTools[0].properties().childs().currencyId.value()) && + void 0 !== e ? e : null + } + unitId() { + var e; + return null !== (e = this._lineTools[0].properties().childs().unitId.value()) && + void 0 !== e ? e : null + } + containsLineTool(e) { + return this._lineToolsSet.has(e) + } + addLineTools(e) { + this._doAndFireOnChange(t => { + e.forEach(i => { + this._lineToolsSet.add(i), t.push(...e.map(e => e.id())) + }), this._lineTools.push(...e) + }) + } + excludeLineTool(e) { + this._doAndFireOnChange(t => { + this._lineToolsSet.delete(e); + const i = this._lineTools.indexOf(e); + this._lineTools.splice(i, 1), t.push(e.id()) + }) + } + excludeLineTools(e) { + this._doAndFireOnChange(t => { + const i = new Set(e); + e.forEach(e => this._lineToolsSet.delete(e)), this._lineTools = this + ._lineTools.filter(e => !i.has(e)), t.push(...e.map(e => e.id())) + }) + } + state() { + return { + id: this.id, + name: this._name, + tools: this._lineTools.map(e => e.id()) + } + } + visibility() { + const e = this._lineTools.some(o), + t = this._lineTools.some(a); + return e && !t ? "Visible" : t && !e ? "Invisible" : "Partial" + } + locked() { + const e = this._lineTools.some(e => e.properties().frozen.value()), + t = this._lineTools.some(e => !e.properties().frozen.value()); + return e && !t ? "Locked" : t && !e ? "Unlocked" : "Partial" + } + isActualInterval() { + const e = this._lineTools.some(e => e.isActualInterval()), + t = this._lineTools.some(e => !e.isActualInterval()); + return e && !t ? "IsActualInterval" : t && !e ? "IsNotActualInterval" : "Partial" + } + onChanged() { + return this._onChanged + } + static fromState(e, t) { + const i = []; + for (const s of t.tools) { + const t = e.dataSourceForId(s); + null !== t && i.push(t) + } + return i.length > 0 ? new l(i, t.name, t.id) : null + } + _doAndFireOnChange(e) { + const t = [], + i = this.visibility(), + s = this.locked(), + r = this.name(), + n = this.isActualInterval(); + e(t); + const o = { + affectedLineTools: t, + visibilityChanged: this.visibility() !== i, + lockedChanged: s !== this.locked(), + titleChanged: r !== this.name(), + isActualIntervalChanged: n !== this.isActualInterval() + }; + this._onChanged.fire(o) + } + } + }, + V086: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("GEp6").distanceToLine, + n = i("Ss5c").LineDataSource, + o = i("Ocx9").DefaultProperty, + a = i("j3hX").LineToolColorsProperty; + class l extends n { + constructor(e, t) { + super(e, t || l.createProperties()), this.version = l.version, i.e("lt-pane-views") + .then(i.t.bind(null, "obU/", 7)).then(({ + EllipsePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + startChanging(e, t) { + if (super.startChanging(e, t), 0 === e || 1 === e) { + var i = this.pointToScreenPoint(this._points[0])[0], + s = this.pointToScreenPoint(this._points[1])[0], + n = this.pointToScreenPoint(this._points[2])[0]; + this._dist = r(i, s, n).distance || 0 + } + } + _preparePoint(e, t) { + var i = this._preparePointInternal(e, t, !1); + return t && t.shift() && this._points[0].index === this._points[1].index && this + ._fixVerticalDiameterPoints(this._points[1], this._points[0], i), i + } + _preparePointInternal(e, t, i) { + var r = Object.assign({}, e); + if (t && t.shift()) { + var n = this.points().length; + if (!this._fakePointAdded && 3 === n && !i) return r; + if (this._fakePointAdded || 2 === n || i) { + this._snapPoint45Degree(e, this._points[0]), this._fakePointAdded ? this + ._points[1] = e : i || (this._fakePointAdded = !0, super + ._addPointIntenal(e)); + var o = this.pointToScreenPoint(this._points[0])[0], + a = this.pointToScreenPoint(this._points[1])[0], + l = a.x - o.x, + c = a.y - o.y, + h = Math.sqrt(l * l + c * c) / 2, + u = a.subtract(o), + d = o.add(a).scaled(.5), + p = new s(-u.y, u.x); + p = p.normalized(); + var _ = d.add(p.scaled(h)); + r = this.screenPointToPoint(_), (TradingView.isNaN(r.price) || TradingView + .isNaN(r.index)) && (r = this.screenPointToPoint(d)) + } + } else this._fakePointAdded && (this._points.splice(1, 1), this._fakePointAdded = ! + 1); + return r + } + _fixVerticalDiameterPoints(e, t, i) { + var s = this.pointToScreenPoint(e)[0], + r = this.pointToScreenPoint(t)[0], + n = this._model.timeScale(), + o = n.indexToCoordinate(e.index), + a = n.indexToCoordinate(i.index), + l = 2 * Math.abs(o - a); + l *= t.price > e.price ? 1 : -1, e.price = this.screenPointToPoint({ + x: s.x, + y: r.y + l + }).price + } + addPoint(e, t, i) { + var s = n.prototype.addPoint.call(this, e, t, i); + return s && (this._fakePointAdded = !1), s + } + setPoint(e, t, i) { + var n = Object.assign({}, t), + o = this.pointToScreenPoint(this._points[0])[0], + a = this.pointToScreenPoint(this._points[1])[0], + l = this.pointToScreenPoint(this._points[2])[0]; + switch (e) { + case 0: + if (i && i.shift()) { + this._snapPoint45Degree(n, this._points[1]), this._points[0] = n, this + ._points[2] = this._preparePointInternal(this._points[2], i, !0), + this._points[0].index === this._points[1].index && this + ._fixVerticalDiameterPoints(this._points[0], this._points[1], this + ._points[2]); + break + } + o = this.pointToScreenPoint(n)[0]; + var c = a.subtract(o), + h = o.add(a).scaled(.5); + d = (d = new s(-c.y, c.x)).normalized(), l = h.add(d.scaled(this._dist)), + l = this.screenPointToPoint(l), this._points[0] = n, this._points[2] = + l; + break; + case 1: + if (i && i.shift()) { + this._snapPoint45Degree(n, this._points[0]), this._points[1] = n, this + ._points[2] = this._preparePointInternal(this._points[2], i, !0), + this._points[0].index === this._points[1].index && this + ._fixVerticalDiameterPoints(this._points[1], this._points[0], this + ._points[2]); + break + } + c = (a = this.pointToScreenPoint(n)[0]).subtract(o), h = o.add(a).scaled( + .5); + d = (d = new s(-c.y, c.x)).normalized(), l = h.add(d.scaled(this._dist)), + l = this.screenPointToPoint(l), this._points[1] = n, this._points[2] = + l; + break; + case 2: + n = this.pointToScreenPoint(n)[0]; + var u = r(o, a, n).distance; + c = a.subtract(o), h = o.add(a).scaled(.5); + d = (d = new s(-c.y, c.x)).normalized(), l = h.add(d.scaled(u)), l = this + .screenPointToPoint(l), this._points[2] = l; + break; + case 3: + n = this.pointToScreenPoint(n)[0]; + var d; + u = r(o, a, n).distance, c = a.subtract(o), h = o.add(a).scaled(.5); + d = (d = new s(-c.y, c.x)).normalized(), l = h.add(d.scaled(u)), l = this + .screenPointToPoint(l), this._points[2] = l + } + this.normalizePoints() + } + pointsCount() { + return 3 + } + name() { + return "Ellipse" + } + hasEditableCoordinates() { + return !1 + } + migrateVersion(e, t, i) { + if (1 === e && 2 === this._points.length) { + var s = this._points[0].price, + r = .5 * (this._points[0].price + this._points[1].price); + this._points[0] = { + price: r, + index: this._points[0].index + }, this._points[1] = { + price: r, + index: this._points[1].index + }, this._points.push({ + price: s, + index: this._points[0].index + }) + } + if (1 === e && 2 === this._timePoint.length) { + s = this._timePoint[0].price, r = .5 * (this._timePoint[0].price + this + ._timePoint[1].price); + this._timePoint[0].price = r, this._timePoint[1].price = r; + var n = { + price: s, + offset: this._timePoint[0].offset, + time_t: this._timePoint[0].time_t + }; + this._timePoint.push(n) + } + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Zd1D"))) + .GeneralFiguresDefinitionsViewModel + } + static createProperties(e) { + var t = new o("linetoolellipse", e); + return l._configureProperties(t), t + } + static _configureProperties(e) { + n._configureProperties(e), e.addChild("linesColors", new a([e.childs().color])) + } + } + l.version = 2, t.LineToolEllipse = l + }, + V3Oj: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolText", (function() { + return h + })), i.d(t, "LineToolTextAbsolute", (function() { + return u + })); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("Ss5c"), + o = i("tc+8"), + a = i.n(o), + l = i("Ocx9"), + c = i("j3hX"); + class h extends n.LineDataSource { + constructor(e, t) { + const s = t || h.createProperties(); + super(e, s), this._barSpacing = e.timeScale().barSpacing(), this + ._recalculatePointsOnCenter = !1, i.e("lt-pane-views").then(i.bind(null, + "mr3a")).then(({ + TextPaneView: t + }) => { + const i = this._recalculatePointsOnCenter ? (e, t) => { + this._recalculatePointsOnCenter && this + ._recalculateCenterPosition(e, t) + } : void 0; + this._setPaneViews([new t(this, e, void 0, void 0, void 0, void 0, + void 0, i)]) + }) + } + centerPosition() { + this._recalculatePointsOnCenter = !0 + } + setPoint(e, t, i) { + const s = this.properties().childs(); + let r; + if (0 === e && s.wordWrapWidth.value()) { + const e = this.model().timeScale(); + r = this.isFixed() ? this.fixedPoints()[0].x : e.indexToCoordinate(this + .points()[0].index); + const i = e.indexToCoordinate(t.index) - r - ~~(s.fontsize.value() / 6); + if (!isFinite(i)) return; + s.wordWrapWidth.setValue(Math.max(100, i)) + } + } + pointsCount() { + return 1 + } + name() { + return "Text" + } + setPriceScale(e) { + super.setPriceScale(e), e && e.priceRange() && (this._priceDencity = e + .height() / Object(s.ensureNotNull)(e.priceRange()).length(), this + ._isPriceDencityLog = e.isLog()) + } + restoreSize() { + const e = Object(s.ensureNotNull)(this.priceScale()); + this._barSpacing = this.model().timeScale().barSpacing(), + this._priceDencity = e.height() / Object(s.ensureNotNull)(e.priceRange()) + .length(), this.redraw() + } + redraw() { + this.updateAllViews(), this._model.updateSource(this) + } + properties() { + return super.properties() + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e + } + state(e) { + const t = super.state(e); + return e && (t.state.fixedSize = !1), t + } + barSpacing() { + return this._barSpacing + } + priceDencity() { + return this._priceDencity + } + isPriceDencityLog() { + return this._isPriceDencityLog + } + hasEditableCoordinates() { + return !1 + } + static createProperties(e) { + const t = new l.DefaultProperty("linetooltext", e); + return h._configureProperties(t), t + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "QWxu")).then( + e => e.TextDefinitionsViewModel) + } + static _configureProperties(e) { + n.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new a.a(window.t("Text"))), e.addExclusion("text"), e.addChild( + "linesColors", new c.LineToolColorsProperty([e.childs().borderColor])), + e.addChild("textsColors", new c.LineToolColorsProperty([e.childs().color])), + e.addExclusion("linesColors"), e.addExclusion("textsColors") + } + _recalculateCenterPosition(e, t) { + const i = (this.isFixed() ? this.fixedPoints() : this.pointToScreenPoint(this + ._points[0]))[0], + s = new r.Point(i.x - e / 2, i.y - t / 2), + n = this.screenPointToPoint(s); + this.setPoints([n]), this.normalizePoints(), this.createServerPoints(), this + .redraw() + } + } + class u extends h { + constructor(e, t) { + super(e, t || u.createProperties()) + } + name() { + return "Anchored Text" + } + hasEditableCoordinates() { + return !1 + } + isFixed() { + return !0 + } + static createProperties(e) { + const t = new l.DefaultProperty("linetooltextabsolute", e); + return u._configureProperties(t), t + } + static _configureProperties(e) { + h._configureProperties(e) + } + } + }, + VNzU: function(e, t, i) { + "use strict"; + i.r(t); + i("Dq3s"); + i.d(t, "layouts", (function() { + return r + })), i.d(t, "isSingleLayout", (function() { + return n + })), i.d(t, "isMultipleLayout", (function() { + return o + })); + let s; + s = {}; + const r = { + ...{ + s: { + title: "1 chart", + count: 1, + sizer: (e, t) => { + if (0 !== t) throw new RangeError("invalid index"); + return e + } + } + }, + ...s + }; + + function n(e) { + return "s" === e + } + + function o(e) { + return !n(e) + } + }, + VVxS: function(e, t, i) { + "use strict"; + const { + getLogger: s + } = i("txPx"), r = s("TVLocalStorage"); + var n = function() { + try { + this.isAvailable = !0, this.localStorage = window.localStorage, this.localStorage + .setItem("tvlocalstorage.available", "true") + } catch (e) { + delete this.isAvailable, delete this.localStorage + } + this._updateLength(); + try { + this._report() + } catch (e) {} + }; + n.prototype._report = function() { + if (this.isAvailable) { + const e = 10, + t = []; + for (let e = 0; e < this.localStorage.length; e++) { + const i = this.key(e); + t.push({ + key: i, + length: String(this.getItem(i)).length + }) + } + t.sort((e, t) => t.length - e.length); + const i = t.slice(0, e); + t.sort((e, t) => t.key.length - e.key.length); + const s = t.slice(0, e); + r.logNormal("Total amount of keys in Local Storage: " + this.length), r.logNormal( + `Top ${e} keys with longest values: ${JSON.stringify(i)}`), + r.logNormal(`Top ${e} longest key names: ${JSON.stringify(s)}`); + try { + navigator.storage.estimate().then(e => { + r.logNormal("Storage estimate: " + JSON.stringify(e)) + }) + } catch (e) {} + } + }, n.prototype.length = 0, n.prototype.isAvailable = !1, n.prototype.localStorage = { + "tvlocalstorage.available": "false" + }, n.prototype._updateLength = function() { + if (this.isAvailable) this.length = this.localStorage.length; + else { + var e, t = 0; + for (e in this.localStorage) this.localStorage.hasOwnProperty(e) && t++; + this.length = t + } + }, n.prototype.key = function(e) { + return this.isAvailable ? this.localStorage.key(e) : Object.keys(this.localStorage)[e] + }, n.prototype.getItem = function(e) { + return this.isAvailable ? this.localStorage.getItem(e) : void 0 === this.localStorage[ + e] ? null : this.localStorage[e] + }, n.prototype.setItem = function(e, t) { + this.isAvailable ? this.localStorage.setItem(e, t) : this.localStorage[e] = t, this + ._updateLength() + }, n.prototype.removeItem = function(e) { + this.isAvailable ? this.localStorage.removeItem(e) : delete this.localStorage[e], this + ._updateLength() + }, n.prototype.clear = function() { + this.isAvailable ? this.localStorage.clear() : this.localStorage = {}, this + ._updateLength() + }; + var o = function(e) { + this.storage = e + }; + o.prototype.getItem = function(e) { + return Promise.resolve(this.storage.getItem(e)) + }, o.prototype.setItem = function(e, t) { + return Promise.resolve(this.storage.setItem(e, t)) + }, window.TVLocalStorage = new n, window.TVLocalStorageAsync = new o(window.TVLocalStorage), + e.exports = { + TVLocalStorage: window.TVLocalStorage, + TVLocalStorageAsync: window.TVLocalStorageAsync + } + }, + VaSN: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "lastEventIsTouch", (function() { + return n + })), i.d(t, "lastEventIsMouse", (function() { + return o + })), i.d(t, "setLastEventIsTouch", (function() { + return a + })); + var s = i("qFKp"); + let r = Object(s.supportTouch)(); + + function n() { + return r + } + + function o() { + return r + } + + function a(e) { + r = e + } + }, + VdBB: function(e, t, i) { + "use strict"; + + function s(e, t, i) { + if (e.isTouch) { + if (void 0 !== i) return !0 + } else if (void 0 !== t) return !0; + return !1 + } + + function r(e, t, i) { + if (e.isTouch) { + if (void 0 !== i) return i(e), !0 + } else if (void 0 !== t) return t(e), !0; + return !1 + } + + function n(e, t, i, s) { + return void 0 !== t.executeDefaultAction && (e.isTouch ? Boolean(t.executeDefaultAction[ + s]) : Boolean(t.executeDefaultAction[i])) + } + var o; + i.r(t), i.d(t, "hasMouseOrTouchHandler", (function() { + return s + })), i.d(t, "tryCallHandler", (function() { + return r + })), i.d(t, "shouldDefaultActionBeExecuted", (function() { + return n + })), i.d(t, "AreaName", (function() { + return o + })), i.d(t, "HitTestResult", (function() { + return a + })), + function(e) { + e.Style = "Style", e.Text = "Text", e.SourceItemMove = "SourceItemMove" + }(o || (o = {})); + class a { + constructor(e, t, i) { + this._result = e, this._data = t || null, this._eraseMarker = i + } + result() { + return this._result + } + data() { + return this._data + } + hasPressedMoveHandler(e) { + return null !== this._data && s(e, this._data.pressedMouseMoveHandler, this._data + .touchMoveHandler) + } + tryCallMouseDownOrTouchStartHandler(e) { + return null !== this._data && r(e, this._data.mouseDownHandler, this._data + .touchStartHandler) + } + tryCallMouseUpOrTouchEndHandler(e) { + return null !== this._data && r(e, this._data.mouseUpHandler, this._data + .touchEndHandler) + } + tryCallMouseEnterHandler(e) { + return null !== this._data && r(e, this._data.mouseEnterHandler) + } + tryCallMouseLeaveHandler(e) { + return null !== this._data && r(e, this._data.mouseLeaveHandler) + } + tryCallMouseMoveHandler(e) { + return null !== this._data && r(e, this._data.mouseMoveHandler) + } + tryCallClickOrTapHandler(e) { + return null !== this._data && r(e, this._data.clickHandler, this._data.tapHandler) + } + tryCallDblClickOrDblTapHandler(e) { + return null !== this._data && r(e, this._data.doubleClickHandler, this._data + .doubleTapHandler) + } + tryCallContextMenuHandler(e) { + return null !== this._data && r(e, this._data.contextMenuHandler, this._data + .touchContextMenuHandler) + } + eraseMarker() { + return this._eraseMarker + } + } + a.MOVEPOINT_BACKGROUND = 1, a.REGULAR = 2, a.MOVEPOINT = 3, a.CHANGEPOINT = 4, a.CUSTOM = 5 + }, + Vdly: function(e, t, i) { + "use strict"; + (function(e) { + i("qFKp"); + i("wVAQ").fetch; + var t = i("dTSQ").regExpEscape, + s = i("FBuY").TVXWindowEvents, + r = i("VVxS").TVLocalStorage, + n = i("aIyQ"), + o = i("Kxc7"), + a = ["s.tradingview.com", "betacdn.tradingview.com"], + l = o.enabled("use_localstorage_for_settings"), + c = window.TVSettings = function() { + var e = !1, + i = null; + + function h() { + return !i && l + } + try { + e = !TradingView.onWidget() && parent && parent !== window && !!parent + .IS_DEMO_PAGE + } catch (e) {} + if (e) { + var u = { + "widgetbar.layout-settings": { + widgets: {}, + settings: { + minimized: !0 + } + }, + notShowMainWizard: !0 + }, + d = function(e, t, i) { + var s = u[e]; + return null == s ? t : s + }, + p = function() {}; + return { + loaded: !1, + loadedModel: !1, + getValue: d, + getJSON: d, + getBool: d, + getFloat: d, + getInt: d, + setValue: p, + setJSON: p, + remove: p, + keys: function() { + return Object.keys(u) + }, + keysMask: function() { + return [] + }, + sync: p, + onSync: { + subscribe: function() {} + } + } + } + window.environment; + var _, m = TradingView.onWidget() ? "tradingview-widget" : "tradingview", + f = m + ".", + g = {}, + b = [/^widgetbar\.widget\.watchlist.+/, /.+quicks$/, + /^widgetbar\.layout-settings$/, /^ChartSideToolbarWidget\.visible$/, + /^onwidget\.watchlist$/, /^domepanel.visible$/, /^orderpanel.visible$/, + /^chart\.favoriteDrawings$/, /^chart\.favoriteDrawingsPosition$/, + /^loadChartDialog.favorites$/, + /^ChartFavoriteDrawingToolbarWidget\.visible/, + /^trading\.chart\.proterty$/, /^trading_floating_toolbar\.position$/, + /^trading\.orderWidgetMode\./, /^symbolWatermark$/, + /^pinereference\.size$/, /^pinereference\.position$/, /^hint\.+/, + /^ChartDrawingToolbarWidget\.visible/ + ]; + const v = ["current_theme.name"]; + + function S(e) { + return f + e + } + + function y(e) { + return e.substring(f.length) + } + + function w(e, t) { + var i = g[e]; + return null == i ? t : i + } + + function P(e, t, i) { + i = i || {}; + var s = "" + t; + return g[e] !== s && (g[e] = s, x(e)), i.forceFlush && !_ && (_ = + setTimeout((function() { + _ = void 0, T() + }), 10)), c + } + + function C(e, t) { + return t = t || {}, null != g[e] && (delete g[e], x(e)), t.forceFlush && + T(), c + } + + function x(e) { + if (i) null == g[e] ? i.removeValue(e) : i.setValue(e, g[e]); + else if (h()) try { + null == g[e] ? r.removeItem(S(e)) : r.setItem(S(e), g[e]) + } catch (e) {} else 0; + s.emit("settings", JSON.stringify({ + key: e, + value: g[e] + })) + } + + function T(e) {} + + function I() { + return Object.keys(g) + } + + function M(e) { + for (var t = 0; t < b.length; ++t) + if (b[t].exec(e)) return !0; + return !1 + } + + function O(e) { + return e.substring(0, f.length) === f + } + + function L(e) { + g = {}; + const t = 0 === Object.keys(e).length; + t || function(e) { + Object.keys(e).forEach((function(t) { + g[t] = e[t] + "" + })) + }(e), + function(e) { + for (var t = r.length; t--;) { + var i = r.key(t); + i && O(i) && ((e || v.includes(y(i))) && P(y(i), r.getItem(i)), + r.removeItem(i)) + } + }(t) + } + s.on("settings", (function(e) { + var t = JSON.parse(e); + null == t.value ? delete g[t.key] : g[t.key] = t.value + })); + var A = new n; + return document.addEventListener("visibilitychange", (function() { + "hidden" === document.visibilityState || document.hidden + })), window.addEventListener("beforeunload", (function() {})), { + loaded: !1, + loadedModel: !1, + getValue: w, + getJSON: function(e, t) { + var i = w(e, void 0); + if (null == i) return t; + try { + return JSON.parse(i) + } catch (i) { + return C(e), t + } + }, + getBool: function(e, t) { + var i = w(e); + return null == i ? t : !(!i || "false" === i || 0 == +i) + }, + getFloat: function(e, t, i) { + var s = w(e, void 0); + if (null == s) return t; + var r = parseFloat(s); + if (!isFinite(r)) throw new TypeError('"' + s + + '" is not float (key: "' + e + '")'); + return r + }, + getInt: function(e, t, i) { + var s = w(e, void 0); + if (null == s) return t; + var r = parseInt(s, 10); + if (!isFinite(r)) throw new TypeError('"' + s + + '" is not int (key: "' + e + '")'); + return r + }, + setValue: P, + setJSON: function(e, t, i) { + return P(e, JSON.stringify(t), i), c + }, + remove: C, + keys: I, + keysMask: function(e, i) { + for (var s = I(), r = [], n = (e = new RegExp("^" + t(e) + .replace(/\\\*\\\*/gi, ".+").replace(/\\\*/gi, + "[^.]+") + "$", "gi"), s.length - 1); n >= 0; n--) e + .test(s[n]) && r.push(s[n]), e.lastIndex = 0; + return r + }, + sync: function(e) { + null !== e ? (i ? L(i.initialSettings || {}) : h() ? ( + function() { + if (TradingView.onWidget() && a.includes(window + .location.host)) + for (var e = r.length; e--;) { + var t = r.key(e); + if (0 === t.indexOf("tradingview.")) { + var i = t.replace("tradingview.", + m + "."); + r.setItem(i, r.getItem(t)), r + .removeItem(t) + } + } + }(), + function() { + for (const e of v) g[e] && !r.getItem(S(e)) && r + .setItem(S(e), g[e]) + }(), + function() { + g = {}; + for (var e = !o.enabled( + "save_chart_properties_to_local_storage" + ), t = r.length; t--;) { + var i = r.key(t); + if (i && O(i)) { + var s = i.substring(f.length); + e && !M(s) || (g[s] = r.getItem(i)) + } + } + }()) : L(e || {}), A.fire()) : !0 + }, + onSync: A, + setSettingsAdapter: function(e) { + i = e + } + } + }(); + e && e.exports && (e.exports = c) + }).call(this, i("YuTi")(e)) + }, + VgjZ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PriceAxisRendererOptionsProvider", (function() { + return n + })); + var s = i("XlJ7"), + r = i("zDbI"); + class n { + constructor(e) { + this._rendererOptions = { + borderSize: 1, + offsetSize: 5, + fontSize: NaN, + font: "", + color: "", + paneBackgroundColor: "", + paddingBottom: 0, + paddingInner: 0, + paddingOuter: 0, + paddingTop: 0, + lineSpacing: 0 + }, this._chartModel = e + } + options() { + const e = this._rendererOptions, + t = this._chartModel.properties(), + i = t.scalesProperties.fontSize.value(); + return e.fontSize !== i && (e.fontSize = i, e.font = Object(s.makeFont)(i, r + .CHART_FONT_FAMILY, ""), e.paddingTop = 2.5 / 12 * i, e.paddingBottom = + e.paddingTop, e.paddingInner = i / 12 * e.offsetSize, e.paddingOuter = i / + 12 * e.offsetSize, e.lineSpacing = 2 / 12 * i), e.color = t.scalesProperties + .textColor.value(), e.paneBackgroundColor = t.paneProperties.background.value(), + this._rendererOptions + } + } + }, + ViuT: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("Kxc7"), + n = i("jCNj"), + o = i("Y7w9"), + a = i("OLhd"), + l = i("tqok"), + c = i("/bs+"); + + function h(e) { + return 60 * e * 60 * 1e3 + } + + function u(e) { + return 60 * e * 1e3 + } + const d = [{ + divisor: 1, + weight: 18 + }, { + divisor: (p = 1, 1e3 * p), + weight: 19 + }, { + divisor: u(1), + weight: 20 + }, { + divisor: u(5), + weight: 21 + }, { + divisor: u(30), + weight: 22 + }, { + divisor: h(1), + weight: 30 + }, { + divisor: h(3), + weight: 31 + }, { + divisor: h(6), + weight: 32 + }, { + divisor: h(12), + weight: 33 + }]; + var p; + + function _(e, t) { + if (null !== t) { + if (e.getUTCFullYear() !== t.getUTCFullYear()) return 70; + if (e.getUTCMonth() !== t.getUTCMonth()) return 60; + if (e.getUTCDate() !== t.getUTCDate()) return 50; + const i = t.getTime(), + s = e.getTime(); + for (let e = d.length - 1; e >= 0; --e) + if (Math.floor(i / d[e].divisor) !== Math.floor(s / d[e].divisor)) return d[e] + .weight + } + return 18 + } + + function m(e, t, i = 0) { + if (0 === e.length) return []; + let s = i, + r = i; + const n = []; + for (; s < e.length;) r >= t.length ? (n.push({ + old: s, + new: l.INVALID_TIME_POINT_INDEX + }), s++) : e[s].timeMs === t[r].timeMs ? (s !== r && n.push({ + old: s, + new: r + }), s++, r++) : e[s].timeMs < t[r].timeMs ? (n.push({ + old: s, + new: l.INVALID_TIME_POINT_INDEX + }), s++) : r++; + return n.sort((e, t) => { + if (e.new === t.new && e.new === l.INVALID_TIME_POINT_INDEX) return e.old - t + .old; + if (e.new === l.INVALID_TIME_POINT_INDEX) return -1; + if (t.new === l.INVALID_TIME_POINT_INDEX) return 1; + const i = e.old - e.new, + s = t.old - t.new; + return i > 0 ? s > 0 ? e.old - t.old : -1 : s < 0 ? t.new - e.new : 1 + }) + } + + function f(e, t) { + return { + span: e.markWeight, + time: e.displayTime, + index: t + } + } + i.d(t, "SessionTimeScale", (function() { + return b + })); + const g = r.enabled("end_of_period_timescale_marks"); + class b { + constructor() { + this._completed = !0, this._mainSymbolExtrapolator = null, this + ._pointDataByTimePoint = new Map, this._seriesIds = new Set, this + ._displayTimezone = null, this._minFutureBarsCount = 0, this + ._sortedTimePoints = [] + } + destroy() { + this.clearTimeScale() + } + setCompleted(e) { + this._completed = e + } + isCompleted() { + return this._completed + } + clearTimeScale() { + return this._pointDataByTimePoint.clear(), this._seriesIds.clear(), this + ._sortedTimePoints = [], { + baseIndex: 0, + pointsIndex: 0, + indexChange: [], + marks: [], + points: [] + } + } + indexOfTime(e) { + if (0 === this._sortedTimePoints.length) return null === this + ._mainSymbolExtrapolator ? null : this._mainSymbolExtrapolator.indexOfTime( + e); + if (e < this._sortedTimePoints[0].timeMs) { + if (null === this._mainSymbolExtrapolator) return null; + const t = this._mainSymbolExtrapolator.indexOfTime(e), + i = this._mainSymbolExtrapolator.indexOfTime(this._sortedTimePoints[0] + .timeMs); + if (null === t || null === i) return null; + let s = t.index - i.index; + return i.timeMs !== this._sortedTimePoints[0].timeMs && (s -= 1), { + index: s, + timeMs: t.timeMs + } + } + if (e > this._sortedTimePoints[this._sortedTimePoints.length - 1].timeMs) { + if (null === this._mainSymbolExtrapolator) return null; + const t = this._mainSymbolExtrapolator.indexOfTime(e), + i = this._mainSymbolExtrapolator.indexOfTime(this._sortedTimePoints[this + ._sortedTimePoints.length - 1].timeMs); + if (null === t || null === i) return null; + const s = t.index - i.index - 1; + return { + index: this._sortedTimePoints.length + s, + timeMs: t.timeMs + } + } + let t = Object(o.lowerbound)(this._sortedTimePoints, e, (e, t) => e.timeMs < t); + return this._sortedTimePoints[t].timeMs !== e && (t -= 1), { + index: t, + timeMs: this._sortedTimePoints[t].timeMs + } + } + setMainSymbolExtrapolator(e) { + this._mainSymbolExtrapolator = e, this._updateFutureBars(), this._fillPointsData( + this._sortedTimePoints, 0) + } + setMinFutureBarsCount(e) { + this._minFutureBarsCount = e, this._updateFutureBars() + } + minFutureBarsCount() { + return this._minFutureBarsCount + } + firstFutureBarIndex() { + return this._sortedTimePoints.length + } + firstSessionBarIndex() { + return 0 === this._sortedTimePoints.length ? null : 0 + } + lastSessionBarIndex() { + return 0 === this._sortedTimePoints.length ? null : this._sortedTimePoints.length - + 1 + } + tickMarks(e = 0) { + const t = this.firstFutureBarIndex(); + Object(s.assert)(e <= t, "tickmarks cannot be filtered in the future"); + const i = this._futureBars().map((e, t) => ({ + timeMs: e, + markWeight: 0, + displayTime: NaN + })); + this._fillPointsData(i, 0, 0 !== this._sortedTimePoints.length ? this + ._sortedTimePoints[this._sortedTimePoints.length - 1].displayTime : null); + const r = []; + for (let t = e; t < this._sortedTimePoints.length; ++t) r.push(f(this + ._sortedTimePoints[t], t)); + const n = i.map((e, i) => f(e, i + t)); + return r.concat(n) + } + setTimezone(e) { + this._displayTimezone = "exchange" === e ? null : Object(n.get_timezone)(e), this + ._fillPointsData(this._sortedTimePoints, 0) + } + fillIndexesInRows(e) { + if (0 === e.length) return; + let t = -1, + i = Object(o.lowerbound)(this._sortedTimePoints, Math.round(1e3 * e[0].value[ + 0]), (e, t) => e.timeMs < t); + for (const r of e) { + const e = Math.round(1e3 * r.value[0]); + for (; i < this._sortedTimePoints.length && this._sortedTimePoints[i].timeMs < + e;) i += 1; + i !== this._sortedTimePoints.length && this._sortedTimePoints[i].timeMs === e || + (i -= 1), Object(s.assert)(i !== t, "data must have unique times"), t = i, r + .index = i + } + Object(s.assert)(i < this._sortedTimePoints.length, + "data must be within a data range") + } + convertTimesToIndexes(e) { + if (0 === e.length) return []; + let t = -1, + i = Object(o.lowerbound)(this._sortedTimePoints, e[0], (e, t) => e.timeMs < t); + return e.map(e => { + for (; i < this._sortedTimePoints.length && this._sortedTimePoints[i] + .timeMs < e;) i += 1; + if (0 === i && e < this._sortedTimePoints[0].timeMs) return l + .INVALID_TIME_POINT_INDEX; + if (i >= this._sortedTimePoints.length) { + const t = this.indexOfTime(e); + if (null === t) return l.INVALID_TIME_POINT_INDEX; + i = t.timeMs !== e ? t.index + 1 : t.index + } + return Object(s.assert)(i > t, "data must have unique sorted times"), + t = i, i + }) + } + firstSeriesBarTime() { + return 0 === this._sortedTimePoints.length ? null : this._sortedTimePoints[0].timeMs + } + replaceSeriesBarsTimesTail(e, t) { + if (0 === t.length) return null; + if (!this._seriesIds.has(e)) return this.setSeriesBarsTimes(e, t); + const i = [], + s = Object(o.lowerbound)(this._sortedTimePoints, t[0], (e, t) => e.timeMs < t); + for (let t = s; t < this._sortedTimePoints.length; ++t) { + const s = this._sortedTimePoints[t]; + s.pointData.series.delete(e) && 0 === s.pointData.series.size && i.push(s) + } + const r = this._addBarsTimesToSeries(e, t, !0); + this._cleanupPointsData(i); + const n = r.map(e => ({ + timeMs: e.timeMs, + pointData: e.pointData, + markWeight: 0, + displayTime: NaN + })); + for (let e = s; e < this._sortedTimePoints.length; ++e) { + const t = this._sortedTimePoints[e]; + 0 !== t.pointData.series.size && n.push(t) + } + n.sort((e, t) => e.timeMs - t.timeMs); + const a = this._updateTimeScalePointsTail(n); + return this._applyTimeScaleChanges(a, !1) + } + setSeriesBarsTimes(e, t) { + let i = 0 !== this._pointDataByTimePoint.size; + if (this._seriesIds.has(e)) + if (1 === this._seriesIds.size) i = !1, this._pointDataByTimePoint.clear(); + else + for (const t of this._sortedTimePoints) t.pointData.series.delete(e); + this._addBarsTimesToSeries(e, t, !1); + const s = this._seriesIds.size; + 0 === t.length ? this._seriesIds.delete(e) : this._seriesIds.add(e), i && this + ._cleanupPointsData(this._sortedTimePoints); + const r = s < this._seriesIds.size, + n = s > this._seriesIds.size, + o = r && 2 === this._seriesIds.size || n && 1 === this._seriesIds.size, + a = []; + this._pointDataByTimePoint.forEach((e, t) => { + a.push({ + markWeight: 0, + timeMs: t, + displayTime: NaN, + pointData: e + }) + }), a.sort((e, t) => e.timeMs - t.timeMs); + const l = this._updateTimeScalePoints(a); + return this._applyTimeScaleChanges(l, o) + } + _updateFutureBars() { + if (0 === this._minFutureBarsCount || null === this._mainSymbolExtrapolator) return; + if (0 !== this._sortedTimePoints.length) { + const e = this._sortedTimePoints[this._sortedTimePoints.length - 1].timeMs; + this._mainSymbolExtrapolator.ensureExtrapolatedToFutureTime(e) + } + const e = this._futureBarsFirstPointIndex(); + this._mainSymbolExtrapolator.setMinFutureBarsCount(e + this._minFutureBarsCount) + } + _addBarsTimesToSeries(e, t, i) { + const s = i ? [] : null; + for (const i of t) { + const t = this._pointDataByTimePoint.get(i); + if (void 0 === t) { + const t = new Set; + t.add(e); + const r = { + index: 0, + series: t + }; + this._pointDataByTimePoint.set(i, r), null !== s && s.push({ + timeMs: i, + pointData: r + }) + } else t.series.add(e) + } + return s + } + _futureBarsFirstPointIndex() { + if (null === this._mainSymbolExtrapolator || 0 === this._sortedTimePoints.length) + return 0; + const e = this._mainSymbolExtrapolator.futureBars(); + return Object(o.upperbound_int)(e, this._sortedTimePoints[this._sortedTimePoints + .length - 1].timeMs) + } + _futureBars() { + return null === this._mainSymbolExtrapolator ? [] : this._mainSymbolExtrapolator + .futureBars().slice(this._futureBarsFirstPointIndex(), this + ._futureBarsFirstPointIndex() + 1e3) + } + _cleanupPointsData(e) { + for (const t of e) 0 === t.pointData.series.size && this._pointDataByTimePoint + .delete(t.timeMs) + } + _updateTimeScalePoints(e) { + let t = -1; + for (let i = 0; i < this._sortedTimePoints.length && i < e.length; ++i) { + const s = this._sortedTimePoints[i], + r = e[i]; + if (s.timeMs !== r.timeMs) { + t = i; + break + } + r.markWeight = s.markWeight, r.displayTime = s.displayTime + } + if (t = v(t, this._sortedTimePoints.length, e.length), -1 === t) return null; + for (let i = t; i < e.length; ++i) { + e[i].pointData.index = i + } + this._fillPointsData(e, t); + const i = m(this._sortedTimePoints, e, t); + return this._sortedTimePoints = e, this._updateFutureBars(), { + pointsIndex: t, + indexChange: i + } + } + _updateTimeScalePointsTail(e) { + if (0 === e.length) return null; + const t = Object(o.lowerbound)(this._sortedTimePoints, e[0].timeMs, (e, t) => e + .timeMs < t); + let i = -1; + for (let s = 0; s < e.length; ++s) { + const r = e[s], + n = t + s; + if (r.pointData.index = n, n >= this._sortedTimePoints.length) continue; + this._sortedTimePoints[n].timeMs !== r.timeMs && -1 === i && (i = n) + } + const s = t + e.length; + if (i = v(i, this._sortedTimePoints.length, s), -1 === i) return null; + this._fillPointsData(e, 0, 0 === t || 0 === this._sortedTimePoints.length ? null : + this._sortedTimePoints[t - 1].displayTime); + const r = m(this._sortedTimePoints.slice(t), e).map(e => ({ + old: e.old + t, + new: e.new === l.INVALID_TIME_POINT_INDEX ? e.new : e.new + t + })); { + const i = this._sortedTimePoints; + let r = 0; + for (; t + r < i.length && r < e.length;) i[t + r] = e[r], r += 1; + for (; r < e.length; ++r) i.push(e[r]); + i.length = s + } + return this._updateFutureBars(), { + pointsIndex: i, + indexChange: r + } + } + _getBaseIndex() { + return Math.max(0, this._sortedTimePoints.length - 1) + } + _fillPointsData(e, t, i = null) { + this._fillDiplayTimeForPoints(e, t), + function(e, t = 0, i = null) { + let s = 0 === t || 0 === e.length ? i : e[t - 1].displayTime, + r = null !== s ? new Date(1e3 * s) : null, + n = 0; + for (let i = t; i < e.length; ++i) { + const t = e[i], + o = new Date(1e3 * t.displayTime); + t.markWeight = _(o, r), n += t.displayTime - (s || t.displayTime), r = + o, s = t.displayTime + } + if (0 === t && e.length > 1 && null === i) { + const t = Math.ceil(n / (e.length - 1)), + i = new Date(1e3 * (e[0].displayTime - t)); + e[0].markWeight = _(new Date(1e3 * e[0].displayTime), i) + } + }(e, t, i) + } + _applyTimeScaleChanges(e, t) { + if (null === e) return t ? (this._fillPointsData(this._sortedTimePoints, 0), { + points: [], + pointsIndex: 0, + baseIndex: this._getBaseIndex(), + indexChange: [], + marks: this.tickMarks(0) + }) : null; + let i = e.pointsIndex; + if (0 !== i && t && (this._fillPointsData(this._sortedTimePoints, 0), i = 0), 0 === + this._sortedTimePoints.length) return { + baseIndex: 0, + pointsIndex: 0, + indexChange: [], + marks: [], + points: [] + }; + const s = []; + for (let t = e.pointsIndex; t < this._sortedTimePoints.length; ++t) s.push(this + ._sortedTimePoints[t].timeMs / 1e3); + return { + ...e, + points: s, + baseIndex: this._getBaseIndex(), + marks: this.tickMarks(i) + } + } + _fillDiplayTimeForPoints(e, t = 0) { + if (null === this._mainSymbolExtrapolator) return; + const i = this._mainSymbolExtrapolator.interval(), + s = this._mainSymbolExtrapolator.barBuilder(), + r = this._mainSymbolExtrapolator.symbolInfo(), + o = null === this._displayTimezone ? Object(n.get_timezone)(r.timezone) : this + ._displayTimezone, + l = 1 === this._seriesIds.size, + h = i.isDWM(), + u = h ? Object(a.createDwmAligner)(i.value(), { + timezone: r.timezone, + corrections: l ? r.corrections : void 0, + session_holidays: l ? r.session_holidays : void 0, + session: l ? r.session : "24x7" + }) : null, + d = !h; + for (let r = t; r < e.length; ++r) { + let t = e[r].timeMs / 1e3; + g && (t = Object(c.a)(s, t, i)), null !== u && (t = Math.floor(u + .timeToExchangeTradingDay(1e3 * t) / 1e3)), d && (t = Math.floor(Object( + n.utc_to_cal_ts)(o, 1e3 * t) / 1e3)), e[r].displayTime = t + } + } + } + + function v(e, t, i) { + return -1 === e && t !== i && (e = i < t ? Math.max(0, i - 1) : t), e + } + }, + Vs8b: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isMainSeriesState", (function() { + return r + })), i.d(t, "isStudyState", (function() { + return n + })), i.d(t, "isLineToolState", (function() { + return o + })), i.d(t, "isZOrderedSourceState", (function() { + return a + })); + var s = i("CW80"); + + function r(e) { + return "MainSeries" === e.type + } + + function n(e) { + return Boolean(e.type) && e.type.toLowerCase().startsWith("study") + } + + function o(e) { + return Boolean(e.type) && Object(s.isLineToolName)(e.type) + } + + function a(e) { + return r(e) || n(e) || o(e) + } + }, + "W+6j": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + i("bmVy"); + var s = i("ww0J"); + window.t("Fundamental studies are no longer available on charts"); + class r extends s.a { + constructor(e, t) { + super(e, t), this._study = e + } + color() { + return this._study.isFailed() || this._study.metaInfo && this._study.metaInfo() + .isTVScriptStub ? "#ff0000" : super.color() + } + sourceStatusText() { + this._study.status(); + return super.sourceStatusText() + } + } + }, + WIS0: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "DatafeedRequestsCachedProcessor", (function() { + return _ + })); + var s = i("Eyy1"), + r = i("LxhU"), + n = i("Y7w9"), + o = i("ocLq"), + a = i("Kxc7"), + l = i("IiTo"), + c = i("OLhd"), + h = i("5mo2"); + i("HbRj"); + + function u(e, t) { + return e.ticker + (e.currency_code ? "_#_" + e.currency_code : "") + (e.unit_id ? "_#_" + e + .unit_id : "") + "_#_" + t + } + + function d(e) { + return new Date(e).toISOString() + } + class p { + constructor(e, t, i, s, n, o) { + this._cache = { + bars: [] + }, this._nextSubscriptionId = 0, this._pendingSubscribers = [], this + ._subscribers = [], this._requesting = !1, this._leftDate = null, this + ._nextTime = null, this._realtimeOn = !1, this._endOfData = !1, this + ._resetCacheTimeout = null, this._errorMessage = null, this._destroyed = !1, + this._emptyResponsesCount = 0, this._datafeed = e, this._symbolInfo = t, this + ._interval = r.Interval.parse(i), this._resolution = this._interval.value(), + this._dwmAligner = n, this._serverTimeOffsetGetter = s, this + ._resetCacheTimePeriod = void 0 === o ? 1e4 : o, this._sessionSpec = new h + .SessionSpec(t.timezone, t.session, t.session_holidays, t.corrections), this + ._updateDatesFromExpirationDate() + } + destroy() { + 0 !== this._subscribers.length && console.warn("Destroying with not-empty state"), + this._clearResetCacheTimeout(), this._unsubscribeRealtime(), this._purgeCache(), + delete this._datafeed, this._destroyed = !0 + } + addSubscription(e, t, i) { + const s = this._getNextSubscriptionId(); + this._pendingSubscribers.push({ + key: s, + range: e, + onHistoryCallback: t, + onErrorCallback: i + }), r.Interval.isDWM(this._resolution) && void 0 !== e.to && null !== this + ._dwmAligner && e.to % 864e5 && console.warn( + `Internal error: invalid date for DWM resolution ${d(e.to)}, expected time without a time part` + ), this._clearResetCacheTimeout(); + return setTimeout(() => { + this._destroyed || this._processPendingSubscribers() + }, 0), s + } + removeSubscription(e) { + const t = this._pendingSubscribers.find(t => t.key === e); + if (t) return void this._pendingSubscribers.splice(this._pendingSubscribers.indexOf( + t), 1); + const i = this._subscribers.find(t => t.key === e); + if (i) return this._subscribers.splice(this._subscribers.indexOf(i), 1), void(this + ._subscribers.length || (this._resetCacheTimeout = setTimeout(() => { + this._resetCacheTimeout = null, this._purgeCache(), this + ._unsubscribeRealtime() + }, this._resetCacheTimePeriod))); + console.warn("Unknown subscription symbol={0}, resolution={1}, key={2}".format(this + ._symbolInfo.name, this._resolution, e)) + } + _logMessage(e, t) { + if (a.enabled("charting_library_debug_mode") || t) { + const t = this._symbolInfo.currency_code, + i = this._symbolInfo.unit_id; + console.log( + `FEED [${this._symbolInfo.name}|${this._resolution}${t ? "|" + t : ""}${i ? "|" + i : ""}]: ${e}` + ) + } + } + _clearResetCacheTimeout() { + null !== this._resetCacheTimeout && (clearTimeout(this._resetCacheTimeout), this + ._resetCacheTimeout = null) + } + _purgeCache() { + this._logMessage("Reset cache"), this._cache = { + bars: [] + }, this._errorMessage = null, this._leftDate = null, this._endOfData = !1, this + ._updateDatesFromExpirationDate() + } + _updateDatesFromExpirationDate() { + void 0 !== this._symbolInfo.expiration_date && (this._nextTime = 1e3 * this + ._symbolInfo.expiration_date, this._leftDate = 1e3 * (this._symbolInfo + .expiration_date + 1)) + } + _dealignTime(e) { + return null === this._dwmAligner ? e : this._dwmAligner.timeToExchangeTradingDay(e) + } + _normalizeRange(e) { + const t = void 0 !== e.to ? e.to : this._dealignTime(this._now()); + if (0 === this._cache.bars.length || void 0 !== e.to && t <= Object(s.ensureNotNull) + (this._leftDate)) return { + countBack: e.countBack, + to: t + }; + const i = null !== this._dwmAligner ? this._dwmAligner.timeToSessionStart(t) : t, + r = Object(n.lowerbound)(this._cache.bars, i, (e, t) => e.time < t); + return e.countBack < r ? { + countBack: 0, + to: 0 !== e.countBack && r <= this._cache.bars.length ? this._dealignTime( + this._cache.bars[r - e.countBack].time) : t + } : { + countBack: e.countBack - r, + to: this._dealignTime(this._cache.bars[0].time) + } + } + _processPendingSubscribers() { + const e = this._pendingSubscribers; + if (!e.length) return; + if (this._requesting) return void this._logMessage( + "Processing is skipped due active request"); + if (this._logMessage("Processing pending subscribers, count=" + e.length), this + ._errorMessage) { + const t = this._errorMessage; + return this._logMessage("Return error: " + t), this._pendingSubscribers = [], + void e.forEach(e => { + e.onErrorCallback(t) + }) + } + let t = this._normalizeRange(e[0].range); + for (const i of e.map(e => this._normalizeRange(e.range)))(i.to < t.to || i.to === t + .to && i.countBack > t.countBack) && (t = i); + this._logMessage( + `Leftmost subscriber requires ${t.countBack} bars prior ${d(t.to)}`); + !(null === this._leftDate || t.to < this._leftDate && (null === this._nextTime || t + .to < this._nextTime) || 0 !== t.countBack) || this._endOfData ? (this + ._pendingSubscribers = [], e.forEach(e => { + const t = this._moveSubscriberToRealtime(e); + this._returnHistoryDataToSubscriber(e, t) + }), this._subscribeRealtimeIfNeeded()) : this._ensureRequestedTo(t) + } + _moveSubscriberToRealtime(e) { + const t = { + key: e.key, + onHistoryCallback: e.onHistoryCallback, + barset: null + }; + return this._subscribers.push(t), t + } + _isSymbolExpired() { + return this._symbolInfo.expired || void 0 !== this._symbolInfo.expiration_date + } + _subscribeRealtimeIfNeeded() { + !this._subscribers.length || this._realtimeOn || this._isSymbolExpired() || this + ._subscribeRealtime() + } + _subscribeRealtime() { + if (this._symbolInfo.expired || this._realtimeOn) return; + this._realtimeOn = !0, this._datafeed.subscribeBars(this._symbolInfo, this + ._resolution, e => { + null !== this._dwmAligner && (e.time = this._dwmAligner + .timeToSessionStart(e.time)), this._putToCacheNewBar(e), this + ._subscribers.forEach(t => { + const i = t.barset; + if (null === i) throw new Error( + "subscriber.barset is null"); + i.add(e), t.onHistoryCallback(i) + }) + }, u(this._symbolInfo, this._resolution), () => { + this._unsubscribeRealtime(); + const e = this._leftDate; + this._purgeCache(), null !== e && this._ensureRequestedTo({ + to: e, + countBack: 0 + }) + }), this._logMessage("Subscribed to realtime") + } + _unsubscribeRealtime() { + !this._isSymbolExpired() && this._realtimeOn && (this._datafeed.unsubscribeBars(u( + this._symbolInfo, this._resolution)), this._logMessage( + "Unsubscribed from realtime"), this._realtimeOn = !1) + } + _returnHistoryDataToSubscriber(e, t) { + const i = this._normalizeRange(e.range), + s = this._createBarsetForRange(i); + s.count() > 0 ? this._logMessage( + "Bars to return for request {0}: total {1} bars in [{2} ... {3}] ".format(e + .key, s.count(), d(s.bars[0].time), d(s.bars[s.count() - 1].time))) : + this._logMessage("Request {0}. Nothing to return.".format(e.key)), t.barset = s, + this._endOfData && null !== this._leftDate && i.to <= this._leftDate && (s + .endOfData = !0), e.onHistoryCallback(s) + } + _createBarsetForRange(e) { + const t = null !== this._dwmAligner ? this._dwmAligner.timeToSessionStart(e.to) : e + .to, + i = Object(n.lowerbound)(this._cache.bars, t, (e, t) => e.time < t), + r = new o.BarSet(this._symbolInfo, this._cache.bars.slice(Math.max(0, i - e + .countBack))); + return 0 !== r.bars.length ? r.firstLoadedTimeMs = this._dealignTime(r.bars[0] + .time) : 0 !== this._cache.bars.length ? r.firstLoadedTimeMs = this + ._dealignTime(this._cache.bars[this._cache.bars.length - 1].time) : r + .firstLoadedTimeMs = this._dealignTime(Object(s.ensureNotNull)(this._leftDate)), + r + } + _ensureRequestedTo(e) { + var t; + let i; + if (this._requesting && this._logMessage( + "Internal error: trying to call getBars while the previous request is active", + !0), null !== this._leftDate) i = this._leftDate; + else { + const e = this._now(); + if (null === this._dwmAligner) i = e; + else { + let t = this._sessionSpec.alignToNearestSessionStart(new Date(e), 1) + .getTime(); + if (t < e) { + const e = this._sessionSpec.alignToNearestSessionEnd(new Date(t), 1) + .getTime(); + t = this._sessionSpec.alignToNearestSessionStart(new Date(e + 1e3), 1) + .getTime() + } + i = this._dealignTime(t) + } + } + const s = Object(l.alignPeriodsBackForDataRequest)(this._symbolInfo.session, this + ._symbolInfo.session_holidays, this._symbolInfo.corrections, this._interval + .letter(), this._interval.multiplier(), e.countBack, Math.min(e.to, i, + null !== (t = this._nextTime) && void 0 !== t ? t : 1 / 0)); + let r = e.countBack; + if (e.to < i && (r += Object(l.getPeriodsBetweenDates)(this._symbolInfo.session, + this._symbolInfo.session_holidays, this._symbolInfo.corrections, this + ._interval.letter(), this._interval.multiplier(), e.to, i)), null !== this + ._leftDate && this._leftDate < s) return void this._processPendingSubscribers(); + const n = this._isSymbolExpired() ? 0 === this._cache.bars.length : null === this + ._leftDate; + this._requesting = !0, this._nextTime = null, this._leftDate = s; + const o = `[${d(s)} ... ${d(i)}, ${r} bars]`; + this._logMessage("Requesting data: " + o); + let a = !1; + const c = s / 1e3, + h = i / 1e3; + this._datafeed.getBars(this._symbolInfo, this._resolution, { + from: this._interval.isTicks() ? c : Math.floor(c), + to: this._interval.isTicks() ? h : Math.floor(h), + countBack: r, + firstDataRequest: n + }, (e, t) => { + if (!this._destroyed) + if (a) this._logMessage("getBars callback is already called before", + !0); + else { + if (a = !0, e.length > 0) { + const t = + ` [${d(e[0].time)} ... ${d(e[e.length - 1].time)}]`; + this._logMessage( + `Receiving bars: total ${e.length} bars in ${t}, requested range: ${o}` + ) + } else this._logMessage( + "Receiving bars: barset is empty, requested range: " + o + ); + this._requesting = !1, this._processBars(e, t) + } + }, e => { + this._destroyed || (a ? this._logMessage( + "getBars callback is already called before", !0) : (a = !0, + this._requesting = !1, this._errorMessage = e || null, this + ._processPendingSubscribers())) + }) + } + _processBars(e, t) { + this._checkBars(e), this._alignBarsTime(e), e.length > 0 ? (this + ._emptyResponsesCount = 0, this._processFullBarset(e, t)) : (this + ._emptyResponsesCount += 1, this._processEmptyBarset(t)), this + ._processPendingSubscribers() + } + _processEmptyBarset(e) { + e && e.nextTime ? (this._logMessage("Next time received: `{0}`".format(d(1e3 * e + .nextTime))), this._nextTime = 1e3 * e.nextTime) : e && e.noData ? (this + ._logMessage("EOD received"), this._setEndOfData()) : this._logMessage( + "nextTime or noData should present in metainfo when empty barset is returned" + ), 50 === this._emptyResponsesCount && (this._logMessage( + "EOD detected due 50 empty responses in a row"), this._setEndOfData()) + } + _setEndOfData() { + this._endOfData = !0, + this._cache.bars.length && (this._leftDate = this._dealignTime(this._cache.bars[ + 0].time)) + } + _processFullBarset(e, t) { + this._putToCache(e) ? null !== this._leftDate && 0 !== this._cache.bars.length && ( + this._interval.isTicks() ? this._leftDate = this._dealignTime(this._cache + .bars[0].time) : this._leftDate = Math.min(this._leftDate, this + ._dealignTime(this._cache.bars[0].time))) : this._logMessage( + "Incremental update failed. Starting full update. Returned data should be in the requested range.", + !0), t && t.nextTime ? console.warn( + "nextTime should be set when there is no data in the requested period only" + ) : t && t.noData && console.warn( + "noData should be set when there is no data in the requested period and earlier only" + ) + } + _getNextSubscriptionId() { + return this._nextSubscriptionId++ + } + _checkBars(e, t = !1) { + if (a.enabled("charting_library_debug_mode")) + for (let i = 1; i < e.length; i++) { + if (e[i].time <= e[i - 1].time) { + let s = + "Wrong bars time: time {0} of bar {1} should be more than time {2} of bar {3}" + .format(e[i].time, i, e[i - 1].time, i - 1); + t && null !== this._dwmAligner && (s += + "\nCheck that you provide DWM bars without time part, i.e. 00:00 GMT" + ), console.error(s) + } ["high", "low", "open", "close", "time"].some(t => "number" != typeof e[i] + [t] || !isFinite(e[i][t])) && console.error( + "Wrong bars values: all OHLC values should be numbers") + } + } + _putToCache(e) { + if (0 === e.length) return !0; + if (this._cache.bars.length === e.length && this._cache.bars[0].time === e[0] + .time && this._cache.bars[this._cache.bars.length - 1].time === e[e.length - 1] + .time) return this._logMessage( + "Time range of received data is the same as cached one. Skip the update." + ), !0; + if (0 !== this._cache.bars.length && e[e.length - 1].time === this._cache.bars[0] + .time && this._cache.bars.splice(0, 1), 0 !== this._cache.bars.length && e[e + .length - 1].time >= this._cache.bars[0].time) { + const t = this._cache.bars[this._cache.bars.length - 1].time === e[e.length - 1] + .time; + if (this._cache.bars = [], !t) return this._leftDate = null, !1; + this._logMessage( + "Received history up to now instead of incremental update. Return exactly what is requested." + ) + } + return this._cache.bars = [...e, ...this._cache.bars], this._checkBars(this._cache + .bars, !0), !0 + } + _putToCacheNewBar(e) { + const t = this._cache.bars.length, + i = e.time, + s = 0 === t ? NaN : this._cache.bars[t - 1].time; + 0 === t || s < i ? this._cache.bars.push(e) : s === i ? (this._interval.isTicks() && + this._logMessage("Received update for the last tick bar"), this._cache.bars[ + t - 1] = e) : console.error( + "putToCacheNewBar: time violation, previous bar time: " + d(s) + + " should be less or equal to new time: " + d(i)) + } + _alignBarsTime(e) { + if (this._dwmAligner) + for (const t of e) t.time = this._dwmAligner.timeToSessionStart(t.time) + } + _now() { + return Date.now() + 1e3 * this._serverTimeOffsetGetter() + 6e4 + } + } + class _ { + constructor(e, t, i) { + this._threads = {}, this._datafeed = e, this._serverTimeOffsetGetter = t, this + ._resetCacheTimePeriod = i + } + destroy() { + this._forEachThread((e, t) => t.destroy()), this._threads = {}, delete this + ._datafeed + } + purgeCache() { + this._forEachThread((e, t) => t.destroy()), this._threads = {} + } + subscribe(e, t, i, s, r) { + const n = u(e, t); + this._threads[n] || (this._threads[n] = this._createThread(e, t)); + return n + '"' + this._threads[n].addSubscription(i, s, r) + } + unsubscribe(e) { + const t = e.split('"'); + if (2 !== t.length) return void console.warn("Wrong guid format"); + const i = t[0], + s = parseInt(t[1]); + this._threads.hasOwnProperty(i) ? this._threads[i].removeSubscription(s) : console + .warn("Data thread doesnt exist: " + e) + } + _createThread(e, t) { + return new p(this._datafeed, e, t, this._serverTimeOffsetGetter, Object(c + .createDwmAligner)(t, e), this._resetCacheTimePeriod) + } + _forEachThread(e) { + Object.keys(this._threads).forEach(t => e(t, this._threads[t])) + } + } + }, + WPQD: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()), this._trendLinePaneView = null, i.e( + "lt-pane-views").then(i.t.bind(null, "ocVb", 7)).then(({ + TrendLinePaneView: e + }) => { + this._trendLinePaneView = new e(this, this._model), this + ._setPaneViews([this._trendLinePaneView]) + }) + } + dataAndViewsReady() { + return s.prototype.dataAndViewsReady.call(this) && this + ._trendLinePaneView && this._trendLinePaneView.iconsReady() + } + stop() { + super.stop() + } + pointsCount() { + return 2 + } + name() { + return "Trend Line" + } + canHasAlert() { + return !0 + } + _getAlertPlots() { + return [this._linePointsToAlertPlot(this._points, null, this.properties() + .extendLeft.value(), this.properties().extendRight.value())] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, + "auWl"))).TrendLineDefinitionsViewModel + } + template() { + var e = s.prototype.template.call(this); + return e.text = this.properties().childs().text.value(), e.showLabel = this + .properties().childs().showLabel.value(), e + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e + .text || ""), this.properties().childs().showLabel.setValue(Boolean( + e.showLabel)) + } + _snapTo45DegreesAvailable() { + return !0 + } + static createProperties(e) { + var t = new r("linetooltrendline", e); + return n._configureProperties(t), t + } + static _configureProperties(t) { + s._configureProperties(t), t.hasChild("text") || t.addChild("text", new e( + "")), t.addExclusion("text"), t.addExclusion("showLabel") + } + } + t.LineToolTrendLine = n + }).call(this, i("tc+8")) + }, + WTyR: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("ocLq"); + class r { + constructor(e) { + this._haveAnyVolume = !1, this._isDisabled = !1, this._seriesGetter = e + } + update(e, t) { + if (this._haveAnyVolume || this._isDisabled) return; + const i = this._seriesGetter.volume().get(e); + 0 !== i && Number.isFinite(i) && (this._haveAnyVolume = !0), t && (this + ._haveAnyVolume || s.Std.error( + "The data vendor doesn't provide volume data for this symbol."), this + ._isDisabled = !0) + } + } + }, + WYmP: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("oamr"), + r = i("dhFz"); + class n { + constructor() { + this._items = [], this._owner = null + } + primitivesData(e) { + const t = []; + for (const i of this._items) e.isIgnoredObj(i) || t.push(i.primitiveData()); + return t + } + get(e) { + return this._items[e] + } + set(e, t) { + return this.dirty(), t.setOwner(this), this._items[e] = t, t + } + addAtIndex(e, t) { + this.dirty(), t.setOwner(this), this._items[e] = t + } + clear() { + this._unsetOwner(this._items), this._items = [], this.dirty() + } + addAllFromNumber(e, t) { + this.setOwner(t), this._items.splice(e, 0, ...t._items); + return this._setCachedDataValid(!1), !0 + } + addAll(e) { + this.setOwner(e), this._items.push(...e._items); + return this._setCachedDataValid(!1), !0 + } + remove(e) { + const t = this._items[e]; + return this._items.splice(e, 1), t.unsetOwner(this), this.dirty(), t + } + getItems() { + return this._items + } + size() { + return this._items.length + } + add(e) { + e.setOwner(this), this._items.push(e); + return this._setCachedDataValid(!1), !0 + } + deleteErasedItems() { + this._items = this._items.filter(e => !e.isErased()) + } + markPostedItems() { + for (const e of this._items) e.markAsPosted() + } + isNaN() { + if (0 === this._items.length) return !0; + for (const e of this._items) { + if (!Object(r.a)(e)) return !1; + if (!e.isNaN()) return !1 + } + return !0 + } + setOwner(e) { + this._owner = e + } + dirty() { + null !== this._owner && this._owner.dirty() + } + _unsetOwner(e) { + for (const t of e) t instanceof s.a && t.unsetOwner(this) + } + _setCachedDataValid(e) { + e || this.dirty() + } + } + }, + "Wh/T": function(e, t, i) { + "use strict"; + var s = i("Kxc7"); + window.onload = function() { + location.hostname.indexOf(".") >= 0 && ! function() { + try { + return /^(192|172|10)\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]/ + .test(location.hostname) || /^.*((?:\.local)|localhost)$/.test(location + .hostname) + } catch (e) { + return !1 + } + }() && setTimeout((function() { + try { + var e = function() { + var e = 0; + return JSON.parse(urlParams.logo).image && (e = "C", s + .enabled("link_to_tradingview") || (e = "D")), e + }(); + window.ga && (0 !== e && window.ga("send", "event", "s", e), + urlParams.utm || window.ga("send", "event", "l")) + } catch (e) {} + }), 3e4) + } + }, + Wh6B: function(e, t, i) { + "use strict"; + var s = i("Eyy1").ensureNotNull, + r = i("Ss5c").LineDataSource, + n = i("Ocx9").DefaultProperty, + o = i("08i5"); + class a extends r { + constructor(e, t) { + super(e, t || a.createProperties()), this._predictionPaneView = null, i.e( + "lt-pane-views").then(i.t.bind(null, "Ay2m", 7)).then(({ + PredictionPaneView: e + }) => { + this._predictionPaneView = new e(this, this._model), this._setPaneViews( + [this._predictionPaneView]) + }) + } + dataAndViewsReady() { + return r.prototype.dataAndViewsReady.call(this) && this._predictionPaneView && this + ._predictionPaneView.iconsReady() + } + isSynchronizable() { + return !1 + } + status() { + return this._properties.status.value() + } + setStatus(e) { + return this._properties.status.setValue(e) + } + pointsCount() { + return 2 + } + name() { + return "Forecast" + } + restorePoints(e, t, i) { + super.restorePoints(e, t, i), this.checkAlert() + } + checkAlert() { + if (!(this._points.length < 2 || this._model.mainSeries().bars().isEmpty())) { + var e = this._points[1]; + if (this.status()) e.index > this._model.timeScale().baseIndex() && this + .setStatus(o.AlertStatus.Waiting); + else { + var t = this._model.mainSeries().bars().valueAt(e.index); + if (null !== t) { + var i = this.direction(); + if (i === o.Direction.Up && t[TradingView.HIGH_PLOT] >= e.price) this + .setStatus(o.AlertStatus.Success); + else if (i === o.Direction.Down && t[TradingView.LOW_PLOT] <= e.price) + this.setStatus(o.AlertStatus.Success); + else { + var r = s(this._model.mainSeries().bars().lastIndex()); + e.index !== r && this.setStatus(o.AlertStatus.Failure) + } + } + } + } + } + addPoint(e) { + var t = r.prototype.addPoint.call(this, e); + return t && this.checkAlert(), t + } + endChanging() { + super.endChanging(), this.setStatus(o.AlertStatus.Waiting), this.checkAlert() + } + onData(e) { + super.onData(e), this.checkAlert() + } + endMoving() { + super.endMoving(), + this.setStatus(o.AlertStatus.Waiting), this.checkAlert() + } + direction() { + if (this.points().length < 2) return o.Direction.Up; + var e = this.points()[0]; + return this.points()[1].price > e.price ? o.Direction.Up : o.Direction.Down + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Pwwq"))) + .PredictionDefinitionsViewModel + } + cloneable() { + return !1 + } + static createProperties(e) { + var t = new n("linetoolprediction", e); + return a._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e), e.merge({ + status: o.AlertStatus.Waiting + }) + } + } + t.LineToolPrediction = a + }, + WkOR: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })), i.d(t, "b", (function() { + return a + })); + var s = i("Kxc7"); + const r = s.enabled("uppercase_instrument_names"); + + function n(e, t) { + return void 0 === e ? void 0 === t : void 0 !== t && (r ? e.toUpperCase() === t + .toUpperCase() : e === t) + } + + function o(e, t) { + return e.some(e => n(t, e)) + } + + function a(e, t, i) { + if (n(t, e)) return !0; + if (i) { + if (n(i.full_name, e) || n(i.pro_name, e)) return !0; + if (n(i.ticker, e)) return !0; + if (i.aliases && o(i.aliases, e)) return !0; + if (i.alternatives && o(i.alternatives, e)) return !0; + if (0 === e.indexOf("FRA:") && n(i.pro_name, e.replace("FRA:", "FWB:"))) return !0 + } + return !1 + } + }, + WkYF: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolDateRange", (function() { + return a + })); + var s = i("Eyy1"), + r = i("Ocx9"), + n = i("Ss5c"), + o = i("585y"); + class a extends n.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), this._volumeCalculator = null, i.e( + "lt-pane-views").then(i.bind(null, "3xLB")).then(e => { + this._setPaneViews([new e.DateRangePaneView(this, this._model)]) + }) + } + destroy() { + super.destroy(), null !== this._volumeCalculator && this._volumeCalculator + .destroy() + } + pointsCount() { + return 2 + } + properties() { + return super.properties() + } + name() { + return "Date Range" + } + volume() { + if (null === this._volumeCalculator) return NaN; + const e = this.points(); + return this._volumeCalculator.volume(e[0].index, e[1].index) + } + setOwnerSource(e) { + e === this._model.mainSeries() && (Object(s.assert)(null === this + ._volumeCalculator), this._volumeCalculator = new o.a(this._model + .mainSeries())), super.setOwnerSource(e) + } + static createProperties(e) { + const t = new r.DefaultProperty("linetooldaterange", e); + return a._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Ax76"))) + .GeneralDatePriceRangeDefinitionsViewModel + } + static _configureProperties(e) { + n.LineDataSource._configureProperties(e) + } + } + }, + WmDe: function(e, t, i) { + "use strict"; + TradingView.Pro = function() { + this.hasPackage = function() { + return !1 + } + }, window.user = { + is_pro: !1, + settings: {} + }, TradingView.Pro.prototype.isPaidPro = function() { + return !1 + }, TradingView.Pro.prototype.isSupportAvailable = function() { + return !1 + }, TradingView.Pro.prototype.getStudies = function() { + return [] + }, TradingView.Pro.prototype.getProduct = function() { + return {} + }, TradingView.Pro.prototype.getStudiesOrder = function() { + return [] + } + }, + Wo0S: function(e, t, i) { + e.exports = { + "common-tooltip": "common-tooltip-36YLR71G", + "common-tooltip--hidden": "common-tooltip--hidden-36YLR71G", + "common-tooltip--horizontal": "common-tooltip--horizontal-36YLR71G", + "common-tooltip--farther": "common-tooltip--farther-36YLR71G", + "common-tooltip--vertical": "common-tooltip--vertical-36YLR71G", + "common-tooltip-farther": "common-tooltip-farther-36YLR71G", + "common-tooltip--direction_normal": "common-tooltip--direction_normal-36YLR71G", + "common-tooltip__body": "common-tooltip__body-36YLR71G", + "common-tooltip__button-container": "common-tooltip__button-container-36YLR71G", + "common-tooltip__body--no-buttons": "common-tooltip__body--no-buttons-36YLR71G", + "common-tooltip__button": "common-tooltip__button-36YLR71G", + "common-tooltip--direction_reversed": "common-tooltip--direction_reversed-36YLR71G", + "common-tooltip__ear-holder": "common-tooltip__ear-holder-36YLR71G", + "common-tooltip__ear-holder--below": "common-tooltip__ear-holder--below-36YLR71G", + "common-tooltip__ear-holder--above": "common-tooltip__ear-holder--above-36YLR71G", + "common-tooltip__ear-holder--before": "common-tooltip__ear-holder--before-36YLR71G", + "common-tooltip__ear-holder--after": "common-tooltip__ear-holder--after-36YLR71G", + "common-tooltip__body--with-hotkey": "common-tooltip__body--with-hotkey-36YLR71G", + "common-tooltip__body--width_wide": "common-tooltip__body--width_wide-36YLR71G", + "common-tooltip__body--width_narrow": "common-tooltip__body--width_narrow-36YLR71G", + "common-tooltip__body--no-padding": "common-tooltip__body--no-padding-36YLR71G", + "common-tooltip__hotkey-block": "common-tooltip__hotkey-block-36YLR71G", + "common-tooltip__hotkey-block--divider": "common-tooltip__hotkey-block--divider-36YLR71G", + "common-tooltip__hotkey-text": "common-tooltip__hotkey-text-36YLR71G", + "common-tooltip__hotkey-button": "common-tooltip__hotkey-button-36YLR71G", + "common-tooltip__plus-sign": "common-tooltip__plus-sign-36YLR71G" + } + }, + Wt0y: function(e, t, i) { + "use strict"; + + function s(e = location.host) { + return -1 !== ["i18n.tradingview.com", "partial.tradingview.com", "www.tradingview.com", + "wwwcn.tradingview.com" + ].indexOf(e) || -1 !== ["d33t3vvu2t2yu5.cloudfront.net", "dwq4do82y8xi7.cloudfront.net", + "s.tradingview.com", "s3.tradingview.com" + ].indexOf(e) || e.match(/^[a-z]{2}\.tradingview\.com/) || e.match( + /prod-[^.]+.tradingview.com/) ? "battle" : e.includes("tradingview.com") || e + .includes("staging") ? "staging" : e.match(/webcharts/) ? "staging_local" : (e.match( + /^localhost(:\d+)?$/), "local") + } + + function r() { + return "local" === s() + } + + function n() { + return "battle" === s() + } + + function o() { + return !n() + } + i.r(t), i.d(t, "environment", (function() { + return s + })), i.d(t, "isLocal", (function() { + return r + })), i.d(t, "isProd", (function() { + return n + })), i.d(t, "isDebug", (function() { + return o + })) + }, + X0WL: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor(e) { + this._colorProperty = e + } + size() { + return "13px" + } + bold() { + return !1 + } + color() { + return this._colorProperty.value() + } + } + }, + XAms: function(e, t, i) { + "use strict"; + + function s(e) { + e.preventDefault() + } + i.d(t, "a", (function() { + return s + })), i.d(t, "b", (function() { + return n + })); + const r = ["input:not([type])", 'input[type="text"]', 'input[type="email"]', + 'input[type="password"]', 'input[type="search"]', 'input[type="number"]', + 'input[type="url"]', "textarea", "a[href]", '*[contenteditable="true"]', + "[data-allow-context-menu]" + ]; + + function n(e) { + const t = e.target; + t && !t.closest(r.join(", ")) && e.preventDefault() + } + }, + XFad: function(e, t, i) { + "use strict"; + var s = i("5rJj"), + r = i("aDyP").LineToolPitchfork; + class n extends r { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Schiff Pitchfork" + } + static createProperties(e) { + var t = new s("linetoolschiffpitchfork2", e, !1, { + range: [0, 8] + }); + return n._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e) + } + } + t.LineToolSchiffPitchfork2 = n + }, + XPit: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TimePointIndexSearchMode", (function() { + return s + })), i.d(t, "seriesPlotFunctionMap", (function() { + return l + })), i.d(t, "barFunction", (function() { + return c + })), i.d(t, "SeriesData", (function() { + return u + })); + var s, r = i("Eyy1"), + n = i("k9/m"); + ! function(e) { + e[e.FromLeft = -1] = "FromLeft", e[e.FromRight = 1] = "FromRight" + }(s || (s = {})); + const o = { + open: e => e[1], + high: e => e[2], + low: e => e[3], + close: e => e[4], + hl2: e => (e[2] + e[3]) / 2, + hlc3: e => (e[2] + e[3] + e[4]) / 3, + ohlc4: e => (e[1] + e[2] + e[3] + e[4]) / 4 + }, + a = ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]; + + function l() { + const e = new Map; + return a.forEach((t, i) => { + e.set(t, c(t)) + }), e + } + + function c(e) { + return o[e] + } + + function h(e, t) { + return null == e[t] + } + class u { + constructor() { + this.m_bars = new n.PlotList(l(), h), this.m_nsBars = new n.PlotList(l(), h) + } + bars() { + return this.m_bars + } + nsBars() { + return this.m_nsBars + } + size() { + return this.m_bars.size() + this.m_nsBars.size() + } + each(e) { + this.m_bars.each(e), this.m_nsBars.each(e) + } + clear() { + this.m_bars.clear(), this.m_nsBars.clear(), this.lastProjectionPrice = void 0 + } + isEmpty() { + return this.m_bars.isEmpty() && this.m_nsBars.isEmpty() + } + first() { + return this.m_bars.isEmpty() ? this.m_nsBars.first() : this.m_bars.first() + } + last() { + return this.m_nsBars.isEmpty() ? this.m_bars.last() : this.m_nsBars.last() + } + search(e, t) { + return this.nsBars().isEmpty() ? this.bars().search(e, t) : this.bars().isEmpty() || + Object(r.ensureNotNull)(this.nsBars().firstIndex()) <= e ? this.nsBars().search( + e, t) : this.bars().search(e, t) + } + valueAt(e) { + const t = this.search(e); + return null !== t ? t.value : null + } + plotValueToTimePointIndex(e, t, i) { + if (i === s.FromRight) { + const i = (i, s) => { + const r = s[t]; + return null != r && e >= r + }, + s = this.m_bars.findLast(i); + if (null !== s) return s.index; + const r = this.m_nsBars.findLast(i); + return null !== r ? r.index : this.m_bars.firstIndex() + } + if (i === s.FromLeft) { + const i = (i, s) => { + const r = s[t]; + return null != r && e <= r + }, + s = this.m_bars.findFirst(i); + if (null !== s) return s.index; + const r = this.m_nsBars.findFirst(i); + return null !== r ? r.index : this.m_bars.lastIndex() + } + throw new Error("plotValueToTimePointIndex: unsupported search mode") + } + moveData(e) { + this.m_bars.move(e), this.m_nsBars.move(e) + } + } + }, + XRI5: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SymbolExtrapolator", (function() { + return c + })); + var s = i("Eyy1"), + r = i("Y7w9"), + n = i("IiTo"), + o = i("IDnv"), + a = i("LxhU"); + + function l(e, t) { + return e.length > t + } + class c { + constructor(e, t, i = 2e5) { + this._firstRealBarTimeMs = null, this._historyBarsCache = [], + this._projectionFirstIndex = 1 / 0, this._barsTimes = [], this + ._minFutureBarsCount = 0, this._lastRealBarTimeMs = null, this + ._futureBarsCache = [], this._symbolInfo = e, this._interval = a.Interval.parse( + t), this._extrapolateLimit = i, this._barBuilder = Object(n.newBarBuilder)( + t, new n.SessionInfo(e.timezone, e.session, e.session_holidays, e + .corrections), null) + } + destroy() { + this.clear() + } + interval() { + return this._interval + } + barBuilder() { + return this._barBuilder + } + symbolInfo() { + return this._symbolInfo + } + clear() { + this._firstRealBarTimeMs = null, this._historyBarsCache = [], this._barsTimes = [], + this._lastRealBarTimeMs = null, this._futureBarsCache = [], this + ._minFutureBarsCount = 0, this._projectionFirstIndex = 1 / 0 + } + firstFutureBarIndex() { + return this._barsTimes.length + } + futureBars() { + return this._futureBarsCache + } + replaceBarsTimesTail(e, t = e.length) { + if (0 === e.length) return; + if (0 === this._barsTimes.length) return void this.setBarsTimes(e, t); + const i = e[0], + n = this._barsTimes[this._barsTimes.length - 1], + o = i > n ? this._barsTimes.length : Object(r.lowerbound_int)(this._barsTimes, + i); + 0 !== o ? (this._barsTimes.splice(o, this._barsTimes.length, ...e), this + ._projectionFirstIndex = t === e.length ? this._barsTimes.length : this + ._barsTimes.indexOf(e[t]), Object(s.assert)(-1 !== this + ._projectionFirstIndex, "something went wrong"), n !== e[e.length - + 1] && this._setLastRealBarTime(e[e.length - 1])) : this.setBarsTimes(e, + t) + } + setBarsTimes(e, t = e.length) { + const i = this._barsTimes; + if (this._barsTimes = e.slice(), this._projectionFirstIndex = 0 === this._barsTimes + .length ? 1 / 0 : t, 0 === e.length) return this._historyBarsCache = [], this + ._futureBarsCache = [], this._firstRealBarTimeMs = null, void(this + ._lastRealBarTimeMs = null); + 0 !== i.length && i[i.length - 1] === e[e.length - 1] || this._setLastRealBarTime(e[ + e.length - 1]), 0 !== i.length && i[0] === e[0] || (this + ._historyBarsCache = [], this._firstRealBarTimeMs = e[0]) + } + extrapolateTimeWithOffsetToTime(e, t) { + if (0 === t) return { + timeMs: e, + exact: !0 + }; + 0 === this._barsTimes.length && (t < 0 ? null === this._firstRealBarTimeMs ? this + ._firstRealBarTimeMs = e : (this._extendHistoryCacheToTimeFromRight(Math + .min(e, null !== this._lastRealBarTimeMs ? this._lastRealBarTimeMs : + 1 / 0)), this._ensureExtrapolatedToHistoryTime(e)) : null === this + ._lastRealBarTimeMs ? this._lastRealBarTimeMs = e : (this + ._extendFutureCacheToTimeFromLeft(Math.max(e, null !== this + ._firstRealBarTimeMs ? this._firstRealBarTimeMs : 1 / 0)), this + ._ensureExtrapolatedToFutureTime(e))); + const i = this.indexOfTime(e); + if (null === i) return null; + const s = this._timeOfBarIndex(i.index + t); + return null === s ? null : ((i.index < 0 || this._projectionFirstIndex <= i + .index) && (s.exact = !1), s) + } + indexOfTime(e) { + if (null !== this._firstRealBarTimeMs && e < this._firstRealBarTimeMs) { + this._ensureExtrapolatedToHistoryTime(e); + let t = Object(r.lowerbound_int)(this._historyBarsCache, e); + if (0 !== this._historyBarsCache.length && 0 === t && e < this + ._historyBarsCache[0]) return null; + t !== this._historyBarsCache.length && this._historyBarsCache[t] === e || (t -= + 1); + return { + index: t - this._historyBarsCache.length, + timeMs: this._historyBarsCache[t] + } + } + if (null !== this._lastRealBarTimeMs && e > this._lastRealBarTimeMs) { + this._ensureExtrapolatedToFutureTime(e); + let t = Object(r.lowerbound_int)(this._futureBarsCache, e); + if (0 !== this._futureBarsCache.length && t === this._futureBarsCache.length && + e > this._futureBarsCache[this._futureBarsCache.length - 1]) return null; + this._futureBarsCache[t] !== e && (t -= 1); + const i = Math.max(1, this._barsTimes.length) + t; + return { + index: i, + timeMs: i === this._barsTimes.length - 1 ? Object(s.ensureNotNull)(this + ._lastRealBarTimeMs) : this._futureBarsCache[t] + } + } + if (0 === this._barsTimes.length) return null !== this._firstRealBarTimeMs && this + ._firstRealBarTimeMs <= e || null !== this._lastRealBarTimeMs && e <= this + ._lastRealBarTimeMs ? { + index: 0, + timeMs: Object(s.ensureNotNull)(this._timeOfBarIndex(0)).timeMs + } : null; + let t = Object(r.lowerbound_int)(this._barsTimes, e); + return this._barsTimes[t] !== e && (t -= 1), { + index: t, + timeMs: this._barsTimes[t] + } + } + setMinFutureBarsCount(e) { + this._minFutureBarsCount = e, 0 !== this._barsTimes.length && this + ._ensureExtrapolatedToFutureBar(e) + } + ensureExtrapolatedToFutureTime(e) { + this._ensureExtrapolatedToFutureTime(e) + } + _setLastRealBarTime(e) { + const t = this._futureBarsCache.length, + i = Object(r.upperbound_int)(this._futureBarsCache, e); + 0 === i ? this._extendFutureCacheToTimeFromLeft(e) : (this._lastRealBarTimeMs = e, + this._futureBarsCache = this._futureBarsCache.slice(i)), this + ._ensureExtrapolatedToFutureBar(Math.max(t, this._minFutureBarsCount)) + } + _timeOfBarIndex(e) { + var t; + if (e < 0) { + const t = Math.abs(e); + this._ensureExtrapolatedToHistoryBar(t); + const i = this._historyBarsCache.length - t; + return i < 0 ? null : { + timeMs: this._historyBarsCache[i], + exact: !1 + } + } + if (0 === e && 0 === this._barsTimes.length) return { + timeMs: Object(s.ensureNotNull)(null !== (t = this._firstRealBarTimeMs) && + void 0 !== t ? t : this._lastRealBarTimeMs), + exact: !1 + }; + if (e >= this._barsTimes.length) { + const t = e - Math.max(1, this._barsTimes.length); + return this._ensureExtrapolatedToFutureBar(t + 1), t >= this._futureBarsCache + .length ? null : { + timeMs: this._futureBarsCache[t], + exact: !1 + } + } + return { + timeMs: this._barsTimes[e], + exact: e < this._projectionFirstIndex + } + } + _extendFutureCacheFromRight(e) { + const t = 0 !== this._futureBarsCache.length ? this._futureBarsCache[this + ._futureBarsCache.length - 1] : this._lastRealBarTimeMs; + if (null === t) return !1; + const i = e(t, this._futureBarsCache.length); + return 0 !== i.length && (this._futureBarsCache = this._futureBarsCache.concat(i), ! + 0) + } + _extendHistoryCacheFromLeft(e) { + const t = 0 !== this._historyBarsCache.length ? this._historyBarsCache[0] : this + ._firstRealBarTimeMs; + if (null === t) return; + const i = e(t, this._historyBarsCache.length); + this._historyBarsCache = i.concat(this._historyBarsCache) + } + _extendFutureCacheToTimeFromLeft(e) { + if (null !== this._lastRealBarTimeMs && this._lastRealBarTimeMs <= e) return; + if (Object(s.assert)(0 === this._barsTimes.length || e === this._barsTimes[this + ._barsTimes.length - 1], "invalid argument"), this._lastRealBarTimeMs = e, + 0 === this._futureBarsCache.length) return; + const t = Object(o.extrapolateBarsFrontToTime)(this._barBuilder, e, this + ._futureBarsCache[0] - 1, this._extrapolateLimit, !0).times; + this._futureBarsCache = t.concat(this._futureBarsCache) + } + _extendHistoryCacheToTimeFromRight(e) { + if (null !== this._firstRealBarTimeMs && this._firstRealBarTimeMs >= e) return; + if (Object(s.assert)(0 === this._barsTimes.length, "bars should be empty"), this + ._firstRealBarTimeMs = e, + 0 === this._historyBarsCache.length) return; + const t = Object(o.extrapolateBarsFrontToTime)(this._barBuilder, this + ._historyBarsCache[this._historyBarsCache.length - 1], e - 1, this + ._extrapolateLimit, !0).times; + this._historyBarsCache = this._historyBarsCache.concat(t) + } + _ensureExtrapolatedToFutureBar(e) { + return !(this._futureBarsCache.length >= e || l(this._futureBarsCache, this + ._extrapolateLimit)) && this._extendFutureCacheFromRight((t, i) => Object(o + .extrapolateBarsFrontByCount)(this._barBuilder, t, e - i, !0).times) + } + _ensureExtrapolatedToFutureTime(e) { + null !== this._lastRealBarTimeMs && this._lastRealBarTimeMs >= e || l(this + ._futureBarsCache, this._extrapolateLimit) || 0 !== this._futureBarsCache + .length && this._futureBarsCache[this._futureBarsCache.length - 1] >= e || (this + ._extendFutureCacheFromRight((t, i) => Object(o.extrapolateBarsFrontToTime)( + this._barBuilder, t, e, this._extrapolateLimit, !0).times), this + ._futureBarsCache[this._futureBarsCache.length - 1] < e && this + ._ensureExtrapolatedToFutureBar(this._futureBarsCache.length + 1)) + } + _ensureExtrapolatedToHistoryBar(e) { + this._historyBarsCache.length >= e || l(this._historyBarsCache, this + ._extrapolateLimit) || this._extendHistoryCacheFromLeft((t, i) => Object(o + .extrapolateBarsFrontByCount)(this._barBuilder, t, -(e - i), !0).times + .reverse()) + } + _ensureExtrapolatedToHistoryTime(e) { + null !== this._firstRealBarTimeMs && this._firstRealBarTimeMs <= e || l(this + ._historyBarsCache, this._extrapolateLimit) || 0 !== this._historyBarsCache + .length && this._historyBarsCache[0] <= e || (this._extendHistoryCacheFromLeft(( + t, i) => { + const s = Object(o.extrapolateBarsFrontToTime)(this._barBuilder, t - + 1, e - 1, this._extrapolateLimit, !0).times; + return s[s.length - 1] === t ? s.slice(0, -1) : s + }), (0 === this._historyBarsCache.length || this._historyBarsCache[0] > + e) && this._ensureExtrapolatedToHistoryBar(this._historyBarsCache + .length + + 1)) + } + } + }, + XUCF: function(e, t, i) { + "use strict"; + var s = i("Hr11").sign, + r = i("Ss5c").LineDataSource, + n = i("Ocx9").DefaultProperty; + class o { + constructor(e, t, i) { + this._source = e, this._index = t, this._bars = i || [] + } + setBars(e) { + this._bars = e || [] + } + clone(e) { + return new o(e, this._index, TradingView.clone(this._bars)) + } + createBar() { + var e = this._source.properties().averageHL.value(), + t = this._source.properties().variance.value() / 100, + i = this._source._model.mainSeries().base(), + s = Math.random(), + r = e * (1 - 2 * s) * t, + n = e * (1 + (.5 - (s = Math.random())) * t), + o = r - n / 2, + a = o + n; + return { + o: (o + Math.random() * n) / i, + h: a / i, + l: o / i, + c: (o + Math.random() * n) / i + } + } + generate() { + this._bars = []; + var e = this._source.points(), + t = e[this._index], + i = e[this._index + 1]; + if (t && i && t.index !== i.index) { + this._avgHL = this._source.properties().averageHL.value(), this._variance = this + ._source.properties().variance.value() / 100; + for (var r = this._index ? t.index + 1 : t.index, n = s(i.index - t.index), o = + r; o !== i.index; o += n) this._bars.push(this.createBar()) + } + } + bars() { + return this._bars + } + setSize(e) { + if (e < this._bars.length) this._bars.splice(e, this._bars.length - e); + else + for (; this._bars.length < e;) this._bars.push(this.createBar()) + } + } + class a extends r { + constructor(e, t, s) { + var r = t || a.createProperties(); + if (super(e, r), this._segments = [], !s) { + var n = Math.round(this.calculateATR(e)); + r.averageHL.setValue(n) + } + r.averageHL.listeners().subscribe(this, a.prototype.regenerate), r.variance + .listeners().subscribe(this, a.prototype.regenerate), r.points || r.addProperty( + "points"), this._currentAverageHL = this._properties.averageHL.value(), this + ._currentVariance = this._properties.variance.value(), this._currentInterval = e + .mainSeries().interval(), this.properties().onRestoreFactoryDefaults() + .subscribe(this, this._handleRestoringFactoryDefaults), i.e("lt-pane-views") + .then(i.t.bind(null, "dMkl", 7)).then(({ + GhostFeedPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + isSynchronizable() { + return !1 + } + _handleRestoringFactoryDefaults() { + var e = Math.round(this.calculateATR()); + this.properties().averageHL.setValue(e) + } + destroy() { + this.properties().onRestoreFactoryDefaults().unsubscribe(this, this + ._handleRestoringFactoryDefaults), super.destroy() + } + regenerate() { + this._currentAverageHL = this._properties.averageHL.value(), this._currentVariance = + this._properties.variance.value(), this._segments.forEach((function(e) { + e.generate() + })), this.updateAllViews(), this._model.updateSource(this) + } + propertiesChanged() { + super.propertiesChanged(), this._currentAverageHL === this._properties.averageHL + .value() && this._currentVariance === this._properties.variance.value() || this + .regenerate() + } + pointsCount() { + return -1 + } + name() { + return "Ghost Feed" + } + segmentBars(e) { + return this._segments[e].bars() + } + segments() { + return this._segments + } + generateBars(e) { + this._segments.length <= e && this._segments.push(new o(this, e)), this._segments[e] + .generate() + } + addPoint(e) { + if (this._points.length > 0 && this._points[this._points.length - 1].index === e + .index) { + this._lastPoint = null, this.normalizePoints(), this.createServerPoints(); + for (var t = 0; t < this._points.length; t++) this._createPointProperty(t); + return !0 + } + var i = r.prototype.addPoint.call(this, e); + return this._finished && (this._lastPoint = null), this._points.length > 1 && this + .generateBars(this._points.length - 2), i || this._finished + } + finish() { + this._finished = !0, this._lastPoint = null, this.normalizePoints(), this + .createServerPoints() + } + setPoint(e, t, i) { + if (super.setPoint(e, t, i), e > 0) { + var s = this.points()[e - 1], + r = t.index - s.index; + this._segments[e - 1].setSize(Math.abs(r)) + } + if (e < this.points().length - 1) { + r = this.points()[e + 1].index - t.index; + this._segments[e].setSize(Math.abs(r)) + } + } + state(e) { + var t = r.prototype.state.call(this, e); + return t.segments = this._segments.map((function(e) { + return { + bars: e.bars() + } + })), t + } + restoreData(e) { + var t = this; + e.segments && (this._segments = e.segments.map((function(e, i) { + return new o(t, i, [].concat(e.bars)) + }))), this._currentAverageHL = this._properties.averageHL.value(), this + ._currentVariance = this._properties.variance.value() + } + onData(e) { + if (super.onData(e), 0 === this.pointsProperty().childs().points._childs.length) + for (var t = 0; t < this._points.length; t++) this._createPointProperty(t); + this._currentInterval !== this._model.mainSeries().interval() && (this.regenerate(), + this._currentInterval = this._model.mainSeries().interval()) + } + cloneData(e) { + var t = this; + this._segments = e._segments.map((function(e) { + return e.clone(t) + })) + } + calculateATR(e) { + var t = (void 0 !== e ? e : this._model).mainSeries(), + i = []; + t.bars().each((function(e, t) { + i.push(t[TradingView.HIGH_PLOT] - t[TradingView.LOW_PLOT]) + })); + var s = 0 === i.length ? 0 : i.reduce((function(e, t) { + return e + t + }), 0) / i.length; + return s *= t.base() + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "fIc+"))) + .GhostFeedDefinitionsViewModel + } + static createProperties(e) { + var t = new n("linetoolghostfeed", e); + return a._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e) + } + } + t.LineToolGhostFeed = a + }, + XXdw: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "StoriesTimeLineItemType", (function() { + return s + })), + function(e) { + e[e.Image = 0] = "Image", e[e.Emoji = 1] = "Emoji" + }(s || (s = {})) + }, + XcdR: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + var s = i("txPx"), + r = i("RDU5"); + const n = Object(s.getLogger)("Chart.ChartUndoModel"); + class o extends r.UndoCommand { + constructor(e, t, i) { + super(i, !1), this._newRightOffsetAndBarSpacing = null, this.setCustomFlag( + "doesnt_affect_save", !0), this._model = e, this + ._rightOffsetAndBarSpacing = t + } + undo() { + if (null !== this._newRightOffsetAndBarSpacing) return void n.logDebug( + "TimeScaleChangeUndoCommand.undo: Command is already undone"); + const e = this._model.timeScale(); + this._newRightOffsetAndBarSpacing = { + barSpacing: e.barSpacing(), + rightOffset: e.rightOffset() + }, e.setBarSpacing(this._rightOffsetAndBarSpacing.barSpacing), e + .setRightOffset(this._rightOffsetAndBarSpacing.rightOffset), this._model + .lightUpdate() + } + redo() { + if (null === this._newRightOffsetAndBarSpacing) return void n.logDebug( + "TimeScaleChangeUndoCommand.redo: Command is not undone"); + const e = this._model.timeScale(); + e.setBarSpacing(this._newRightOffsetAndBarSpacing.barSpacing), e.setRightOffset( + this._newRightOffsetAndBarSpacing.rightOffset), this._model + .lightUpdate(), this._newRightOffsetAndBarSpacing = null + } + } + }, + XlJ7: function(e, t, i) { + "use strict"; + + function s(e, t, i, s) { + return `${s ? s + " " : ""}${i ? i + " " : ""}${e}px ${t}` + } + i.r(t), i.d(t, "makeFont", (function() { + return s + })), i.d(t, "parseFont", (function() { + return n + })); + const r = /(bold )?(italic )?(\d+)(px|pt) (.*)$/; + + function n(e) { + const t = r.exec(e); + return null === t ? null : { + family: t[5], + size: parseInt(t[3]) * ("pt" === t[4] ? .75 : 1), + bold: Boolean(t[1]), + italic: Boolean(t[2]) + } + } + }, + Xyly: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolBezierQuadro", (function() { + return n + })); + var s = i("Ocx9"), + r = i("Ss5c"); + class n extends r.LineDataSource { + constructor(e, t) { + const s = t || n.createProperties(); + super(e, s), this._controlPoint = null, i.e("lt-pane-views").then(i.bind(null, + "4Ptp")).then(t => { + this._setPaneViews([new t.BezierQuadroPaneView(this, e)]) + }) + } + pointsCount() { + return 2 + } + properties() { + return super.properties() + } + name() { + return "Curve" + } + setLastPoint(e, t) { + super.setLastPoint(e, t), this._controlPoint = this._calculateControlPoint() + } + addPoint(e, t, i) { + const s = super.addPoint(e, t, i); + if (s) { + const e = this._calculateControlPoint(); + this._points.push(e), this._controlPoint = null, i || (this + .normalizePoints(), this.createServerPoints()), this + ._createPointProperty(2) + } + return s + } + restorePoints(e, t, i) { + super.restorePoints(e, t, i), this._createPointProperty(2) + } + controlPoint() { + return this._controlPoint + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolbezierquadro", e); + return n._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "b4fl")).then( + e => e.GeneralBezierDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e) + } + _calculateControlPoint() { + const e = this.pointToScreenPoint(this.points()[0])[0], + t = this.pointToScreenPoint(this.points()[1])[0], + i = t.subtract(e).scaled(.5).transposed().scaled(.3), + s = e.add(t).scaled(.5).add(i); + return this.screenPointToPoint(s) + } + } + }, + XzZr: function(e, t, i) { + "use strict"; + var s = i("ogJP").declareClassAsPureInterface; + + function r() {} + TradingView.WEB_SOCKET_WAS_CONNECTED = !1, r.REBIND_STUDY_STANDALONE_TO_CHILD = 1, r + .REBIND_STUDY_CHILD_TO_STANDALONE = 2, r.prototype.defaultWatchlistSymbols = function() {}, + r.prototype.defaultResolutions = function() {}, r.prototype.availableCurrencies = + function() {}, r.prototype.availableUnits = function() {}, r.prototype + .supportedSymbolsTypes = + function() {}, r.prototype.supportedExchangesList = function() {}, r.prototype + .symbolsGrouping = function() {}, r.prototype.quoteCreateSession = function(e) {}, r + .prototype.quoteDeleteSession = function(e) {}, r.prototype.quoteSetFields = function(e, + t) {}, r.prototype.quoteAddSymbols = function(e, t) {}, r.prototype.quoteRemoveSymbols = + function(e, t) {}, r.prototype.quoteFastSymbols = function(e, t) {}, r.prototype + .depthCreateSession = function(e, t, i) {}, r.prototype.depthDeleteSession = function(e) {}, + r.prototype.depthSetSymbol = function(e, t) {}, r.prototype.depthClearSymbol = function( + e) {}, r.prototype.depthSetScale = function(e, t) {}, r.prototype.chartCreateSession = + function(e, t) {}, r.prototype.chartDeleteSession = function(e) {}, r.prototype + .createSession = function(e, t) {}, r.prototype.removeSession = function(e) {}, r.prototype + .connected = function() {}, r.prototype.connect = function() {}, r.prototype.disconnect = + function() {}, r.prototype.switchTimezone = function(e, t) {}, r.prototype.resolveSymbol = + function(e, t, i, s, r) {}, r.prototype.createSeries = function(e, t, i, s, r, n, o, a) {}, + r.prototype.removeSeries = function(e, t, i) {}, r.prototype.modifySeries = function(e, t, + i, s, r, n, o) {}, r.prototype.requestMoreData = function(e, t, i, s) {}, r.prototype + .requestMetadata = function(e, t, i) {}, r.prototype.isCanCreateStudy = function(e, t) {}, r + .prototype.createStudy = function(e, t, i, s, r, n, o) {}, r.prototype.rebindStudy = + function(e, t, i, s, r, n, o, a) {}, r.prototype.removeStudy = function(e, t, i) {}, r + .prototype.modifyStudy = function(e, t, i, s, r) {}, r.prototype.createPointset = function( + e, t, i, s, r, n, o) {}, r.prototype.modifyPointset = function(e, t, i, s, r) {}, r + .prototype.removePointset = function(e, t, i) {}, r.prototype.requestMoreTickmarks = + function(e, t, i, s) {}, r.prototype.requestFirstBarTime = function(e, t, i, s) {}, r + .prototype._invokeHandler = function(e, t) {}, r.prototype._sendRequest = function(e, t) {}, + r.prototype._onMessage = function(e) {}, r.prototype._dispathNotification = function(e) {}, + r.prototype._invokeNotificationHandler = function(e, t, i) {}, r.prototype._notifySessions = + function(e) {}, r.prototype.unpack = function(e) {}, + r.prototype.searchSymbols = function(e, t, i, s, r, n, o, a, l, c) {}, r.prototype + .serverTimeOffset = function() {}, r.prototype.getMarks = function(e, t, i, s, r) {}, r + .prototype.getTimescaleMarks = function(e, t, i, s, r) {}, s(r, "ChartApiInterface"), e + .exports.HandlerInfo = function(e, t) { + this.handler = e, this.customId = t + }, e.exports.ChartApiInterface = r + }, + Y5iK: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "MainSeriesScaleRatioProperty", (function() { + return n + })); + var s = i("aIyQ"), + r = i.n(s); + class n { + constructor(e) { + this._changed = new r.a, this._model = e + } + getStepChangeValue() { + return .1 + } + getMinValue() { + return 1e-7 + } + getMaxValue() { + return 99999999 + } + value() { + return this._model.mainSeriesScaleRatio() + } + setValue(e, t) { + (e !== this.value() || t) && (this._model.setMainSeriesScaleRatio(e), this + ._onChanged()) + } + state() { + return null + } + clone() { + return new n(this._model) + } + listeners() { + return this._changed + } + subscribe(e, t) { + this._changed.subscribe(e, t) + } + unsubscribe(e, t) { + this._changed.unsubscribe(e, t) + } + unsubscribeAll(e) { + this._changed.unsubscribeAll(e) + } + _onChanged() { + this._changed.fire(this) + } + } + }, + Y7w9: function(e, t, i) { + "use strict"; + + function s(e, t) { + return e < t + } + + function r(e, t, i, s = 0, r = e.length) { + let n = r - s; + for (; 0 < n;) { + const r = n >> 1, + o = s + r; + i(e[o], t) ? (s = o + 1, n -= r + 1) : n = r + } + return s + } + + function n(e, t, i = 0, n = e.length) { + return r(e, t, s, i, n) + } + + function o(e, t, i, s = 0, r = e.length) { + let n = r - s; + for (; 0 < n;) { + const r = n >> 1, + o = s + r; + i(t, e[o]) ? n = r : (s = o + 1, n -= r + 1) + } + return s + } + + function a(e, t, i = 0, r = e.length) { + return o(e, t, s, i, r) + } + + function l(e, t) { + return e.filter(e => !t.includes(e)) + } + + function c(e, t) { + const i = e.indexOf(t); + return i < 0 ? e.slice() : [t].concat(e.slice(0, i)).concat(e.slice(i + 1)) + } + + function h(e, t, i) { + const s = new Set(t), + r = [], + o = [], + a = []; + return e.forEach((e, t) => { + s.has(e) ? o.push(e) : (r.push(e), a.push(t)) + }), i = i < e.length - 1 ? n(a, i + 1) : r.length, r.splice(i, 0, ...o), { + newItems: r, + movedItemsStartIndex: i + } + } + + function u(e, t, i) { + const s = new Set(t), + r = [], + o = [], + a = []; + return e.forEach((e, t) => { + s.has(e) ? o.push(e) : (r.push(e), a.push(t)) + }), i = i <= e.length - 1 ? n(a, i) : r.length, r.splice(i, 0, ...o), { + newItems: r, + movedItemsStartIndex: i + } + } + + function d(e, t) { + const i = new Set; + return e.forEach(e => { + t.has(e) && i.add(e) + }), i + } + i.r(t), i.d(t, "lowerbound", (function() { + return r + })), i.d(t, "lowerbound_int", (function() { + return n + })), i.d(t, "upperbound", (function() { + return o + })), i.d(t, "upperbound_int", (function() { + return a + })), i.d(t, "subtract", (function() { + return l + })), i.d(t, "moveToHead", (function() { + return c + })), i.d(t, "moveAfter", (function() { + return h + })), i.d(t, "moveBefore", (function() { + return u + })), i.d(t, "intersect", (function() { + return d + })) + }, + YCFM: function(e, t, i) {}, + YWnQ: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "SymbolErrorPermissionDeniedReason", (function() { + return s + })), i.d(t, "permissionDenied", (function() { + return r + })), + function(e) { + e.Symbol = "symbol", e.GroupPermission = "group" + }(s || (s = {})); + const r = "permission denied" + }, + YdVo: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolPath", (function() { + return c + })); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("Ocx9"), + o = i("Zp/P"), + a = i("Ss5c"), + l = i("j3hX"); + class c extends a.LineDataSource { + constructor(e, t) { + const s = t || c.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "JeuX")).then(t => { + this._setPaneViews([new t.PathPaneView(this, e)]) + }) + } + pointsCount() { + return -1 + } + properties() { + return super.properties() + } + name() { + return "Path" + } + hasEditableCoordinates() { + return !1 + } + addPoint(e, t, i) { + var n; + const a = Object(s.ensureNotNull)(this.priceScale()), + l = this._model.timeScale().indexToCoordinate(e.index), + c = e.price, + h = Object(s.ensure)(null === (n = this.ownerSource()) || void 0 === n ? + void 0 : n.firstValue()), + u = a.priceToCoordinate(c, h); + if (this._points.length > 0) { + const e = this._points[this._points.length - 1], + t = this._model.timeScale().indexToCoordinate(e.index), + i = e.price, + s = a.priceToCoordinate(i, h); + if (new r.Point(l, u).subtract(new r.Point(t, s)).length() < Object(o + .interactionTolerance)().minDistanceBetweenPoints) return this + ._lastPoint = null, this.normalizePoints(), this + .createServerPoints(), !0 + } + return super.addPoint(e, t, i) + } + static createProperties(e) { + const t = new n.DefaultProperty("linetoolpath", e); + return c._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "WW+G")).then( + e => e.PathDefinitionsViewModel) + } + static _configureProperties(e) { + a.LineDataSource._configureProperties(e), e.addChild("linesColors", new l + .LineToolColorsProperty([e.childs().lineColor])) + } + } + }, + "Ye2/": function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "LineToolBarsPatternMode", (function() { + return s + })), + function(e) { + e[e.Bars = 0] = "Bars", e[e.Line = 1] = "Line", e[e.OpenClose = 2] = "OpenClose", e[e + .LineOpen = 3] = "LineOpen", e[e.LineHigh = 4] = "LineHigh", e[e.LineLow = 5] = + "LineLow", e[e.LineHL2 = 6] = "LineHL2" + }(s || (s = {})) + }, + Yj6H: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("ogJP"), + n = i("aIyQ"), + o = i.n(n), + a = i("Y7w9"), + l = i("Qb4w"), + c = i("TTFo"), + h = i("qJq3"), + u = i("7ktv"), + d = i("tc+8"), + p = i.n(d), + _ = i("3ClC"), + m = i("/tGj"), + f = i("n5al"), + g = i("SwuQ"), + b = i("s1Gx"), + v = i("Hr11"); + class S { + constructor(e, t) { + if (this._base = e, this._integralDividers = t, Object(v.isBaseDecimal)(this._base)) + this._fractionalDividers = [2, 2.5, 2]; + else { + this._fractionalDividers = []; + for (let e = this._base; 1 !== e;) { + if (e % 2 == 0) this._fractionalDividers.push(2), e /= 2; + else { + if (e % 5 != 0) throw new Error("unexpected base"); + this._fractionalDividers.push(2), this._fractionalDividers.push(2.5), + e /= 5 + } + if (this._fractionalDividers.length > 100) throw new Error( + "something wrong with base") + } + } + } + tickSpan(e, t, i) { + const s = 0 === this._base ? 0 : 1 / this._base; + let r = Math.pow(10, Math.max(0, Math.ceil(Object(v.log10)(e - t)))), + n = 0, + o = this._integralDividers[0]; + for (;;) { + const e = Object(v.greaterOrEqual)(r, s, 1e-14) && r > s + 1e-14, + t = Object(v.greaterOrEqual)(r, i * o, 1e-14), + a = Object(v.greaterOrEqual)(r, 1, 1e-14); + if (!(e && t && a)) break; + r /= o, o = this._integralDividers[++n % this._integralDividers.length] + } + if (r <= s + 1e-14 && (r = s), r = Math.max(1, r), this._fractionalDividers.length > + 0 && Object(v.equal)(r, 1, 1e-14)) + for (n = 0, o = this._fractionalDividers[0]; Object(v.greaterOrEqual)(r, i * o, + 1e-14) && r > s + 1e-14;) r /= o, o = this._fractionalDividers[++n % + this._fractionalDividers.length]; + return r + } + } + class y { + constructor(e, t, i, s) { + this._marks = null, this._priceScale = e, this._base = t, this + ._coordinateToLogicalFunc = i, this._logicalToCoordinateFunc = s + } + base() { + return this._base + } + setBase(e) { + if (e < 0) throw new Error("base < 0"); + this._base = e + } + tickSpan(e, t, i = 0) { + if (e < t) throw new Error("high < low"); + const s = this._priceScale.height(), + r = (e - t) * this._tickMarkHeight() / s, + n = new S(this._base, [2, 2.5, 2]), + o = new S(this._base, [2, 2, 2.5]), + a = new S(this._base, [2.5, 2, 2]); + let l = 0; + const c = n.tickSpan(e, t, r); + c > i && (l = c); + const h = o.tickSpan(e, t, r); + h > i && (l = Math.min(l, h)); + const u = a.tickSpan(e, t, r); + return u > i && (l = Math.min(l, u)), l > 0 ? l : e - t + } + rebuildTickMarks() { + this._marks = null + } + marks() { + return null === this._marks && (this._marks = this._rebuildTickMarksImpl()), this + ._marks + } + _fontHeight() { + return this._priceScale.fontSize() + } + _tickMarkHeight() { + return Math.ceil(2.5 * this._fontHeight()) + } + _rebuildTickMarksImpl() { + const e = this._priceScale, + t = [], + i = e.mainSource(); + if (e.isEmpty() || null === i) return t; + let s = i.firstValue(); + null === s && (s = 0); + const r = e.height(), + n = this._coordinateToLogicalFunc(r - 1, s), + o = this._coordinateToLogicalFunc(0, s), + a = Math.max(n, o), + l = Math.min(n, o); + if (a === l) return t; + let c = this.tickSpan(a, l), + h = a % c; + h += h < 0 ? c : 0; + const u = a >= l ? 1 : -1; + let d = null; + const p = e.formatter(); + let _ = NaN; + for (let i = a - h; i > l; i -= c) { + i === _ && (c = this.tickSpan(a, l, c)), _ = i; + const r = this._logicalToCoordinateFunc(i, s); + null !== d && Math.abs(r - d) < this._tickMarkHeight() || (t.push({ + coord: r, + label: p.format(i) + }), d = r, e.isLog() && (c = this.tickSpan(i * u, l))) + } + return t + } + } + var w = i("CW80"), + P = i("mMWL"), + C = i("GH0z"), + x = i("kcTO"); + i.d(t, "PriceScaleBase", (function() { + return O + })); + const T = new C.PercentageFormatter, + I = new x.PriceFormatter(100, 1), + M = { + autoScale: !0, + autoScaleDisabled: !1, + lockScale: !1, + percentage: !1, + percentageDisabled: !1, + log: !1, + logDisabled: !1, + alignLabels: !0, + isInverted: !1, + indexedTo100: !1 + }; + class O { + constructor(e) { + this._marksCache = null, this._onMarksChanged = new o.a, this.m_dataSources = [], + this._sourcesForAutoscale = null, this._hasSeries = !1, this._studiesCount = 0, + this._drawingCount = 0, this._seriesLikeSources = [], this + ._seriesLikeSourcesSet = new Set, this._priceDataSources = [], this + ._mainSource = null, this._lastSourceRemoved = new o.a, this + ._scaleSeriesOnly = !1, this._invalidatedForRange = { + isValid: !0, + visibleBars: null + }, this.m_priceRange = null, this.m_height = 0, this._margins = { + top: 0, + bottom: 0 + }, this._correctedMarginsCache = null, this._topPixelMargin = 0, this + ._bottomPixelMargin = 0, this._internalHeightCache = null, this + ._internalHeightChanged = new o.a, this._priceRangeSnapshot = null, this + ._currencyCache = null, this._unitCache = null, this + ._recalculatePriceRangeOnce = !1, this._cachedOrderedSoruces = null, this + ._scaleStartPoint = null, this._maxPriceRange = null, this._minPriceRange = + null, this._priceRangeChanged = new o.a, this._sourcesToUpdateViews = null, this + ._markBuilder = new y(this, 100, this._coordinateToLogical.bind(this), this + ._logicalToCoordinate.bind(this)), this._formatter = null, this._id = "", + e = Object.assign({}, M, e), this._properties = new p.a(e) + } + id() { + return this._id + } + setId(e) { + this._id = e + } + isLog() { + return this._properties.childs().log.value() + } + isPercentage() { + return this._properties.childs().percentage.value() + } + isInverted() { + return this._properties.childs().isInverted.value() + } + isIndexedTo100() { + return this._properties.childs().indexedTo100.value() + } + isAutoScale() { + return this._properties.childs().autoScale.value() && !this.isLockScale() + } + isLockScale() { + return this._properties.childs().lockScale.value() + } + isRegular() { + return !this.isPercentage() && !this.isLog() && !this.isIndexedTo100() + } + properties() { + return this._properties + } + height() { + return this.m_height + } + setHeight(e) { + this.m_height !== e && (this.m_height = e, this._invalidateInternalHeightCache(), + this._marksCache = null) + } + internalHeight() { + if (this._internalHeightCache) return this._internalHeightCache; + const e = this.height() - this.topPixelMargin() - this.bottomPixelMargin(); + return this._internalHeightCache = e, e + } + priceRange() { + return this._makeSureItIsValid(), this.m_priceRange + } + setPriceRange(e, t, i) { + if (!(e instanceof l.PriceRange)) throw new TypeError("incorrect price range"); + const s = this.m_priceRange; + if (!t && l.PriceRange.compare(s, e)) return; + const r = null !== this._maxPriceRange && this._maxPriceRange.containsStrictly(e), + n = null !== this._minPriceRange && e.containsStrictly(this._minPriceRange); + this.isLockScale() && !t && (r || n) || (this._marksCache = null, this + .m_priceRange = e, i || this._priceRangeChanged.fire(s, e)) + } + setMinPriceRange(e) { + this._minPriceRange = e + } + setMaxPriceRange(e) { + this._maxPriceRange = e + } + recalculatePriceRangeOnce() { + this._recalculatePriceRangeOnce = !0 + } + priceRangeShouldBeRecalculatedOnce() { + if (!this._recalculatePriceRangeOnce || this.isLockScale()) return !1; + const e = this.mainSource(); + return null !== e && e.priceRangeReady() + } + priceRangeChanged() { + return this._priceRangeChanged + } + updateAllViews() { + const e = this._getSourcesToUpdateViews(); + for (const t of e) t.updateAllViews() + } + state() { + var e; + const t = this._properties.childs(); + return { + id: this._id, + m_priceRange: (null === (e = this.priceRange()) || void 0 === e ? void 0 : e + .serialize()) || null, + m_isAutoScale: this.isAutoScale(), + m_isPercentage: t.percentage.value(), + m_isIndexedTo100: t.indexedTo100.value(), + m_isLog: t.log.value(), + m_isLockScale: this.isLockScale(), + m_isInverted: this.isInverted(), + m_height: this.m_height, + m_topMargin: this._margins.top, + m_bottomMargin: this._margins.bottom, + alignLabels: t.alignLabels.value() + } + } + restoreState(e) { + let t = e.m_priceRange; + if (void 0 === t) throw new TypeError("invalid state"); + if (void 0 === e.m_isAutoScale) throw new TypeError("invalid state"); + void 0 !== e.id && (this._id = e.id); + const i = { + autoScale: e.m_isAutoScale + }; + void 0 !== e.m_isPercentage && (i.percentage = e.m_isPercentage), void 0 !== e + .m_isIndexedTo100 && (i.indexedTo100 = e.m_isIndexedTo100), void 0 !== e + .m_isLog && (i.log = e.m_isLog), void 0 !== e.m_isLockScale && (i.lockScale = e + .m_isLockScale), void 0 !== e.m_isInverted && this._properties.childs() + .isInverted.setValue(e.m_isInverted), void 0 !== e.m_height && this.setHeight( + Math.max(0, e.m_height)), this.setMode(i), t ? (t instanceof l.PriceRange || + (t = new l.PriceRange(t)), this.setPriceRange(t, !0)) : this.m_priceRange = + null, void 0 !== e.m_topMargin && (this._margins.top = e.m_topMargin), + void 0 !== e.m_bottomMargin && (this._margins.bottom = e.m_bottomMargin), + void 0 !== e.alignLabels && this._properties.childs().alignLabels.setValue(e + .alignLabels), this._mainSource = null, this._scaleSeriesOnly = !1 + } + priceToLogical(e) { + return this.isLog() && e ? Object(c.toLog)(e) : e + } + logicalToPrice(e) { + return this.isLog() ? Object(c.fromLog)(e) : e + } + priceToCoordinate(e, t) { + const i = this._priceToPercentOrIndexedTo100IfNeeded(e, t); + return this._logicalToCoordinate(i) + } + coordinateToPrice(e, t) { + let i = this._coordinateToLogical(e); + return this.isPercentage() ? i = Object(c.fromPercent)(i, t) : this + .isIndexedTo100() && (i = Object(c.fromIndexedTo100)(i, t)), i + } + mainSource() { + if (null !== this._mainSource) return this._mainSource; + let e; + for (const t of this.m_dataSources) { + if (t instanceof h.Series) { + e = t; + break + }!e && t instanceof u.PriceDataSource && (e = t) + } + return this._mainSource = e || null, this._correctedMarginsCache = null, this + ._mainSource + } + pricesArrayToCoordinates(e, t, i) { + this._makeSureItIsValid(); + const r = this.bottomPixelMargin(), + n = Object(s.ensureNotNull)(this.priceRange()), + o = n.minValue(), + a = n.maxValue(), + l = this.internalHeight() - 1, + h = this.isInverted(), + u = l / (a - o); + void 0 === i && (i = e.length); + const d = this.isPercentage(), + p = this.isIndexedTo100(), + _ = this.isLog(), + m = this.m_height; + let f, g; + for (let s = 0; s < i; s++) f = e[s], Number.isFinite(f) && (d ? f = Object(c + .toPercent)(f, t) : p ? f = Object(c.toIndexedTo100)(f, t) : _ && (f = + Object(c.toLog)(f)), g = r + u * (f - o), e[s] = h ? g : m - 1 - g) + } + pointsArrayToCoordinates(e, t) { + this._makeSureItIsValid(); + const i = Object(s.ensureNotNull)(this.priceRange()), + r = this.bottomPixelMargin(), + n = i.minValue(), + o = i.maxValue(), + a = this.internalHeight() - 1, + l = this.isInverted(), + h = a / (o - n), + u = e; + if (this.isPercentage()) + for (let e = 0; e < u.length; e++) u[e].y = Object(c.toPercent)(u[e].y, t); + if (this.isIndexedTo100()) + for (let e = 0; e < u.length; e++) u[e].y = Object(c.toIndexedTo100)(u[e].y, t); + if (this.isLog()) + for (let e = 0; e < u.length; e++) u[e].y = this.priceToLogical(u[e].y); + for (let e = 0; e < u.length; e++) { + const t = u[e].y; + if (isNaN(t) || null == t) continue; + const i = r + h * (t - n), + s = l ? i : this.m_height - 1 - i; + u[e].y = s + } + } + barPricesToCoordinates(e, t) { + this._makeSureItIsValid(); + const i = Object(s.ensureNotNull)(this.priceRange()), + r = e, + n = this.bottomPixelMargin(), + o = i.minValue(), + a = i.maxValue(), + l = this.internalHeight() - 1; + let h = null; + if (this.isPercentage() ? h = c.toPercent : this.isIndexedTo100() ? h = c + .toIndexedTo100 : this.isLog() && (h = (e, t) => e ? Object(c.toLog)(e) : e), + null !== h) + for (let e = 0; e < r.length; e++) r[e] && (r[e].open = h(r[e].open, t), r[e] + .high = h(r[e].high, t), r[e].low = h(r[e].low, t), r[e].close = h(r[e] + .close, t), void 0 !== r[e].additionalPrice && (r[e] + .additionalPrice = h(r[e].additionalPrice, t))); + const u = l / (a - o), + d = this.isInverted(); + for (let e = 0; e < r.length; e++) { + const t = r[e]; + if (!t) continue; + const i = n + u * (t.open - o), + s = d ? i : this.m_height - 1 - i; + t.open = s; + const a = n + u * (t.high - o), + l = d ? a : this.m_height - 1 - a; + t.high = l; + const c = n + u * (t.low - o), + h = d ? c : this.m_height - 1 - c; + t.low = h; + const p = n + u * (t.close - o), + _ = d ? p : this.m_height - 1 - p; + if (t.close = _, void 0 !== t.additionalPrice) { + const e = n + u * (t.additionalPrice - o); + t.additionalPrice = d ? e : this.m_height - 1 - e + } + } + } + formatter() { + return null === this._formatter && this.updateFormatter(), Object(s.ensureNotNull)( + this._formatter) + } + updateFormatter() { + this._marksCache = null; + const e = this.mainSource(); + let t = 100; + e && (t = e.base()), this._formatter = null, this.isPercentage() ? (this + ._formatter = T, t = 100) : this.isIndexedTo100() ? (this._formatter = new x + .PriceFormatter(100, 1), t = 100) : this._formatter = e ? e.formatter() : I, + this._markBuilder = new y(this, t, this._coordinateToLogical.bind(this), this + ._logicalToCoordinate.bind(this)), this._markBuilder.rebuildTickMarks() + } + formatPrice(e, t) { + const i = this._priceToPercentOrIndexedTo100IfNeeded(e, t); + return this.formatter().format(i) + } + formatPriceAbsolute(e) { + return this._mainSourceFormatter().format(e) + } + formatPricePercentage(e, t, i) { + return e = Object(c.toPercent)(e, t), T.format(e, i) + } + dataSources() { + return this.m_dataSources + } + seriesLikeSources() { + return this._seriesLikeSources + } + addDataSource(e, t) { + if (t || -1 === this.m_dataSources.indexOf(e)) { + if (e instanceof u.PriceDataSource && (this._priceDataSources.push(e), e + .currencyChanged().subscribe(this, () => this._currencyCache = null), e + .unitChanged().subscribe(this, () => this._unitCache = null), Object(m + .isSymbolSource)(e) && (this._seriesLikeSources.push(e), this + ._seriesLikeSourcesSet.add(e), e.symbolResolved().subscribe(this, + () => { + this._currencyCache = null, this._unitCache = null + }), e instanceof h.Series))) { + const t = e.properties(); + this._hasSeries || (t.childs().lockScale && (this.setMode({ + lockScale: t.childs().lockScale.value() + }), t.removeProperty("lockScale")), t.childs().pnfStyle.childs() + .lockScale && t.childs().pnfStyle.removeProperty("lockScale")), this + ._hasSeries = !0 + } + e.properties().visible.listeners().subscribe(this, this._dropScaleCache), + Object(_.isStudy)(e) && (e.onIsActualIntervalChange().subscribe(this, this + ._dropScaleCache), 0 === this._studiesCount && Object(P + .hideAllIndicators)().subscribe(this, this._dropScaleCache), this + ._studiesCount++), Object(w.isLineTool)(e) && (0 === this + ._drawingCount && Object(P.hideAllDrawings)().subscribe(this, this + ._dropScaleCache), this._drawingCount++), this.m_dataSources.push( + e), this._mainSource = null, this._correctedMarginsCache = null, this + ._sourcesToUpdateViews = null, this._dropScaleCache(), this + .updateFormatter(), this._initScaleProperties(), this + .invalidateSourcesCache() + } + } + removeDataSource(e) { + const t = this.m_dataSources.indexOf(e); + if (Object(s.assert)(-1 !== t, "Source is not attached to scale"), e.properties() + .visible.listeners().unsubscribe(this, this._dropScaleCache), this.m_dataSources + .splice(t, 1), e instanceof u.PriceDataSource) { + const t = this._priceDataSources.indexOf(e); + if (Object(s.assert)(-1 !== t, "Source is not found"), this._priceDataSources + .splice(t, 1), Object(m.isSymbolSource)(e)) { + const t = this._seriesLikeSources.indexOf(e); + Object(s.assert)(-1 !== t, "Source is not found"), this._seriesLikeSources + .splice(t, 1), this._seriesLikeSourcesSet.delete(e), e.symbolResolved() + .unsubscribeAll(this), e instanceof h.Series && (this._hasSeries = !1) + } + e.currencyChanged().unsubscribeAll(this), e.unitChanged().unsubscribeAll(this) + } + this.mainSource() || this.setMode({ + autoScale: !0 + }), Object(_.isStudy)(e) && (e.onIsActualIntervalChange().unsubscribe(this, this + ._dropScaleCache), this._studiesCount--, 0 === this._studiesCount && + Object(P.hideAllIndicators)().unsubscribe(this, this._dropScaleCache)), + Object(w.isLineTool)(e) && (this._drawingCount--, 0 === this._drawingCount && + Object(P.hideAllDrawings)().unsubscribe(this, this._dropScaleCache)), this + ._mainSource = null, this._correctedMarginsCache = null, this + ._sourcesForAutoscale = null, + this._sourcesToUpdateViews = null, this.updateFormatter(), this + .invalidateSourcesCache(), 0 === this.m_dataSources.length && this + ._lastSourceRemoved.fire(), this._currencyCache = null, this._unitCache = null + } + currency(e) { + if (null !== this._currencyCache && e.size() === this._currencyCache + .availableCurrenciesCount) return this._currencyCache.value; + let t; + const i = new Set, + r = new Set, + n = new Set, + o = new Map; + let a, l = 0 === this._seriesLikeSources.length, + c = !0, + h = 0, + u = 0; + for (const u of this._seriesLikeSources) { + if (!u.isVisible()) continue; + const d = u.symbolInfo(); + if (null === d) { + t = null; + break + } + const p = Object(f.symbolOriginalCurrency)(d); + if (null === p) { + t = null; + break + } + o.set(p, Object(s.ensureNotNull)(Object(f.symbolOriginalCurrency)(d, !0))); + const _ = u.currency(); + if (null === _) { + t = null; + break + } + o.set(_, Object(s.ensureNotNull)(Object(f.symbolCurrency)(d, !0))); + const m = Object(f.symbolBaseCurrency)(d); + null !== m && r.add(m), c = c && p === _, n.add(_), i.add(p), void 0 === a ? a = + _ : null !== a && a !== _ && (a = null), l || e.convertible(_) && Object(f + .symbolCurrencyConvertible)(d) || (l = !0), h += 1 + } + if (null !== t) + for (const i of this._priceDataSources) { + if (this._seriesLikeSourcesSet.has(i)) continue; + const r = i; + if (!r.isCurrencySource() || !r.isVisible()) continue; + const c = r.currency(); + if (null === c) { + t = null; + break + } + n.add(c), u += 1; + const d = Object(s.ensureNotNull)(r.symbolSource()), + p = d.symbolInfo(); + if (null === p) { + t = null; + break + } + if (l || e.convertible(c) && Object(f.symbolCurrencyConvertible)(p) || ( + l = !0), o.set(c, Object(s.ensureNotNull)(Object(f.symbolCurrency)( + p, !0))), !this._seriesLikeSourcesSet.has(d) || !d.isVisible()) { + if (h > 0) a = null; + else if (void 0 === a) a = c; + else if (null !== a && a !== c) { + a = null; + break + } + l = !0; + break + } + } + return void 0 === t && (t = 0 === h && 0 === u ? null : { + readOnly: l, + selectedCurrency: a || null, + currencies: n, + originalCurrencies: i, + baseCurrencies: r, + symbolSourceCount: h, + allCurrenciesAreOriginal: c, + displayedValues: o + }), this._currencyCache = { + value: t, + availableCurrenciesCount: e.size() + }, t + } + unit(e) { + if (null !== this._unitCache && e.size() === this._unitCache.availableUnitsCount) + return this._unitCache.value; + let t; + const i = new Set, + r = new Set, + n = new Map, + o = new Map; + let l, c = 0 === this._seriesLikeSources.length ? new Set : e.allGroups(), + h = !0, + u = 0, + d = 0; + for (const s of this._seriesLikeSources) { + if (!s.isVisible()) continue; + const d = s.symbolInfo(); + if (null === d) { + t = null; + break + } + const p = Object(f.symbolOriginalUnit)(d); + if (null === p) { + t = null; + break + } + n.set(p, e.name(p)), o.set(p, e.description(p)); + const _ = s.unit(); + if (null === _) { + t = null; + break + } + if (n.set(_, e.name(_)), o.set(_, e.description(_)), h = h && p === _, r.add(_), + i.add(p), void 0 === l ? l = _ : null !== l && l !== _ && (l = null), c + .size > 0) { + const t = Object(g.unitConvertibleGroups)(d, _, e); + c = Object(a.intersect)(c, new Set(t)) + } + u += 1 + } + if (null !== t) + for (const i of this._priceDataSources) { + if (this._seriesLikeSourcesSet.has(i)) continue; + const h = i; + if (!h.isUnitSource() || !h.isVisible()) continue; + const p = h.unit(); + if (null === p) { + t = null; + break + } + r.add(p), d += 1; + const _ = Object(s.ensureNotNull)(h.symbolSource()), + m = _.symbolInfo(); + if (null === m) { + t = null; + break + } + if (c.size > 0) { + const t = Object(g.unitConvertibleGroups)(m, p, e); + c = Object(a.intersect)(c, new Set(t)) + } + if (n.set(p, e.name(p)), o.set(p, e.description(p)), + !this._seriesLikeSourcesSet.has(_) || !_.isVisible()) { + if (u > 0) l = null; + else if (void 0 === l) l = p; + else if (null !== l && l !== p) { + l = null; + break + } + c = new Set; + break + } + } + if (void 0 === t) + if (0 === u && 0 === d) t = null; + else { + const e = l || null; + t = { + availableGroups: c, + selectedUnit: e, + units: r, + originalUnits: i, + symbolSourceCount: u, + allUnitsAreOriginal: h, + names: n, + descriptions: o + } + } return this._unitCache = { + value: t, + availableUnitsCount: e.size() + }, t + } + setMargins(e) { + if (!Object(r.isNumber)(e.top) || !Object(r.isNumber)(e.bottom)) + throw new TypeError("invalid margin"); + if (e.top < 0 || e.top > 30 || e.bottom < 0 || e.bottom > 30) throw new RangeError( + "invalid margin"); + this._margins.top === e.top && this._margins.bottom === e.bottom || (this._margins = + e, this._correctedMarginsCache = null, this + ._invalidateInternalHeightCache(), this._marksCache = null) + } + topMargin() { + return this._correctedMargins().top + } + bottomMargin() { + return this._correctedMargins().bottom + } + invalidateMargins() { + this._correctedMarginsCache = null + } + topPixelMargin() { + return this.isInverted() ? this.bottomMargin() * this.height() + this + ._bottomPixelMargin : this.topMargin() * this.height() + this._topPixelMargin + } + bottomPixelMargin() { + return this.isInverted() ? this.topMargin() * this.height() + this._topPixelMargin : + this.bottomMargin() * this.height() + this._bottomPixelMargin + } + marks() { + return this._makeSureItIsValid(), null === this._marksCache && (this._markBuilder + .rebuildTickMarks(), this._marksCache = this._markBuilder.marks(), this + ._onMarksChanged.fire()), this._marksCache + } + onMarksChanged() { + return this._onMarksChanged + } + priceRangeInPrice() { + if (this.isEmpty()) return null; + const e = this.mainSource(); + if (null === e) return null; + const t = Object(s.ensureNotNull)(e.firstValue()), + i = this.height(); + return { + from: this.coordinateToPrice(i - 1, t), + to: this.coordinateToPrice(0, t) + } + } + setPriceRangeInPrice(e) { + if (this.isPercentage() || this.isIndexedTo100()) return; + const t = this.isInverted(), + i = t ? this.bottomMargin() : this.topMargin(), + s = t ? this.topMargin() : this.bottomMargin(), + r = this.isLog(); + let n = r ? Object(c.toLog)(e.from) : e.from, + o = r ? Object(c.toLog)(e.to) : e.to; + const a = o - n; + n += s * a, o -= i * a, this.setMode({ + autoScale: !1 + }), this.setPriceRange(new l.PriceRange(n, o)), this._marksCache = null, this + ._onMarksChanged.fire() + } + hasMainSeries() { + return this._hasSeries + } + getStudies() { + return this.dataSources().filter(_.isStudy) + } + lastSourceRemoved() { + return this._lastSourceRemoved + } + sourcesForAutoscale() { + return this._mainSource && this._scaleSeriesOnly !== this._scalesProperties.childs() + .scaleSeriesOnly.value() && (this._sourcesForAutoscale = null), this + ._sourcesForAutoscale || (this._sourcesForAutoscale = this + ._recalculateSourcesForAutoscale()), this._sourcesForAutoscale + } + recalculatePriceRange(e) { + this._invalidatedForRange = { + visibleBars: e, + isValid: !1 + } + } + internalHeightChanged() { + return this._internalHeightChanged + } + orderedSources() { + if (this._cachedOrderedSoruces) return this._cachedOrderedSoruces; + let e = this.m_dataSources.slice(); + return e = Object(b.sortSources)(e), this._cachedOrderedSoruces = e, this + ._cachedOrderedSoruces + } + invalidateSourcesCache() { + this._cachedOrderedSoruces = null, this._sourcesToUpdateViews = null + } + startScale(e) { + if (this.isPercentage() || this.isIndexedTo100()) return; + if (null !== this._scaleStartPoint || null !== this._priceRangeSnapshot) return; + if (this.isEmpty()) return; + this._scaleStartPoint = this.m_height - e; + const t = this.priceRange(); + this._priceRangeSnapshot = t && t.clone() + } + scaleTo(e) { + if (this.isPercentage() || this.isIndexedTo100()) return; + if (null === this._scaleStartPoint) return; + this.setMode({ + autoScale: !1 + }), (e = this.m_height - e) < 0 && (e = 0); + let t = (this._scaleStartPoint + .2 * (this.m_height - 1)) / (e + .2 * (this + .m_height - 1)); + const i = Object(s.ensureNotNull)(this._priceRangeSnapshot).clone(); + t = Math.max(t, .1), i.scaleAroundCenter(t), this.setPriceRange(i) + } + endScale() { + this.isPercentage() || this.isIndexedTo100() || null !== this._scaleStartPoint && ( + this._scaleStartPoint = null, this._priceRangeSnapshot = null) + } + _recalculateSourcesForAutoscale() { + this._mainSource && (this._scaleSeriesOnly = this._scalesProperties.childs() + .scaleSeriesOnly.value()); + const e = this._scaleSeriesOnly && this._hasSeries; + return this.m_dataSources.filter(t => !!(t.properties().visible.value() || + t instanceof h.Series) && (e ? t instanceof h.Series : Object(_.isStudy) + (t) ? !t.isSourceHidden() && t.isIncludedInAutoScale() : t + .isIncludedInAutoScale())) + } + _updateAutoScaleDisabledProperty(e) { + const t = this._properties.childs(), + i = t.indexedTo100.value() || t.percentage.value() || t.lockScale.value(); + e ? t.autoScaleDisabled.setValueSilently(i) : t.autoScaleDisabled.setValue(i) + } + _setAutoScaleValueWithDependentProperties(e) { + const t = this._properties.childs(); + t.autoScale.setValueSilently(e), e && (t.percentage.setValueSilently(!1), t + .indexedTo100.setValueSilently(!1), t.lockScale.setValueSilently(!1), t + .logDisabled.setValueSilently(!1)), this._updateAutoScaleDisabledProperty(! + 0) + } + _setLockScaleValueWithDependentProperties(e) { + const t = this._properties.childs(); + t.lockScale.setValueSilently(e), e && (t.autoScale.setValueSilently(!1), t + .percentage.setValueSilently(!1), t.indexedTo100.setValueSilently(!1), t.log + .setValueSilently(!1)), t.percentageDisabled.setValueSilently(e), t + .logDisabled.setValueSilently(e), this._updateAutoScaleDisabledProperty(!0) + } + _setPercentageValueWithDependentProperties(e) { + const t = this._properties.childs(); + t.percentage.setValueSilently(e), e && (t.autoScale.setValueSilently(!0), t.log + .setValueSilently(!1), t.lockScale.setValueSilently(!1), t.indexedTo100 + .setValueSilently(!1)), this._updateAutoScaleDisabledProperty(!0) + } + _setIndexedTo100ValueWithDependentProperties(e) { + const t = this._properties.childs(); + t.indexedTo100.setValueSilently(e), e && (t.autoScale.setValueSilently(!0), t.log + .setValueSilently(!1), t.lockScale.setValueSilently(!1), t.percentage + .setValueSilently(!1)), this._updateAutoScaleDisabledProperty(!0) + } + _setLogValueWithDependentProperties(e) { + const t = this._properties.childs(); + t.log.setValueSilently(e), e && (t.lockScale.setValueSilently(!1), t.percentage + .setValueSilently(!1), t.indexedTo100.setValueSilently(!1)), this + ._updateAutoScaleDisabledProperty(!0) + } + _recalculatePriceRangeImpl() { + const e = this._invalidatedForRange.visibleBars; + if (null === e) return; + let t = null; + const i = this.sourcesForAutoscale(), + s = this.isPercentage(), + r = this.isIndexedTo100(); + let n = 0, + o = 0; + for (const a of i) { + if (!a.properties().visible.value()) continue; + const i = a.firstValue(); + if (null === i) continue; + const l = e.firstBar(), + h = e.lastBar(), + u = a.autoScaleInfo(l, h); + let d = u.range; + d && (s ? d = Object(c.toPercentRange)(d, i) : r && (d = Object(c + .toIndexedTo100Range)(d, i)), t = null === t ? d : t.merge(d)), + void 0 !== u.topPixelMargin && (n = Math.max(n, u.topPixelMargin)), + void 0 !== u.bottomPixelMargin && (o = Math.max(o, u.bottomPixelMargin)) + }(Math.abs(n - this._topPixelMargin) > 0 || Math.abs(o - this._bottomPixelMargin) > + 0) && (this._bottomPixelMargin = o, this._topPixelMargin = n, this._marksCache = + null, this._invalidateInternalHeightCache()), t ? (t.minValue() === t + .maxValue() && (t = new l.PriceRange(t.minValue() - .5, t.maxValue() + .5)), + this.setPriceRange(t)) : this.m_priceRange || this.setPriceRange(new l + .PriceRange(-.5, .5)), this._invalidatedForRange.isValid = !0; + const a = this.mainSource(); + null !== a && this._recalculatePriceRangeOnce && (this + ._recalculatePriceRangeOnce = !a.priceRangeReady()) + } + _makeSureItIsValid() { + this._invalidatedForRange.isValid || (this._invalidatedForRange.isValid = !0, this + ._recalculatePriceRangeImpl()) + } + _invalidateInternalHeightCache() { + this._internalHeightCache = null, this._internalHeightChanged.fire() + } + _coordinateToLogical(e) { + if (this._makeSureItIsValid(), this.isEmpty()) return 0; + const t = this._invertedCoordinate(e), + i = Object(s.ensureNotNull)(this.priceRange()), + r = i.minValue() + (i.maxValue() - i.minValue()) * ((t - this + .bottomPixelMargin()) / (this.internalHeight() - 1)); + return this.logicalToPrice(r) + } + _logicalToCoordinate(e) { + if (this._makeSureItIsValid(), this.isEmpty()) return 0; + e = this.priceToLogical(e); + const t = Object(s.ensureNotNull)(this.priceRange()), + i = this.bottomPixelMargin() + (this.internalHeight() - 1) * (e - t + .minValue()) / (t.maxValue() - t.minValue()); + return this._invertedCoordinate(i) + } + _dropScaleCache() { + this._sourcesForAutoscale = null, this._currencyCache = null, this._unitCache = null + } + _invertedCoordinate(e) { + return this.isInverted() ? e : this.height() - 1 - e + } + _initScaleProperties() { + const e = this.isLockScale(), + t = this.properties().childs(); + e && (t.percentage.setValue(!1), t.indexedTo100.setValue(!1), t.log.setValue(!1), t + .autoScale.setValue(!1)), t.percentageDisabled.setValue(e), t.logDisabled + .setValue(e), this._updateAutoScaleDisabledProperty(!1), t.percentage.value() && + (t.log.setValue(!1), t.indexedTo100.setValue(!1)), t.indexedTo100.value() && (t + .log.setValue(!1), t.percentage.setValue(!1)) + } + _correctedMargins() { + if (null === this._correctedMarginsCache) { + const e = this.mainSource(); + this._correctedMarginsCache = null !== e ? e.correctScaleMargins(this + ._margins) : this._margins + } + return this._correctedMarginsCache + } + _getSourcesToUpdateViews() { + return this._sourcesToUpdateViews || (this._sourcesToUpdateViews = this + .m_dataSources.filter(e => !Object(w.isLineTool)(e) || e.isActualSymbol() && + e.isActualCurrency())), this._sourcesToUpdateViews + } + _mainSourceFormatter() { + const e = this.mainSource(); + return (null == e ? void 0 : e.formatter()) || I + } + _priceToPercentOrIndexedTo100IfNeeded(e, t) { + return this.isPercentage() ? Object(c.toPercent)(e, t) : this.isIndexedTo100() ? + Object(c.toIndexedTo100)(e, t) : e + } + } + }, + Yjuu: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "bcXK", 7)).then(({ + FibSpeedResistanceArcsPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 2 + } + name() { + return "Fib Speed Resistance Arcs" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + static createProperties(e) { + var t = new r("linetoolfibspeedresistancearcs", e, !1, { + range: [1, 11] + }); + return l._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "pdv6"))) + .FibSpeedResistanceArcsDefinitionsViewModel + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("trendline").child("linewidth")], i = [e.child("trendline") + .child("color") + ], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r).child( + "linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.LevelsCount = 11, t.LineToolFibSpeedResistanceArcs = l + }, + YlKu: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ApplyLineToolTemplateUndoCommand", (function() { + return r + })); + var s = i("RDU5"); + class r extends s.UndoCommand { + constructor(e, t, i) { + super(i), this._source = e, this._newState = t, this._oldState = e.properties() + .state() + } + redo() { + this._source.applyTemplate(this._newState) + } + undo() { + this._source.applyTemplate(this._oldState) + } + } + }, + YmeR: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ActionBinder", (function() { + return s + })); + class s { + constructor(e, t, i, s, r = null) { + this._property = t, this._undoModel = i, this._undoText = s, this._action = e, this + .setValue(t.value()), t.subscribe(this, this._propertyChanged), null !== r ? e + .update({ + onExecute: r.bind(this) + }) : e.update({ + onExecute: this._onActionCallback.bind(this) + }) + } + destroy() { + this._property.unsubscribe(this, this._propertyChanged) + } + value() { + return this._action.isChecked() + } + setValue(e) { + this._action.update({ + checked: Boolean(e) + }) + } + _onActionCallback() { + this._undoModel.setProperty(this._property, this.value(), this._undoText) + } + _propertyChanged(e) { + this.setValue(e.value()) + } + } + }, + "Yt+L": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + var s = i("Eyy1"), + r = i("RDU5"), + n = i("n5al"); + class o extends r.UndoCommand { + constructor(e, t, i, r) { + super(r), this._newSourcesUnits = new Map, this._oldSourcesUnits = new Map, this + ._showFade = !1, this._chartWidget = i; + const o = i.model().mainSeries(); + for (const i of e.seriesLikeSources()) { + if (!i.isVisible()) continue; + const e = t || Object(n.symbolOriginalUnit)(Object(s.ensureNotNull)(i + .symbolInfo())); + this._newSourcesUnits.set(i.id(), e), this._oldSourcesUnits.set(i.id(), i + .unit()), this._showFade = this._showFade || i === o && i.unit() !== + e + } + } + redo() { + this._applyUnits(this._newSourcesUnits) + } + undo() { + this._applyUnits(this._oldSourcesUnits) + } + _applyUnits(e) { + this._showFade && this._chartWidget.screen.show(); + const t = this._chartWidget.model().model(); + e.forEach((e, i) => { + Object(s.ensureNotNull)(t.dataSourceForId(i)).setUnit(e) + }), this._chartWidget.model().selectionMacro(e => { + e.clearSelection() + }) + } + } + }, + YuHv: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("AWC/"); + + function r(e = [], t = []) { + const i = document.createElement("div"), + r = document.createElement("div"); + return i.appendChild(r), i.classList.add(s.container), r.classList.add(s.inner), e.forEach( + e => { + i.classList.add(s[e]) + }), t.forEach(e => { + i.classList.add(s[e]) + }), i + } + }, + YzC7: function(e, t, i) { + "use strict"; + var s = i("Eyy1"), + r = i("GVHu"), + n = i("n5al"), + o = i("tc+8"), + a = i.n(o), + l = i("Kxc7"), + c = i("oXaB"), + h = i("KcY8"); + const u = l.enabled("force_exchange_as_title"); + class d extends h.a { + constructor(e, t) { + super(), this._studyCompare = e, this._data = t + } + _updateRendererData(e, t, i) { + e.visible = !1, t.visible = !1; + const s = this._studyCompare.priceScale(), + r = this._studyCompare.lastValueData(this._data.plotIndex, !1); + if (r.noData || null === s || s.isEmpty()) return; + i.background = r.color, i.textColor = this.generateTextColor(r.color), i + .coordinate = r.coordinate, i.floatCoordinate = r.floatCoordinate; + const n = this._studyCompare.model().properties().scalesProperties; + if (n.showSeriesLastValue.value()) { + const t = s.isPercentage(); + e.text = t ? r.formattedPricePercentage : r.formattedPriceAbsolute, n + .seriesLastValueMode.value() !== c.PriceAxisLastValueMode + .LastPriceAndPercentageValue ? e.secondLine = "" : e.secondLine = t ? r + .formattedPriceAbsolute : r.formattedPricePercentage, e.visible = !0 + } + t.text = "", n.showSymbolLabels.value() && (t.text = this._paneText(), t + .visible = t.text.length > 0) + } + _paneText() { + let e = ""; + const t = this._studyCompare.symbolInfo(); + return u ? e = Object(n.displayedSymbolExchange)(t) : this._studyCompare.model() + .properties().scalesProperties.showSymbolLabels.value() && (e = Object(n + .displayedSymbolName)(t)), e + } + } + var p = i("it7y"), + _ = i("e92V"), + m = i("mMWL"), + f = i("qFKp"), + g = i("ogJP"), + b = i("EYFt"); + class v extends b.a { + constructor(e, t) { + super(e, t), this._emptyValues[0].title = e.guiPlotName("") + } + _hideValues() { + return !1 + } + } + const S = f.CheckMobile.any(); + class y extends p.StudyDataWindowView { + constructor(e, t) { + super(e, t), this._studyCompare = e + } + _hideValues() { + return !1 + } + _createValuesProvider(e, t) { + return new v(e, t) + } + _currentIndex() { + const e = this._model.crossHairSource().lockedIndex; + let t; + return S && (null === this._model.crossHairSource().pane && void 0 === e || + Object(_.isLineToolName)(m.tool.value()) || null !== this._model + .lineBeingEdited()) ? t = this._study.data().lastIndex() : (t = this + ._model.crossHairSource().appliedIndex(), Object(g.isNumber)(t) || (t = + this._study.data().lastIndex())), t + } + } + class w extends y { + constructor(e, t) { + super(e, t), this._additional = null, this._showSeriesOHLC = t.properties() + .paneProperties.legendProperties.showSeriesOHLC, this._showSeriesOHLC.subscribe( + this, this.update) + } + isValuesVisible() { + return this._showSeriesOHLC.value() + } + destroy() { + this._showSeriesOHLC.unsubscribeAll(this) + } + additional() { + return this._additional + } + _updateImpl() { + super._updateImpl() + } + } + var P = i("2kV1"), + C = i("W+6j"); + class x extends C.a { + getSplitTitle() { + return this._source.titleInParts(!0, void 0, !1, !1) + } + text() { + return this._source.isActualInterval() ? this._source.isFailed() ? + `${this._source.title(!0, void 0, !1, !1)}: ${this.sourceStatusText()}` : + `${this._source.title(!0, void 0, !1, !1)} ${this.sourceStatusText()}` : + this._source.title(!0, void 0, !1, !1) + } + } + var T = i("WkOR"); + i.d(t, "a", (function() { + return E + })); + const I = l.enabled("study_overlay_compare_legend_option"), + M = l.enabled("force_exchange_as_title"), + O = l.enabled("uppercase_instrument_names"), + L = !l.enabled("hide_study_compare_legend_item"), + A = l.enabled("hide_unresolved_symbols_in_legend"); + class E extends r.Study { + constructor(e, t, i, s) { + t.hasChild("currencyId") || t.addChild("currencyId", new a.a(null)), t.hasChild( + "unitId") || t.addChild("unitId", new a.a(null)), t.addExclusion( + "currencyId"), t.addExclusion("unitId"), super(e, t, i, s), this + .properties().childs().minTick.subscribe(null, () => this + ._recreatePriceFormattingDependencies()), this.properties().childs() + .minTick.subscribe(null, () => this._model.fullUpdate()), this.properties() + .childs().currencyId.subscribe(this, this._onCurrencyChanged), this + .properties().childs().unitId.subscribe(this, this._onUnitChanged), this + .properties().merge({ + skipHistogramBaseOnAutoScale: !0 + }) + } + properties() { + return super.properties() + } + createPriceAxisView(e) { + return new d(this, { + plotIndex: "compare" + }) + } + setSymbolCurrencyUnit(e, t, i) { + this._setSymbolCurrencyUnitInternal(e, t, i) + } + symbol() { + return this._properties.inputs.symbol.value() + } + setSymbol(e) { + this.setSymbolCurrencyUnit(e) + } + symbolInfo() { + if (!this._resolvedSymbols) return null; + const e = this._properties.inputs.symbol.value(); + if (!e) return null; + let t; + return t = this._resolvedSymbols[this._getSymbolForResolve(e)] || null, t + } + symbolResolved() { + return this.symbolsResolved() + } + symbolSameAsCurrent(e) { + return Object(T.b)(e, this.symbol(), this.symbolInfo()) + } + currency() { + return this._properties.currencyId.value() || null + } + setCurrency(e) { + this.setSymbolCurrencyUnit(void 0, e) + } + isConvertedToOtherCurrency() { + return Object(n.isConvertedToOtherCurrency)(this.symbolInfo()) + } + unit() { + return this._properties.unitId.value() || null + } + setUnit(e) { + this._properties.unitId.setValue(e) + } + isConvertedToOtherUnit() { + return Object(n.isConvertedToOtherUnit)(this.symbolInfo()) + } + style() { + return 2 + } + symbolSource() { + return this + } + state(e, t) { + const i = super.state(e, t); + return e && (Object(s.ensureDefined)(i.data).symbols = { + ___snapshot: this.symbolInfo() || void 0 + }), i + } + symbolTitle(e, t) { + return this.title(!0, {}, !1, e) + } + titleInParts(e, t, i, s) { + const r = this._titleInParts(e, t, i, s).join(", "); + return [O ? r.toUpperCase() : r] + } + tags() { + const e = this.symbol(); + return e ? [e] : [] + } + statusView() { + return L ? super.statusView() : null + } + guiPlotName(e) { + return this.properties().childs().inputs.childs().symbol.value() + } + canOverrideMinTick() { + return !0 + } + canBeHiddenByGlobalFlag() { + return !1 + } + valuesProvider() { + return new v(this, this.model()) + } + statusProvider(e) { + return new x(this, this._model.properties().scalesProperties.textColor) + } + _createViews() { + this._legendView || (this._legendView = new w(this, this._model)), this + ._dataWindowView || (this._dataWindowView = new y(this, this._model)), this + ._statusView || (this._statusView = new P.StudyStatusView(this)), super + ._createViews() + } + _showLastValueOnPriceScale() { + return this._model.properties().scalesProperties.showSeriesLastValue.value() + } + _onCurrencyChanged() { + this.isStarted() && this._tryChangeInputs(), this._currencyChanged.fire() + } + _onUnitChanged() { + this.isStarted() && this._tryChangeInputs(), + this._unitChanged.fire() + } + _getSymbolObject(e) { + const t = super._getSymbolObject(e), + i = this.currency(); + null !== i && (t["currency-id"] = i); + const s = this.unit(); + return null !== s && (t["unit-id"] = s), t + } + _getSymbolForApi(e) { + return Object(n.symbolForApi)(this._resolvedSymbolsByInput[e] || null, e) + } + _onSymbolResolved(e, t, i) { + super._onSymbolResolved(e, t, i), this._recreatePriceFormattingDependencies(); + const s = t === this.symbol() ? Object(n.extractSymbolNameFromSymbolInfo)(i, + this.symbol()) : null, + r = Object(n.symbolCurrency)(i), + o = Object(n.symbolUnit)(i); + this._setSymbolCurrencyUnitInternal(s || void 0, r, o, i), this.model() + .realignLineTools() + } + _changeInputsImpl(e, t) { + super._changeInputsImpl(e, t), e.symbol !== t.symbol && this._model + .realignLineTools() + } + _createStudyOnServer() { + super._createStudyOnServer(), this._model.realignLineTools() + } + _tryCreateFormatter() { + const e = this.symbolInfo(); + return Object(n.createSeriesFormatter)(e, this.properties().childs().minTick + .value()) + } + _titleInParts(e, t, i, s) { + const r = this.properties().childs().inputs.childs().symbol.value(), + n = this.symbolInfo(), + o = n && n.exchange && 0 !== n.exchange.length; + let a; + if (M && o && n) a = n.exchange; + else if (n) { + if (a = n.name, I) switch (this._model.mainSeries().properties() + .statusViewStyle.symbolTextSource.value()) { + case "description": + a = n.description; + break; + case "ticker-and-description": + a = `${n.name}, ${n.description}` + } else if (o && !s) return [a, [n.exchange]] + } else a = A ? "" : r; + return [a] + } + _setSymbolCurrencyUnitInternal(e, t, i, s) { + const r = this.properties().childs(), + o = r.inputs.childs().symbol.value(), + a = r.currencyId.value(), + l = r.unitId.value(); + if (void 0 !== e && e !== o && r.inputs.childs().symbol.setValueSilently(e), + void 0 !== t && t !== a && r.currencyId.setValueSilently(t), void 0 !== i && + i !== l && r.unitId.setValueSilently(i), s) this._resolvedSymbolsByInput[ + this.symbol()] = s, this._resolvedSymbols[this._getSymbolForResolve(this + .symbol())] = s; + else { + const e = this.symbolInfo(); + null !== e && (r.currencyId.setValueSilently(Object(n.symbolCurrency)(e)), r + .unitId.setValueSilently(Object(n.symbolUnit)(e))) + } + r.inputs.childs().symbol.value() !== o && r.inputs.childs().symbol.listeners() + .fire(r.inputs.childs().symbol), r.currencyId.value() !== a && r.currencyId + .listeners().fire(r.currencyId), r.unitId.value() !== l && r.unitId + .listeners().fire(r.unitId) + } + } + }, + Z0Sh: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX").LineToolColorsProperty, + o = [4.5, 9, 11.25, 18, 22.5, 36, 45], + a = function() { + for (var e = [], t = o.length - 1, i = 1, s = 0, r = 0; r < 1e10;) r = o[s] * i, e.push( + Math.round(r)), e.push(Math.ceil(-r)), s === t - 1 && (i *= 10), s = (s + 1) % t; + return e.sort((function(e, t) { + return e < t ? -1 : e > t ? 1 : 0 + })), e + }(); + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "eg8N", 7)).then(({ + GannSquarePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + hLevelsCount() { + return l.HLevelsCount + } + vLevelsCount() { + return l.VLevelsCount + } + pointsCount() { + return 2 + } + name() { + return "Gann Box" + } + _alignPriceOnPattern(e, t) { + var i = Math.round(1e6 * (e.price - t.price)) / 1e6; + if (0 === i) return t.price; + for (var s = o[0], r = o[o.length - 1], n = 1, a = Math.abs(i); a < s * n || r * n < + a;) a < s * n ? n *= .1 : r * n < a && (n *= 10); + for (var l = r * n, c = o.length - 2; c >= 0 && !(o[c] * n < a); --c) l = o[c] * n; + return e.price = t.price + (i >= 0 ? l : -l), e + } + _alignTimeOnPattern(e, t) { + var i = e.index - t.index; + if (0 === i) return 0; + for (var s = a.length - 2; s >= 0 && !(a[s] < i); --s); + return s += i > 0 ? 1 : 0, e.index = t.index + a[s], e + } + _alignPointsFixedIncrement(e, t) { + return this._alignTimeOnPattern(e, t), this._alignPriceOnPattern(e, t), e + } + _preparePoint(e, t) { + return t && t.shift() && 0 !== this._points.length && this + ._alignPointsFixedIncrement(e, this._points[0]), s.prototype._preparePoint.call( + this, e, t) + } + setPoint(e, t, i) { + if (i && i.shift()) { + var s = 0 === e ? this._points[1] : this._points[0]; + this._alignPointsFixedIncrement(t, s) + } + super.setPoint(e, t, i) + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "2liL"))) + .GannSquareDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolgannsquare", e, !1, { + range: [1, 7], + prefixes: ["h", "v"], + names: ["coeff", "color", "visible"] + }); + return l._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("color"), e.child("fans").child("color")], i = 1; i <= l + .HLevelsCount; i++) t.push(e.child("hlevel" + i).child("color")); + for (i = 1; i <= l.VLevelsCount; i++) t.push(e.child("vlevel" + i).child("color")); + e.addChild("linesColors", new n(t)), e.addExclusion("linesColors") + } + } + l.HLevelsCount = 7, l.VLevelsCount = 7, t.LineToolGannSquare = l + }, + Z8aO: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SeriesPriceLinePaneView", (function() { + return n + })); + var s = i("k4w6"), + r = i("8Uy/"); + class n extends s.a { + constructor(e) { + super(e), this._lineRendererData.linestyle = r.LINESTYLE_DOTTED + } + _updateImpl() { + if (this._lineRendererData.visible = !1, !this._series.properties() + .showPriceLine.value()) return; + if (12 === this._series.properties().style.value()) return; + const e = this._series.lastValueData(void 0, !0); + e.noData || (this._lineRendererData.visible = !0, this._lineRendererData.y = e + .coordinate, this._lineRendererData.color = this._series.priceLineColor( + e.color), this._lineRendererData.linewidth = this._series + .properties().priceLineWidth.value()) + } + } + }, + ZAxB: function(e, t, i) { + "use strict"; + + function s(e) { + return ["text", "integer", "float", "price", "session", "resolution"].includes(e.type) && e + .hasOwnProperty("options") + } + + function r(e, t, i) { + for (const s of e) + if (t[s.id] !== i[s.id]) return !1; + return !0 + } + i.d(t, "b", (function() { + return s + })), i.d(t, "a", (function() { + return r + })) + }, + ZBiT: function(e, t, i) { + e.exports = { + "css-value-pane-controls-padding-left": "1px", + "css-value-pane-controls-padding-right": "5px" + } + }, + ZJKN: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "BarsRange", (function() { + return r + })); + var s = i("Eyy1"); + class r { + constructor(e, t) { + Object(s.assert)(e <= t, + "The last bar in the bars range should be greater than or equal to the first bar" + ), this._firstBar = e, this._lastBar = t + } + firstBar() { + return this._firstBar + } + lastBar() { + return this._lastBar + } + count() { + return this._lastBar - this._firstBar + 1 + } + contains(e) { + return this._firstBar <= e && e <= this._lastBar + } + equals(e) { + return this._firstBar === e.firstBar() && this._lastBar === e.lastBar() + } + static compare(e, t) { + return null === e || null === t ? e === t : e.equals(t) + } + } + }, + ZjKI: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "CLOSE_POPUPS_AND_DIALOGS_COMMAND", (function() { + return s + })); + const s = "CLOSE_POPUPS_AND_DIALOGS_COMMAND" + }, + Zl0W: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolPriceNote", (function() { + return l + })); + var s = i("Eyy1"), + r = i("Ocx9"), + n = i("tc+8"), + o = i.n(n), + a = i("Ss5c"); + class l extends a.LineDataSource { + constructor(e, t) { + super(e, t || l.createProperties()), this._labelMovingDelta = null, i.e( + "lt-pane-views").then(i.bind(null, "0s1X")).then(t => { + this._setPaneViews([new t.PriceNotePaneView(this, e)]) + }) + } + pointsCount() { + return 2 + } + properties() { + return super.properties() + } + name() { + return "Price Note" + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e + } + startMoving(e, t, i) { + if (1 === t) { + if (this.isSourceHidden()) return; + const i = Object(s.ensureDefined)(e.logical), + r = this.points()[1]; + this._labelMovingDelta = { + index: r.index - i.index, + price: r.price - i.price + }, this.startChanging(t, i) + } else this._labelMovingDelta = null, super.startMoving(e, t, i) + } + move(e, t, i) { + if (null !== this._labelMovingDelta) { + const t = Object(s.ensureDefined)(e.logical), + r = { + index: t.index + this._labelMovingDelta.index, + price: t.price + this._labelMovingDelta.price + }; + this.setPoint(1, r, i), this.updateAllViews() + } else super.move(e, t, i) + } + endMoving(e, t) { + return null !== this._labelMovingDelta ? (this._labelMovingDelta = null, this + .endChanging(!1, e)) : super.endMoving(e) + } + static createProperties(e) { + const t = new r.DefaultProperty("linetoolpricenote", e); + return l._configureProperties(t), t + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "ernH")).then( + e => e.PriceNoteDefinitionsViewModel) + } + _snapTo45DegreesAvailable() { + return !0 + } + static _configureProperties(e) { + a.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new o.a("")), e.addExclusion("text"), e.hasChild( + "backgroundsColors") && e.removeProperty("backgroundsColors"), e + .hasChild("textsColors") && e.removeProperty("textsColors") + } + } + }, + ZmuQ: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return o + })), i.d(t, "a", (function() { + return a + })); + var s = i("jCNj"), + r = i("E6p6"), + n = i("5mo2"); + class o { + constructor(e, t, i, s) { + this.init(e, t, i, s) + } + init(e, t, i, r) { + this.timezone = s.get_timezone(e), this.spec = new n.SessionSpec(e, t, i, r) + } + } + class a { + alignTime(e) { + if (isNaN(e)) return NaN; + let t = this.indexOfBar(e); + return t === r.SessionStage.POST_SESSION && (this.moveTo(e), t = this.indexOfBar( + e)), t < 0 ? NaN : this.startOfBar(t) + } + } + }, + "Zo2/": function(e, t, i) { + "use strict"; + (function(t) { + i("YCFM"); + var s = i("YFKU").t, + r = i("Eyy1"), + n = r.assert, + o = r.ensureDefined, + a = i("Y7w9").moveToHead, + l = i("iPBr").TimeAxisWidget, + c = i("qJq3").Series, + h = i("Kxc7"), + u = i("YmeR").ActionBinder, + d = i("mKT+").resolveAndShowEditObjectDialog, + p = i("Vdly"), + _ = p.getValue, + m = p.setValue, + f = i("QloM").TabNames, + g = i("cdbK").showGoToDateDialog, + b = i("/3z9"), + v = i("lxNp"), + S = i("7nsU").showConfirmInputsDialog, + y = i("ikwP").disableSelection, + w = i("GVHu").Study, + P = i("8sOK").StudyStub, + C = i("3ClC").isStudy, + x = i("Ss5c").LineDataSource, + T = i("CW80"), + I = T.isLineTool, + M = T.isStudyLineTool, + O = i("fTGZ").BarsMarksContainer, + L = i("7KDR"), + A = L.Action, + E = L.Separator, + k = (i("L/Ed").ToolboxType, i("mMWL")), + D = i("LxhU").Interval, + V = i("n5al"), + B = V.getDefaultStyle, + R = i("pvsv").showSymbolInfoDialog, + N = i("H0vP").InvalidationMask, + j = i("H0vP").InvalidationLevel, + F = i("PT1i").linking, + W = i("JpbW").showChangeIntervalDialogAsync, + H = i("wptU"), + U = H.activateKeyPressHandler, + z = H.showDialog, + G = i("Ocx9").DefaultProperty, + q = i("+6ja"), + Y = q.availableTimezones, + K = q.timezoneIsAvailable, + J = i("0F0w").ChartSession, + Z = i("0YCj"), + X = i("c2JX").Spinner, + $ = i("JWMC").trackEvent, + Q = i("VaSN").lastEventIsTouch, + ee = i("vaqD").LoadingScreen, + te = i("wZIs"), + ie = i("txPx").getLogger("ChartWidget", { + color: "#606" + }), + se = i("2uTr").appendEllipsis, + re = i("U0+/").StudyMetaInfoRepository, + ne = i("VNzU").isMultipleLayout, + oe = i("b1GK").addPerfMark, + ae = i("FQhm"), + le = i("wjVR").ChartWidgetBase, + ce = i("qFKp").CheckMobile.any(), + he = i("uDHo").TIMEFRAMETYPE, + ue = i("jofe").createDeferredPromise, + de = i("GDWD").addPlusButtonProperty, + pe = s("On The Left"), + _e = s("On The Right"), + me = s("Move Scale To Left"), + fe = s("Move Scale To Right"); + class ge extends le { + constructor(e, i, s) { + super(e, i, s), this._options.timeScaleWidget && (this._options + .timeScaleWidget.pressedMouseMoveScale = this._options.handleScale + .axisPressedMouseMove.time); + var r = this; + this._startSpinner(this._options.container.value()); + var n = this._options.content, + o = this._options.readOnly; + this._removeMaximizeHotkey = null, r._hotkeys = v.createGroup({ + desc: "Chart actions", + isDisabled: function() { + return !r._isActive + } + }); + var a = this._options.containsData, + l = this._options.onWidget, + c = this._options.onCmeWidget; + c && ie.logWarn("[ChartWidget] 'onCmeWidget' option is depricated"); + var h = this._options.widgetCustomer, + u = this._options.timezone, + d = this._options.hideSymbolSearch, + p = this._options.defSymbol, + _ = D.isValid(this._options.defInterval) ? this._options.defInterval : + void 0, + m = parseInt(this._options.defStyle), + f = V.isValidStyle(m) ? m : void 0, + g = this._options.defSessionId, + b = void 0 !== this._options.defTimeframe ? { + value: this._options.defTimeframe.toUpperCase(), + type: he.PeriodBack + } : void 0; + this._chartWidgetCollection = this._options.chartWidgetCollection, this + ._content = n, this._initialLoading = this._options.initialLoading, this + ._readOnly = o, this._containsData = a, this._showChartEvents = !a && + this._options.chartEventsEnabled, this._defSymbol = p, this + ._defInterval = _, this._defTimeframe = b, this._defStyle = f, this + ._onWidget = !!l, this._compareSymbols = this._options.compareSymbols, + this._onWidget && (c ? this._widgetCustomer = "cme" : h && (this + ._widgetCustomer = h)), this._hideSymbolSearch = d, this + ._frameTime = 30, this._model = null, this._metaInfo = {}, + this._drawRafId = 0, this._compareDialog = this._chartWidgetCollection + .getCompareDialogRenderer(); + var S = this._contentSeriesProperties(); + S && (p = S.symbol, _ = S.interval), void 0 === this._options + .useUserChartPreferences && (this._options.useUserChartPreferences = ! + 0), this._properties = new G("chartproperties", void 0, void 0, this + ._options.useUserChartPreferences); + var y = this._options.useUserChartPreferences ? te.defaults( + "chartproperties.mainSeriesProperties") : te.factoryDefaults( + "chartproperties.mainSeriesProperties"); + this._properties.mainSeriesProperties.merge(y), this._properties + .mainSeriesProperties.hasChild("esdBreaksStyle") && this._properties + .mainSeriesProperties.removeProperty("esdBreaksStyle"), _ = _ || y + .interval || "D", V.isValidStyle(f) || (f = V.isValidStyle(y.style) ? y + .style : B(D.isRange(_))), this._properties.mainSeriesProperties + .merge({ + visible: !0, + symbol: p || DEFAULT_SYMBOL, + shortName: "", + timeframe: "", + onWidget: this._onWidget, + interval: _, + currencyId: null, + unitId: null, + style: f, + sessionId: g, + lineStyle: { + styleType: te.factoryDefaults( + "chartproperties.mainSeriesProperties.lineStyle.styleType" + ) + } + }), this._containsData && this._properties.mainSeriesProperties.merge({ + showCountdown: !1 + }), u && K(u) && this._properties.timezone.setValue(u), this + ._tagsChanged = new t, this._disconnected = new t, this + ._reconnectBailout = new t, this._connected = new t, this._onScroll = + new t, this.chartWidgetInitialized = new t, this._chartSession = new J( + ChartApiInstance), this._metaInfoRepository = new re(this + ._chartSession), this._timingsMeter = null, this._isActive = this + ._options.isActive, this._options.container.subscribe((function(e) { + r._setElement(e) + }), { + callWithLast: !0 + }); + var w = function() { + r.resize() + }; + this._options.width.subscribe(w), this._options.height.subscribe(w), this + ._options.visible.subscribe(this._updateTimingsMeterState.bind(this)), + this._aboutToBeDestroyed = new t, this._actions = null, this + ._definitionsViewModel = null, this._backgroundTopColorSpawn = null, + this._backgroundBottomColorSpawn = null, this._hintDefferedPromise = + null, this._activeHint = null + } + isInitialized() { + return Boolean(this._inited) + } + compareSymbols() { + return this._compareSymbols + } + async _getChartPropertyDefinitionsViewModel() { + if (null === this._definitionsViewModel) { + const { + ChartPropertyDefinitionsViewModel: e + } = await Promise.all([i.e(27), i.e(61), i.e("general-property-page")]) + .then(i.bind(null, "5lPo")); + if (this._isDestroyed) throw new Error( + "Chart widget already destroyed"); + await new Promise(e => this.withModel(null, e)), null === this + ._definitionsViewModel && (this._definitionsViewModel = new e(this + .model(), this.properties(), this._options)) + } + return this._definitionsViewModel + } + _initMaximizeHotkey(e) { + var t = this; + + function i(e) { + e.defaultPrevented || b.modifiersFromEvent(e) === b.Modifiers.Alt && e + .stopPropagation() + } + + function s(e) { + e.defaultPrevented || b.modifiersFromEvent(e) === b.Modifiers.Alt && (e + .preventDefault(), e.stopPropagation(), t.toggleFullscreen()) + } + return e.addEventListener("mousedown", i, !0), e.addEventListener("click", + s, !0), + function() { + e.removeEventListener("mousedown", i, !0), e.removeEventListener( + "click", s, !0) + } + } + toggleFullscreen() { + var e = this.getResizerDetacher(); + e.fullscreenable.value() && (e.fullscreen.value() ? e.exitFullscreen() : e + .requestFullscreen()) + } + _beginRequestActive() { + var e = this._chartWidgetCollection.activeChartWidget.value() !== this; + this._chartWidgetCollection.activeChartWidget.setValue(this), e && (Q() && + this._isLineToolModeExceptBrush() && this + .updateCrossHairPositionIfNeeded(), this._justActivated = !0) + } + _endRequestActive() { + var e = this; + this._justActivated && setTimeout((function() { + e._justActivated = !1 + }), 0) + } + _requestActive() { + this._beginRequestActive(), this._endRequestActive() + } + justActivated() { + return this._justActivated + } + setTimezone(e) { + e && K(e) ? this._properties.timezone.setValue(e) : console.warn( + "Incorrect timezone: " + JSON.stringify(e)) + } + getTimezone() { + return this._properties.timezone.value() + } + refreshMarks() { + this.model().barsMarksSources().forEach((function(e) { + e.refreshData() + })) + } + clearMarks() { + this.model().barsMarksSources().forEach((function(e) { + e.clearMarks() + })) + } + metaInfoRepository() { + return this._metaInfoRepository + } + _init() { + var e = this; + this.hasModel() && this.model().mainSeries().clearData(), this.initColors(), + this._makeDefaultGui(); + var t = function() { + e._checkObsoleteTimezone(), e._chartSession && e._chartSession + .connected() && this._model.restart(), this._content && (this + .initColors(), this._updateGui(), this.update()), this + ._resizeHandler = function() { + this.adjustSize(), this.paint() + }.bind(this), this._resizeHandler(), this._parent.appendChild( + this._mainDiv), this._spinner && (this._spinner.stop(), + delete this._spinner), this._keydownEventListener = + function(e) { + 27 === e.which && e.preventDefault() + }, window.addEventListener("keydown:chart_" + this._id, this + ._keydownEventListener), this._initBarsMarksSources(), this + ._activateSymbolSearchHotkeys(), this.model().timeScale() + .onScroll().subscribe(this, (function() { + this._onScroll.fire() + })), this._inited = !0 + }.bind(this), + i = this._makeDefaultModel(); + void 0 === i ? t() : i.then(t) + } + _activateSymbolSearchHotkeys() { + this.readOnly() || this._hideSymbolSearch || U() + } + _checkObsoleteTimezone() { + var e = this._properties.timezone.value(); + K(e) || this._properties.timezone.setValue({ + UTC: "Etc/UTC", + EST: "America/New_York", + CST: "America/Chicago", + PST: "America/Los_Angeles" + } [e] || "exchange") + } + _initBarsMarksSources() { + var e = this; + this.withModel(this, (function() { + this.model().barsMarksSources().forEach((function(t) { + t.onNeedRepaint.subscribe(e, (function() { + e.model().model() + .lightUpdate() + })) + })) + })) + } + initColors() { + this._properties.scalesProperties.lineColor.listeners().subscribe(this, ge + .prototype.setScaleLineColor), this._properties.scalesProperties + .textColor.listeners().subscribe(this, ge.prototype.setScaleTextColor) + } + _initBackgroundColor() { + null === this._backgroundTopColorSpawn && (this._backgroundTopColorSpawn = + this._model.model().backgroundTopColor().spawn(), this + ._backgroundTopColorSpawn.subscribe(this._onBackgroundColorChanged + .bind(this))), null === this._backgroundBottomColorSpawn && ( + this._backgroundBottomColorSpawn = this._model.model() + .backgroundColor().spawn(), this._backgroundBottomColorSpawn + .subscribe(this._onBackgroundColorChanged.bind(this))) + } + paneWidgets() { + return this._paneWidgets + } + paneByCanvas(e) { + for (var t = 0; t < this._paneWidgets.length; t++) + if (this._paneWidgets[t].hasCanvas(e)) return this._paneWidgets[t]; + return null + } + paneByState(e) { + for (var t = 0; t < this._paneWidgets.length; t++) + if (this._paneWidgets[t].state() === e) return this._paneWidgets[t]; + return null + } + timeAxisByCanvas(e) { + return this._timeAxisWidget.hasCanvas(e) ? this._timeAxisWidget : null + } + properties() { + return this._properties + } + emulateCriticalError() { + this._chartSession.removeSeries("-1") + } + readOnly() { + return this._readOnly + } + onDisconnected() { + return this._disconnected + } + onReconnectBailout() { + return this._reconnectBailout + } + onConnected() { + return this._connected + } + onRedraw() { + return this._redraw + } + onScroll() { + return this._onScroll + } + modelCreated() { + return this._modelCreated + } + setResolution(e) { + if (this._model) { + var t = this._model.mainSeries().properties(), + i = s("Change Resolution"); + this._model.setResolutionProperty(t.interval, e, this, i) + } else this._properties.mainSeriesProperties.merge({ + interval: e + }) + } + getResolution() { + return this._model ? this._model.mainSeries().properties().interval + .value() : this._properties.mainSeriesProperties.interval.value() + } + addOverlayStudy(e, t, i) { + var s = this.model(); + return this._options.isSymbolAvailable(e).then((function(r) { + if (!r) return null; + var n = s.createStudyInserter({ + type: "java", + studyId: "Overlay@tv-basicstudies" + }), + o = { + allowExtendTimeScale: i + }; + if (h.enabled("use_overrides_for_overlay")) { + var a = te.factoryDefaults( + "study_Overlay@tv-basicstudies.style"); + o.style = a + } + return n.setPropertiesState(o), n.setForceOverlay(t), n + .insert((function() { + return Promise.resolve({ + symbol: e + }) + })) + })) + } + addCompareStudy(e) { + var t = this.model(); + return this._options.isSymbolAvailable(e).then((function(i) { + return i ? t.createStudyInserter({ + type: "java", + studyId: "Compare@tv-basicstudies" + }).insert((function() { + return Promise.resolve({ + symbol: e + }) + })) : null + })) + } + updateActions() { + for (var e = this.actions(), t = this._model.dataSources(), i = !1, r = !1, + n = 0, o = t.length; n < o; n++) { + var a = t[n]; + TradingView.isInherited(a.constructor, x) && a.isUserDeletable() && ( + i = !0), TradingView.isInherited(a.constructor, w) && a + .removeByRemoveAllStudies() && (r = !0), TradingView.isInherited(a + .constructor, P) && (r = !0) + } + this._readOnly || (e.paneRemoveAllStudies && e.paneRemoveAllStudies.update({ + disabled: !r + }), e.paneRemoveAllDrawingTools && e.paneRemoveAllDrawingTools + .update({ + disabled: !i + }), e.paneRemoveAllStudiesDrawingTools && e + .paneRemoveAllStudiesDrawingTools.update({ + disabled: !r && !i + })); + var l = this, + c = [], + h = function(e) { + return e.id === l.model().model().properties().timezone.value() + }; + Y.forEach((function(e) { + if (!e.separator) { + var t = new A({ + label: e.title, + checkable: !0, + checked: h(e), + statName: "SetTimeZone", + onExecute: function() { + l.model().setProperty(l.model() + .model().properties() + .timezone, e.id, + "Changed Time Zone") + } + }); + c.push(t) + } + }), this), e.applyTimeZone.update({ + subItems: c + }), e.addToWatchlist && (e.addToWatchlist.request(), e.addToWatchlist + .updateLabel(this.getSymbol(!0))), e.addToTextNotes && e + .addToTextNotes.update({ + label: s("Add Text Note for {symbol}").format({ + symbol: this.getSymbol(!0) + }) + }) + } + applyTheme(e) { + var t = this; + Promise.resolve().then(i.bind(null, "EsvI")).then(i => { + e = e || i.getCurrentTheme().name, + i.loadTheme(e, !0, !0, t._chartWidgetCollection) + }) + } + actions() { + return null === this._actions && this._setActions(), this._actions + } + _setActions() { + this._actions && this._actions.addToWatchlist && (this._actions + .addToWatchlist.destroy(), delete this._actions.addToWatchlist); + var e, t = this, + r = []; + if (!this._readOnly) { + r = [new A({ + label: s("Eraser"), + payload: "eraser", + statName: "Eraser" + }), new E, new A({ + label: s("Trend Line"), + payload: "LineToolTrendLine", + statName: "LineToolTrendLine" + }), new A({ + label: s("Horizontal Line"), + payload: "LineToolHorzLine", + statName: "LineToolHorzLine" + }), new A({ + label: s("Vertical Line"), + payload: "LineToolVertLine", + statName: "LineToolVertLine" + }), new A({ + label: s("Arrow"), + payload: "LineToolArrow", + statName: "LineToolArrow" + }), new A({ + label: s("Ray"), + payload: "LineToolRay", + statName: "LineToolRay" + }), new A({ + label: s("Extended"), + payload: "LineToolExtended", + statName: "LineToolExtended" + }), new A({ + label: s("Parallel Channel"), + payload: "LineToolParallelChannel", + statName: "LineToolParallelChannel" + }), new E, new A({ + label: s("Pitchfork"), + payload: "LineToolPitchfork", + statName: "LineToolPitchfork" + }), new A({ + label: s("Schiff Pitchfork"), + payload: "LineToolSchiffPitchfork", + statName: "LineToolSchiffPitchfork" + }), new A({ + label: s("Pitchfan"), + payload: "LineToolPitchfan", + statName: "LineToolPitchfan" + }), new A({ + label: s("Gann Square"), + payload: "LineToolGannSquare", + statName: "LineToolGannSquare" + }), new A({ + label: s("Gann Fan"), + payload: "LineToolGannFan", + statName: "LineToolGannFan" + }), new A({ + label: s("Fib Retracement"), + payload: "LineToolFibRetracement", + statName: "LineToolFibRetracement" + }), new A({ + label: s("Trend-Based Fib Extension"), + payload: "LineToolTrendBasedFibExtension", + statName: "LineToolTrendBasedFibExtension" + }), new A({ + label: s("Fib Speed Resistance Fan"), + payload: "LineToolFibSpeedResistanceFan", + statName: "LineToolFibSpeedResistanceFan" + }), new A({ + label: s("Fib Time Zone"), + payload: "LineToolFibTimeZone", + statName: "LineToolFibTimeZone" + }), new A({ + label: s("Circle Lines"), + payload: "LineToolCircleLines", + statName: "LineToolCircleLines" + }), new A({ + label: s("Fib Circles"), + payload: "LineToolFibCircles", + statName: "LineToolFibCircles" + }), new A({ + label: s("Fib Speed Resistance Arcs"), + payload: "LineToolFibSpeedResistanceArcs", + statName: "LineToolFibSpeedResistanceArcs" + }), new E, new A({ + label: s("Rectangle"), + payload: "LineToolRectangle", + statName: "LineToolRectangle" + }), new A({ + label: s("Ellipse"), + payload: "LineToolEllipse", + statName: "LineToolEllipse" + }), new A({ + label: s("Triangle"), + payload: "LineToolTriangle", + statName: "LineToolTriangle" + }), new A({ + label: s("Polyline"), + payload: "LineToolPolyline", + statName: "LineToolPolyline" + }), new A({ + label: s("Path"), + payload: "LineToolPath", + statName: "LineToolPath" + }), new A({ + label: s("Arc"), + payload: "LineToolArc", + statName: "LineToolArc" + }), new E, new A({ + label: s("Text", { + context: "tool" + }), + payload: "LineToolText", + statName: "LineToolText" + }), new A({ + label: s("Anchored Text"), + payload: "LineToolTextAbsolute", + statName: "LineToolTextAbsolute" + }), new A({ + label: s("Balloon"), + payload: "LineToolBalloon", + statName: "LineToolBalloon" + }), new A({ + label: s("Price Label"), + payload: "LineToolPriceLabel", + statName: "LineToolPriceLabel" + }), new E, new A({ + label: s("Elliott Wave Subminuette"), + payload: "LineToolElliottSubminuette", + statName: "LineToolElliottSubminuette" + }), new A({ + label: s("Elliott Wave Minor"), + payload: "LineToolElliottMinor", + statName: "LineToolElliottMinor" + }), new A({ + label: s("Elliott Wave Circle"), + payload: "LineToolElliottCircle", + statName: "LineToolElliottCircle" + }), new A({ + label: s("Elliott Minor Retracement"), + payload: "LineToolElliottMinorRetr", + statName: "LineToolElliottMinorRetr" + }), new A({ + label: s("Elliott Major Retracement"), + payload: "LineToolElliottMajorRetr", + statName: "LineToolElliottMajorRetr" + }), new E, new A({ + label: s("Brush"), + payload: "LineToolBrush", + statName: "LineToolBrush" + }), new E, new A({ + label: s("Forecast"), + payload: "LineToolPrediction", + statName: "LineToolPrediction" + })]; + for (var n = function(e) { + k.tool.setValue(e.getPayload()) + }, o = 0; o < r.length; o++) r[o] instanceof A && r[o].update({ + onExecute: n + }); + e = new A({ + label: se(s("Settings")), + icon: i("MXV9"), + statName: "ScalesProperties", + onExecute: function() { + t.showGeneralChartProperties(f.scales) + } + }) + } + this._hotkeys.add({ + desc: "Maximize", + hotkey: v.Modifiers.Alt + 13, + handler: function() { + t.toggleFullscreen() + }, + isDisabled: function() { + return !t._options.fullscreenable.value() + } + }), this._hotkeys.add({ + desc: "Cancel selection", + hotkey: 27, + handler: function() { + t.selectPointMode().value() ? t + .cancelRequestSelectPoint() : t._model + .selectionMacro((function(e) { + t._cancelCreatingLine(), e + .clearSelection() + })) + }, + isDisabled: function() { + var e = 0 === t._model.selection().allSources().length, + i = null === t._model.crossHairSource() + .measurePane(), + s = !t.selectPointMode().value(), + r = e && i && s; + return !t._model || r + } + }), t.withModel(null, (function() { + var e = function() { + t._hotkeys.promote() + }; + t._model.onSelectedSourceChanged().subscribe(null, e), t + ._model.crossHairSource().measuringEnabled().subscribe( + null, t => { + t && e() + }) + })); + var a = new A({ + label: s("Reset Chart"), + icon: i("LdoW"), + statName: "ResetChart", + onExecute: this.GUIResetScales.bind(this), + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 82 + }), + l = new A({ + label: s("Invert Scale"), + statName: "Invert Scale", + checkable: !0, + onExecute: function() { + t._model.invertPriceScale(t._model.mainSeries() + .priceScale()) + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 73 + }), + c = new A({ + label: s("Auto (Fits Data To Screen)"), + checkable: !0, + onExecute: function() { + var e = t._model.mainSeries().priceScale(); + t._model.togglePriceScaleAutoScaleMode(e), c.update({ + checked: e.isAutoScale() + }) + } + }), + d = new A({ + label: s("Lock Price To Bar Ratio"), + checkable: !0, + statName: "ToggleLockScale", + onExecute: function() { + t._model.togglePriceScaleLockScaleMode(t._model + .mainSeries().priceScale()) + } + }), + p = new A({ + label: s("Regular"), + checkable: !0, + statName: "ToggleRegularScale", + onExecute: function() { + var e = t._model.mainSeries().priceScale(); + t._model.setPriceScaleRegularScaleMode(e), p.update({ + checked: e.isRegular() + }) + } + }), + S = new A({ + label: s("Percent"), + checkable: !0, + statName: "TogglePercantage", + onExecute: function() { + t._model.togglePriceScalePercentageScaleMode(t._model + .mainSeries().priceScale()) + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 80 + }), + y = new A({ + label: s("Indexed to 100"), + checkable: !0, + statName: "ToggleIndexedTo100", + onExecute: function() { + t._model.togglePriceScaleIndexedTo100ScaleMode(t._model + .mainSeries().priceScale()) + } + }), + w = new A({ + label: s("Logarithmic"), + statName: "ToggleLogScale", + checkable: !0, + onExecute: function() { + t._model.togglePriceScaleLogScaleMode(t._model + .mainSeries().priceScale()) + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 76 + }), + P = new A({ + label: s("Undo"), + onExecute: function() { + $("GUI", "Undo"), t._model.undoHistory().undo() + }, + disabled: !0, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Mod + 90 + }), + C = new A({ + label: s("Redo"), + onExecute: function() { + $("GUI", "Redo"), t._model.undoHistory().redo() + }, + disabled: !0, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Mod + 89 + }); + t.withModel(null, (function() { + t._model.undoHistory().undoStack().onChange().subscribe(t, t + .updateUndoRedo), t._model.undoHistory().redoStack() + .onChange().subscribe(t, t.updateUndoRedo) + })); + var x = [new A({ + label: s("Loading") + })], + T = new A({ + name: "apply-color-theme", + label: s("Color Theme"), + icon: i("opke"), + subItems: x, + statName: "ColorTheme" + }), + I = new A({ + label: s("Time Zone"), + statName: "TimeZone" + }), + M = new A({ + label: se(s("Change Symbol")), + statName: "ChangeSymbol", + onExecute: function() { + z({ + defaultValue: "" + }) + } + }); + m("symboledit.dialog_last_entry", ""); + var O = { + label: se(s("Change Interval")), + statName: "ChangeInterval", + onExecute: function() { + W({ + initVal: F.interval.value(), + selectOnInit: !0 + }) + } + }; + !h.enabled("show_interval_dialog_on_key_press") || this.readOnly() || this + ._hideSymbolSearch || (O.shortcutHint = ",", O.hotkeyGroup = this + ._hotkeys, O.hotkeyHash = 188); + var L, D, V = new A(O); + if (!TradingView.onWidget()) { + if (this._options.addToWatchlistEnabled) { + const e = { + hotkeyGroup: this._hotkeys + }; + L = new WatchListAction(this, e) + } + D = new A({ + label: s("Add To Text Notes"), + statName: "AddToTextNotes", + onExecute: function() { + window.runOrSignIn((function() { + TradingView.bottomWidgetBar && ( + TradingView.bottomWidgetBar + .toggleWidget("text_notes", + !0), TradingView + .bottomWidgetBar._widgets + .text_notes.addNote(null, t + .getSymbol(!0), t + .getSymbol())) + }), { + source: "Add text note in chart context menu" + }) + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 78 + }) + } + var B = new A({ + label: s("Reset Time Scale"), + icon: i("LdoW"), + statName: "ResetScale", + onExecute: function() { + t.model().resetTimeScale() + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Mod + v.Modifiers.Alt + 81 + }), + j = new A({ + label: s("Insert Drawing Tool"), + subItems: r, + statName: "InsertDravingTool" + }), + H = new A({ + label: s("Remove Indicators"), + statName: "RemoveAllIndicators", + onExecute: this.removeAllStudies.bind(this) + }), + U = new A({ + label: s("Remove Drawings"), + statName: "RemoveAllDrawingTools", + onExecute: this.removeAllDrawingTools.bind(this) + }), + G = new A({ + label: s("All Indicators And Drawing Tools"), + statName: "RemoveAllIndicatorsAndDrawingTools", + onExecute: this.removeAllStudiesDrawingTools.bind(this) + }), + q = this.chartWidgetCollection(), + Y = new A({ + label: s("Apply these Indicators to Entire Layout"), + statName: "ApplyIndicatorsToAllCharts", + onExecute: function() { + q.applyIndicatorsToAllCharts(t) + } + }), + K = { + label: se(s("Insert Indicator")), + statName: "InsertIndicator", + onExecute: function() { + t.showIndicators() + } + }; + this._options.indicatorsDialogShortcutEnabled && (K.hotkeyGroup = this + ._hotkeys, K.hotkeyHash = 191, new A({ + label: se(s("Insert Indicator")), + statName: "InsertIndicator", + onExecute: function() { + t.showIndicators() + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: 111 + })); + var J, Z = new A(K), + X = new A({ + label: se(s("Compare or Add Symbol")), + statName: "CompareOrAddSymbol", + onExecute: this.toggleCompareOrAdd.bind(this) + }), + Q = new A({ + label: se(s("Compare")), + statName: "Compare", + onExecute: this.toggleCompareOrAdd.bind(this) + }), + ee = new A({ + label: se(s("Object Tree")), + statName: "ObjectsTree", + onExecute: this.showObjectsTreePanelOrDialog.bind(this) + }), + te = new A({ + label: se(s("Settings")), + icon: i("MXV9"), + statName: "ChartProperties", + onExecute: function() { + t.showGeneralChartProperties() + } + }), + ie = new A({ + label: se(s("Settings")), + icon: i("MXV9"), + statName: "MainSeriesProperties", + onExecute: function() { + t.showGeneralChartProperties(f.symbol) + } + }), + re = new A({ + label: s("Lock/Unlock"), + statName: "ToggleLockSelectedObject", + onExecute: this.toggleLockSelectedObject.bind(this) + }), + ne = new A({ + label: s("Hide"), + icon: i("dmHa"), + statName: "HideSelectedObject", + onExecute: this.hideSelectedObject.bind(this) + }); + h.enabled("property_pages") && (J = new A({ + label: se(s("Settings")), + icon: i("MXV9"), + statName: "EditSelectedObject", + onExecute: function() { + t.showSelectedSourceProperties() + } + })), this.withModel(null, (function() { + var e = t.model().mainSeries(), + i = e.properties(); + i.priceAxisProperties.subscribe(t, t._updateScalesActions), + e.priceScaleAboutToBeChanged().subscribe(t, ( + function() { + i.priceAxisProperties.unsubscribeAll(t) + })), e.priceScaleChanged().subscribe(t, ( + function() { + i.priceAxisProperties.subscribe(t, t + ._updateScalesActions), t + ._updateScalesActions() + })) + })); + var oe = new A({ + label: s("Scale Price Chart Only"), + checkable: !0, + statName: "ScalePriceChartOnly" + }); + oe.binder = new u(oe, this._properties.scalesProperties.scaleSeriesOnly, + this.model(), s("Scale Price Chart Only")); + var ae = this.model().model(); + this._properties.scalesProperties.scaleSeriesOnly.listeners().subscribe( + null, (function() { + ae.recalculateAllPanes(), ae.invalidate(N.full()) + })); + var le = new A({ + label: s("Drawings Toolbar"), + checkable: !0, + statName: "ToggleDrawingToolbar" + }), + ce = this._options.isDrawingToolbarVisible; + ce && (ce.subscribe((function(e) { + le.update({ + checked: e + }) + }), { + callWithLast: !0 + }), le.update({ + onExecute: function() { + ce.setValue(!ce.value()) + } + })); + var he = new A({ + label: s("Stay in Drawing Mode"), + checkable: !0, + statName: "ToggleStayInDrawingMode" + }); + he.binder = new u(he, k.properties().stayInDrawingMode, this.model(), s( + "Stay In Drawing Mode")); + var ue = new A({ + label: s("Sync drawings to all charts"), + checkable: !0, + statName: "ToggleSyncDrawings" + }); + ue.binder = new u(ue, k.properties().drawOnAllCharts, this.model(), + "SyncDrawings"); + var ge = new A({ + label: s("Lock All Drawing Tools"), + checkable: !0, + statName: "ToggleLockDrawings" + }); + ge.binder = new u(ge, k.lockDrawings(), this.model(), s("Lock drawings"), ( + function() { + k.lockDrawings().setValue(this.value()) + })); + var be = new A({ + label: s("Hide All Drawing Tools"), + checkable: !0, + statName: "ToggleHideAllDrawingTools", + hotkeyHash: v.Modifiers.Mod + v.Modifiers.Alt + 72, + hotkeyGroup: this._hotkeys + }); + be.binder = new u(be, k.hideAllDrawings(), this.model(), s( + "Hide All Drawing Tools"), (function() { + var e = _("ChartToolsHideMode", "drawings"), + t = k.hideAllDrawings(), + i = k.hideAllIndicators(); + switch (e) { + case "drawings": + t.setValue(!t.value()); + break; + case "indicators": + i.setValue(!i.value()); + break; + default: + t.setValue(!t.value()), i.setValue(!i.value()) + } + })); + var ve = new A({ + label: s("Hide Marks On Bars"), + checkable: !0, + statName: "ToggleHideMarksOnBars" + }); + ve.binder = new u(ve, k.hideMarksOnBars(), this.model(), s( + "Hide Marks On Bars"), (function() { + k.hideMarksOnBars().setValue(this.value()) + })); + var Se = new A({ + label: s("Symbol Last Price Label"), + checkable: !0, + checked: !1, + statName: "ToggleSymbolLastValue" + }); + Se.binder = new u(Se, this.properties().scalesProperties + .showSeriesLastValue, this.model(), s("Show Symbol Last Value")); + var ye = new A({ + label: s("Symbol Name Label"), + checkable: !0, + checked: !1, + statName: "ToggleSymbolLabels" + }); + ye.binding = new u(ye, this.properties().scalesProperties.showSymbolLabels, + this.model(), "Undo Show Symbol Labels"); + var we = new A({ + label: s("Indicator Last Value Label"), + checkable: !0, + checked: !1, + statName: "ToggleStudyLastValue" + }); + we.binder = new u(we, this.properties().scalesProperties.showStudyLastValue, + this.model(), s("Show Indicator Last Value")); + var Pe = new A({ + label: s("Indicator Name Label"), + checkable: !0, + checked: !1, + statName: "ToggleIndicatorsLabels" + }); + Pe.binding = new u(Pe, this.properties().scalesProperties + .showStudyPlotLabels, this.model(), "Undo Show Indicator Labels"); + var Ce = this.model().mainSeries().properties().highLowAvgPrice, + xe = new A({ + label: s("High and low price labels"), + checkable: !0, + checked: !1, + statName: "ToggleHighLowPriceLabels" + }); + xe.binding = new u(xe, Ce.highLowPriceLabelsVisible, this.model(), s( + "Show high and low price labels")); + var Te = new A({ + label: s("High and low price lines"), + checkable: !0, + checked: !1, + statName: "ToggleHighLowPriceLine" + }); + Te.binding = new u(Te, Ce.highLowPriceLinesVisible, this.model(), s( + "Show high and low price lines")); + var Ie = new A({ + label: s("Average close price label"), + checkable: !0, + checked: !1, + statName: "ToggleAverageClosePriceLabel" + }); + Ie.binding = new u(Ie, Ce.averageClosePriceLabelVisible, this.model(), s( + "Show average close price label")); + var Me = new A({ + label: s("Average close price line"), + checkable: !0, + checked: !1, + statName: "ToggleAverageClosePriceLine" + }); + Me.binding = new u(Me, Ce.averageClosePriceLineVisible, this.model(), s( + "Show average close price line")); + var Oe = new A({ + label: s("Financials Last Value Label"), + checkable: !0, + checked: !1, + statName: "ToggleFundamentalsLastValue" + }); + Oe.binder = new u(Oe, this.properties().scalesProperties + .showFundamentalLastValue, this.model(), + "Show Financials Last Value"); + var Le = new A({ + label: s("Financials Name Label"), + checkable: !0, + checked: !1, + statName: "ToggleFundamentalsLabels" + }); + Le.binding = new u(Le, this.properties().scalesProperties + .showFundamentalNameLabel, this.model(), + "Show Financials Name Label"); + var Ae = new A({ + label: s("Countdown To Bar Close"), + checkable: !0, + checked: !1, + statName: "ToggleCountdown" + }); + Ae.binder = new u(Ae, this.model().mainSeries().properties().showCountdown, + this.model(), Ae.getLabel()); + var Ee = new A({ + label: s("Currency"), + checkable: !0, + checked: !0, + statName: "ToggleScalesCurrency" + }); + Ee.binder = new u(Ee, this.properties().scalesProperties.showCurrency, this + .model(), "Change Currency Label Visibility"); + var ke = new A({ + label: s("Unit"), + checkable: !0, + checked: !0, + statName: "ToggleScalesUnit" + }); + ke.binder = new u(ke, this.properties().scalesProperties.showUnit, this + .model(), "Change Unit Label Visibility"); + var De = new A({ + label: s("Plus Button"), + checkable: !0, + checked: de.value(), + statName: "ToggleAddOrderPlusButton" + }); + De.binder = new u(De, de, this.model(), De.getLabel()); + var Ve = null; + this._options.goToDateEnabled && (Ve = new A({ + label: se(s("Go to Date")), + statName: "GoToDate", + onExecute: function() { + var e = t._chartWidgetCollection.activeChartWidget + .value(); + g(e) + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 71 + })); + var Be = new A({ + label: se(s("Symbol Info")), + icon: i("1pHB"), + checkable: !1, + statName: "SymbolInfo", + onExecute: function() { + var e = t.model().mainSeries().symbol(), + i = t.model().mainSeries().symbolInfo(), + s = t.model().model().availableUnits(), + r = t.model().model().unitConversionEnabled(); + R(e, { + symbolInfo: i, + showUnit: r, + unitName: function(e) { + return s.name(e) + } + }) + } + }), + Re = new A({ + label: pe, + statName: "MergeAllScalesToLeft", + onExecute: function() { + t.model().mergeAllScales("left") + } + }), + Ne = new A({ + label: _e, + statName: "MergeAllScalesToRight", + onExecute: function() { + t.model().mergeAllScales("right") + } + }), + je = new A({ + label: me, + statName: "MoveScaleToLeft", + onExecute: function() { + t.model().mergeAllScales("left") + } + }), + Fe = new A({ + label: fe, + statName: "MoveScaleToRight", + onExecute: function() { + t.model().mergeAllScales("right") + } + }); + var We = h.enabled("show_object_tree"); + if (this._actions = { + chartProperties: te, + mainSeriesPropertiesAction: ie, + timeScaleReset: B, + chartReset: a, + invertSeriesScale: l, + logSeriesScale: w, + autoSeriesScale: c, + lockSeriesScale: d, + regularSeriesScale: p, + percentSeriesScale: S, + indexedTo100SeriesScale: y, + compareOrAdd: X, + compare: Q, + paneObjectTree: We ? ee : void 0, + insertIndicator: Z, + insertDrawingTool: j, + applyColorTheme: T, + symbolSearch: M, + showSymbolInfoDialog: Be, + changeInterval: V, + seriesHide: ne, + studyHide: ne, + lineToggleLock: re, + lineHide: ne, + scaleSeriesOnly: oe, + drawingToolbarAction: le, + stayInDrawingModeAction: he, + syncModeAction: ue, + lockDrawingsAction: ge, + hideAllDrawingsAction: be, + hideAllMarks: ve, + applyTimeZone: I, + showCountdown: Ae, + showCurrency: Ee, + showUnit: ke, + addPlusButton: De, + showSeriesLastValue: Se, + showHighLowPriceLabels: xe, + showHighLowPriceLines: Te, + showAverageClosePriceLabel: Ie, + showAverageClosePriceLine: Me, + showSymbolLabelsAction: ye, + showStudyLastValue: we, + showStudyPlotNamesAction: Pe, + showFundamentalsLastValueAction: Oe, + showFundamentalNamesAction: Le, + undo: P, + redo: C, + mergeLeftScalesAction: Re, + mergeRightScalesAction: Ne, + moveScaleToLeft: je, + moveScaleToRight: Fe, + moveChartAction: void 0 + }, e && (this._actions.scalesProperties = e), L && (this._actions + .addToWatchlist = L), h.enabled("show_source_code") && (this + ._actions.viewSourceCode = new A({ + label: se(s("Source Code")), + statName: "OpenSelectedObjectSource", + onExecute: this.openSelectedObjectSource.bind(this) + })), !TradingView.onWidget() && h.enabled("text_notes") && (this + ._actions.addToTextNotes = D), null !== Ve && (this._actions + .gotoDate = Ve), this.createSessionBreaksActions(), !this + .readOnly()) { + var He = new A({ + label: s("Remove"), + icon: i("aVjL"), + statName: "RemoveSelectedObject", + onExecute: function() { + var e = this._chartWidgetCollection + .activeChartWidget.value(); + e || (e = this), e.removeSelectedSources() + }.bind(this), + hotkeyGroup: this._hotkeys, + hotkeyHash: b.isMacKeyboard ? 8 : 46 + }); + this._hotkeys.add({ + handler: function() { + this.removeSelectedSources() + }.bind(this), + desc: "Remove selected source", + hotkey: b.isMacKeyboard ? 46 : 8 + }), this._actions.insertDrawingTool = j, this._actions + .paneRemoveAllStudies = H, this._actions.paneRemoveAllDrawingTools = + U, this._actions.paneRemoveAllStudiesDrawingTools = G, this._actions + .applyStudiesToAllCharts = Y, this._actions.seriesRemove = He, this + ._actions.studyRemove = He, this._actions.lineRemove = He, h + .enabled("property_pages") && (this._actions.format = J), this + ._actions.lockDrawingsAction = ge, this._actions + .hideAllDrawingsAction = be, this._actions.hideAllMarks = ve + } + this._actions.showPriceLine = new A({ + label: s("Price Line"), + checkable: !0, + statName: "TogglePriceLine" + }), this._actions.showPriceLine.binding = new u(this._actions + .showPriceLine, this.model().mainSeries().properties() + .showPriceLine, this.model(), "Undo Toggle Price Line"), this + .readOnly() || (this._actions.horzLineRightThere = new A({ + label: s("Draw Horizontal Line Here"), + onExecute: function() { + t.activePaneWidget && t.activePaneWidget + .drawRightThere("LineToolHorzLine") + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 72 + }), this._actions.vertLineRightThere = new A({ + label: s("Draw Vertical Line Here"), + onExecute: function() { + t.activePaneWidget && t.activePaneWidget + .drawRightThere("LineToolVertLine") + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 86 + }), this._actions.crossLineRightThere = new A({ + label: s("Draw Cross Line Here"), + onExecute: function() { + t.activePaneWidget && t.activePaneWidget + .drawRightThere("LineToolCrossLine") + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 67 + }), this._actions.trendLine = new A({ + label: s("Draw Trend Line"), + onExecute: function() { + t.activePaneWidget && k.tool.setValue( + "LineToolTrendLine") + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 84 + }), this._actions.FibRetracement = new A({ + label: s("Draw Fib Retracement"), + onExecute: function() { + t.activePaneWidget && k.tool.setValue( + "LineToolFibRetracement") + }, + hotkeyGroup: this._hotkeys, + hotkeyHash: v.Modifiers.Alt + 70 + })), this._updateScalesActions() + } + options() { + return this._options + } + executeActionById(e) { + if ("takeScreenshot" === e) return console.warn( + 'Action "takeScreenshot" is deprecated. Use method "takeScreenshot" instead' + ), void this._chartWidgetCollection.takeScreenshot(); + "lockDrawingsAction" === e && console.warn( + 'Action "lockDrawingsAction" is deprecated. Use method "lockAllDrawingTools" instead' + ), "hideAllDrawingsAction" === e && console.warn( + 'Action "hideAllDrawingsAction" is deprecated. Use method "hideAllDrawingTools" instead' + ), e in this._actions ? this._actions[e] instanceof A && this + ._actions[e].execute() : console.warn("Unknown action id: " + e) + } + getCheckableActionState(e) { + if ("lockDrawingsAction" === e) return console.warn( + 'Action "lockDrawingsAction" is deprecated. Use method "lockAllDrawingTools" instead' + ), null; + if ("hideAllDrawingsAction" === e) return console.warn( + 'Action "hideAllDrawingsAction" is deprecated. Use method "hideAllDrawingTools" instead' + ), null; + if (e in this._actions) { + var t = this._actions[e]; + if (t instanceof A && t.isCheckable()) return t.isChecked(); + console.warn("Action " + e + " has no state") + } else console.warn("Unknown action id: " + e); + return null + } + _updateScalesActions() { + if (null !== this._actions) { + var e = this.model().mainSeries(), + t = e.priceScale(), + i = e.properties(), + s = t.isLockScale(), + r = i.style.value() === c.STYLE_PNF; + this._actions.percentSeriesScale.update({ + disabled: s || r, + checked: t.isPercentage() + }), this._actions.logSeriesScale.update({ + disabled: s || r, + checked: t.isLog() + }), this._actions.regularSeriesScale.update({ + disabled: s || r, + checked: t.isRegular() + }), this._actions.indexedTo100SeriesScale.update({ + disabled: s || r, + checked: t.isIndexedTo100() + }), this._actions.invertSeriesScale.update({ + checked: t.isInverted() + }), this._actions.lockSeriesScale.update({ + checked: t.isLockScale() + }), this._actions.autoSeriesScale.update({ + checked: t.isAutoScale(), + disabled: t.properties().autoScaleDisabled.value() + }) + } + } + removeAllStudies() { + this._model.removeAllStudies() + } + removeAllDrawingTools() { + this._model.removeAllDrawingTools() + } + removeAllStudiesDrawingTools() { + this._model.removeAllStudiesAndDrawingTools() + } + defaultSymbol() { + return this._defSymbol + } + connect() { + this._handler = function(e) { + this._onData(e) + }.bind(this), this._boundOnChartSessionIsConnectedChanged = this + ._onChartSessionIsConnectedChanged.bind(this), this._chartSession + .isConnected().subscribe(this._boundOnChartSessionIsConnectedChanged), + this._chartSession.criticalError().subscribe(this, this + ._onChartSessionCriticalError), this._chartSession.connect(this + ._handler) + } + finishInitWithoutConnect() { + this._chartSession.disable(), this._init(), this.chartWidgetInitialized + .fire() + } + reconnect() { + this._chartSession.disconnect(), this._chartSession.connect() + } + update() { + if (this._model) { + for (var e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e] + .update(); + this._timeAxisWidget && this._timeAxisWidget.update() + } + } + _makeDefaultGui() { + this._makeLoadingScreen(), this._model && (this._makeTimeAxisWidget(), this + ._makePaneWidgetsAndSeparators()), this.adjustSize(), this + ._updateScalesActions(), y(this._elMainTable), this.update(), this + .paint() + } + widget() { + return this._mainDiv + } + _onBackgroundColorChanged() { + for (var e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e] + .setCursorForTool(); + this.update(), this.model().model().fullUpdate() + } + setScaleLineColor(e) { + this.scaleLineColor = e.value(), this._paneSeparators.forEach((function(e) { + e.update() + })), this.update(), this.paint() + } + setScaleTextColor(e) { + this.scaleTextColor = e.value(), this.update(), this.paint() + } + setTimingsMeter(e) { + this._timingsMeter = e, this._updateTimingsMeterState() + } + ownerDocument() { + return this._parent.ownerDocument + } + _updateTimingsMeterState() { + var e = this._options.visible.value(); + null !== this._timingsMeter && (e ? this._timingsMeter.startCollect() : this + ._timingsMeter.stopCollect()) + } + _update(e) { + var t = e ? e.fullInvalidation() : j.Full, + i = !!e && e.isVisibleTimeRangeLockedOnResize(); + if (null !== this._timingsMeter && this._timingsMeter.startDraw(t), + t === j.Full && (this._model ? this._updateGui(i) : this.adjustSize(i)), + e.invalidateForTimeScale() > j.Cursor && this._timeAxisWidget.update(), + this.paint(e), this._dataWindowWidget) { + var s = e.maxPaneInvalidation(); + s === j.Full ? this._dataWindowWidget.fullUpdate() : s > j.None && this + ._dataWindowWidget.update() + } + for (var r = 0; r < this._paneWidgets.length; r++) this._paneWidgets[r] + .updateStatusWidget(e.invalidateForPane(r).fullInvalidation()); + null !== this._timingsMeter && this._timingsMeter.stopDraw(), e && e + .panesOrderInvalidated() && ae.emit("panes_order_changed") + } + _createVolumeIfNeeded() { + var e = h.enabled("create_volume_indicator_by_default") && this._options + .addVolume, + t = !this._content, + i = h.enabled("charting_library_base"), + s = h.enabled("create_volume_indicator_by_default_once"), + r = this._content && !this._content.loading; + e && (t || i && r && !s) && this._model.mainSeries().dataEvents() + .symbolResolved().subscribe(this, (function() { + var e = this; + setTimeout((function() { + var t = e._model.model().mainSeries() + .symbolInfo(); + if (t) { + var i = !t.has_no_volume; + if (!e.containsVolume() && i) { + var s = te.factoryDefaults( + "chartproperties.volumePaneSize" + ), + r = e._model.model() + .createStudyInserter({ + type: "java", + studyId: "Volume@tv-basicstudies" + }); + r.setForceOverlay(h.enabled( + "volume_force_overlay")), r + .setPaneSize(s), h.enabled( + "hide_volume_ma") && r + .setPropertiesState({ + styles: { + vol_ma: { + visible: !1 + } + } + }), r.insert() + } else if (!i && e.containsVolume()) { + var n = e.model().dataSources() + .filter((function(e) { + return e instanceof w && + "Volume" === e + .metaInfo() + .shortId + }))[0]; + e._model.model().removeSource(n) + } + } + }), 0) + }), s) + } + _createSessions(e) { + var t = this.showGeneralChartProperties.bind(this, f.timezoneSessions); + e.createSessions(t) + } + _createPrePostMarket(e) {} + _createChartEventsSource() { + throw new Error("Not implemented") + } + _onChartStyleChanged() { + $("Chart", "Chart Style " + this._model.mainSeries().getStyleShortName() + .toUpperCase()) + } + _updateGui(e) { + this._model && (this._makeTimeAxisWidget(), this + ._makePaneWidgetsAndSeparators(), this._elMainTable.style + .userSelect = "none", this.adjustSize(e)) + } + setVisibleTimeRange(e, t, i, s) { + { + const r = this._model.mainSeries().seriesSource(); + this._chartSession.setVisibleTimeRange(r.instanceId(), r.turnaround(), + e, t, i || {}, s) + } + } + _makeLoadingScreen() { + if (h.enabled("lean_chart_load")) { + if (this.screen) return; + this.screen = new ee(this, this._parent) + } else this.screen = new ee(this, this._mainDiv) + } + _makeAvailableOnTVPopup() { + throw new Error("Not implemented") + } + _setSymbol(e, t) { + if (this._model) { + var i = this._model.mainSeries(); + if (!t && i.symbolSameAsCurrent(e)) return; + this._model.selectionMacro((function(e) { + e.clearSelection() + })), this._model.setSymbol(this._model.mainSeries(), e) + } else this._properties.mainSeriesProperties.merge({ + symbol: e + }) + } + setSymbol(e, t) { + return this._setSymbol.apply(this, arguments) + } + loadRange(e) { + this._model && (this.screen.show(), this._model.loadRange(e)) + } + getSymbol(e) { + var t; + return (t = this._model ? this._model.mainSeries().properties() : this + ._properties.mainSeriesProperties) ? e && t.shortName && t.shortName + .value() ? t.shortName.value() : t.symbol.value() : "" + } + toggleMaximizePane(e) { + if (!(this._paneWidgets.length < 2)) { + this._maximizedPaneWidget ? (this._maximizedPaneWidget.state() + .setMaximized(!1), this._maximizedPaneWidget = null, this + ._paneSeparators.forEach((function(e) { + e.show() + }))) : (this._maximizedPaneWidget = e, this._maximizedPaneWidget + .state().setMaximized(!0), this._paneSeparators.forEach(( + function(e) { + e.hide() + }))); + for (var t = this._paneWidgets.length; t--;) this._paneWidgets[t] + .updateControls(), this._paneWidgets[t].updatePriceAxisWidgets(); + this._timeAxisWidget.updatePriceAxisStubs(), this.adjustSize(), this + .updateCrossHairPositionIfNeeded() + } + } + _titlesProvider(e, t) { + var i = this.model(), + s = this._maximizedPaneWidget ? this._maximizedPaneWidget.state() : i + .paneForSource(i.mainSeries()), + r = "right" === e ? s.rightPriceScales() : s.leftPriceScales(); + if (r.length < t + 1) return []; + var n = r[t].orderedSources().filter((function(e) { + return e === i.mainSeries() || e instanceof w + })); + return n.reverse(), (n = a(n, i.mainSeries())).map((function(e) { + return e.title(!0, void 0, !1) + })) + } + _menuItemsProvider(e, t) { + var i = this.model(), + s = this._maximizedPaneWidget ? this._maximizedPaneWidget.state() : i + .paneForSource(i.mainSeries()), + r = "right" === e ? s.visibleRightPriceScales() : s + .visibleLeftPriceScales(); + if (r.length < t + 1) return []; + var n = r[t], + o = i.panes().indexOf(s), + a = this._paneWidgets[o]; + return ("right" === e ? a.rightPriceAxisesContainer() : a + .leftPriceAxisesContainer()).findAxisWidgetForScale(n) + .getContextMenuActions() + } + _makeTimeAxisWidget() { + if (this._timeAxisWidget) this._timeAxisWidget.updatePriceAxisStubs(); + else { + var e = this.model(); + this._timeAxisWidget = new l(this, this._options.timeScaleWidget, this + ._titlesProvider.bind(this), this._menuItemsProvider.bind(this), + this._backgroundBasedTheme), this._elMainTable.appendChild(this + ._timeAxisWidget.getElement()), this._timeAxisWidget + .updatePriceAxisStubs(), this._timeAxisWidget.onLabelHovered() + .subscribe(this, (function(t, i) { + var s = this._maximizedPaneWidget ? this + ._maximizedPaneWidget.state() : e.paneForSource(e + .mainSeries()), + r = this.paneByState(s).highlightedPriceAxis(), + n = r.value(); + (i || n.owner === t.owner) && (r.setValue({ + owner: t.owner, + axis: i ? t.axis : null + }), this.model().model().lightUpdate()) + })) + } + } + insertStudy(e, t, i, s) { + var r = this; + return new Promise((function(n) { + t ? window.runOrSignIn((function() { + n(r._insertStudy(e, t, i, s)) + }), { + source: "study on study" + }) : n(r._insertStudy(e, t, i, s)) + })).catch((function() {})) + } + _insertStudy(e, t, i, s) { + var r = this._model.createStudyInserter(e, t, i); + r.setForceOverlay("java" === e.type && "Volume@tv-basicstudies" === e + .studyId && h.enabled("volume_force_overlay")); + var n = this, + o = r.insert((function(e, t, i) { + return new Promise((function(r, o) { + n.selectPointMode().value() && n + .cancelRequestSelectPoint(), s ? r(s(e, + t, i)) : n.isSymbolicStudy(i) ? ($( + "GUI", "Confirmation dialogs", + "Symbol confirmation dialog"), + S(n, i, r, o, "symbol")) : n + .hasConfirmInputs(t) ? ($("GUI", + "Confirmation dialogs", + "Inputs confirmation dialog"), + S(n, i, r, o)) : r({}) + })) + })); + return o.catch((function(e) {})), o + } + hasConfirmInputs(e) { + if (void 0 === e) return !1; + for (var t = 0; t < e.length; ++t) { + var i = e[t]; + if (void 0 !== i.confirm && i.confirm) return !0 + } + return !1 + } + isSymbolicStudy(e) { + switch (e.id) { + case "Overlay@tv-basicstudies": + case "CorrelationCoefficient@tv-basicstudies": + case "Correlation Coeff@tv-basicstudies": + case "Spread@tv-basicstudies": + case "Ratio@tv-basicstudies": + return !0; + default: + return !1 + } + } + _onChartSessionIsConnectedChanged(e) { + e ? this._onConnection() : this._onDisconnect() + } + _onChartSessionCriticalError(e, t) { + this._disconnected.fire(!0) + } + _onData(e) { + switch (e.method) { + case "reconnect_bailout": + this._reconnectBailout.fire(); + break; + default: + this._model.onData(e) + } + } + _onConnection() { + this._online = !0, this._model ? (this._model.restart(), this._updateGui(), + this.update(), this.paint(), this._connected.fire()) : this + .requestMetadata() + } + _onDisconnect() { + this._model && this._model.disconnect(), this._online = !1, this.update(), + this.paint(), this._disconnected.fire() + } + _applyStudiesOverrides() { + Z.overrideDefaults(this._metaInfoRepository.getInternalMetaInfoArray()) + } + requestMetadata() { + this._addPerfMark("RequestMetadataStart"), this._metaInfoRepository + .requestMetaInfo().then(function() { + this._addPerfMark("RequestMetadataEnd"), this._inited ? this + .model().model().setStudiesMetaData(this._metaInfoRepository + .getInternalMetaInfoArray(), this._metaInfoRepository + .getMigrations()) : (this._init(), this + .chartWidgetInitialized.fire(), h.enabled( + "charting_library_base") || ie.logDebug( + "initialized")) + }.bind(this)) + } + studiesMetaData() { + return this._model.studiesMetaData() + } + getTimeScale() { + return this._timeAxisWidget + } + chartWidgetCollection() { + return this._chartWidgetCollection + } + setSeriesStyle(e, t) { + this._model.setProperty(e.properties().style, t) + } + showObjectsTreePanelOrDialog() { + var e = !1, + t = window.widgetbar; + t && t.isVisible() && (e = "object_tree" === t.setPage("object_tree").name); + e || this.showObjectsTreeDialog() + } + _showChartProperties(e, t, i, s) { + t && (m("properties_dialog.active_tab.chart", t), i.tabName = t); + var r = this; + return new Promise((function(t) { + d(e, r._model, i, r._chartWidgetCollection, s).then(( + function(e) { + t(null !== e && e.isVisible() ? e : null) + })) + })) + } + showGeneralChartProperties(e) { + if (!h.enabled("show_chart_property_page")) return Promise.resolve(null); + var t = this; + return this._showChartProperties(this._model.mainSeries(), e, { + doNotCloseOnBgClick: !0, + onResetToDefault: function() { + t._model.restorePreferences(t._model), t.applyTheme(t) + } + }).then((function(e) { + if (null === e) return null; + var i = function() { + e.hide(), t._chartWidgetCollection.activeChartWidget + .unsubscribe(i) + }; + return t._chartWidgetCollection.activeChartWidget.subscribe( + i), e + })) + } + showChartPropertiesForSource(e, t, i, s) { + return h.enabled("property_pages") ? e === this._model.model() + .mainSeries() ? this.showGeneralChartProperties(t) : ((i = i || {}) + .onResetToDefault = this._model.restorePropertiesForSource.bind(this + ._model, e), this._showChartProperties(e, t, i, s)) : Promise + .resolve(null) + } + generalPropertiesDefinitions() { + return this._getChartPropertyDefinitionsViewModel().then((function(e) { + return e.propertyPages() + })) + } + propertiesDefinitionsForSource(e) { + return I(e) || C(e) || M(e) ? e.getPropertyDefinitionsViewModel().then(( + function(e) { + return null === e ? null : e.propertyPages() + })).catch((function(e) { + return ie.logWarn(e), null + })) : Promise.resolve(null) + } + toggleCompareOrAdd() { + this._compareDialog.visible().value() ? this._compareDialog.hide() : this + ._compareDialog.show() + } + showIndicators(e) { + if (window.studyMarket) return window.studyMarket.visible().value() ? + void window.studyMarket.hide() : (window.studyMarket.show(e), window + .studyMarket) + } + showFundamentals(e) { + if (window.fundamentalsDialog) { + if (!window.fundamentalsDialog.visible().value()) { + var t, i = void 0 !== e ? e.title(!0) : void 0; + if (void 0 !== e) { + var s = e.symbolInfo(); + t = null === s ? e.symbol() : s.ticker || s.full_name + } + return window.fundamentalsDialog.show(t, i), window + .fundamentalsDialog + } + window.fundamentalsDialog.hide() + } + } + removeSelectedSources() { + this.removeDataSources(this._model.selection().dataSources()) + } + removeDataSources(e) { + var t = e.filter(function(e) { + return e !== this._model.mainSeries() && e !== this._model + .lineBeingCreated() && !(e instanceof O) + }.bind(this)); + if (0 !== t.length) { + var i = null; + C(t[0]) && (n(1 === t.length, + "Cannot remove several studies (no multi select for studies)" + ), i = t[0]); + t.find((function(e) { + return e.hasAlert.value() && e.isUserDeletable() + })); + i && i.hasChildren() ? showDeleteStudyTreeConfirm(this._model + .removeSelectedSources.bind(this._model)) : this._model + .removeSelectedSources() + } + } + unlinkSelectedLine() { + var e = this._model, + t = e.selection().lineDataSources(); + e.unlinkLines(t) + } + copyLineToOtherCharts() { + var e = this._model, + t = e.selection().lineDataSources().filter((function(e) { + return e.isSynchronizable() + })); + e.copyToOtherCharts(t) + } + hideSelectedObject() { + this.hideDataSources(this._model.selection().dataSources()) + } + hideDataSources(e) { + if (e.length) { + var t = e.map((function(e) { + return e.properties().visible + })), + i = e.map((function() { + return !1 + })); + this._model.setProperties(t, i, "Hide " + e[0].title()) + } + } + toggleLockSelectedObject() { + var e = this._model; + e.selection().lineDataSources().forEach((function(t) { + var i = t.properties().frozen.value(); + e.setProperty(t.properties().frozen, !i, s(i ? "Unlock" : + "Lock") + " " + t.title()) + })) + } + showSelectedSourceProperties() { + var e = this._model.selection().dataSources()[0]; + e && this.showSourceProperties(e) + } + showSourceProperties(e) { + var t = null; + e === this._model.mainSeries() && (t = f.symbol), this + .showChartPropertiesForSource(e, t) + } + openSelectedObjectSource(e) {} + tags() { + return this._model ? this._model.calculateDefaultTags() : [] + } + state(e, t, i, s) { + if (this._model) { + const r = this._model.state(e, t, i, s); + return r.chartId = this.id(), r + } + return this._content ? this._content : {} + } + asyncState() { + return this._model.asyncState() + } + metaInfo() { + var e = this._metaInfo; + return this._model && (e.systemTags = this._model.calculateDefaultTags()), e + } + onTagsChanged() { + return this._tagsChanged + } + onModelTagsChanged() { + this._tagsChanged.fire() + } + onAboutToBeDestroyed() { + return this._aboutToBeDestroyed + } + destroy() { + this._aboutToBeDestroyed.fire(), null !== this._removeMaximizeHotkey && ( + this._removeMaximizeHotkey(), this._removeMaximizeHotkey = null), + 0 !== this._drawRafId && this._parent.ownerDocument.defaultView + .cancelAnimationFrame(this._drawRafId), null !== this + ._backgroundTopColorSpawn && this._backgroundTopColorSpawn.destroy(), + null !== this._backgroundBottomColorSpawn && this + ._backgroundBottomColorSpawn.destroy(), null !== this._timingsMeter && ( + this._timingsMeter.stopCollect(), this._timingsMeter = null); + for (var e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e] + .destroy(); + this._paneWidgets.length = 0; + for (e = 0; e < this._paneSeparators.length; e++) this._paneSeparators[e] + .destroy(); + for (var t in this._paneSeparators.length = 0, this._hotkeysListener && this + ._hotkeysListener.destroy(), this._barsButton && this._barsButton + .destroy(), this._controlBarNavigation && (this + ._controlBarNavigation.destroy(), this._controlBarNavigation = + void 0), this._mainDiv && this._mainDiv.remove(), this + ._actions) { + var i = this._actions[t]; + i instanceof A && (i.destroy(), i.binder && i.binder.destroy()) + } + null !== this._timeAxisWidget && (this._timeAxisWidget.destroy(), this + ._timeAxisWidget = null), null !== this._definitionsViewModel && + this._definitionsViewModel.destroy(), this._hotkeys && (this._hotkeys + .destroy(), this._hotkeys = null), this._mainDiv + .removeEventListener("wheel", this._onWheelBound), window + .removeEventListener("keydown:chart_" + this._id, this + ._keydownEventListener), super.destroy(), this._chartSession + .criticalError().unsubscribe(this, this._onChartSessionCriticalError), + this._chartSession.isConnected().unsubscribe(this + ._boundOnChartSessionIsConnectedChanged), this._chartSession + .destroy() + } + title() { + return s("Chart Properties") + } + symbolProperty() { + return this._model.mainSeries().properties().shortName ? this._model + .mainSeries().properties().shortName : this._model.mainSeries() + .properties().symbol + } + loadContent(e, t) { + this.screen.show(); + this.isMaximizedPane() && this.toggleMaximizePane(); + for (var i, s = this._model.model().dataSources(), r = 0; r < s + .length; r++) { + var n = s[r]; + n !== this._model.mainSeries() && this._model.model().removeSource(n, ! + 0) + } + this._model.disconnect(), this.activePaneWidget = null, this._model + .mainSeries().purgeSymbolInfo(), e.loading = !0, this._content = e, this + ._initialLoading = Boolean(t); + for (r = 0; r < e.panes.length; ++r) + for (var o = 0; o < e.panes[r].sources.length; ++o) + if (e.panes[r].sources[o].state.symbol) { + i = e.panes[r].sources[o].state; + break + } if (!i) throw Error( + "An error occured while determining main series ion the chart"); + this._properties.mainSeriesProperties.mergeAndFire({ + visible: !0, + symbol: i.symbol, + timeframe: "", + onWidget: this._onWidget, + interval: i.interval || "D", + style: i.style + }), this._init(), this._model.undoHistory().clearStack() + } + _contentSeriesProperties() { + if (this._content) + for (var e = this._content.panes.length; e-- > 0;) + for (var t = this._content.panes[e].sources, i = t.length; i-- > 0;) + if ("MainSeries" === t[i].type) return t[i].state + } + updateUndoRedo() { + this._model && (this.actions().undo.update({ + disabled: this._model.undoHistory().undoStack().isEmpty() + }), this.actions().redo.update({ + disabled: this._model.undoHistory().redoStack().isEmpty() + })) + } + createSessionBreaksActions(e) { + var t = new A({ + label: s("Session Breaks"), + checkable: !0, + statName: "ToggleSessionBreaks" + }); + t.binder = new u(t, this._model.chartModel().sessions().properties() + .graphics.vertlines.sessBreaks.visible, this.model(), + "Session Breaks"), this._actions.sessionBreaks = t + } + updateActionForIntradayOnly(e) { + e && e instanceof A && e.update({ + disabled: this.model().mainSeries().isDWM() + }) + } + containsVolume() { + return this.model().dataSources().some((function(e) { + return e instanceof w && "Volume" === e.metaInfo().shortId + })) + } + containsStudyByPredicate(e) { + return !!this._model && this._model.dataSources().some((function(t) { + if (!(t instanceof w)) return !1; + var i = t.metaInfo(); + return e(i) + })) + } + containsStudy(e) { + return this.containsStudyByPredicate((function(t) { + return t.id === e || t.fullId === e + })) + } + isSmall() { + return this._width() < 550 || this._height() < 300 + } + onWidget() { + return this._onWidget + } + onCmeWidget() { + return "cme" === this.widgetCustomer() + } + widgetCustomer() { + return this._widgetCustomer + } + resize() { + var e = this._height() + "px", + t = this._width() + "px"; + this._mainDiv.style.height = e, this._mainDiv.style.width = t, this + ._elMainTable.style.height = e, this._elMainTable.style.width = t, this + ._resizeHandler && this._mainDiv && this._resizeHandler() + } + chartSession() { + return this._chartSession + } + onLineCancelled() { + k.resetToCursor() + } + _startSpinner(e) { + this._spinner || e && (this._spinner = (new X).spin(e)) + } + isJustClonedChart() { + return !!(this._options || {}).justCloned + } + applyOverrides(e) { + var t = {}; + for (var i in e) i.startsWith("mainSeriesProperties.priceAxisProperties") || + (t[i] = e[i]); + if (applyPropertiesOverrides(this.properties(), null, !1, t, null), this + ._model) { + applyPropertiesOverrides(this._model.model().properties(), null, !1, t), + applyPropertiesOverrides(this._model.mainSeries().properties(), + null, !1, t, "mainSeriesProperties"), this._model.model() + .sessions().applyOverrides(t); + const e = this._model.chartModel().watermarkSource(); + null !== e && e.applyOverrides(t) + } + } + applyStudiesOverrides(e) { + Z.mergeDefaultsOverrides(e), this._applyStudiesOverrides() + } + setActive(e) { + this._isActive = e, Q() && (e && this.selectPointMode().value() ? this + .startTrackingMode() : this.exitTrackingMode()), this._paneWidgets + .forEach((function(e) { + e.update() + })), e || this.model().selectionMacro((function(e) { + e.clearSelection() + })) + } + isActive() { + return this._isActive + } + trackTime() { + return this._chartWidgetCollection.lock.trackTime + } + crossHairSyncEnabled() { + return this._chartWidgetCollection.lock.crosshair.value() + } + isMultipleLayout() { + return ne(this._chartWidgetCollection.layout.value()) + } + selectPointMode() { + return this._model.model().selectPointMode() + } + cancelRequestSelectPoint() { + this._model.model().cancelRequestSelectPoint() + } + requestSelectPoint(e, t, i) { + var s = this; + return new Promise((function(r, n) { + if (l()) { + k.resetToCursor(!0), s._model.lineBeingCreated() && s + ._model.cancelCreatingLine(); + var o = !1, + a = {}; + s._model.model().onPointSelected().subscribe(a, ( + function(e, t) { + o = !0, s._isVisible.unsubscribe(l), s + ._hideHint(), r({ + point: e, + pane: t + }) + }), !0), s._model.model().requestSelectPoint(e, + i), s.startTrackingMode(), void 0 !== t && s + ._showHint(t), s._isVisible.subscribe(l), s + .selectPointMode().subscribe((function() { + setTimeout((function() { + o || (s.selectPointMode() + .value() || s + ._hideHint(), s + ._model.model() + .onPointSelected() + .unsubscribeAll( + a), s + ._isVisible + .unsubscribe(l), + n("cancelled")) + })) + }), { + once: !0 + }) + } + + function l() { + return !!s.isVisible() || (n( + "Chartwidget must be visible"), s + .cancelRequestSelectPoint(), !1) + } + })) + } + showReplayOrderConfirmationDialog() { + if (!this.model().isInReplay()) return Promise.resolve() + } + _addPerfMark(e) { + oe("ChartWidget." + this._id + "." + e) + } + requestFullscreen() { + this._options.requestFullscreen() + } + getResizerDetacher() { + return this._options + } + _createHint() { + if (null === this._hintDefferedPromise) { + var e = ue(); + this._hintDefferedPromise = e; + var t = this; + Promise.all([i.e("react"), i.e(89), i.e("chart-event-hint")]).then(i + .bind(null, "PN5r")).then((function(i) { + e.resolve(new i.ChartEventHintRenderer(t + ._chartWidgetCollection.getContainer())) + })) + } + return this._hintDefferedPromise ? o(this._hintDefferedPromise).promise : + null + } + _showHint(e) { + if (h.enabled("popup_hints")) + if (null !== this._activeHint) this._activeHint.show(e); + else { + var t = this, + i = this._createHint(); + null !== i && i.then((function(i) { + if (null !== i) { + if (t._activeHint = i, void 0 === e) return; + t._activeHint.show(e) + } + })) + } + } + _hideHint() { + null !== this._activeHint && this._activeHint.hide() + } + } + e.exports.ChartWidget = ge, e.exports.trackingModeIsAvailable = ce + }).call(this, i("aIyQ")) + }, + "Zp/P": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "extendAndClipLineSegment", (function() { + return h + })), i.d(t, "getArrowPoints", (function() { + return u + })), i.d(t, "optimalBarWidth", (function() { + return d + })), i.d(t, "optimalCandlestickWidth", (function() { + return p + })), i.d(t, "optimalHiLoWidth", (function() { + return _ + })), i.d(t, "interactionTolerance", (function() { + return m + })), i.d(t, "coordinateIsValid", (function() { + return f + })), i.d(t, "setValidLineStyle", (function() { + return g + })), i.d(t, "fillScaledRadius", (function() { + return b + })), i.d(t, "strokeScaledRadius", (function() { + return v + })); + var s = i("aO4+"), + r = i("hBTJ"), + n = i("VaSN"), + o = i("ogJP"), + a = i("jFln"); + const l = { + line: 13, + minDistanceBetweenPoints: 10, + series: 14, + curve: 10, + anchor: 13, + esd: 4 + }, + c = { + line: 3, + minDistanceBetweenPoints: 5, + series: 2, + curve: 3, + anchor: 2, + esd: 0 + }; + + function h(e, t, i, n, o, a) { + if (Object(s.equalPoints)(e, t)) return null; + const l = new s.Point(0, 0), + c = new s.Point(i, n); + if (o) { + if (a) { + const i = Object(r.intersectLineAndBox)(Object(s.lineThroughPoints)(e, t), Object(s + .box)(l, c)); + return Array.isArray(i) ? i : null + } { + const i = Object(r.intersectRayAndBox)(t, e, Object(s.box)(l, c)); + return null === i || Object(s.equalPoints)(t, i) ? null : Object(s.lineSegment)(t, + i) + } + } + if (a) { + const i = Object(r.intersectRayAndBox)(e, t, Object(s.box)(l, c)); + return null === i || Object(s.equalPoints)(e, i) ? null : Object(s.lineSegment)(e, i) + } { + const i = Object(r.intersectLineSegmentAndBox)(Object(s.lineSegment)(e, t), Object(s + .box)(l, c)); + return Array.isArray(i) ? i : null + } + } + + function u(e, t, i, s) { + const r = .5 * i, + n = Math.sqrt(2), + o = t.subtract(e), + a = o.normalized(); + let l = 5 * i; + s && (l = Math.min(l, .35 * o.length())); + const c = 1 * r; + if (l * n * .2 <= c) return []; + const h = a.scaled(l), + u = t.subtract(h), + d = a.transposed(), + p = 1 * l, + _ = d.scaled(p), + m = u.add(_), + f = u.subtract(_), + g = m.subtract(t).normalized().scaled(c), + b = f.subtract(t).normalized().scaled(c), + v = t.add(g), + S = t.add(b), + y = r * (n - 1), + w = d.scaled(y), + P = Math.min(l - 1 * r / n, r * n * 1), + C = a.scaled(P), + x = t.subtract(w), + T = t.add(w), + I = t.subtract(C); + return [ + [m, v], + [f, S], + [x, I.subtract(w)], + [T, I.add(w)] + ] + } + + function d(e, t) { + return t = t || 1, Math.floor(.3 * e * t) + } + + function p(e, t) { + if (e >= 2.5 && e <= 4) return Math.floor(3 * t); + const i = 1 - .2 * Math.atan(Math.max(4, e) - 4) / (.5 * Math.PI), + s = Math.floor(e * i * t), + r = Math.floor(e * t), + n = Math.min(s, r); + return Math.max(Math.floor(t), n) + } + + function _(e) { + return .4 * e + } + + function m() { + return Object(n.lastEventIsTouch)() ? l : c + } + + function f(e) { + return null != e && !Object(o.isNaN)(e) + } + + function g(e, t) { + void 0 !== t && Object(a.setLineStyle)(e, t) + } + + function b(e, t) { + const i = Math.max(1, Math.floor(t)) % 2 ? .5 : 0; + return Math.round(e * t) + i + } + + function v(e, t, i) { + const s = Math.max(1, Math.floor(t)) % 2 ? .5 : 0; + return Math.round(e * t) + (s !== i % 2 ? .5 : 0) + } + }, + Zp8I: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StepLineDecoration", (function() { + return s + })), i.d(t, "PaneRendererStepLine", (function() { + return f + })); + var s, r = i("GEp6"), + n = i("VdBB"), + o = i("aO4+"), + a = i("jFln"), + l = i("Y7w9"), + c = i("Zp/P"), + h = i("gAom"), + u = i("Tmoa"); + ! function(e) { + e[e.None = 0] = "None", e[e.Diamonds = 1] = "Diamonds" + }(s || (s = {})); + class d { + initialize(e, t, i, s) { + var r, n, o, l; + const c = e.lineStyle; + t.lineCap = "butt", t.lineJoin = "round"; + const h = Math.max(Math.floor(null !== (n = null === (r = s.style) || void 0 === r ? + void 0 : r.width) && void 0 !== n ? n : e.lineWidth * i.pixelRatio)); + void 0 !== c && Object(a.setLineStyle)(t, c); + const u = h % 2 ? .5 : 0; + t.moveTo(Math.round(s.x * i.pixelRatio) + u, Math.round(s.y * i.pixelRatio) + u), t + .strokeStyle = null !== (l = null === (o = s.style) || void 0 === o ? void 0 : o + .color) && void 0 !== l ? l : e.lineColor, t.lineWidth = h + } + finishFragment(e) { + e.stroke() + } + hitTest(e, t, i, s, n) { + var a, l; + const h = Math.round((i.x + s.x) / 2), + u = new o.Point(h, i.y), + d = new o.Point(h, s.y), + p = null !== (l = null === (a = i.style) || void 0 === a ? void 0 : a.width) && + void 0 !== l ? l : e.lineWidth, + _ = Object(c.interactionTolerance)().series + p / 2; + return Math.min(Object(r.distanceToSegment)(i, u, n).distance, Object(r + .distanceToSegment)(u, d, n).distance, Object(r.distanceToSegment)(d, s, + n).distance) <= _ + } + applyColor(e, t) { + e.strokeStyle = t + } + applyLineWidth(e, t) { + e.lineWidth = t + } + drawItem(e, t, i, s) { + e.lineTo(i.x, i.y), void 0 !== s && (e.lineTo(s.x, i.y), e.lineTo(s.x, s.y)) + } + } + class p { + constructor() { + this._lineWidth = 1 + } + initialize(e, t, i, s) { + var r, n, o, a; + this.applyColor(t, null !== (n = null === (r = s.style) || void 0 === r ? void 0 : r + .color) && void 0 !== n ? n : e.lineColor), this._lineWidth = Math.max(Math + .floor(null !== (a = null === (o = s.style) || void 0 === o ? void 0 : o + .width) && void 0 !== a ? a : e.lineWidth * i.pixelRatio)) + } + finishFragment(e) { + e.fill() + } + drawItem(e, t, i, s, r) { + if (r && void 0 !== s && !Number.isNaN(s.y)) { + e.save(), e.translate(s.x, s.y), e.rotate(Math.PI / 4); + const i = this._scaleByLineWidth(this._lineWidth); + e.scale(i, i), this._drawItemRotatedAndTranslated(e, t), e.restore() + } + } + applyLineWidth(e, t) { + this._lineWidth = t + } + hitTest(e, t, i, s, r) { + var n, a; + if (!s.valIsNotSameAsPrev) return !1; + const l = Math.round((i.x + s.x) / 2), + c = new o.Point(l, s.y), + h = r.subtract(c), + u = Math.max(Math.floor(null !== (a = null === (n = i.style) || void 0 === n ? + void 0 : n.width) && void 0 !== a ? a : e.lineWidth * t.pixelRatio)); + return this._hitTestTranslated(h, u) + } + _scaleByLineWidth(e) { + return Math.sqrt(e) + } + } + class _ extends p { + applyColor(e, t) { + e.fillStyle = t + } + _hitTestTranslated(e, t) { + return Math.abs(e.x) + Math.abs(e.y) < 8 * this._scaleByLineWidth(t) / 2 + } + _drawItemRotatedAndTranslated(e, t) { + Object(h.drawRoundRect)(e, -4, -4, 8, 8, 2, !0) + } + } + class m extends p { + applyColor(e, t) { + e.fillStyle = Object(u.applyTransparency)(t, 90) + } + _hitTestTranslated(e, t) { + return Math.abs(e.x) + Math.abs(e.y) < 21 * this._scaleByLineWidth(t) / 2 + } + _drawItemRotatedAndTranslated(e, t) { + Object(h.drawRoundRect)(e, -10.5, -10.5, 21, 21, 5, !0) + } + } + class f { + constructor() { + this._data = null + } + setData(e) { + this._data = e + } + hitTest(e, t) { + var i; + const r = this._data; + if (null === r || 0 === r.items.length) return null; + const o = r.items, + a = Object(l.lowerbound)(o, e, (e, t) => e.x <= t.x), + c = Math.max(0, a - 1), + h = Math.min(o.length - 1, a + 1), + u = function(e) { + switch (e) { + case s.Diamonds: + return [new d, new m]; + default: + return [new d] + } + }(null === (i = this._data) || void 0 === i ? void 0 : i.decoration); + for (let i = c; i < h; i++) { + const s = o[i], + a = o[i + 1]; + if (a && u.some(i => i.hitTest(r, t, s, a, e))) return new n.HitTestResult(n + .HitTestResult.REGULAR) + } + return null + } + draw(e, t) { + if (null === this._data || 0 === this._data.items.length) return; + e.save(); + (function(e) { + switch (e) { + case s.Diamonds: + return [new d, new _, new m]; + default: + return [new d] + } + })(this._data.decoration).forEach(i => this._drawImpl(e, t, i)), e.restore() + } + _drawImpl(e, t, i) { + var s, r, n, a, l, c, h, u, d, p; + if (null === this._data || 0 === this._data.items.length) return; + const { + lineWidth: _, + lineColor: m, + items: f + } = this._data, g = f.length, b = t.pixelRatio; + let v = Math.max(Math.floor(null !== (r = null === (s = f[0].style) || void 0 === + s ? void 0 : s.width) && void 0 !== r ? r : _ * b)), + S = v % 2 ? .5 : 0; + i.initialize(this._data, e, t, f[0]), e.beginPath(); + for (let s = 0; s < g; s++) { + const r = f[s], + g = f[s + 1], + y = Math.round(r.x * b) + S, + w = Math.round(r.y * b) + S; + if (!g) { + i.drawItem(e, t, Object(o.point)(y, w)); + continue + } + const P = Math.round((r.x + g.x) / 2 * b) + S, + C = Math.round(g.y * b) + S; + i.drawItem(e, t, Object(o.point)(y, w), Object(o.point)(P, C), g + .valIsNotSameAsPrev); + const x = null !== (a = null === (n = r.style) || void 0 === n ? void 0 : n + .color) && void 0 !== a ? a : m, + T = null !== (c = null === (l = r.style) || void 0 === l ? void 0 : l + .width) && void 0 !== c ? c : _, + I = null !== (u = null === (h = g.style) || void 0 === h ? void 0 : h + .color) && void 0 !== u ? u : m, + M = null !== (p = null === (d = g.style) || void 0 === d ? void 0 : d + .width) && void 0 !== p ? p : _, + O = x !== I, + L = T !== M; + (O || L) && (i.finishFragment(e), O && i.applyColor(e, I), L && (v = Math.max(1, + Math.floor(M * b)), S = v % 2 ? .5 : 0, i.applyLineWidth(e, v)), e + .beginPath(), e.moveTo(P, C)) + } + i.finishFragment(e) + } + } + }, + ZsYR: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "OverlayStatusProvider", (function() { + return r + })); + var s = i("W+6j"); + class r extends s.a { + getSplitTitle() { + return this._source.titleInParts(!0, void 0, !1, !1) + } + text() { + return this._source.isActualInterval() ? this._source.isFailed() ? + `${this._source.title(!0, void 0, !1, !1)}: ${this.sourceStatusText()}` : + `${this._source.title(!0, void 0, !1, !1)} ${this.sourceStatusText()}` : + this._source.title(!0, void 0, !1, !1) + } + } + }, + ZtA1: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), this.version = l.version, i.e("lt-pane-views") + .then(i.t.bind(null, "6sSH", 7)).then(({ + TrendBasedFibExtensionPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 3 + } + name() { + return "Trend-Based Fib Extension" + } + migrateVersion(e, t, i) { + 1 === e && this.properties().extendLines.setValue(!0) + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + static createProperties(e) { + var t = new r("linetooltrendbasedfibextension", e, !1, { + range: [0, 8] + }); + return l._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "17v9"))) + .FibDrawingsWith24LevelsDefinitionsViewModel + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("trendline").child("linewidth"), e.child("levelsStyle").child( + "linewidth")], i = [e.child("trendline").child("color")], r = 1; r <= l + .LevelsCount; r++) i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + fibLevelsBasedOnLogScale() { + return this.properties().fibLevelsBasedOnLogScale.value() && this.priceScale() + .isLog() + } + } + l.version = 2, l.LevelsCount = 24, t.LineToolTrendBasedFibExtension = l + }, + "Zy3/": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "CompositeRenderer", (function() { + return s + })); + class s { + constructor() { + this._renderers = [], this._globalAlpha = 1 + } + setGlobalAlpha(e) { + this._globalAlpha = e + } + append(e) { + this._renderers.push(e) + } + insert(e, t) { + this._renderers.splice(t, 0, e) + } + clear() { + this._renderers.length = 0 + } + draw(e, t) { + for (let i = 0; i < this._renderers.length; i++) e.save(), e.globalAlpha = this + ._globalAlpha, this._renderers[i].draw(e, t), e.restore() + } + drawBackground(e, t) { + e.save(), e.globalAlpha = this._globalAlpha; + for (let i = 0; i < this._renderers.length; i++) { + const s = this._renderers[i]; + s.drawBackground && s.drawBackground(e, t) + } + e.restore() + } + hitTest(e, t) { + let i = null; + for (let s = this._renderers.length - 1; s >= 0; s--) { + const r = this._renderers[s].hitTest(e, t); + null !== r && (null === i || r.result() > i.result()) && (i = r) + } + return i + } + doesIntersectWithBox(e) { + return this._renderers.some(t => !!t.doesIntersectWithBox && t.doesIntersectWithBox( + e)) + } + } + }, + a7Ha: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "LineEnd", (function() { + return s + })), + function(e) { + e[e.Normal = 0] = "Normal", e[e.Arrow = 1] = "Arrow", e[e.Circle = 2] = "Circle" + }(s || (s = {})) + }, + aDyP: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("7KDR").Action, + o = i("rCHB").LineToolPitchforkStyle, + a = null, + l = i("j3hX"), + c = l.LineToolWidthsProperty, + h = l.LineToolColorsProperty; + class u extends s { + constructor(e, t) { + super(e, t || u.createProperties()), this._properties.style.listeners().subscribe( + this, u.prototype._recreatePaneView), this._recreatePaneView() + } + levelsCount() { + return u.LevelsCount + } + additionalActions(e) { + for (var t = [], i = ["Original", "Modified Schiff", "Inside", "Schiff"], s = 0; s < + 4; s++) { + var r = new n({ + checked: this.properties().style.value() === s, + checkable: !0, + label: window.t(i[s]), + payload: { + target: this, + value: s + }, + onExecute: function(t) { + var i = t.getPayload(), + s = i.target; + e.setProperty(s.properties().style, i.value, + `Change ${s.name()} Style`), s.updateAllViews(), s + ._model.updateSource(s) + } + }); + t.push(r) + } + return [t[0], t[3], t[1], t[2]] + } + _recreatePaneView() { + if (null !== a) { + var e = []; + this._properties.style.value() === o.Original ? e = [new a + .PitchforkLinePaneView(this, this._model) + ] : this._properties.style.value() === o.Schiff ? e = [new a + .SchiffPitchforkLinePaneView(this, this._model) + ] : this._properties.style.value() === o.Schiff2 ? e = [new a + .SchiffPitchfork2LinePaneView(this, this._model) + ] : this._properties.style.value() === o.Inside && (e = [new a + .InsidePitchforkLinePaneView(this, this._model) + ]), this._setPaneViews(e) + } else i.e("lt-pane-views").then(i.t.bind(null, "cT+B", 7)).then(e => { + null === a && (a = e), this._recreatePaneView() + }) + } + pointsCount() { + return 3 + } + name() { + return "Pitchfork" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + static createProperties(e) { + var t = new r("linetoolpitchfork", e, !1, { + range: [0, 8] + }); + return u._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "HCdA"))) + .PitchForkDefinitionsViewModel + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("median").child("linewidth")], i = [e.child("median").child( + "color")], r = 0; r <= u.LevelsCount; r++) t.push(e.child("level" + r) + .child("linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new h(i)), e.addChild("linesWidths", new c(t)) + } + } + u.LevelsCount = 8, t.LineToolPitchfork = u + }, + aILO: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolHeadAndShoulders", (function() { + return o + })); + var s = i("Ocx9"), + r = i("Ss5c"), + n = i("j3hX"); + class o extends r.LineDataSource { + constructor(e, t) { + const s = t || o.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "Fx2Q")).then(t => { + this._setPaneViews([new t.LineToolHeadAndShouldersPaneView(this, + e)]) + }) + } + pointsCount() { + return 7 + } + name() { + return "Head and Shoulders" + } + properties() { + return super.properties() + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolheadandshoulders", e); + return o._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "/HOw")).then( + e => e.PatternWithBackgroundDefinitionViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e), e.addChild("linesColors", new n + .LineToolColorsProperty([e.childs().color])), e.addChild("textsColors", + new n.LineToolColorsProperty([e.childs().textcolor])) + } + } + }, + aIha: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolFlagMark", (function() { + return a + })); + var s = i("aO4+"), + r = i("Ss5c"), + n = i("Ocx9"), + o = i("j3hX"); + class a extends r.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), i.e("lt-pane-views").then(i.bind(null, + "y/56")).then(({ + FlagMarkPaneView: e + }) => { + const t = new e(this, this.model()); + t.setAnchors(new s.Point(0, 0)), this._setPaneViews([t]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Flag Mark" + } + properties() { + return super.properties() + } + static createProperties(e) { + e && void 0 === e.flagColor && (e.flagColor = "#318757"); + const t = new n.DefaultProperty("linetoolflagmark", e); + return a._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "w/mY")).then( + e => e.FlagMarkDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e), e.addChild("backgroundsColors", new o + .LineToolColorsProperty([e.childs().flagColor])), e.addExclusion( + "backgroundsColors") + } + } + a.version = 2 + }, + aIyQ: function(e, t, i) { + "use strict"; + (function(e) { + const t = i("txPx").getLogger("Common.Delegate"); + + function s() { + this._listeners = [] + } + + function r(e) { + return !e.singleshot + } + s.prototype.subscribe = function(e, t, i) { + const s = { + object: e, + member: t, + singleshot: !!i, + skip: !1 + }; + this._listeners.push(s) + }, s.prototype.unsubscribe = function(e, t) { + for (let i = 0; i < this._listeners.length; ++i) { + const s = this._listeners[i]; + if (s.object === e && s.member === t) { + s.skip = !0, this._listeners.splice(i, 1); + break + } + } + }, s.prototype.unsubscribeAll = function(e) { + for (let t = this._listeners.length - 1; t >= 0; --t) { + const i = this._listeners[t]; + i.object === e && (i.skip = !0, this._listeners.splice(t, 1)) + } + }, s.prototype.destroy = function() { + delete this._listeners + }, s.prototype.fire = function() { + const e = this._listeners; + this._listeners = this._listeners.filter(r); + const i = e.length; + for (let s = 0; s < i; ++s) { + const i = e[s]; + if (!i.skip) try { + i.member.apply(i.object || null, arguments) + } catch (e) { + t.logError(e.stack || e.message) + } + } + }, "undefined" != typeof window && (window.Delegate = s), e && e.exports && (e + .exports = s) + }).call(this, i("YuTi")(e)) + }, + "aO4+": function(e, t, i) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.equalBoxes = t.box = t.halfplaneThroughPoint = t.halfplane = t.lineSegment = t + .lineThroughPoints = t.line = t.equalPoints = t.point = t.Point = void 0; + var s = function() { + function e(e, t) { + this.x = e, this.y = t + } + return e.prototype.add = function(t) { + return new e(this.x + t.x, this.y + t.y) + }, e.prototype.addScaled = function(t, i) { + return new e(this.x + i * t.x, this.y + i * t.y) + }, e.prototype.subtract = function(t) { + return new e(this.x - t.x, this.y - t.y) + }, e.prototype.dotProduct = function(e) { + return this.x * e.x + this.y * e.y + }, e.prototype.crossProduct = function(e) { + return this.x * e.y - this.y * e.x + }, e.prototype.signedAngle = function(e) { + return Math.atan2(this.crossProduct(e), this.dotProduct(e)) + }, e.prototype.angle = function(e) { + return Math.acos(this.dotProduct(e) / (this.length() * e.length())) + }, e.prototype.length = function() { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, e.prototype.scaled = function(t) { + return new e(this.x * t, this.y * t) + }, e.prototype.normalized = function() { + return this.scaled(1 / this.length()) + }, e.prototype.transposed = function() { + return new e(-this.y, this.x) + }, e.prototype.clone = function() { + return new e(this.x, this.y) + }, e + }(); + + function r(e, t) { + return new s(e, t) + } + + function n(e, t) { + return e.x === t.x && e.y === t.y + } + + function o(e, t, i) { + if (0 === e && 0 === t) throw new Error("A and B can not be both equal to zero."); + return { + A: e, + B: t, + C: i + } + } + + function a(e, t) { + return { + edge: e, + isPositive: t + } + } + t.Point = s, t.point = r, t.equalPoints = n, t.line = o, t.lineThroughPoints = function(e, t) { + if (n(e, t)) throw new Error("Points should be distinct"); + return o(e.y - t.y, t.x - e.x, e.x * t.y - t.x * e.y) + }, t.lineSegment = function(e, t) { + if (n(e, t)) throw new Error("Points of a segment should be distinct"); + return [e, t] + }, t.halfplane = a, t.halfplaneThroughPoint = function(e, t) { + return a(e, e.A * t.x + e.B * t.y + e.C > 0) + }, t.box = function(e, t) { + return { + min: r(Math.min(e.x, t.x), Math.min(e.y, t.y)), + max: r(Math.max(e.x, t.x), Math.max(e.y, t.y)) + } + }, t.equalBoxes = function(e, t) { + return n(e.min, t.min) && n(e.max, t.max) + } + }, + aR4w: function(e, t, i) { + "use strict"; + var s = i("Eyy1"), + r = i("Hr11"), + n = i("LxhU"), + o = i("ocLq"), + a = i("oamr"); + class l extends a.a { + constructor(e, t, i, r, n, o) { + super(e), Object(s.assert)(t < i), + this._priceLow = this._mixinJSONObject.createDoubleField(t, "priceLow"), + this._priceHigh = this._mixinJSONObject.createDoubleField(i, "priceHigh"), + this._rate = this._mixinJSONObject.createDoubleArrayField(r, "rate"), this + ._firstBarTime = this._mixinJSONObject.createTimeField(n, "firstBarTime"), + this._lastBarTime = this._mixinJSONObject.createTimeField(o, "lastBarTime") + } + isNaN() { + return super.isNaN() || Number.isNaN(this._priceLow.get()) || Number.isNaN(this + ._priceHigh.get()) || 0 === this._rate.get().length + } + jsonName() { + return "hhists" + } + primitiveData() { + return { + id: this.id(), + priceHigh: this._priceHigh.get(), + priceLow: this._priceLow.get(), + rate: this._rate.get().slice(), + firstBarTime: this._firstBarTime.get(), + lastBarTime: this._lastBarTime.get() + } + } + setPriceLow(e) { + this._priceLow.set(e) && this._processObjUpdate() + } + priceLow() { + return this._priceLow.get() + } + priceHigh() { + return this._priceHigh.get() + } + setPriceHigh(e) { + this._priceHigh.set(e) && this._processObjUpdate() + } + rate() { + return this._rate.get().slice() + } + setRate(e) { + this._rate.set(e) && this._processObjUpdate() + } + rateAt(e) { + return this._rate.get()[e] + } + ratesSum() { + let e = 0; + for (const t of this._rate.get()) !Number.isNaN(t) && Number.isFinite(t) && ( + e += t); + return e + } + firstBarTime() { + return this._firstBarTime.get() + } + setFirstBarTime(e) { + this._firstBarTime.set(e) && this._processObjUpdate() + } + lastBarTime() { + return this._lastBarTime.get() + } + setLastBarTime(e) { + this._lastBarTime.set(e) && this._processObjUpdate() + } + } + var c = i("WYmP"); + class h { + constructor(e, t, i) { + this.index = e, this.offset = i, this.level = t + } + isNaN() { + return Number.isNaN(this.level) + } + equals(e) { + return e instanceof h && (!this.isNaN() && (!e.isNaN() && (this.index === e.index && + this.offset === e.offset && o.Std.equal(this.level, e.level)))) + } + getLevel() { + return this.level + } + getIndex() { + return this.index + } + } + class u extends a.a { + constructor(e, t) { + super(e), this._points = [], t && (this._points = t) + } + addPoint(e) { + this._processObjUpdate(), this._points.push(e) + } + addPoints(e) { + this._processObjUpdate(), this._points.push(...e) + } + setPoint(e, t) { + const i = this._points[e]; + t.equals(i) || (this._processObjUpdate(), this._points[e] = t) + } + point(e) { + const t = this._points[e]; + return new h(t.index, t.level, t.offset) + } + points() { + return this._points + } + pointsCount() { + return this._points.length + } + setPoints(e) { + if (e.length === this._points.length) { + let t = !0; + for (let i = 0; i < e.length; ++i) + if (!e[i].equals(this._points[i])) { + t = !1; + break + } if (t) return + } + this._processObjUpdate(), this._points = [], this._points.push(...e) + } + clearPoints() { + this._processObjUpdate(), this._points = [] + } + isNaN() { + return super.isNaN() || this._points.length < 3 + } + jsonName() { + return "polygons" + } + primitiveData() { + return { + id: this.id(), + points: this._points.map(e => ({ + index: e.index, + offset: e.offset, + level: e.level + })) + } + } + } + class d extends a.a { + constructor(e, t, i, s, r = !1, n = !1) { + super(e), this._endIndex = this._mixinJSONObject.createTimeField(i, "endIndex"), + this._extendLeft = this._mixinJSONObject.createField(r, "extendLeft"), this + ._extendRight = this._mixinJSONObject.createField(n, "extendRight"), this + ._level = this._mixinJSONObject.createDoubleField(s, "level"), this + ._startIndex = this._mixinJSONObject.createTimeField(t, "startIndex") + } + isNaN() { + return super.isNaN() || Number.isNaN(this._level.get()) || this._startIndex + .get() < 0 || this._endIndex.get() < 0 || this._startIndex.get() === this + ._endIndex.get() && !this._extendLeft.get() && !this._extendRight.get() + } + jsonName() { + return "horizlines" + } + primitiveData() { + return { + id: this.id(), + startIndex: this._startIndex.get(), + endIndex: this._endIndex.get(), + extendLeft: this._extendLeft.get(), + extendRight: this._extendRight.get(), + level: this._level.get() + } + } + startIndex() { + return this._startIndex.get() + } + setStartIndex(e) { + this._startIndex.set(e) && this._processObjUpdate() + } + endIndex() { + return this._endIndex.get() + } + setEndIndex(e) { + this._endIndex.set(e) && this._processObjUpdate() + } + level() { + return this._level.get() + } + setLevel(e) { + this._level.set(e) && this._processObjUpdate() + } + isExtendLeft() { + return this._extendLeft.get() + } + setExtendLeft(e) { + this._extendLeft.set(e) && this._processObjUpdate() + } + extendLeft() { + return this.isExtendLeft() + } + isExtendRight() { + return this._extendRight.get() + } + setExtendRight(e) { + this._extendRight.set(e) && this._processObjUpdate() + } + extendRight() { + return this.isExtendRight() + } + } + i.d(t, "a", (function() { + return _ + })); + class p { + constructor() { + this._map = new Map + } + get(e) { + const t = this._innerMap(e.start); + return t && t.get(e.end) + } + set(e, t) { + this._innerMap(e.start, !0).set(e.end, t) + } + clear() { + this._map.clear() + } + size() { + let e = 0; + return this._map.forEach(t => e += t.size), e + } + _innerMap(e, t) { + let i = this._map.get(e); + return void 0 === i && t && (i = new Map, this._map.set(e, i)), i + } + } + class _ { + constructor(e, t, i, r, n, o, a, l, h, u, d, _, m, f) { + this._freezedBoxes = new c.a, this._freezedHists = new c.a, this._freezedPocs = + new c.a, this._freezedVAHists = new c.a, this._currentHistsGr = new c.a, this + ._currentVAHistsGr = new c.a, this._currentHists = [], this._currentHistsMap = + new p, this._currentBox = null, this._currentPoc = null, this + ._historyBarSet = [], this._prevRtBar = null, this._minPrice = Number + .POSITIVE_INFINITY, this._maxPrice = Number.NEGATIVE_INFINITY, this + ._leftBoxTime = null, this._rightBoxTime = null, this._needRecalc = !1, this + ._largestHistItem = null, this._rowsLayout = null, this._currentVAStart = 0, + this._currentVAEnd = 0, this._previousVAStart = 0, this._previousVAEnd = 0, this + ._idsGenerator = null, Object(s.assert)(1 === e || 2 === e), this + ._numOfSubHists = e, this._outHists = r, this._outBoxLines = n, this + ._outPocLines = o, this._extendPocLeftRight = a, this._outVAHists = l, this + ._vaVolumePercent = h, this._rowsLayoutSupplier = u, this._outHists.addStable( + this._freezedHists), this._outVAHists.addStable(this._freezedVAHists), this + ._maxHHistItems = d, this._layoutIsAutoselected = f, this._leftBoxTimeMutable = + _, this._rightBoxTimeMutable = m, this._ctx = t, this._seriesGetter = i + } + update(e) { + this._supplyRowsLayout(this._ctx), null === this._currentBox && this + ._initCurrentBox(), null === this._currentPoc && this._initCurrentPoc(); + const t = this._timeScale().get(e); + this._leftBoxTime = this._leftBoxTimeMutable, this._rightBoxTime = this + ._rightBoxTimeMutable, this._ctx.symbol.isLastBar && !Number.isNaN(this + ._rightBoxTime) && (this._rightBoxTime = Math.min(t + n.Interval.parse(this + ._ctx.symbol.interval + this._ctx.symbol.resolution).inMilliseconds( + t) - 1, this._rightBoxTime)); + const i = o.Std.greaterOrEqual(this._seriesClose().get(e), this._seriesOpen().get( + e)), + s = { + high: this._seriesHigh().get(e), + low: this._seriesLow().get(e), + volume: this._seriesVol().get(e), + isUp: i, + time: t + }; + this._updateCurrentHistogram(s), this._currentHists.length > 0 && (this + ._largestHistItem = this._getLargestHistItem(), this._updateCurrentPoc(), + this._seriesGetter.developingPoc().set(this._currentPoc.level()), this + ._updateValueArea(), this._vaVolumePercent > 0 && (this._seriesGetter + .developingVAHigh().set(this._currentHists[this._currentVAEnd] + .priceHigh()), this._seriesGetter.developingVALow().set(this + ._currentHists[this._currentVAStart].priceLow()))), this + ._updateCurrentBox(), this._rebuildOutData() + } + setIdsGeneratorProxy(e) { + this._idsGenerator = e + } + nextGraphicsObjId() { + return Object(s.ensureNotNull)(this._idsGenerator).nextGraphicsObjId() + } + pushEraseObjCmd(e, t) { + Object(s.ensureNotNull)(this._idsGenerator).pushEraseObjCmd(e, t) + } + popEraseCmds() { + return Object(s.ensureNotNull)(this._idsGenerator).popEraseCmds() + } + _timeScale() { + return this._seriesGetter.time() + } + _seriesLow() { + return this._seriesGetter.low() + } + _seriesHigh() { + return this._seriesGetter.high() + } + _seriesVol() { + return this._seriesGetter.volume() + } + _seriesOpen() { + return this._seriesGetter.open() + } + _seriesClose() { + return this._seriesGetter.close() + } + _freezeCurrentHistogramAndCleanup() { + null !== this._currentBox && this._freezedBoxes.add(this._currentBox), o.Std + .greater(this._getVolume(this._currentHists), 0) && (this._freezedHists.addAll( + this._currentHistsGr), this._freezedVAHists.addAll(this + ._currentVAHistsGr), null !== this._currentPoc && this._freezedPocs.add( + this._currentPoc)), this._currentHists = [], this._currentHistsGr.clear(), + this._currentHistsMap.clear(), this._initCurrentBox(), this._initCurrentPoc(), + this._currentVAHistsGr.clear(), this._historyBarSet = [], this._minPrice = + Number.POSITIVE_INFINITY, this._maxPrice = Number.NEGATIVE_INFINITY, this + ._prevRtBar = null, this._leftBoxTime = null, this._rightBoxTime = null + } + _supplyRowsLayout(e) { + null === this._rowsLayout && e.symbol.isFirstBar && e.symbol.isNewBar && (this + ._rowsLayout = this._rowsLayoutSupplier()) + } + _updateCurrentHistogram(e) { + if (this._needRecalc = !1, o.Std.greater(this._minPrice, e.low) && (this._minPrice = + e.low, this._needRecalc = !0), o.Std.less(this._maxPrice, e.high) && (this + ._maxPrice = e.high, this._needRecalc = !0), this._ctx.symbol.isBarClosed && + this._historyBarSet.length > 0) { + const t = this._historyBarSet[this._historyBarSet.length - 1]; + t.time === e.time && (this._prevRtBar = t, this._historyBarSet.pop()) + } + this._needRecalc && 0 === Object(s.ensureNotNull)(this._rowsLayout).type() ? (this + ._recalculateCurrentResultsOnHistoryBarSet(), this + ._applyUpdateToCurrentResults(e, !1)) : this._applyUpdateToCurrentResults(e, + !0), this._ctx.symbol.isBarClosed ? (Object(s.assert)(null === this + ._prevRtBar || e.time === this._prevRtBar.time), this._historyBarSet + .push(e), this._prevRtBar = null) : this._prevRtBar = e + } + _getMidLevel(e) { + return (e.priceHigh() + e.priceLow()) / 2 + } + _getMidLevelFromList(e) { + return e.length % 2 == 0 ? e[e.length / 2].priceLow() : this._getMidLevel(e[Math + .floor(e.length / 2)]) + } + _getLargestHistItem() { + let e = [], + t = this._currentHists[0]; + for (const i of this._currentHists) o.Std.greater(i.ratesSum(), t.ratesSum()) ? (t = + i, + e = [t]) : o.Std.equal(i.ratesSum(), t.ratesSum()) && e.push(i); + if (e.length > 1) { + const i = this._getMidLevelFromList(this._currentHists); + t = e[e.length - 1]; + for (let s = e.length - 2; s >= 0; s--) { + const r = e[s]; + o.Std.lessOrEqual(Math.abs(this._getMidLevel(r) - i), Math.abs(this + ._getMidLevel(t) - i)) && (t = r) + } + } + return t + } + _initCurrentPoc() { + this._currentPoc = new d(this, 0, 0, 0) + } + _updateCurrentPoc() { + const e = Object(s.ensureNotNull)(this._currentPoc); + e.setStartIndex(Object(s.ensureNotNull)(this._leftBoxTime)), e.setEndIndex(Object(s + .ensureNotNull)(this._rightBoxTime)), e.setExtendLeft(this + ._extendPocLeftRight), e.setExtendRight(this._extendPocLeftRight); + const t = this._getMidLevel(Object(s.ensureNotNull)(this._largestHistItem)); + e.setLevel(t) + } + _getVolume(e) { + let t = 0; + for (const i of e) t += i.ratesSum(); + return t + } + _getPocHistItemIndex() { + for (let e = 0; e < this._currentHists.length; e++) + if (this._currentHists[e] === this._largestHistItem) return e; + return -1 + } + _calculateValueArea() { + const e = this._getPocHistItemIndex(); + Object(s.assert)(e >= 0, "ERROR - PocHistItemIndex == " + e), this._currentVAStart = + e - 1, this._currentVAEnd = e + 1; + const t = this._getVolume(this._currentHists) * this._vaVolumePercent * .01; + let i = this._currentHists[e].ratesSum(), + r = 0, + n = null; + for (; o.Std.lessOrEqual(i + r, t) && (i += r, 0 === n ? --this._currentVAStart : + 1 === n && ++this._currentVAEnd, -1 !== this._currentVAStart || this + ._currentVAEnd !== this._currentHists.length);) { + let t, i; + if (this._currentVAStart > -1) + if (t = this._currentHists[this._currentVAStart].ratesSum(), this + ._currentVAEnd < this._currentHists.length) + if (i = this._currentHists[this._currentVAEnd].ratesSum(), o.Std + .greater(t, i)) r = t, n = 0; + else if (o.Std.greater(i, t)) r = i, n = 1; + else { + const s = Math.abs(e - this._currentVAStart), + o = Math.abs(e - this._currentVAEnd); + s < o ? (r = t, n = 0) : o <= s && (r = i, n = 1) + } else r = t, n = 0; + else r = this._currentHists[this._currentVAEnd].ratesSum(), n = 1 + } + this._currentVAStart++, this._currentVAEnd-- + } + _isVA(e) { + return e.priceHigh() > this._getMidLevel(this._currentHists[this + ._currentVAStart]) && e.priceLow() < this._getMidLevel(this._currentHists[ + this + ._currentVAEnd]) + } + _updateValueArea() { + if (this._calculateValueArea(), this._needRecalc || this._previousVAStart !== this + ._currentVAStart || this._previousVAEnd !== this._currentVAEnd) { + let e = 0, + t = 0; + for (; e < this._currentHistsGr.size() && t < this._currentVAHistsGr.size();) { + for (; e < this._currentHistsGr.size() && !this._isVA(this._currentHistsGr + .get(e));) e++; + for (; t < this._currentVAHistsGr.size() && this._isVA(this + ._currentVAHistsGr.get(t));) t++; + if (e < this._currentHistsGr.size() && t < this._currentVAHistsGr.size()) { + const i = this._currentHistsGr.get(e); + this._currentHistsGr.set(e, this._currentVAHistsGr.get(t)), this + ._currentVAHistsGr.set(t, i) + } + } + for (; e < this._currentHistsGr.size(); e++) { + const t = this._currentHistsGr.get(e); + this._isVA(t) && (this._currentHistsGr.remove(e), e--, this + ._currentVAHistsGr.add(t)) + } + for (; t < this._currentVAHistsGr.size(); t++) { + const e = this._currentVAHistsGr.get(t); + this._isVA(e) || (this._currentVAHistsGr.remove(t), t--, this + ._currentHistsGr.add(e)) + } + } + this._previousVAStart = this._currentVAStart, this._previousVAEnd = this + ._currentVAEnd + } + _initCurrentBox() { + this._currentBox = new u(this) + } + _updateCurrentBox() { + let e = this._minPrice, + t = this._maxPrice; + this._currentHists.length > 0 && (e = this._currentHists[0].priceLow(), t = this + ._currentHists[this._currentHists.length - 1].priceHigh()); + const i = [], + r = Object(s.ensureNotNull)(this._leftBoxTime), + n = Object(s.ensureNotNull)(this._rightBoxTime); + i.push(new h(r, e)), i.push(new h(r, t)), i.push(new h(n, t)), i.push(new h(n, e)), + Object(s.ensureNotNull)(this._currentBox).setPoints(i) + } + _recalculateCurrentResultsOnHistoryBarSet() { + for (let e = 0; e < this._currentHists.length; ++e) this._currentHists[e].erase(); + this._currentHists = [], this._currentHistsGr.clear(), this._currentVAHistsGr + .clear(), this._currentHistsMap.clear(); + for (let e = 0; e < this._historyBarSet.length; e++) this._addHistoryBarToHistogram( + this._historyBarSet[e], e, this._currentHists, this._currentHistsMap, 1); + this._currentHists.length > 0 && (this._largestHistItem = this + ._getLargestHistItem(), this._updateCurrentPoc()), this._updateCurrentBox() + } + _applyUpdateToCurrentResults(e, t) { + t && null !== this._prevRtBar && this._addHistoryBarToHistogram(this._prevRtBar, + this._historyBarSet.length - 1, this._currentHists, this._currentHistsMap, - + 1), this._addHistoryBarToHistogram(e, this._historyBarSet.length - 1, this + ._currentHists, this._currentHistsMap, 1), this + ._updateLastBarTimeInHistogram(this._currentHists) + } + _addHistoryBarToHistogram(e, t, i, r, n) { + Object(s.assert)(-1 === n || 1 === n, "Please set sign argument either +1 or -1"); + const a = e.low, + l = e.high, + c = isNaN(e.volume) ? 0 : e.volume, + h = e.isUp, + u = Object(s.ensureNotNull)(this._rowsLayout); + u.init(this._ctx.symbol.minTick, this._minPrice, this._maxPrice, a, l); + const d = u.rowWidth(); + if (!o.Std.greater(d, 0)) return; + u.calculate(); + const p = u.getIndexLowVbP(), + _ = u.getIndexHighVbP(), + m = u.getStartPrice(); + if (p === _) { + const e = p * d + m, + t = (p + 1) * d + m; + this._updateResult({ + start: e, + end: t + }, n * c, h, i, r) + } else { + let e = 0; + for (let t = p; t <= _; t++) { + const s = t * d + m, + o = (t + 1) * d + m, + u = this._rowCoeff(s, o, a, l), + p = u * c; + e += u, this._updateResult({ + start: s, + end: o + }, n * p, h, i, r) + } + Object(s.assert)(o.Std.equal(e, 1, .05), + "totalCoeff not equal 1! totalConf = " + e) + } + } + _updateResult(e, t, i, r, n) { + const a = this._createRates(i, t); + Object(s.assert)(null !== this._leftBoxTime, + "leftBoxTime is not set (equals null)"), Object(s.assert)(null !== this + ._rightBoxTime, "rightBoxTime is not set (equals null)"); + const c = Object(s.ensureNotNull)(this._leftBoxTime), + h = Object(s.ensureNotNull)(this._rightBoxTime); + let u = n.get(e); + if (void 0 === u) u = new l(this, e.start, e.end, a, c, h), n.set(e, u), this + ._verifyHistogramSizeIsNotTooLarge(n.size()), this._currentHistsGr.add(u), _ + ._addInOrder(u, r, 0, r.length, (e, t) => { + let i = o.Std.compare(e.firstBarTime(), t.firstBarTime()); + return 0 !== i ? i : (i = o.Std.compare(e.priceLow(), t.priceLow()), + 0 !== i ? i : o.Std.compare(e.priceHigh(), t.priceHigh())) + }); + else { + const e = []; + for (let t = 0; t < a.length; t++) e[t] = u.rateAt(t) + a[t]; + u.setRate(e) + } + } + _rebuildOutData() { + const e = this._currentHistsMap.size(), + t = this._currentHists.length, + i = this._currentHistsGr.size(), + r = this._currentVAHistsGr.size(); + Object(s.assert)(e === t && t === i + r, + `Collections of HHistItems are out of sync ${e} ${t} ${i} ${r}`), this + ._outPocLines.clear(), this._outPocLines.addAll(this._freezedPocs), + o.Std.greater(this._getVolume(this._currentHists), 0) ? (this._outHists + .setVariable(this._currentHistsGr), this._outPocLines.add(Object(s + .ensureNotNull)(this._currentPoc)), this._outVAHists.setVariable(this + ._currentVAHistsGr)) : (this._outHists.setVariable(null), this + ._outVAHists.setVariable(null)), this._outBoxLines.clear(), this + ._outBoxLines.addAll(this._freezedBoxes), this._outBoxLines.add(Object(s + .ensureNotNull)(this._currentBox)) + } + _verifyHistogramSizeIsNotTooLarge(e) { + if (this._layoutIsAutoselected) return; + if (e <= this._maxHHistItems) return; + const t = Object(s.ensureNotNull)(this._rowsLayout); + 0 === t.type() ? o.Std.error( + 'Histogram is too large, please reduce "Row Size" input.') : (Object(s + .assert)(1 === t.type(), "Unexpected rowsLayout type " + t.type()), o + .Std.error('Histogram is too large, please increase "Row Size" input.')) + } + _createRates(e, t) { + if (1 === this._numOfSubHists) return [t]; + if (2 === this._numOfSubHists) { + const i = [0, 0]; + return i[e ? 0 : 1] = t, i + } + return Object(s.assert)(!1, "Incorrect value of numOfSubHists = " + this + ._numOfSubHists), [] + } + _updateLastBarTimeInHistogram(e) { + const t = Object(s.ensureNotNull)(this._rightBoxTime); + for (const i of e) i.setLastBarTime(t) + } + _rowCoeff(e, t, i, s) { + const r = s - i; + return (t - e - Math.max(t - s, 0) - Math.max(0, i - e)) / r + } + static _addInOrder(e, t, i, s, n) { + if (i === s) return void t.splice(i, 0, e); + const o = Object(r.toInt)((i + s) / 2), + a = t[o]; + n(e, a) < 0 ? _._addInOrder(e, t, i, o, n) : n(e, a) > 0 ? _._addInOrder(e, t, o + + 1, s, n) : t.splice(o, 0, e) + } + } + }, + aVjL: function(e, t) { + e.exports = + '' + }, + b1GK: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "addPerfMark", (function() { + return c + })), i.d(t, "startPerfMeasure", (function() { + return h + })), i.d(t, "endPerfMeasure", (function() { + return u + })), i.d(t, "perfMeasureOperation", (function() { + return d + })); + var s = i("e3/o"); + + function r() {} + const n = console.timeStamp ? console.timeStamp.bind(console) : r, + o = window.performance && performance.mark ? performance.mark.bind(performance) : r, + a = window.performance && performance.measure ? performance.measure.bind(performance) : r, + l = window.performance && performance.clearMarks ? performance.clearMarks.bind( + performance) : r; + + function c(e) { + n(e), o(e) + } + + function h(e) { + o(e) + } + + function u(e) { + a(e, e), l(e) + } + async function d(e, t) { + const i = `measure-${e}-${Object(s.randomHash)()}`; + o(i); + try { + return await t() + } finally { + a(e, i), l(i) + } + } + }, + bJYc: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SetPropertyUndoCommand", (function() { + return n + })); + var s = i("RDU5"), + r = i("Ocx9"); + class n extends s.UndoCommand { + constructor(e, t, i, s, r) { + super(i), this._targetObj = e, this._newValue = t, this._oldValue = this + ._targetObj.value(), this._model = s, r && this.setCustomFlag( + "doesnt_affect_save", !0) + } + redo() { + Object(r.saveDefaultProperties)(!0), this._targetObj.setValue(this._newValue), + Object(r.saveDefaultProperties)(!1), this._model.recalculateAllPanes(), this + ._model.lightUpdate() + } + undo() { + Object(r.saveDefaultProperties)(!0), this._targetObj.setValue(this._oldValue), + Object(r.saveDefaultProperties)(!1), this._model.recalculateAllPanes(), this + ._model.lightUpdate() + } + } + }, + bKFv: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "StatsPosition", (function() { + return s + })), + function(e) { + e[e.Left = 0] = "Left", e[e.Center = 1] = "Center", e[e.Right = 2] = "Right" + }(s || (s = {})) + }, + bOGh: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("RDU5"); + class r extends s.UndoCommand { + constructor(e) { + super(e, !1), this._subcommands = [] + } + addCommand(e) { + this._subcommands.push(e) + } + isEmpty() { + return 0 === this._subcommands.length + } + redo() { + for (let e = 0; e < this._subcommands.length; e++) this._subcommands[e].redo() + } + undo() { + for (let e = this._subcommands.length - 1; e >= 0; e--) this._subcommands[e] + .undo() + } + commands() { + return this._subcommands + } + } + }, + bSeV: function(e, t, i) {}, + bTqm: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolCypherPattern", (function() { + return n + })); + var s = i("NJRZ"), + r = i("Ocx9"); + class n extends s.LineTool5PointsPattern { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Cypher Pattern" + } + static createProperties(e) { + const t = new r.DefaultProperty("linetoolcypherpattern", e); + return n._configureProperties(t), t + } + _loadPaneViews(e) { + i.e("lt-pane-views").then(i.bind(null, "mjK7")).then(t => { + this._setPaneViews([new t.CypherPaneView(this, e)]) + }) + } + static _configureProperties(e) { + s.LineTool5PointsPattern._configureProperties(e) + } + } + }, + bc0y: function(e, t, i) {}, + biIa: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SeriesWaterlinePaneView", (function() { + return a + })); + var s = i("k4w6"), + r = i("//lt"), + n = i("VdBB"), + o = i("8Uy/"); + class a extends s.a { + constructor(e) { + super(e); + const t = { + cursorType: r.PaneCursorType.VerticalResize, + activeItem: 0, + areaName: n.AreaName.SourceItemMove + }; + this._lineRenderer.setHitTest(new n.HitTestResult(n.HitTestResult.MOVEPOINT, + t)), this._lineRendererData.visible = !0, this._lineRendererData + .linestyle = + o.LINESTYLE_SPARSE_DOTTED + } + _updateImpl() { + const e = this._series.properties().baselineStyle, + t = Math.abs(100 - e.baseLevelPercentage.value()); + this._lineRendererData.y = Math.round(this._series.priceScale().height() * (t / + 100)), this._lineRendererData.color = e.baselineColor.value() + } + } + }, + bmVy: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyStatusType", (function() { + return r + })), i.d(t, "convertStudyStatusToString", (function() { + return n + })); + const s = window.t("loading..."); + var r; + + function n(e, t) { + if (e.type === r.Loading) return t ? s : "loading..."; + if (e.type === r.Error) { + const i = e.errorDescription, + s = t ? window.t(i.error) : i.error; + if (i.ctx) { + const e = {}; + return Object.entries(i.ctx).forEach(([t, i]) => { + e[t] = i.toString() + }), s.format(e) + } + return s + } + return "" + }! function(e) { + e[e.Undefined = 0] = "Undefined", e[e.Loading = 1] = "Loading", e[e.Completed = 2] = + "Completed", e[e.Error = 3] = "Error" + }(r || (r = {})) + }, + "bv/X": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolSineLine", (function() { + return n + })); + var s = i("Ocx9"), + r = i("Ss5c"); + class n extends r.LineDataSource { + constructor(e, t) { + super(e, t || n.createProperties()), i.e("lt-pane-views").then(i.bind(null, + "piZW")).then(e => { + this._setPaneViews([new e.SineLinePaneView(this, this._model)]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Sine Line" + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolsineline", e); + return n._configureProperties(t), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "LX4V"))) + .CyclicAndSineLinesPatternDefinitionsViewModel + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e) + } + } + }, + c2JX: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "renderSpinnerTemplate", (function() { + return n + })), i.d(t, "Spinner", (function() { + return a + })); + i("SzKR"); + var s = i("gWrr"), + r = i("Owlf"); + + function n(e = "") { + return '\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\x3c!--\n\t\t\t\t--\x3e
\n\t\t\t
\n\t\t
\n\t' + } + const o = Object(s.b)( + '\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\x3c!--\n\t\t\t\t--\x3e
\n\t\t\t
\n\t\t
\n\t' + ); + class a { + constructor(e) { + this._shown = !1, this._el = o.cloneNode(!0), this.setSize(e || r.a) + } + spin(e) { + return this._el.classList.add("tv-spinner--shown"), void 0 === this._container && ( + this._container = e, void 0 !== e && e.appendChild(this._el)), this + ._shown = !0, this + } + stop(e) { + return e && void 0 !== this._container && this._container.removeChild(this._el), + this._el.classList.remove("tv-spinner--shown"), this._shown = !1, this + } + setStyle(e) { + return Object.keys(e).forEach(t => { + const i = e[t]; + void 0 !== i && this._el.style.setProperty(t, i) + }), this + } + setSize(e) { + const t = void 0 !== e ? "tv-spinner--size_" + e : ""; + return this._el.className = + `tv-spinner ${t} ${this._shown ? "tv-spinner--shown" : ""}`, this + } + getEl() { + return this._el + } + destroy() { + this.stop(), delete this._el, delete this._container + } + } + }, + c44N: function(e, t, i) { + "use strict"; + + function s(e, t) { + return e.pixelRatio === t.pixelRatio + } + i.r(t), i.d(t, "areEqualPaneRenderParams", (function() { + return s + })) + }, + c7G1: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return s + })), i.d(t, "a", (function() { + return r + })), i.d(t, "c", (function() { + return n + })); + class s { + constructor(e, t) { + this.id = e, this.type = t + } + primitiveData() { + return { + action: "one", + id: this.id, + type: this.type + } + } + } + class r { + primitiveData() { + return { + action: "all" + } + } + } + class n { + constructor() { + this.erase = [], this.create = null, this._modified = !1 + } + primitiveData(e) { + if (this.isNaN()) return null; + const t = {}, + i = this.create && this.create.primitiveData(e); + return null !== i && (t.create = i), null !== this.erase && this.erase.length > 0 && + (t.erase = this.erase.map(e => e.primitiveData())), void 0 === t.create && + void 0 === t.erase ? null : t + } + setCreate(e) { + this.create = e, this.create.forEachList(e => e.setOwner(this)) + } + isNaN() { + return (null === this.erase || 0 === this.erase.length) && null === this.create + } + isModified() { + return this._modified + } + setModified(e) { + this._modified = e + } + dirty() { + this._modified = !0 + } + setOwner(e) { + throw new Error("Unsupported") + } + } + }, + cBZt: function(e, t, i) { + "use strict"; + + function s(e, t) { + return `${e}@${t}` + } + + function r(e) { + return e.replace(/(@[^-]+-[^-]+).*$/, "$1") + } + i.r(t), i.d(t, "studyIdString", (function() { + return s + })), i.d(t, "extractStudyId", (function() { + return r + })) + }, + cKqi: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("qJq3").Series, + n = i("GVHu").Study, + o = i("FBsw").OverlayPriceAxisView, + a = i("KtbP").PanePriceAxisView, + l = i("x0JF"), + c = l.SeriesAreaPaneView, + h = l.SeriesLinePaneView, + u = l.SeriesHollowCandlesPaneView, + d = l.SeriesCandlesPaneView, + p = l.SeriesBarsPaneView, + _ = l.SeriesBaselinePaneView, + m = i("biIa").SeriesWaterlinePaneView, + f = i("2kV1").StudyStatusView, + g = i("JjUe").OverlayDataWindowView, + b = i("z8/4").OverlayLegendView, + v = i("qXYw").OverlayLegendValuesProvider, + S = i("ZsYR").OverlayStatusProvider, + y = i("38az").SeriesBarColorer, + w = i("l4sv").HorizontalLineRenderer, + P = i("Kxc7"), + C = i("6sst").OverlayStudyPriceLineAxisView, + x = i("n5al").createSeriesFormatter, + T = i("y/Xm").StudyOverlayBase, + I = i("qFKp").CheckMobile.any() && !1, + M = !P.enabled("hide_study_overlay_legend_item"); + class O { + constructor(e, t) { + this._source = e, this._model = t, this._points = [new s(0, 0)], this + ._lineRenderer = new w + } + update() { + if (this._visible = !1, this._source.properties().showPriceLine.value()) { + var e = this._source.lastValueData(void 0, !0); + e.noData || (this._visible = !0, this._points = [new s(0, e.coordinate)], this + ._color = e.color) + } + } + renderer() { + var e = {}; + return e.width = this._model.timeScale().width(), e.height = this._source + .priceScale().height(), e.y = this._points[0].y, e.color = this._color, e + .linewidth = 1, e.linestyle = CanvasEx.LINESTYLE_DOTTED, e.visible = this + ._visible, this._lineRenderer.setData(e), this._lineRenderer + } + } + t.study_Overlay = class extends T { + constructor(e, t, i, s) { + super(e, t, i, s), this._formatter = null, this._paneView = null; + var r = this; + this.properties().minTick.listeners().subscribe(null, (function() { + r._recreatePriceFormattingDependencies(), r.updateAllViews(), r + ._model.fullUpdate() + })) + } + _showLastValueOnPriceScale() { + return this._model.properties().scalesProperties.showSeriesLastValue.value() + } + _createViews() { + this._priceAxisViews = []; + var e = new o(this); + this._priceAxisViewsBase = [e]; + var t = new C(this); + this._priceLinesAxisViews = [t], this._paneViews = [], this + ._labelPaneViews = []; + var i = null, + s = null; + switch (this._properties.style.value()) { + case r.STYLE_BARS: + s = new p(this, this._model); + break; + case r.STYLE_CANDLES: + s = new d(this, this._model); + break; + case r.STYLE_HOLLOW_CANDLES: + s = new u(this, this._model); + break; + case r.STYLE_LINE: + s = new h(this, this._model); + break; + case r.STYLE_AREA: + s = new c(this, this._model); + break; + case r.STYLE_BASELINE: + s = new _(this, this._model), i = new m(this) + } + s && this._paneViews.push(s), null !== i && this._paneViews.push(i), + this._paneViews.push(new O(this, this._model)), this._dataWindowView || ( + this._dataWindowView = new g(this, this._model)), this._legendView || ( + this._legendView = new b(this, this._model)), this._statusView || (this + ._statusView = new f(this)), this._priceAxisViews = [].concat(this + ._priceAxisViewsBase, this._hlinesPriceAsisViews, this + ._horizlinesPriceAsisViews), this._labelPaneViews.push(new a(e, this, + this._model)) + } + barColorer() { + return new y(this) + } + start(e) { + this._formatter = null, n.prototype.start.apply(this, arguments), this + .priceScale() && this.priceScale().updateFormatter(), I && this + ._setQuotesSymbol(this.symbol()) + } + _tryCreateFormatter() { + return x(this.symbolInfo(), this.properties().minTick.value()) + } + formatter() { + return this._formatter || this._recreateFormatter(), this._formatter + } + _tryChangeInputs() { + n.prototype._tryChangeInputs.call(this), this.m_formatter = null, this + .priceScale().updateFormatter() + } + stop(e) { + n.prototype.stop.call(this, e), this._quotesProvider.setQuotesSessionSymbol( + null) + } + _onQuotesUpdate(e, t) { + !this._legendView || void 0 === t.values.change && void 0 === t.values + .change_percent || (this._legendView.update(), this._model.updateSource( + this)) + } + destroy() { + this._quotesProvider.quotesUpdate().unsubscribeAll(this), this._quotesProvider + .destroy(), super.destroy() + } + tags() { + var e = [], + t = this.symbolInfo(); + return t ? e.push(t.name) : this._properties.inputs.symbol.value() && e.push( + this._properties.inputs.symbol.value()), e + } + statusView() { + return M ? n.prototype.statusView.call(this) : null + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(61), i.e(62), i.e( + "study-property-pages-with-definitions")]).then(i.bind(null, + "WUYT"))).StudyOverlayDefinitionsViewModel + } + defaultPlotIdForAlert() { + return "" + } + changeStyles() { + this.data().each((function(e, t) { + t[TradingView.STYLE_PLOT] = null + })), n.prototype.changeStyles.call(this) + } + valuesProvider() { + return new v(this, this.model()) + } + statusProvider(e) { + return new S(this, this.model()) + } + canBeHiddenByGlobalFlag() { + return !1 + } + } + }, + cPgM: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ScaledPaneRenderer", (function() { + return s + })), i.d(t, "ScaledPaneRendererWrapper", (function() { + return r + })); + class s { + draw(e, t) { + e.save(), e.scale(t.pixelRatio, t.pixelRatio), e.translate(.5, .5), this._drawImpl( + e, { + ...t, + pixelRatio: 1 + }), e.restore() + } + drawBackground(e, t) { + e.save(), e.scale(t.pixelRatio, t.pixelRatio), e.translate(.5, .5), this + ._drawBackgroundImpl(e, { + ...t, + pixelRatio: 1 + }), e.restore() + } + _drawBackgroundImpl(e, t) {} + } + class r { + constructor(e) { + this._base = e + } + hitTest(e, t) { + return this._base.hitTest(e, t) + } + draw(e, t) { + e.save(), e.scale(t.pixelRatio, t.pixelRatio), e.translate(.5, .5), this._base.draw( + e, { + ...t, + pixelRatio: 1 + }), e.restore() + } + drawBackground(e, t) { + e.save(), e.scale(t.pixelRatio, t.pixelRatio), e.translate(.5, .5), this._base + .drawBackground && this._base.drawBackground(e, { + ...t, + pixelRatio: 1 + }), e.restore() + } + } + }, + cWHH: function(e, t, i) { + "use strict"; + (function(t, s) { + var r = i("Eyy1").ensureNotNull, + n = i("Vdly"), + o = i("gP14").ChartModelBase, + a = i("CW80"), + l = a.isLineTool, + c = a.isStudyLineTool, + h = i("2+aH").Crosshair, + u = i("rY0k").Watermark, + d = i("hY3j").Grid, + p = i("22xp").TimeScale, + _ = i("qFKp").CheckMobile, + m = i("H0vP").InvalidationMask, + f = i("H0vP").InvalidationLevel, + g = i("GVHu"), + b = g.Study, + v = i("Qq0B").NonSeriesStudy, + S = i("3ClC"), + y = S.createStudy, + w = S.isStudy, + P = S.isFundamentalStudy, + C = g.prepareStudyProperties, + x = i("K4L1"), + T = i("qJq3").Series, + I = i("mMWL"), + M = i("wZIs").defaults, + O = i("Ocx9").DefaultProperty, + L = i("Qtjj").TimeSynchronizer, + A = i("txPx").getLogger("Chart.ChartModel"), + E = i("Y5iK").MainSeriesScaleRatioProperty, + k = i("FaJS").scaleRatio, + D = i("MROS").ModelSelection, + V = i("Y7w9").subtract, + B = i("VgjZ").PriceAxisRendererOptionsProvider, + R = i("/YGI").StudyInserter, + N = i("3t3b").dateFormatProperty, + j = i("/tGj").isSymbolSource, + F = i("gaBL").sourceNewCurrencyOnPinningToPriceScale, + W = i("SwuQ").sourceNewUnitOnPinningToPriceScale, + H = i("FQhm"), + U = i("i126").StudyColorRotatorFactory, + z = i("Kxc7"), + G = i("jeZR").AppliedTimeFrame, + q = z.enabled("auto_enable_symbol_labels"); + z.enabled("fix_left_edge"); + + function Y() { + this._selection.clear() + } + + function K(e) { + this._selection.remove(e) + } + + function J(e, t) { + var i = this._selection.isSelected(e); + i && this._lastSelectedHittestData === t || e && !e.isSelectionEnabled() || (this + ._lastSelectedHittestData = t || null, i || this._selection.add(e)) + } + class Z extends o { + constructor(e, i, r, n, o, a, l, c) { + super(e, i, r, n, o, a, l, c), this._modelIntervals = [], this + ._rendererOptionsProvider = new B(this), this.setStudiesMetaData(this + ._studiesMetaInfoRepository.getInternalMetaInfoArray(), this + ._studiesMetaInfoRepository.getMigrations()), I.init(); + var _ = this; + this._panes = [], this.m_gridSource = new d; + var m = this._readOnly ? new t(M( + "chartproperties.paneProperties.crossHairProperties")) : this + ._properties.paneProperties.crossHairProperties; + this.m_crossHairSource = new h(this, m, this._options.crossHair), this + .m_crossHairSource.selectPointMode().subscribe((function(e) { + if (e && _.lineBeingCreated()) { + var t = I.tool.value(); + _.cancelCreatingLine(), I.tool.setValue(t) + } + })), this._tagsChanged = new s; + var f = new O("chartproperties.mainSeriesProperties"); + f.addExclusion("minTick"), f.addExclusion("priceAxisProperties.lockScale"), + f.addExclusion("priceAxisProperties.percentage"), f.addExclusion( + "priceAxisProperties.indexedTo100"), f.addExclusion( + "priceAxisProperties.isInverted"), f.addExclusion( + "priceAxisProperties.log"), f.addExclusion( + "priceAxisProperties.logDisabled"), f.addExclusion( + "priceAxisProperties.percentageDisabled"), f.addExclusion( + "priceAxisProperties.autoScaleDisabled"), f.merge(r + .mainSeriesProperties.state()), this._timeScale = new p(this, this + ._options.timeScale); + var g = { + countdownEnabled: this._options.countdownEnabled, + lastPriceAnimationEnabled: this._options.lastPriceAnimationEnabled + }; + this.m_mainSeries = new T(this, f, g, n), this.m_mainSeries.onStyleChanged() + .subscribe(this._timeScale, this._timeScale.invalidateVisibleBars), this + .m_mainSeries.properties().showCountdown.subscribe(this, (function() { + this.m_mainSeries.updateAllViews(), this.fullUpdate() + })), + this._timeScale.visibleBarsStrictRangeChanged().subscribe(this + .m_mainSeries, this.m_mainSeries.clearHighLowAvgPriceCache), this + .createPane(void 0, { + axisProperties: f.priceAxisProperties.state(["autoScale"]) + }); + var b = this._panes[0]; + b.setStretchFactor(2 * b.stretchFactor()), this._selection = new D, this + ._selectedSourceChanged = new s, this._properties.listeners().subscribe( + this, Z.prototype.propertyChangeHandler), this._properties.timezone + .listeners().subscribe(null, (function() { + _._chartApi && _._chartApi.connected() && _._chartApi + .switchTimezone(_.timezone()) + })), this._timeScale.defaultRightOffsetProperty().listeners().subscribe( + null, (function() { + _.recalculateAllPanes() + })), b.addDataSource(this.m_mainSeries, this._panes[0] + .findSuitableScale(this.m_mainSeries)), this + ._mainSeriesScaleRatioProperty = new E(this), this.m_mainSeries + .dataEvents().completed().subscribe(this, function() { + this._scrollingState && this.gotoTime() + }.bind(this)), this.m_mainSeries.onIntervalChanged().subscribe(this, ( + function() { + this._recalcVRStudiesParams.oldStartVisibleIndex = NaN, this + ._recalcVRStudiesParams.oldEndVisibleIndex = NaN + })), this._readOnly || (f.addChild("priceAxisProperties", this + .m_mainSeries.m_priceScale.properties()), this._properties + .paneProperties.legendProperties.showStudyTitles.listeners() + .subscribe(this, (function(e) { + e.value() || _._properties.paneProperties + .legendProperties.showStudyArguments.setValue(!1) + }))), this._barsMarksSources = l(this); + for (var v = 0; v < this._barsMarksSources.length; v++) this + ._barsMarksSources[v].setOwnerSource(this.m_mainSeries); + this._syncPointCache = {}, this._watermarkSource = this._options + .watermarkEnabled ? new u(this, this.m_mainSeries) : null, I + .hideAllDrawings().subscribe(this, this._onDrawingsVisibilityChanged), I + .hideAllIndicators().subscribe(this, this + ._onIndicatorsVisibilityChanged), this._properties.scalesProperties + .listeners().subscribe(this, Z.prototype.fullUpdate), this + ._studyInserted = new s, this._studyShiftColorStartOffset = void 0, this + ._linePointBeingEdited = null, this._lineBeingEdited = null, N + .subscribe(this, this._updateDateTimeFormatter), this.mainSeries() + .properties().interval.subscribe(this, this._updateDateTimeFormatter), + this._updateDateTimeFormatter(), this._studyColorRotatorFactory = new U( + this), this._dataSourceCollectionChanged.subscribe(this, this + ._updateShowLegendProperty.bind(this)), this._properties + .paneProperties.legendProperties.showLegend.subscribe(this, this + ._updateShowLegendProperty), this._appliedTimeFrame = new G(this), + this.mainSeries().onTimeFrameApplied().subscribe(this, (function(e) { + var t = null !== e ? { + res: this.mainSeries().interval(), + val: e + } : null; + this.appliedTimeFrame().setValue(t) + })) + } + applyPreferences(e) { + for (var t in e) void 0 !== this._properties[t] && "m_mainSeries" !== this + ._properties[t] && this._properties[t].mergeAndFire(e[t]); + void 0 !== e.timeScale && this._timeScale.defaultRightOffsetProperty() + .setValue(e.timeScale.defaultRightOffset), this._properties + .saveDefaults(), this.m_mainSeries.applyPreferences(e.mainSeries), this + .sessions().applyPreferences(e.sessions), this.recalculateAllPanes(), + this.fullUpdate() + } + setStudiesMetaData(e, t) { + this._studiesMetaData = e, + this._studyVersioning = new x(this._studiesMetaData, t) + } + isSnapshot() { + return this._isSnapshot + } + timezone() { + return this._properties.timezone.value() + } + initConnection() { + this._chartApi.switchTimezone(this.timezone()) + } + updatePane(e) { + var t = this._paneInvalidationMask(e); + this.invalidate(t) + } + fullUpdate() { + this.invalidate(m.full()) + } + lightUpdate() { + this.invalidate(m.light()) + } + studiesMetaData() { + return this._studiesMetaData + } + studyVersioning() { + return this._studyVersioning + } + disconnect() { + this.sessions().stop(); + for (var e, t = this.dataSources(), i = 0; i < t.length; i++)(e = t[i]) + .disconnect && e.disconnect(); + this._timeScale.disconnect() + } + restart() { + this.initConnection(), this._timeScale.reset(), this.m_mainSeries.restart(); + for (var e, t = this.dataSources(), i = 0; i < t.length; i++)(e = t[i]) + .restart && e !== this.m_mainSeries && e.restart(); + this.sessions().restart() + } + startNotStartedStudies() { + if (!this.m_mainSeries.isStarted()) throw new Error( + "Cannot start studies: main series is not started"); + for (var e = this.dataSources(), t = 0; t < e.length; t++) w(e[t]) && !e[t] + .isStarted() && e[t].restart && e[t] !== this.m_mainSeries && e[t] + .restart() + } + readOnly() { + return this._readOnly + } + properties() { + return this._properties + } + chartApi() { + return this._chartApi + } + propertyChangeHandler() { + this.lightUpdate() + } + _onDrawingsVisibilityChanged(e) { + for (var t = !1 === e.value(), i = this.dataSources(), s = 0; s < i + .length; s++) { + var r = i[s], + n = l(r) && r.properties().visible.value(); + t && n ? H.emit("drawing_event", r.id(), "show") : !t && n && H.emit( + "drawing_event", r.id(), "hide") + } + this.selectionMacro((function(e) { + e.clearSelection() + })) + } + _onIndicatorsVisibilityChanged() { + var e = this.allStudies().filter((function(e) { + return e.properties().visible.value() && e + .canBeHiddenByGlobalFlag() + })); + if (0 !== e.length) { + for (var t = !1, i = 0; i < e.length; i++) + if (this.selection().isSelected(e[i])) { + t = !0; + break + } t ? this.selectionMacro((function(e) { + e.clearSelection() + })) : this.lightUpdate() + } + } + updateAllPaneViews() { + for (var e = 0; e < this._panes.length; e++) { + this._panes[e].updateAllViews() + } + } + mainSeries() { + return this.m_mainSeries + } + timeScale() { + return this._timeScale + } + gridSource() { + return this.m_gridSource + } + watermarkSource() { + return this._watermarkSource + } + crossHairSource() { + return this.m_crossHairSource + } + publishedChartsTimelineSource() { + return null + } + barsMarksSources() { + return this._barsMarksSources + } + barMarksSourceForId(e) { + for (var t = 0; t < this._barsMarksSources.length; t++) + if (this._barsMarksSources[t].id() === e) return this._barsMarksSources[ + t]; + return null + } + priceScaleSlotsCount() { + var e = 0, + t = 0; + this._panes.forEach((function(i) { + e = Math.max(i.leftPriceScales().length, e), t = Math.max(i + .rightPriceScales().length, t) + })); + var i = e + t; + if (_.any()) { + var s = this.paneForSource(this.mainSeries()), + r = s.priceScalePosition(this.mainSeries().priceScale()), + n = "right" === r; + return "overlay" === r && (n = s.rightPriceScales().length > 0), n ? { + left: 0, + right: 1, + totallySlots: i + } : { + left: 1, + right: 0, + totallySlots: i + } + } + return { + left: e, + right: t, + totallySlots: e + t + } + } + startScrollPrice(e, t, i) { + e.startScrollPrice(t, i) + } + scrollPriceTo(e, t, i) { + e.scrollPriceTo(t, i), this.invalidate(this._paneInvalidationMask(e, f + .Light)) + } + endScrollPrice(e, t) { + e.endScrollPrice(t), this.invalidate(this._paneInvalidationMask(e, f.Light)) + } + setPriceAutoScale(e, t, i) { + e.setPriceAutoScale(t, i), this.invalidate(this._paneInvalidationMask(e, f + .Light)) + } + updateScales(e, t) { + this._undoModel._chartWidget._updateScalesActions() + } + mainSeriesScaleRatioProperty() { + return this._mainSeriesScaleRatioProperty + } + mainSeriesScaleRatioPropertyOnChanged() { + this._mainSeriesScaleRatioProperty.listeners().fire(this + ._mainSeriesScaleRatioProperty) + } + mainSeriesScaleRatio() { + return k(this._timeScale, this.m_mainSeries.priceScale()) + } + setMainSeriesScaleRatio(e) { + this.paneForSource(this.m_mainSeries).applyPriceScaleRatio(this.m_mainSeries + .priceScale(), e) + } + startScrollTime(e) { + this._timeScale.startScroll(e), this._isTimeScrolling = !0 + } + scrollTimeTo(e) { + this._timeScale.scrollTo(e), this.recalculateAllPanes(), this.lightUpdate(), + this._setScalesResetAvailable(!0) + } + endScrollTime() { + this._timeScale.endScroll(), this.lightUpdate(), this + .recalcVisibleRangeStudies(), this._isTimeScrolling = !1 + } + recalcStudyBasedLineTools() { + this.dataSources().forEach((function(e) { + c(e) && e.recalcStudyIfNeeded && e.recalcStudyIfNeeded() + })) + } + restoreTimeScaleState(e) { + this._timeScale.restoreState(e), this.recalculateAllPanes(), this + .lightUpdate(), this._setScalesResetAvailable(!0) + } + restoreFactoryDefaults(e) { + e.restoreFactoryDefaults(), this.recalcVisibleRangeStudies(!0) + } + selectionMacro(e) { + var t = this.selection().allSources(); + e({ + removeSourceFromSelection: K.bind(this), + addSourceToSelection: J.bind(this), + clearSelection: Y.bind(this), + selection: this.selection.bind(this) + }); + var i = V(t, this.selection().allSources()), + s = V(this.selection().allSources(), t); + s.concat(t).forEach((function(e) { + e.updateAllViews() + })), i.forEach((function(e) { + var t = e.hasAlert && e.hasAlert.value() && e + .getAlertSync(); + t && t.set("selected", !1) + })), s.forEach((function(e) { + var t = e.hasAlert && e.hasAlert.value() && e + .getAlertSync(); + t && t.set("selected", !0) + })), this.lightUpdate(), (i.length > 0 || s.length > 0) && this + ._selectedSourceChanged.fire() + } + checkLineToolSelection() { + this._selection.checkLineToolSelection() + } + onSelectedSourceChanged() { + return this._selectedSourceChanged + } + selection() { + return this._selection + } + orderedDataSources(e) { + var t = []; + t.push(this.m_crossHairSource); + for (var i = 0; i < this._panes.length; i++) { + var s = this._panes[i].sourcesByGroup().all().slice(); + e && s.reverse(), t = t.concat(s) + } + return t + } + dataSourceForId(e) { + for (var t, i = 0; i < this._panes.length; ++i) + if (t = this._panes[i].dataSourceForId(e)) return t; + return null + } + children(e, t) { + return this.dataSources().filter((function(i) { + return (!0 !== t || !w(i) || !i.isChildStudy()) && i + .ownerSource() === e + })) + } + onSyncScrollNeeded(e) { + var t = this._undoModel._chartWidget; + if (t._chartWidgetCollection) { + var i = this.mainSeries().syncModel(); + if (i) { + var s = 1e3 * this._timeScale.points().roughTime(e, i.projectTime + .bind(i)); + t._chartWidgetCollection.syncScroll(s, this) + } + } + } + createSyncPoint(e, t) { + var i = this._syncPointCache[e.uniqueId()]; + if (i) { + var s = i[t.uniqueId()]; + if (s) return s + } else this._syncPointCache[e.uniqueId()] = {}; + var r = new L(e, t); + return this._syncPointCache[e.uniqueId()][t.uniqueId()] = r, r + } + updateTimeScale(e, t, i, s, r, n, o) { + if (o) { + this._timeScale.reset(); + for (var a = this.dataSources(), l = 0; l < a.length; l++) a[l] + .clearData && a[l].clearData() + } + if (s.length > 0) + for (a = this.dataSources(), l = 0; l < a.length; l++) a[l].moveData && + a[l].moveData(s); + var c = this._timeScale.indexToTimePoint(this._timeScale.baseIndex()); + this._timeScale.update(e, t, i, n); + var h = "ChartModel.prototype.updateTimeScale(" + e + "," + t + "," + i + .length + "," + s.length + "," + n.length + "," + o + ")"; + if (h += "TimeScale: {first:" + this._timeScale.points().firstIndex() + + ",last:" + this._timeScale.points().lastIndex() + "}", void 0 !== r) { + var u = this._timeScale.indexToTimePoint(r), + d = null !== c && null !== u && u > c; + this._updateBaseIndex(r, d) + } + A.logDebug(h), this.recalculateAllPanes(), this.lightUpdate() + } + updateTimeScaleBaseIndex(e) { + var t = this.mainSeries().bars(); + t.isEmpty() || this._updateBaseIndex(r(t.lastIndex()), e && e.index > 0) + } + _updateBaseIndex(e, t) { + var i = this.timeScale(), + s = i.baseIndex(), + r = i.visibleBarsStrictRange(), + n = i.logicalRange(); + if (null !== n && t) { + var o = n.contains(s), + a = e - s, + l = o ? null : i.rightOffset() - a; + if (!this._options.shiftVisibleRangeOnNewBar && o) { + var c = i.indexToCoordinate(s) + i.barSpacing() / 2 + 1, + h = s - n.left() + a, + u = c / h; + if (u >= i.minBarSpacing()) i.setBarSpacing(u), l = i.width() / u - + h; + else r.lastBar() !== s && (l = i.rightOffset() - a) + } + null !== l && i.setRightOffset(l) + } + i.setBaseIndex(e) + } + recalculatePane(e) { + e && e.recalculate() + } + recalculateAllPanes() { + for (var e = 0; e < this._panes.length; ++e) this._panes[e].recalculate(); + this.updateAllPaneViews(), this.crossHairSource().updateAllViews() + } + _invalidateBarColorerCaches() { + for (var e = this.dataSources(), t = 0; t < e.length; ++t) { + var i = e[t]; + i instanceof T && i.invalidateBarColorerCache() + } + } + createStudyInserter(e) { + return new R(e, this._studiesMetaInfoRepository, { + createStudy: this.insertStudyWithParams.bind(this) + }) + } + insertStudyWithParams(e, t, i, s, r, o, a, l, c, h, u) { + null == o && (o = this.mainSeries()); + var d = null; + if (!r && void 0 !== e.groupingKey) { + var p = this.findNonOverlayStudyWithGroupingKey(e.groupingKey); + null !== p && (d = p.pane) + } + null === d && (r || e.is_price_study ? d = this.paneForSource(o) : (d = this + .createPane(), void 0 !== h && d.setPaneSize(h))), + "Compare@tv-basicstudies" === e.id && this.m_mainSeries.priceScale() + .setMode({ + log: !1, + percentage: !0 + }); + var _ = Object.assign({}, s, { + inputs: t + }), + m = C(e, _, d, this.studyVersioning(), o), + f = y(this, m, o, e, u); + this._recalcVisibleRangeStudiesImpl({ + studies: [f], + oldEndVisibleIndex: -1, + oldStartVisibleIndex: -1, + force: !0, + timerId: null + }); + var g = d.findSuitableScale(f, o, a); + if (g === this.mainSeries().priceScale() && j(f)) { + var b = l ? F(f, g, this, !0) : null, + v = c ? W(f, g, this, !0) : null; + null === b && null === v || f.setSymbolCurrencyUnit(void 0, b || void 0, + v || void 0) + } + return j(f) && d.hasDataSource(this.mainSeries()) && q && !n.getBool( + "enable_symbol_labels_on_inserting_compare_once", !1) && (this + .properties().scalesProperties.showSymbolLabels.setValue(!0), n + .setValue("enable_symbol_labels_on_inserting_compare_once", !0)), f + .start(), null !== i && d.id() === i.paneId ? d.insertDataSource(f, g, i + .zorder) : d.addDataSource(f, g), f.properties().linkedToSeries && f + .properties().linkedToSeries.value() && f.setOwnerSource(this + .mainSeries()), this.recalculatePane(d), this.fullUpdate(), this + ._invalidateBarColorerCaches(), this._recalcVisibleRangeStudiesImpl({ + studies: [f], + force: !0 + }), this._recalcColorStudiesImpl({ + studies: [f], + force: !0 + }), + this._studyInserted.fire(f), f + } + studyInserted() { + return this._studyInserted + } + detachSource(e, t) { + var i = this.paneForSource(e); + if (i) return i.removeDataSource(e), i.isEmpty() ? (this + ._lineBeingCreated && i === this._paneBeingCreatedLineOn && this + .cancelCreatingLine(), this.removePane(i, t), !0) : (this + .fullUpdate(), !1) + } + removeSource(e, t) { + this.selectionMacro((function(t) { + t.removeSourceFromSelection(e) + })), this._sourcesBeingMoved.includes(e) && (this._sourcesBeingMoved = + this._sourcesBeingMoved.filter((function(t) { + return t !== e + })), this._sourcesBeingMoved.length || (this._lineItemBeingMoved = + null)), e === this._lineBeingEdited && (this._lineBeingEdited = + null, I.isToolEditingNow.setValue(!1)), e === this + ._lineBeingCreated && (this._lineBeingCreated = null, I + .isToolCreatingNow.setValue(!1)), e.stop && e.stop(); + var i = this.detachSource(e, t); + const s = this.mainSeries().priceScale(); + return w(e) && j(e) && e.priceScale() === s && s.isPercentage() && 1 === s + .seriesLikeSources().length && s.setMode({ + percentage: !1 + }), this.fullUpdate(), this._invalidateBarColorerCaches(), w(e) && (H + .emit("study_event", e.id(), "remove"), e.isChildStudy() && e + .source().unsetChild(e)), e.destroy && e.destroy(), l(e) && H.emit( + "drawing_event", e.id(), "remove"), i + } + _unmergeAvailable(e) { + return e === this.m_mainSeries || TradingView.isInherited(e.constructor, + b) && !e.isLinkedToSeries() && !TradingView.isInherited(e + .constructor, + v) && e.showInObjectTree() + } + isMergeUpAvailableForSource(e) { + return !!this._unmergeAvailable(e) && this.paneForSource(e) !== this + .panes()[0] + } + isMergeDownAvailableForSource(e) { + if (!this._unmergeAvailable(e)) return !1; + var t = this.paneForSource(e), + i = this.panes(); + return t !== i[i.length - 1] + } + isUnmergeAvailableForSource(e) { + return !!this._unmergeAvailable(e) && this.paneForSource(e).dataSources() + .filter(this._unmergeAvailable, this).length > 1 + } + lineBeingEdited() { + return this._lineBeingEdited + } + linePointBeingEdited() { + return this._linePointBeingEdited + } + calculateDefaultTags() { + for (var e = [], t = this.dataSources(), i = 0; i < t.length; i++) { + var s = t[i]; + s.tags && (e = e.concat(s.tags())) + } + return e + } + _sendTo(e, t) { + var i = {}, + s = this; + for (var r in e.forEach((function(e) { + var t = s.paneForSource(e), + r = s._panes.indexOf(t); + i[r] || (i[r] = []), i[r].push(e) + })), i) { + t(s._panes[r], i[r]) + } + this.fullUpdate() + } + sendToBack(e) { + this._sendTo(e, (function(e, t) { + e.sendToBack(t) + })) + } + bringToFront(e) { + this._sendTo(e, (function(e, t) { + e.bringToFront(t) + })) + } + clearAllStudies() { + for (var e = this.dataSources(), t = 0; t < e.length; t++) e[t].clearData && + e[t].clearData() + } + allLineTools() { + return this._getAllSources(l) + } + getStudyById(e) { + var t = this.dataSourceForId(e); + return null !== t && w(t) ? t : null + } + getLineToolById(e) { + var t = this.dataSourceForId(e); + return null !== t && l(t) ? t : null + } + getStudyById(e) { + var t = this.dataSourceForId(e); + return t instanceof b ? t : null + } + _initAlertsList() { + throw new Error("Not implemented") + } + _addAlertLabelToChart(e) { + throw new Error("Not implemented") + } + _removeAlertLabelFromChart(e) { + throw new Error("Not implemented") + } + _removeAllAlertLabelsFromChart() { + throw new Error("Not implemented") + } + getAlertsList() { + return Promise.resolve(null) + } + resetAlertList() {} + setInterval(e, t) { + var i = setInterval(e, t); + return this._modelIntervals.push(i), i + } + clearInterval(e) { + clearInterval(e); + var t = this._modelIntervals.indexOf(e); + t > -1 && this._modelIntervals.splice(t, 1) + } + clearIntervals() { + for (var e = 0; e < this._modelIntervals.length; e++) clearInterval(this + ._modelIntervals[e]); + this._modelIntervals = [] + } + destroy() { + this.mainSeries().properties().childs().showCountdown.unsubscribeAll(this), + this.mainSeries().onTimeFrameApplied().unsubscribeAll(this), this + ._appliedTimeFrame.destroy(); + for (var e = 0; e < this._barsMarksSources.length; e++) this + ._barsMarksSources[e].destroy(); + this.clearIntervals(), I.hideAllDrawings().unsubscribe(this, this + ._onDrawingsVisibilityChanged), I.hideAllIndicators().unsubscribe( + this, this._onIndicatorsVisibilityChanged), this + .resetDeferredStudies(); + for (e = 0; e < this._barsMarksSources.length; e++) this._barsMarksSources[ + e].destroy(); + for (e = 0; e < this._panes.length; e++) this._panes[e].destroy(); + this._panes.length = 0, this._sessions = null, this.m_mainSeries + .onStyleChanged().unsubscribe(this._timeScale, this._timeScale + .invalidateVisibleBars), this._timeScale + .visibleBarsStrictRangeChanged().unsubscribe(this.m_mainSeries, this + .m_mainSeries.clearHighLowAvgPriceCache), this._timeScale.destroy(), + N.unsubscribe(this, this._updateDateTimeFormatter), this.mainSeries() + .properties().interval.unsubscribe(this, this._updateDateTimeFormatter), + this._trendLineStatsCache && this._trendLineStatsCache.destroy(), this + ._fibRetracementLabelsCache && this._fibRetracementLabelsCache + .destroy(), this._properties.paneProperties.legendProperties.showLegend + .unsubscribeAll(this), this._dataSourceCollectionChanged.unsubscribeAll( + this), this.m_crossHairSource.destroy(), super.destroy() + } + countUserStudies(e) { + var t = 0; + e = e || {}; + for (var i = 0; i < this._panes.length; i++) + for (var s = this._panes[i].dataSources(), r = 0; r < s.length; r++) { + var n = s[r]; + if (w(n) && !P(n) && n.showInObjectTree()) { + var o = n.metaInfo && n.metaInfo(); + if (o) { + var a = o.id; + if (e.dontCountVolume && "Volume@tv-basicstudies" === a) + continue; + if (e.dontCountCompare && "Compare@tv-basicstudies" === a) + continue; + if (e.dontCountOverlay && "Overlay@tv-basicstudies" === a) + continue + } + t++ + } + } + return t + } + isJustClonedChart() { + return this._undoModel.isJustClonedChart() + } + restoreSource(e, t, i, s, r) { + var n, o; + n = e ? this.createPane(t) : this.panes()[t]; + var a = s.type.toLowerCase().startsWith("study"); + if (!(o = a ? n.restoreStudy(s) : n.restoreLineTool(s))) return null; + var l = null; + s.ownerSource && (l = n.dataSourceForId(s.ownerSource)), o.setOwnerSource( + l); + var c = null; + if (r ? c = n.getPriceScaleById(r.id) : o.ownerSource() && (c = o + .ownerSource().priceScale()), c) o.setPriceScale(c), c + .addDataSource(o); + else { + c = n.createPriceScaleAtPosition(r.position, r.priceScaleIndex); + r && r.id && c.setId(r.id), o.setPriceScale(c), c.addDataSource(o) + } + if (!e && i && i.overlayPriceScales) { + var h = this.dataSources().filter((function(e) { + return void 0 !== i.overlayPriceScales[e.id()] + })); + h.forEach(n.removeSourceFromPriceScale.bind(n)); + var u = new Map; + h.forEach((function(e) { + var t, s = i.overlayPriceScales[e.id()]; + u.has(s.id) ? t = u.get(s.id) : ((t = n + .createPriceScaleAtPosition("overlay")) + .restoreState(s), u.set(s.id, t)), t + .addDataSource(e), e.setPriceScale(t) + })) + } + return o.start(), o.restore && o.restore(), e && n.restoreState(i, !1, this + .version()), + a && (this.recalculateAllPanes(), this.mainSeries() + .invalidateBarColorerCache(), this.fullUpdate()), o + } + selectPointMode() { + return this.m_crossHairSource.selectPointMode() + } + cancelRequestSelectPoint() { + this.m_crossHairSource.cancelRequestSelectPoint() + } + requestSelectPoint(e, t) { + return this.m_crossHairSource.requestSelectPoint(e, t) + } + onPointSelected() { + return this.m_crossHairSource.onPointSelected() + } + isSeriesStyleSupported(e) { + return this.m_mainSeries.isStyleSupported(e) + } + getStudyShiftColorStartOffset() { + return this._studyShiftColorStartOffset + } + setStudyShiftColorStartOffset(e) { + this._studyShiftColorStartOffset = e + } + isInReplay() { + return this.m_mainSeries.isInReplay() + } + onInReplayStateChanged() { + return new s + } + switchToReplay(e, t) { + 0 + } + switchToRealtime() { + 0 + } + rendererOptionsProvider() { + return this._rendererOptionsProvider + } + priceAxisRendererOptions() { + return this._rendererOptionsProvider.options() + } + magnet() { + return this._magnet + } + isPriceScaleVisible(e) { + var t = this.paneForSource(e.mainSource()), + i = t.priceScalePosition(e); + if ("overlay" === i) return !0; + var s = this.priceScaleSlotsCount(); + return t.priceScaleIndex(e, i) < s[i] + } + studyMetaInfoRepository() { + return this._studiesMetaInfoRepository + } + studiesColorRotatorFactory() { + return this._studyColorRotatorFactory + } + } + e.exports = Z + }).call(this, i("tc+8"), i("aIyQ")) + }, + cZRT: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor() { + this._retries = 5, this._cache = null, this._tryLoad = e => { + this._retries = this._retries - 1; + this._startLoading().then(e, 0 !== this._retries ? () => setTimeout(() => + this._tryLoad(e), 3e3) : void 0) + } + } + load() { + return this._cache || (this._cache = new Promise(this._tryLoad)), this._cache + } + } + }, + cdbK: function(e, t, i) { + "use strict"; + + function s(e) { + return Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i.e(6), i.e(8), i.e(9), i.e(12), i + .e(16), i.e(17), i.e(23), i.e(34), i.e(42), i.e(43), i.e(49), i.e(50), i.e(76), + i.e(0), i.e(2), i.e(5), i.e(7), i.e(10), i.e(15), i.e(32), i.e(40), i.e(46), i + .e("go-to-date-dialog-impl") + ]).then(i.bind(null, "uUY/")).then(t => t.showGoToDateDialog(e)) + } + i.r(t), i.d(t, "showGoToDateDialog", (function() { + return s + })) + }, + cgFQ: function(e, t, i) { + "use strict"; + var s = i("Tmoa"), + r = i("ikwP"); + const n = /[1-9]/g; + class o { + constructor() { + this._data = null + } + setData(e) { + this._data = e + } + draw(e, t, i) { + if (null === this._data || !this._data.visible || 0 === this._data.text.length) + return; + const s = this._data; + e.font = t.font; + const o = Math.round(t.widthCache.measureText(e, s.text, n)); + if (o <= 0) return; + e.save(); + const a = t.paddingHorizontal, + l = o + 2 * a, + c = l / 2; + let h = s.coordinate, + u = Math.floor(h - c) + .5; + if (s.alwaysInViewPort) { + const e = s.width; + u < 0 ? (h += Math.abs(0 - u), u = Math.floor(h - c) + .5) : u + l > e && (h -= + Math.abs(e - (u + l)), u = Math.floor(h - c) + .5) + } + const d = u + l, + p = Math.ceil(0 + t.borderSize + t.offsetSize + t.paddingTop + t.fontSize + t + .paddingBottom); + e.fillStyle = s.background; + const _ = Math.round(u * i), + m = Math.round(0 * i), + f = Math.round(d * i), + g = Math.round(p * i), + b = Math.round(2 * i); + e.beginPath(), e.moveTo(_, m), e.lineTo(_, g - b), e.arcTo(_, g, _ + b, g, b), e + .lineTo(f - b, g), e.arcTo(f, g, f, g - b, b), e.lineTo(f, m), e.fill(); + const v = 0 + t.borderSize + t.offsetSize + t.paddingTop + t.fontSize / 2; + e.textAlign = "left", e.textBaseline = "middle", e.fillStyle = s.color; + const S = t.widthCache.yMidCorrection(e, "Apr0"); + e.translate((u + a) * i, (v + S) * i), Object(r.drawScaled)(e, i, () => e.fillText(s + .text, 0, 0)), e.restore() + } + } + i.d(t, "a", (function() { + return a + })); + class a { + constructor(e) { + this._renderer = new o, this._rendererData = { + background: "", + color: "", + coordinate: 0, + text: "", + visible: !1, + width: 0, + alwaysInViewPort: !0 + }, this._invalidated = !0, this._model = e, this._renderer.setData(this + ._rendererData) + } + update() { + this._invalidated = !0 + } + renderer() { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._renderer + } + coordinate() { + return this._rendererData.coordinate + } + _getAlwaysInViewPort() { + return !0 + } + _updateImpl() { + const e = this._rendererData; + if (e.visible = !1, this._model.timeScale().isEmpty()) return; + const t = this._getIndex(); + if (null === t) return; + e.visible = !0, e.width = this._model.timeScale().width(), e.background = this + ._getBgColor(), e.color = Object(s.colorFromBackground)(e.background), e + .coordinate = this._model.timeScale().indexToCoordinate(t), e.alwaysInViewPort = + this._getAlwaysInViewPort(); + const i = this._model.timeScale().indexToUserTime(t); + e.text = null !== i ? this._model.dateTimeFormatter().format(i) : "", this + ._invalidated = !1 + } + } + }, + d700: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return r + })), i.d(t, "a", (function() { + return n + })); + var s = i("/3z9"); + + function r(e) { + if ("INPUT" === e.tagName) { + const t = e.type; + return "text" === t || "email" === t || "number" === t || "password" === t || + "search" === t || "tel" === t || "url" === t + } + return "TEXTAREA" === e.tagName || e.isContentEditable + } + + function n(e, t) { + if (!t) return !1; + const i = 255 & e; + if (27 === i || i >>> 4 == 7) return !1; + switch (e ^ i) { + case s.Modifiers.Alt: + return (38 === i || 40 === i) && "SELECT" === t.tagName || r(t); + case s.Modifiers.Alt + s.Modifiers.Shift: + return r(t); + case s.Modifiers.Mod: + if (67 === i || !s.isMacKeyboard && 45 === i) { + const e = t.ownerDocument && t.ownerDocument.getSelection(); + if (e && !e.isCollapsed) return !0 + } + return r(t); + case s.Modifiers.Mod + s.Modifiers.Shift: + return i >= 33 && i <= 40 && r(t); + case s.Modifiers.Shift: + case 0: + return !!(9 !== i || t.ownerDocument && t !== t.ownerDocument.body && t !== t + .ownerDocument.documentElement) && ((13 === i || 32 === i || ! function(e) { + if ("BUTTON" === e.tagName) return !0; + if ("INPUT" === e.tagName) { + const t = e.type; + if ("submit" === t || "button" === t || "reset" === t || + "checkbox" === t || "radio" === t) return !0 + } + return !1 + }(t)) && ("form" in t || t.isContentEditable)) + } + return !1 + } + }, + dDSx: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("Ss5c").LineDataSource, + r = i("//lZ").doAnimate, + n = i("onDC").ChartUndoModelBase, + o = (i("Ocx9").saveDefaultProperties, i("GVHu").Study), + a = i("8sOK").StudyStub, + l = i("vwKG").showTooManyStudiesNotice, + c = (i("RDU5").UndoCommand, i("YlKu").ApplyLineToolTemplateUndoCommand), + h = i("s9sR").SetResolutionUndoCommand, + u = i("FKaq").SetPriceScaleSelectionStrategyCommand, + d = i("CsKN").SetScaleRatioPropertiesCommand, + p = i("/YGI").StudyInserter, + _ = i("JWMC").trackEvent, + m = i("txPx").getLogger("Chart.ChartUndoModel"), + f = i("QTwd").RestoreDefaultsPreferencesUndoCommand, + g = i("bJYc").SetPropertyUndoCommand, + b = i("pOzK").SetPriceScaleModeCommand, + v = i("7MWe").PriceScaleChangeUndoCommand, + S = i("LxhU").Interval, + y = i("ri5u").ChartLoadThemeUndoCommand; + t.ChartUndoModel = class extends n { + constructor(t, i, s, r, n, o, a, l, c) { + super(t, i, s, r, n, o, a, l, c), this._onSimpleZoomIn = new e, this + ._onSimpleZoomOut = new e, this.beginUndoMacro = a.beginUndoMacro + .bind(a), this.endUndoMacro = a.endUndoMacro.bind(a), this + .createUndoCheckpoint = a.createUndoCheckpoint.bind(a), this + .undoToCheckpoint = a.undoToCheckpoint.bind(a) + } + version() { + return this.m_model.version() + } + onData(e) { + switch (e.method) { + case "timescale_update": + var t = e.params; + this.m_model.updateTimeScale(t.index, t.zoffset, t.changes, t + .index_diff, t.baseIndex, t.marks, t.clear); + break; + case "timescale_completed": + var i = e.params[0]; + this.m_model.timeScale().onTimeScaleCompleted(i) + } + } + paneForSource(e) { + return this.m_model.paneForSource(e) + } + createPane(e) { + return this.m_model.createPane(e) + } + readOnly() { + return this.m_model.readOnly() + } + restart() { + this.m_model.restart() + } + disconnect() { + this.m_model.disconnect() + } + studiesMetaData() { + return this.m_model.studiesMetaData() + } + studyVersioning() { + return this.m_model.studyVersioning() + } + chartModel() { + return this._model() + } + _model() { + return this.m_model + } + pushUndoCommand(e) { + this._pushUndoCommand(e) + } + _pushUndoCommand(e) { + this._undoHistory.pushUndoCommand(e) + } + startScrollPrice(e, t, i) { + t.isAutoScale() || (this._initialPriceScrollState = t.state(), this + ._initialPriceScrollPos = i, this.chartModel().startScrollPrice( + e, t, i)) + } + scrollPriceTo(e, t, i) { + t.isAutoScale() || (this._initialPriceScrollPos && Math.abs(this + ._initialPriceScrollPos - i) > 20 && (this.pushUndoCommand( + new v(this.m_model, e, t, this._initialPriceScrollState) + ), delete this._initialPriceScrollState, delete this + ._initialPriceScrollPos), this.chartModel().scrollPriceTo(e, + t, i)) + } + endScrollPrice(e, t) { + t.isAutoScale() || (delete this._initialPriceScrollState, delete this + ._initialPriceScrollPos, this.chartModel().endScrollPrice(e, t)) + } + setPriceAutoScale(e, t, i) { + this.pushUndoCommand(new v(this.m_model, e, t, t.state())), this + .chartModel().setPriceAutoScale(e, t, i) + } + setWidth(e) { + this.m_model.setWidth(e) + } + setPaneHeight(e, t) { + this.m_model.setPaneHeight(e, t) + } + gridSource() { + return this.m_model.gridSource() + } + watermarkSource() { + return this.m_model.watermarkSource() + } + addAlertsSource(e) { + return this.m_model.addAlertsSource(e) + } + alertsSources() { + return this.m_model.alertsSources() + } + publishedChartsTimelineSource() { + return this.m_model.publishedChartsTimelineSource() + } + barsMarksSources() { + return this.m_model.barsMarksSources() + } + barMarksSourceForId(e) { + return this.m_model.barMarksSourceForId(e) + } + crossHairSource() { + return this.m_model.crossHairSource() + } + model() { + return this.m_model + } + chartWidget() { + return this._chartWidget + } + mainSeries() { + return this.m_model.m_mainSeries + } + mainSeriesScaleRatioProperty() { + return this.m_model.mainSeriesScaleRatioProperty() + } + panes() { + return this.m_model.panes() + } + timeScale() { + return this.m_model.timeScale() + } + selectionMacro(e) { + return this.m_model.selectionMacro(e) + } + setHoveredSource(e, t) { + this.m_model.setHoveredSource(e, t) + } + selection() { + return this.m_model.selection() + } + onSelectedSourceChanged() { + return this.m_model.onSelectedSourceChanged() + } + hoveredSource() { + return this.m_model.hoveredSource() + } + activeStrategySource() { + return this.m_model.activeStrategySource() + } + invalidate(e) { + this.m_model.invalidate(e) + } + setCurrentPosition(e, t, i, s) { + this.m_model.setCurrentPosition(e, t, i, s) + } + setAndSaveCurrentPosition(e, t, i, s) { + this.m_model.setAndSaveCurrentPosition(e, t, i, s) + } + canCreateStudy(e) { + return this.model().chartApi().chartApi().isCanCreateStudy(e) + } + _isCountedStudy(e) { + throw new Error("Not implemented") + } + checkIfFeatureAvailable(e, t) { + var i = this.canCreateStudy(), + s = t && t instanceof o; + return !this.readOnly() && s && (i = this.canCreateStudy(!0)), !!i || ( + s || l(), !1) + } + createStudyInserter(e, t, i) { + var s = this, + r = null, + n = { + createStudy: function(e, t, i, n, o, a, l, c, h, u, d) { + return s.checkIfFeatureAvailable(e, a) ? (_("studies", + "Study_" + e.id), + "Compare@tv-basicstudies" === e.id && _( + "compare", "symbol:" + t.symbol), s + ._insertStudy(e, t, n, o, a, l, c, h, u, r, d) + ) : (m.logNormal("Cannot insert study " + e.id), + null) + } + }; + void 0 !== i && (n.createStub = function() { + var e = s.m_model.insertStudyStub(i); + return r = { + targetPaneId: s.m_model.paneForSource(e).id(), + targetZOrder: e.zorder() + }, e.id() + }, n.removeStub = function(e) { + return s.m_model.removeStudyStub(e) + }); + var o = new p(e, this.m_model._studiesMetaInfoRepository, n); + return o.setParentSource(t), o + } + setProperty(e, t, i, s) { + if (e && e.value() !== t) { + var r = new g(e, t, i, this.m_model, s); + this.pushUndoCommand(r), this.emitEvent("setProperty") + } + } + setProperties(e, t, i) { + var s = this; + this.beginUndoMacro(i), this.m_model.selectionMacro((function() { + for (var r = 0; r < e.length; r++) s.setProperty(e[r], + t[r], i) + })), this.endUndoMacro() + } + setPriceScaleMode(e, t, i) { + for (var s = Object.keys(e), r = t.mode(), n = !1, o = 0; o < s + .length; o++) + if (r[s[o]] !== e[s[o]]) { + n = !0; + break + } if (n) { + var a = new b(e, t, i, this.m_model); + this.pushUndoCommand(a) + } + } + setPriceScaleSelectionStrategy(e) { + if (this.m_model.properties().priceScaleSelectionStrategyName + .value() !== e) { + _("Chart", "Change PriceScale Selection Strategy"); + var t = "Set Price Scale Selection Stretegy to " + e; + this.beginUndoMacro(t), this.setProperty(this.m_model.properties() + .priceScaleSelectionStrategyName, e, t); + var i = new u(this.m_model, e, t); + this.pushUndoCommand(i), this.endUndoMacro() + } + } + setScaleRatioProperty(e, t, i) { + if (e.value() !== t) { + var s = new d(e, t, i, this.m_model); + this.pushUndoCommand(s) + } + } + setResolutionProperty(e, t, i, s) { + if (!S.isEqual(e.value(), t)) { + var r = new h(e, t, i, s); + this.pushUndoCommand(r) + } + } + lineBeingCreated() { + return this.m_model.lineBeingCreated() + } + paneBeingCreatedLineOn() { + return this.m_model.paneBeingCreatedLineOn() + } + cancelCreatingLine() { + this.m_model.cancelCreatingLine() + } + lineCancelled() { + return this.m_model.lineCancelled() + } + lineBeingEdited() { + return this.m_model.lineBeingEdited() + } + sourcesBeingMoved() { + return this.m_model.sourcesBeingMoved() + } + dataSources() { + return this.m_model.dataSources() + } + orderedDataSources(e) { + return this.m_model.orderedDataSources(e) + } + dataSourceForId(e) { + return this.m_model.dataSourceForId(e) + } + state(e, t, i, s) { + return this.m_model.state(e, t, i, s) + } + asyncState() { + return this.m_model.asyncState() + } + calculateDefaultTags() { + return this.m_model.calculateDefaultTags() + } + onTagsChanged() { + return this.m_model.onTagsChanged() + } + _removeAllStudiesImpl() { + for (var e = this.m_model.dataSources(), t = 0; t < e.length; t++) { + var i = e[t]; + (TradingView.isInherited(i.constructor, o) && !i.isChildStudy() && i + .removeByRemoveAllStudies() || TradingView.isInherited(i + .constructor, a)) && this.removeSource(i) + } + } + removeAllStudies() { + this.beginUndoMacro(window.t("Remove all studies")), this + ._removeAllStudiesImpl(), this.endUndoMacro() + } + _removeAllDrawingToolsImpl(e) { + var t = this; + this.selectionMacro((function() { + t.lineBeingCreated() && t.cancelCreatingLine(); + for (var i = t.dataSources(), r = 0; r < i + .length; r++) { + var n = i[r]; + TradingView.isInherited(n.constructor, s) && n + .isActualSymbol() && n.isUserDeletable() && ( + e && e !== n.toolname || t.removeSource(n)) + } + })) + } + removeAllDrawingTools(e) { + this.beginUndoMacro(window.t("Remove Drawings")), this + ._removeAllDrawingToolsImpl(), this.endUndoMacro() + } + removeAllStudiesAndDrawingTools() { + this.beginUndoMacro(window.t("Remove all studies and drawing tools")), + this._removeAllDrawingToolsImpl(), this._removeAllStudiesImpl(), + this.endUndoMacro() + } + moveLeft() { + try { + this.beginUndoMacro("Move Left") + } catch (e) { + return + } + var e = this.m_model.timeScale().width(), + t = this; + r({ + to: e / 5, + onStep: function(e) { + t.startScrollTime(e), t.scrollTimeTo(0), t + .endScrollTime() + }, + onComplete: function() { + t.endUndoMacro() + } + }) + } + moveRight() { + try { + this.beginUndoMacro("Move Right") + } catch (e) { + return + } + var e = this.m_model.timeScale().width(), + t = this; + r({ + to: e / 5, + onStep: function(e) { + t.startScrollTime(0), t.scrollTimeTo(e), t + .endScrollTime() + }, + onComplete: function() { + t.endUndoMacro() + } + }) + } + scrollChart(e) { + this.m_model.scrollEnabled() && (this.startScrollTime(0), this + .scrollTimeTo(e), this.endScrollTime()) + } + scrollChartByBar(e) { + if (this.m_model.scrollEnabled()) { + var t = e * this.m_model.timeScale().barSpacing(); + this.startScrollTime(0), this.scrollTimeTo(t), this.endScrollTime() + } + } + restorePreferences() { + var e = new f(this.model()); + this.pushUndoCommand(e) + } + applyPreferences(e) { + throw new Error("Not implemented") + } + chartLoadTheme(e, t, i, s) { + var r = new y(e, t, i); + s ? r.redo() : this.pushUndoCommand(r) + } + applyLineToolTemplate(e, t, i) { + this.beginUndoMacro(i), this.saveLineToolState(e, i); + var s = new c(e, t, i); + this.pushUndoCommand(s), this.saveLineToolState(e, i), this + .endUndoMacro(), this.model().updateSource(e) + } + onSimpleZoomIn() { + return this._onSimpleZoomIn + } + onSimpleZoomOut() { + return this._onSimpleZoomOut + } + getAlertsList() { + return this.m_model.getAlertsList() + } + isJustClonedChart() { + return this._chartWidget.isJustClonedChart() + } + trackTime() { + return this._chartWidget.trackTime() + } + isInReplay() { + return this.m_model.isInReplay() + } + switchToReplay(e, t) {} + switchToRealtime() {} + togglePriceScaleAutoScaleMode(e) { + var t = { + autoScale: !e.isAutoScale() + }; + this.setPriceScaleMode(t, e, "Auto Scale") + } + togglePriceScaleLockScaleMode(e) { + var t = { + lockScale: !e.isLockScale() + }; + this.setPriceScaleMode(t, e, "Lock Scale") + } + setPriceScaleRegularScaleMode(e) { + this.setPriceScaleMode({ + log: !1, + percentage: !1, + indexedTo100: !1 + }, e, "Regular") + } + togglePriceScaleIndexedTo100ScaleMode(e) { + var t = { + indexedTo100: !e.isIndexedTo100() + }; + this.setPriceScaleMode(t, e, "Indexed to 100") + } + togglePriceScalePercentageScaleMode(e) { + var t = { + percentage: !e.isPercentage() + }; + this.setPriceScaleMode(t, e, "Percent") + } + togglePriceScaleLogScaleMode(e) { + var t = { + log: !e.isLog() + }; + this.setPriceScaleMode(t, e, "Logarithmic") + } + invertPriceScale(e) { + var t = e.properties().isInverted; + this.setProperty(t, !t.value(), "Invert Scale") + } + removePane(e) { + var t = this.m_model.panes()[e].dataSources().slice(); + this.removeSources(t, !1, "Remove pane") + } + destroy() { + this.model().destroy() + } + } + }).call(this, i("aIyQ")) + }, + dOnf: function(e, t, i) { + "use strict"; + + function s(e) { + let t; + if ("object" != typeof e || null == e || "number" == typeof e.nodeType) t = e; + else if (e instanceof Date) t = new Date(e.valueOf()); + else if (Array.isArray(e)) { + t = []; + let i = 0; + const r = e.length; + for (; i < r; i++) Object.prototype.hasOwnProperty.call(e, i) && (t[i] = s(e[i])) + } else { + t = {}; + for (const i in e) Object.prototype.hasOwnProperty.call(e, i) && (t[i] = s(e[i])) + } + return t + } + i.r(t), i.d(t, "deepCopy", (function() { + return s + })) + }, + dTSQ: function(e, t, i) { + "use strict"; + + function s(e) { + return e.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&") + } + i.r(t), i.d(t, "regExpEscape", (function() { + return s + })) + }, + "dUJ+": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "replaceGraphicsTimesWithTimePointIndexIndex", (function() { + return n + })); + const s = new Map([ + ["horizlines", e => [e.startIndex, e.endIndex]], + ["hhists", e => [e.firstBarTime, e.firstBarTime]], + ["vertlines", e => [e.index]], + ["polygons", e => e.points.map(e => e.index)] + ]), + r = new Map([ + ["horizlines", (e, t) => { + const i = e; + i.startIndex = t.get(i.startIndex), i.endIndex = t.get(i.endIndex) + }], + ["hhists", (e, t) => { + const i = e; + i.firstBarTime = t.get(i.firstBarTime), i.lastBarTime = t.get(i.lastBarTime) + }], + ["vertlines", (e, t) => { + const i = e; + i.index = t.get(i.index) + }], + ["polygons", (e, t) => { + const i = e; + for (const e of i.points) e.index = t.get(e.index) + }] + ]); + + function n(e) { + const t = e.data && e.data.graphicsCmds && e.data.graphicsCmds.create; + if (!t) return []; + const i = new Map, + n = new Set; + s.forEach((e, s) => { + const r = t[s]; + if (r) + for (const t of r) + for (const s of t.data) { + const t = e(s); + for (const e of t) i.set(e, -1), n.add(e) + } + }); + const o = Array.from(n).sort((e, t) => e - t); + return o.forEach((e, t) => i.set(e, t)), r.forEach((e, s) => { + const r = t[s]; + if (r) + for (const t of r) + for (const s of t.data) e(s, i) + }), o + } + }, + dfhE: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "STATUS_OFFLINE", (function() { + return s + })), i.d(t, "STATUS_RESOLVING", (function() { + return r + })), i.d(t, "STATUS_LOADING", (function() { + return n + })), i.d(t, "STATUS_READY", (function() { + return o + })), i.d(t, "STATUS_INVALID_SYMBOL", (function() { + return a + })), i.d(t, "STATUS_SNAPSHOT", (function() { + return l + })), i.d(t, "STATUS_EOD", (function() { + return c + })), i.d(t, "STATUS_PULSE", (function() { + return h + })), i.d(t, "STATUS_DELAYED", (function() { + return u + })), i.d(t, "STATUS_DELAYED_STREAMING", (function() { + return d + })), i.d(t, "STATUS_NO_BARS", (function() { + return p + })), i.d(t, "STATUS_REPLAY", (function() { + return _ + })), i.d(t, "STATUS_ERROR", (function() { + return m + })), i.d(t, "SERIES_STATUS_TEXT", (function() { + return f + })), i.d(t, "STYLE_LINE_TYPE_MARKERS", (function() { + return g + })), i.d(t, "STYLE_LINE_TYPE_STEP", (function() { + return b + })), i.d(t, "STYLE_LINE_TYPE_SIMPLE", (function() { + return v + })), i.d(t, "STYLE_BARS", (function() { + return S + })), i.d(t, "STYLE_CANDLES", (function() { + return y + })), i.d(t, "STYLE_LINE", (function() { + return w + })), i.d(t, "STYLE_AREA", (function() { + return P + })), i.d(t, "STYLE_RENKO", (function() { + return C + })), i.d(t, "STYLE_KAGI", (function() { + return x + })), i.d(t, "STYLE_PNF", (function() { + return T + })), i.d(t, "STYLE_PB", (function() { + return I + })), i.d(t, "STYLE_HEIKEN_ASHI", (function() { + return M + })), i.d(t, "STYLE_HOLLOW_CANDLES", (function() { + return O + })), i.d(t, "STYLE_BASELINE", (function() { + return L + })), i.d(t, "STYLE_RANGE", (function() { + return A + })), i.d(t, "STYLE_HILO", (function() { + return E + })), i.d(t, "STYLE_SHORT_NAMES", (function() { + return k + })), i.d(t, "SYMBOL_STRING_DATA", (function() { + return D + })); + const s = 0, + r = 1, + n = 2, + o = 3, + a = 4, + l = 5, + c = 6, + h = 7, + u = 8, + d = 9, + p = 10, + _ = 11, + m = 12, + f = { + [s]: "connecting", + [r]: "loading", + [n]: "loading", + [o]: "realtime", + [a]: "invalid", + [l]: "snapshot", + [c]: "endofday", + [h]: "endofday", + [u]: "delayed", + [d]: "delayed_streaming", + [p]: "forbidden", + [_]: "replay", + [m]: "error" + }, + g = 0, + b = 1, + v = 2, + S = 0, + y = 1, + w = 2, + P = 3, + C = 4, + x = 5, + T = 6, + I = 7, + M = 8, + O = 9, + L = 10, + A = 11, + E = 12, + k = { + 0: "bar", + 1: "candle", + 9: "hollowCandle", + 2: "line", + 3: "area", + 4: "renko", + 7: "pb", + 5: "kagi", + 6: "pnf", + 8: "ha", + 10: "baseline", + 11: "range", + 12: "hilo" + }, + D = { + 4: { + type: "BarSetRenko@tv-prostudies", + basicStudyVersion: 40 + }, + 7: { + type: "BarSetPriceBreak@tv-prostudies", + basicStudyVersion: 34 + }, + 5: { + type: "BarSetKagi@tv-prostudies", + basicStudyVersion: 34 + }, + 6: { + type: "BarSetPnF@tv-prostudies", + basicStudyVersion: 34 + }, + 8: { + type: "BarSetHeikenAshi@tv-basicstudies", + basicStudyVersion: 60 + }, + 11: { + type: "BarSetRange@tv-basicstudies", + basicStudyVersion: 72 + } + } + }, + dhFz: function(e, t, i) { + "use strict"; + + function s(e) { + return Boolean(e.isNaN) + } + i.d(t, "a", (function() { + return s + })) + }, + di4O: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "watermarkProperty", (function() { + return h + })), i.d(t, "restoreWatermarkPropertyDefaults", (function() { + return u + })); + var s = i("eJTA"), + r = i("Vdly"), + n = i("tc+8"), + o = i.n(n); + const a = { + visibility: !1, + color: "rgba(80, 83, 94, 0.25)" + }; + + function l() { + const e = r.getJSON("symbolWatermark"); + let t = Object.assign({}, a, e); + if (void 0 === e) { + if (void 0 !== r.getJSON("chartproperties")) { + const e = r.getJSON("chartproperties").symbolWatermarkProperties; + if (void 0 !== e) { + const i = Object(s.tryParseRgba)(e.color); + t = Object.assign(t, e), null !== i && (0 !== i[3] ? t.visibility = !0 : (i[3] = + .25, t.color = Object(s.rgbaToString)(i))) + } + } + delete t.transparency + } + return t + } + let c = null; + + function h() { + return null === c && (c = new o.a(l()), r.onSync.subscribe(null, () => { + null !== c && c.mergeAndFire(l()) + }), c.listeners().subscribe(null, () => { + null !== c && r.setJSON("symbolWatermark", c.state()) + })), c + } + + function u() { + null !== c && c.mergeAndFire(a) + } + }, + dmHa: function(e, t) { + e.exports = + '' + }, + e1Hy: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("EYFt"); + class r extends s.a { + constructor(e, t) { + super(e, t), this._showStudyValues = t.properties().paneProperties + .legendProperties.showStudyValues + } + getValues(e) { + const t = super.getValues(e), + i = this._showStudyValues.value(); + for (const e of t) e.visible = e.visible && i; + return t + } + } + }, + e1ZQ: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return p + })), i.d(t, "a", (function() { + return _ + })), i.d(t, "c", (function() { + return m + })); + var s = i("YFKU"), + r = i("kcTO"); + const n = { + 1: () => Object(s.t)("Jan"), + 2: () => Object(s.t)("Feb"), + 3: () => Object(s.t)("Mar"), + 4: () => Object(s.t)("Apr"), + 5: () => Object(s.t)("May", { + context: "short" + }), + 6: () => Object(s.t)("Jun"), + 7: () => Object(s.t)("Jul"), + 8: () => Object(s.t)("Aug"), + 9: () => Object(s.t)("Sep"), + 10: () => Object(s.t)("Oct"), + 11: () => Object(s.t)("Nov"), + 12: () => Object(s.t)("Dec") + }, + o = (e, t) => (t ? e.getMonth() : e.getUTCMonth()) + 1, + a = (e, t) => t ? e.getFullYear() : e.getUTCFullYear(), + l = (e, t) => Object(r.numberToStringWithLeadingZero)(((e, t) => t ? e.getDate() : e + .getUTCDate())(e, t), 2), + c = (e, t) => n[o(e, t)](), + h = (e, t) => Object(r.numberToStringWithLeadingZero)(o(e, t), 2), + u = (e, t) => Object(r.numberToStringWithLeadingZero)(a(e, t) % 100, 2), + d = (e, t) => Object(r.numberToStringWithLeadingZero)(a(e, t), 4), + p = { + "dd MMM 'yy": (e, t) => `${l(e, t)} ${c(e, t)} '${u(e, t)}`, + "MMM dd, yyyy": (e, t) => `${c(e, t)} ${l(e, t)}, ${d(e, t)}`, + "MMM dd": (e, t) => `${c(e, t)} ${l(e, t)}`, + "yyyy-MM-dd": (e, t) => `${d(e, t)}-${h(e, t)}-${l(e, t)}`, + "yy-MM-dd": (e, t) => `${u(e, t)}-${h(e, t)}-${l(e, t)}`, + "yy/MM/dd": (e, t) => `${u(e, t)}/${h(e, t)}/${l(e, t)}`, + "yyyy/MM/dd": (e, t) => `${d(e, t)}/${h(e, t)}/${l(e, t)}`, + "dd-MM-yyyy": (e, t) => `${l(e, t)}-${h(e, t)}-${d(e, t)}`, + "dd-MM-yy": (e, t) => `${l(e, t)}-${h(e, t)}-${u(e, t)}`, + "dd/MM/yy": (e, t) => `${l(e, t)}/${h(e, t)}/${u(e, t)}`, + "dd/MM/yyyy": (e, t) => `${l(e, t)}/${h(e, t)}/${d(e, t)}`, + "MM/dd/yy": (e, t) => `${h(e, t)}/${l(e, t)}/${u(e, t)}`, + "MM/dd/yyyy": (e, t) => `${h(e, t)}/${l(e, t)}/${d(e, t)}` + }, + _ = Object.keys(p), + m = () => -1 !== ["ja", "ko", "zh", "zh_TW"].indexOf(window.language || "") ? "yyyy-MM-dd" : + "dd MMM 'yy" + }, + "e3/o": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "guid", (function() { + return r + })), i.d(t, "randomHash", (function() { + return n + })), + i.d(t, "randomHashN", (function() { + return o + })); + const s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + function r() { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, e => { + const t = 16 * Math.random() | 0; + return ("x" === e ? t : 3 & t | 8).toString(16) + }) + } + + function n() { + return o(12) + } + + function o(e) { + let t = ""; + for (let i = 0; i < e; ++i) { + const e = Math.floor(Math.random() * s.length); + t += s[e] + } + return t + } + }, + e92V: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isMtpPredictorToolName", (function() { + return n + })), i.d(t, "isStudyLineToolName", (function() { + return o + })), i.d(t, "isLineToolName", (function() { + return a + })), i.d(t, "isLineDrawnWithPressedButton", (function() { + return l + })), i.d(t, "isLineToolDrawWithoutPoints", (function() { + return c + })), i.d(t, "isImageToolName", (function() { + return h + })), i.d(t, "isTextToolName", (function() { + return u + })); + var s = i("OH2X"); + const r = new Set([]); + + function n(e) { + return r.has(e) + } + + function o(e) { + return "LineToolRegressionTrend" === e || "LineToolVbPFixed" === e || + "LineToolFixedRangeVolumeProfile" === e + } + + function a(e) { + return e in s || o(e) + } + + function l(e) { + return "LineToolBrush" === e || "LineToolHighlighter" === e + } + + function c(e) { + return "LineToolTweet" === e + } + + function h(e) { + return "LineToolImage" === e + } + + function u(e) { + switch (e) { + case "LineToolBalloon": + case "LineToolText": + case "LineToolTextAbsolute": + case "LineToolCallout": + case "LineToolNote": + case "LineToolNoteAbsolute": + case "LineToolSignpost": + return !0 + } + return !1 + } + }, + eCE5: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return n + })), i.d(t, "a", (function() { + return a + })); + var s = i("Eyy1"), + r = i("LxhU"); + + function n(e, t) { + let i = t.multiplier(); + if (t.isTicks() && (e.ticks = !0), t.isSeconds() && (i < 60 ? (e.seconds = !0, e + .secondsFrom = Math.min(e.secondsFrom, i), e.secondsTo = Math.max(e.secondsTo, + i)) : (i /= 60, t = new r.Interval(r.ResolutionKind.Minutes, i))), t + .isMinutes()) + if (i < 60) e.minutes = !0, e.minutesFrom = Math.min(e.minutesFrom, i), e.minutesTo = + Math.max(e.minutesTo, i); + else { + const t = Math.floor(i / 60); + e.hours = !0, e.hoursFrom = Math.min(e.hoursFrom, t), e.hoursTo = Math.max(e + .hoursTo, t) + } t.isDays() && (e.days = !0, e.daysFrom = Math.min(e.daysFrom, i), e.daysTo = Math.max( + e.daysTo, i)), t.isWeeks() && (e.weeks = !0, e.weeksFrom = Math.min(e.weeksFrom, i), + e.weeksTo = Math.max(e.weeksTo, i)), t.isMonths() && (e.months = !0, e.monthsFrom = + Math.min(e.monthsFrom, i), e.monthsTo = Math.max(e.monthsTo, i)), t.isRange() && (e + .ranges = !0) + } + + function o(e, t, i, s) { + return e && s >= t && s <= i + } + + function a(e, t) { + const i = t.childs(); + switch (e.kind()) { + case r.ResolutionKind.Ticks: + return i.ticks.value(); + case r.ResolutionKind.Seconds: + if (e.multiplier() < 60) return o(i.seconds.value(), i.secondsFrom.value(), i + .secondsTo.value(), e.multiplier()); { + const t = Math.floor(e.multiplier() / 60); + return o(i.minutes.value(), i.minutesFrom.value(), i.minutesTo.value(), t) + } + case r.ResolutionKind.Minutes: + if (e.multiplier() < 60) return o(i.minutes.value(), i.minutesFrom.value(), i + .minutesTo.value(), e.multiplier()); { + const t = Math.floor(e.multiplier() / 60); + return o(i.hours.value(), i.hoursFrom.value(), i.hoursTo.value(), t) + } + case r.ResolutionKind.Days: + return o(i.days.value(), i.daysFrom.value(), i.daysTo.value(), e + .multiplier()); + case r.ResolutionKind.Weeks: + return o(i.weeks.value(), i.weeksFrom.value(), i.weeksTo.value(), e + .multiplier()); + case r.ResolutionKind.Months: + return o(i.months.value(), i.monthsFrom.value(), i.monthsTo.value(), e + .multiplier()); + case r.ResolutionKind.Range: + return i.ranges.value() + } + return Object(s.assert)(!1, "Unsupported resolution: " + e.value()), !1 + } + }, + eJTA: function(e, t, i) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }); + var s = i("ivNn"); + + function r(e, t, i) { + return s.isNaN(t) || t < e ? e : t > i ? i : Math.round(t) + } + + function n(e, t, i) { + return s.isNaN(t) || t < e ? e : t > i ? i : Math.round(1e4 * t) / 1e4 + } + + function o(e) { + return r(0, e, 255) + } + + function a(e) { + return r(0, e, 255) + } + + function l(e) { + return r(0, e, 255) + } + + function c(e) { + return n(0, e, 1) + } + + function h(e) { + return n(0, e, 1) + } + + function u(e) { + return n(0, e, 1) + } + + function d(e) { + return n(0, e, 1) + } + + function p(e) { + return n(0, e, 1) + } + + function _(e) { + return n(0, e, 1) + } + + function m(e) { + var t = e[0] / 255, + i = e[1] / 255, + s = e[2] / 255, + r = Math.min(t, i, s), + n = Math.max(t, i, s), + o = 0, + a = 0, + l = (r + n) / 2; + if (r === n) o = 0, a = 0; + else { + var c = n - r; + switch (a = l > .5 ? c / (2 - n - r) : c / (n + r), n) { + case t: + o = ((i - s) / c + (i < s ? 6 : 0)) / 6; + break; + case i: + o = ((s - t) / c + 2) / 6; + break; + case s: + o = ((t - i) / c + 4) / 6 + } + } + return [o, a, l] + } + + function f(e, t, i) { + return i < 0 && (i += 1), i > 1 && (i -= 1), i < 1 / 6 ? e + 6 * (t - e) * i : i < .5 ? t : + i < 2 / 3 ? e + (t - e) * (2 / 3 - i) * 6 : e + } + + function g(e) { + var t, i, s, r = e[0], + n = e[1], + c = e[2]; + if (0 === n) t = i = s = c; + else { + var h = c < .5 ? c * (1 + n) : c + n - c * n, + u = 2 * c - h; + t = f(u, h, r + 1 / 3), i = f(u, h, r), s = f(u, h, r - 1 / 3) + } + return [o(255 * t), a(255 * i), l(255 * s)] + } + t.normalizeRedComponent = o, t.normalizeGreenComponent = a, t.normalizeBlueComponent = l, t + .normalizeAlphaComponent = c, t.rgb = function(e, t, i) { + return [o(e), a(t), l(i)] + }, t.areEqualRgb = function(e, t) { + return e[0] === t[0] && e[1] === t[1] && e[2] === t[2] + }, t.rgba = function(e, t, i, s) { + if (Array.isArray(e)) { + var r = e; + return s = t, [r[0], r[1], r[2], c(s)] + } + var n = t; + return i = i || 0, s = s || 0, [o(e), a(n), l(i), c(s)] + }, t.areEqualRgba = function(e, t) { + return e[0] === t[0] && e[1] === t[1] && e[2] === t[2] && e[3] === t[3] + }, t.normalizeHue = h, t.normalizeHslSaturation = u, t.normalizeHsvSaturation = d, t + .normalizeLightness = p, t.normalizeValue = _, t.hsl = function(e, t, i) { + return [h(e), u(t), p(i)] + }, t.areEqualHsl = function(e, t) { + return e[0] === t[0] && e[1] === t[1] && e[2] === t[2] + }, t.hsv = function(e, t, i) { + return [h(e), d(t), _(i)] + }, t.areEqualHsv = function(e, t) { + return e[0] === t[0] && e[1] === t[1] && e[2] === t[2] + }, t.rgbToHsl = m, t.hslToRgb = g, t.rgbToHsv = function(e) { + var t = e[0], + i = e[1], + s = e[2], + r = t / 255, + n = i / 255, + o = s / 255, + a = Math.min(r, n, o), + l = Math.max(r, n, o), + c = l - a, + h = 0, + u = 0 === l ? 0 : c / l, + d = l; + if (l === a) h = 0; + else switch (l) { + case t: + h = ((n - o) / c + (n < o ? 6 : 0)) / 6; + break; + case i: + h = ((o - r) / c + 2) / 6; + break; + case s: + h = ((r - n) / c + 4) / 6 + } + return [h, u, d] + }, t.hsvToRgb = function(e) { + var t = e[0], + i = e[1], + s = e[2], + r = Math.floor(6 * t), + n = 6 * t - r, + c = s * (1 - i), + h = s * (1 - n * i), + u = s * (1 - (1 - n) * i), + d = 0, + p = 0, + _ = 0; + switch (r % 6) { + case 0: + d = s, p = u, _ = c; + break; + case 1: + d = h, p = s, _ = c; + break; + case 2: + d = c, p = s, _ = u; + break; + case 3: + d = c, p = h, _ = s; + break; + case 4: + d = u, p = c, _ = s; + break; + case 5: + d = s, p = c, _ = h + } + return [o(255 * d), a(255 * p), l(255 * _)] + }; + var b = [.199, .687, .114]; + + function v(e) { + return b[0] * e[0] + b[1] * e[1] + b[2] * e[2] + } + + function S(e, t, i) { + void 0 === i && (i = .05); + var s = m(e), + r = s[0] + t * i; + return s[0] = h(r - Math.floor(r)), g(s) + } + + function y(e, t, i) { + void 0 === i && (i = .05); + var s = e[0], + r = e[1], + n = e[2], + o = e[3], + a = S([s, r, n], t, i); + return [a[0], a[1], a[2], o] + } + t.rgbToGrayscale = v, t.distanceRgb = function(e, t) { + var i = e[0], + s = e[1], + r = e[2], + n = t[0] - i, + o = t[1] - s, + a = t[2] - r; + return Math.sqrt(n * n + o * o + a * a) + }, t.invertRgb = function(e) { + return [255 - e[0], 255 - e[1], 255 - e[2]] + }, t.darkenRgb = function(e, t) { + var i = m(e); + return g([i[0], i[1], p(i[2] - t / 100)]) + }, t.blendRgba = function(e, t) { + var i = e[0], + s = e[1], + r = e[2], + n = e[3], + h = t[0], + u = t[1], + d = t[2], + p = t[3], + _ = c(1 - (1 - p) * (1 - n)); + return [o(h * p / _ + i * n * (1 - p) / _), a(u * p / _ + s * n * (1 - p) / _), l(d * + p / _ + r * n * (1 - p) / _), _] + }, t.shiftRgb = S, t.shiftRgba = y, t.shiftColor = function(e, t, i) { + return void 0 === i && (i = .05), E(y(V(e), t, i)) + }; + var w, P, C, x, T = { + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#00ffff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000000", + blanchedalmond: "#ffebcd", + blue: "#0000ff", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#00ffff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dodgerblue: "#1e90ff", + feldspar: "#d19275", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#ff00ff", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgreen: "#90ee90", + lightgrey: "#d3d3d3", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslateblue: "#8470ff", + lightslategray: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#00ff00", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370d8", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#d87093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + red: "#ff0000", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + violetred: "#d02090", + wheat: "#f5deb3", + white: "#ffffff", + whitesmoke: "#f5f5f5", + yellow: "#ffff00", + yellowgreen: "#9acd32" + }; + + function I(e, t) { + return t in e + } + + function M(e) { + var t = w.re.exec(e); + return null !== t ? w.parse(t) : null + } + + function O(e) { + var t = P.re.exec(e); + return null !== t ? P.parse(t) : null + } + + function L(e) { + var t = C.re.exec(e); + return null !== t ? C.parse(t) : null + } + + function A(e) { + var t = x.re.exec(e); + return null !== t ? x.parse(t) : null + } + + function E(e) { + return "rgba(" + e[0] + ", " + e[1] + ", " + e[2] + ", " + e[3] + ")" + } + + function k(e) { + if (e = e.toLowerCase(), I(T, e)) { + var t = O(T[e]); + if (null !== t) return t; + throw new Error("Invalid named color definition") + } + var i = M(e); + if (null !== i) return i; + var s = O(e); + if (null !== s) return s; + var r = L(e); + if (null !== r) return r; + var n = A(e); + return null !== n ? [n[0], n[1], n[2]] : null + } + + function D(e) { + if (e = e.toLowerCase(), I(T, e)) { + var t = O(T[e]); + if (null !== t) return [t[0], t[1], t[2], 1]; + throw new Error("Invalid named color definition") + } + var i = M(e); + if (null !== i) return [i[0], i[1], i[2], 1]; + var s = O(e); + if (null !== s) return [s[0], s[1], s[2], 1]; + var r = L(e); + if (null !== r) return [r[0], r[1], r[2], 1]; + var n = A(e); + return null !== n ? n : null + } + + function V(e) { + var t = D(e); + if (null !== t) return t; + throw new Error("Passed color string does not match any of the known color representations") + }! function(e) { + e.re = /^rgb\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*\)$/, e.parse = + function(e) { + return [o(parseInt(e[1], 10)), a(parseInt(e[2], 10)), l(parseInt(e[3], 10))] + } + }(w || (w = {})), t.rgbToString = function(e) { + return "rgb(" + e[0] + ", " + e[1] + ", " + e[2] + ")" + }, + function(e) { + e.re = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, e.parse = function(e) { + return [o(parseInt(e[1], 16)), a(parseInt(e[2], 16)), l(parseInt(e[3], 16))] + } + }(P || (P = {})), t.rgbToHexString = function(e) { + var t = e[0], + i = e[1], + s = e[2], + r = t.toString(16), + n = i.toString(16), + o = s.toString(16); + return "#" + (1 === r.length ? "0" : "") + r + (1 === n.length ? "0" : "") + n + (1 === + o.length ? "0" : "") + o + }, + function(e) { + e.re = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/, e.parse = function(e) { + return [o(parseInt(e[1] + e[1], 16)), a(parseInt(e[2] + e[2], 16)), l(parseInt( + e[3] + e[3], 16))] + } + }(C || (C = {})), + function(e) { + e.re = + /^rgba\(\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?\d{1,10})\s*,\s*(-?[\d]{0,10}(?:\.\d+)?)\s*\)$/, + e.parse = function(e) { + return [o(parseInt(e[1], 10)), a(parseInt(e[2], 10)), l(parseInt(e[3], 10)), c( + parseFloat(e[4]))] + } + }(x || (x = {})), t.rgbaToString = E, t.rgbToBlackWhiteString = function(e, t) { + if (t < 0 || t > 255) throw new Error( + "invalid threshold value, valid values are [0, 255]"); + return v(e) >= t ? "white" : "black" + }, t.tryParseRgb = k, t.parseRgb = function(e) { + var t = k(e); + if (null !== t) return t; + throw new Error( + "Passed color string does not match any of the known color representations") + }, t.tryParseRgba = D, t.parseRgba = V + }, + eqEH: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "registerService", (function() { + return o + })), i.d(t, "unregisterService", (function() { + return a + })), i.d(t, "hasService", (function() { + return l + })), + i.d(t, "service", (function() { + return c + })), i.d(t, "waitServiceRegistered", (function() { + return h + })); + var s = i("jofe"); + const r = {}, + n = new Map; + + function o(e, t) { + if (l(e)) throw new Error("Service already registered"); + r[e.id] = t; + const i = n.get(e.id); + void 0 !== i && (n.delete(e.id), i.resolve(t)) + } + + function a(e) { + if (!l(e)) throw new Error("Service not found"); + r[e.id] = void 0 + } + + function l(e) { + return void 0 !== r[e.id] + } + + function c(e) { + const t = r[e.id]; + if (void 0 === t) throw new Error("ServiceLocator: Service " + e.id + " not found"); + return t + } + + function h(e) { + if (l(e)) return Promise.resolve(c(e)); + let t = n.get(e.id); + return void 0 === t && (t = Object(s.createDeferredPromise)(), n.set(e.id, t)), t.promise + } + }, + f6yo: function(e, t, i) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.pointInCircle = t.pointInPolygon = t.pointInBox = t.pointInTriangle = t + .pointInHalfplane = void 0; + var s = i("hBTJ"); + t.pointInHalfplane = function(e, t) { + var i = t.edge; + return i.A * e.x + i.B * e.y + i.C > 0 === t.isPositive + }, t.pointInTriangle = function(e, t, i, r) { + var n = t.add(i).scaled(.5).add(r).scaled(.5), + o = s.intersectLineSegments(t, i, n, e); + return null === o && (null === (o = s.intersectLineSegments(i, r, n, e)) && null === ( + o = s.intersectLineSegments(r, t, n, e))) + }, t.pointInBox = function(e, t) { + return e.x >= t.min.x && e.x <= t.max.x && e.y >= t.min.y && e.y <= t.max.y + }, t.pointInPolygon = function(e, t) { + for (var i = t.length - 1, s = !1, r = e.x, n = e.y, o = 0; o < t.length; o++) { + var a = t[o], + l = t[i]; + (a.y < n && l.y >= n || l.y < n && a.y >= n) && a.x + (n - a.y) / (l.y - a.y) * (l + .x - a.x) < r && (s = !s), i = o + } + return s + }, t.pointInCircle = function(e, t, i) { + return (e.x - t.x) * (e.x - t.x) + (e.y - t.y) * (e.y - t.y) <= i * i + } + }, + fFKx: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return o + })), i.d(t, "a", (function() { + return a + })); + var s = i("Eyy1"), + r = i("tqok"), + n = i("hsV8"); + + function o(e, t) { + if (e.startIndex >= t.length || e.endIndex >= t.length) return null; + const i = t[e.startIndex], + n = t[e.endIndex]; + return i === r.INVALID_TIME_POINT_INDEX || n === r.INVALID_TIME_POINT_INDEX ? null : ( + Object(s.assert)(i <= n, "startIndex should not exceed endIndex"), { + startIndex: i, + endIndex: n, + level: e.level, + extendLeft: e.extendLeft, + extendRight: e.extendRight + }) + } + + function a(e, t, i) { + const s = Object(n.ensureTimePointIndexIndex)(i.indexOf(e.startIndex)), + r = Object(n.ensureTimePointIndexIndex)(i.indexOf(e.endIndex)); + return { + id: t, + ...e, + startIndex: s, + endIndex: r + } + } + }, + fJhV: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineDataSourceTimeAxisView", (function() { + return n + })); + var s = i("cgFQ"), + r = i("Ulff"); + class n extends s.a { + constructor(e, t) { + super(e.model()), this._active = !1, this._source = e, this._pointIndex = t + } + setActive(e) { + this._active = e + } + _getBgColor() { + return this._active ? r.a.active : r.a.common + } + _getIndex() { + if (!this._model.selection().isSelected(this._source)) return null; + const e = this._source.timeAxisPoints(); + return e.length <= this._pointIndex ? null : e[this._pointIndex].index + } + } + }, + fPdn: function(e, t, i) { + "use strict"; + window.TradingView = window.TradingView || {}, window.requireAll = function(e) { + return e.keys().map(e) + }, i("6jKD"), i("bZMm"), i("YFKU"), i("8+VR").setClasses(), i("jjqu"), i("w9cH").install(), + i("qFKp"), i("ogJP"), i("jFln"), i("HbRj"), i("VVxS"), i("CLNU"), i("mZrn"), i("Vdly"), i( + "+GxX") + }, + fRER: function(e, t, i) { + "use strict"; + i.r(t), + i.d(t, "DropdownApi", (function() { + return s + })); + class s { + constructor(e, t) { + this._headerToolbar = e, this._dropdownId = t + } + applyOptions(e) { + this._headerToolbar.updateDropdown(this._dropdownId, e) + } + remove() { + this._headerToolbar.removeDropdown(this._dropdownId) + } + } + }, + fTGZ: function(e, t, i) { + "use strict"; + (function(e, s, r) { + var n = i("Eyy1").ensureNotNull, + o = i("Ss5c").LineDataSource, + a = i("ogJP").isNumber, + l = i("BOPY").BarsMarksContainerPaneView, + c = i("BOPY").BarsMarksContainerRenderer, + h = i("Bt3k").TooltipRenderer, + u = i("LxhU").Interval, + d = i("n5al").isPriceSourceStyle, + p = i("txPx").getLogger("Chart.BarsMarksContainer"); + class _ extends o { + constructor(t, i) { + var a = t._undoModel._chartWidget, + l = a.onWidget(), + c = !1; + c = l ? a._options && !a._options.hideIdeas : !!e.enabled("bars_marks") && + TVSettings.getBool("BarsMarksContainer.visibile", !1), i ? i.merge({ + visible: c, + frozen: !1 + }) : i = new s({ + visible: c, + frozen: !1 + }), i.visible.listeners().subscribe(null, (function(t) { + l || a._containsData || !e.enabled("bars_marks") || + TVSettings.setValue("BarsMarksContainer.visibile", !!t + .value()), u._tooltip && u._tooltip.removeAll() + })), o._configureProperties(i), super(t, i); + var u = this; + this.onNeedRepaint = new r, this._requests = [], this._marks = {}, this + ._loadedRange = null, this._getDataTimeout = null, this + ._collectedRange = null, this._model.mainSeries() + .onSymbolIntervalChanged().subscribe(this, this.clearMarks), this._model + .mainSeries().dataEvents().symbolResolved().subscribe(this, this + .clearMarks), this._model.mainSeries().dataEvents().completed() + .subscribe(this, (function() { + var e = this._model.mainSeries().data(); + if (0 !== e.size()) { + var t = n(e.first()).index, + i = n(e.last()).index, + s = this.timeScale(); + this.getData({ + start: s.indexToTimePoint(t), + end: s.indexToTimePoint(i) + }) + } + })), this._initialize(), this.pinnedTooltips = {}, this._tooltip = + new h(this._createTooltip.bind(this), this) + } + _initialize(e) { + throw new Error("Child class must override this member") + } + onClicked() { + throw new Error("Child class must override this member") + } + _getData(e) { + throw new Error("Child class must override this member") + } + _createTooltip() { + throw new Error("Child class must override this member") + } + updateDotData(e, t) { + return t + } + updatePlateData(e, t) {} + isAvailableInFloatingWidget() { + return !1 + } + _plateViewData(e) { + return {} + } + pinTooltip(e, t) { + this.pinnedTooltips[e] = t + } + timeScale() { + return this._model.timeScale() + } + getIntervalInTicks() { + var e = this._model.mainSeries().properties().interval.value(), + t = u.parse(e); + if (!t.isValid()) throw new TypeError("Unexpected interval"); + return t.isRange() ? 60 : t.inMilliseconds() / 1e3 + } + getVisibleTickMarksRange() { + if (this.timeScale().isEmpty()) return { + start: 0, + end: 0 + }; + var e, t = this.timeScale().visibleBarsStrictRange(); + return t.lastBar() > this.timeScale().points().firstIndex() && t + .firstBar() < this.timeScale().points().lastIndex() ? (e = t.lastBar() < + this.timeScale().points().lastIndex() ? this.timeScale() + .indexToTimePoint(t.lastBar()) : this._maxDate, { + start: (t = { + start: this.timeScale().indexToTimePoint(Math.max(t + .firstBar(), this.timeScale().points() + .firstIndex())), + end: e + }).start ? t.start : void 0, + end: t.end ? t.end : void 0 + }) : { + start: 0, + end: 0 + } + } + getVisibleRangePlates() { + var e = [], + t = this.getVisibleTickMarksRange(), + i = this.getIntervalInTicks(); + return Object.keys(this._marks).forEach((function(s) { + var r = this._marks[s], + n = r.tickmark; + n >= t.start && n <= t.end + i && e.push(r) + }), this), e + } + getPublishedPlates() { + var e = {}, + t = this; + return is_authenticated ? (this.getVisibleRangePlates().forEach((function( + i) { + i.is_public && (t.pinnedTooltips[i.id] || i.user__id === + user.id) && (e[i.id] = i) + })), e) : e + } + filterDisplayedPlates(e) { + return e = e.reduce(function(e, t) { + var i = this._getIndex(t.tickmark); + return e[i] = e[i] || [], e[i].push(t), e + }.bind(this), {}), e = Object.keys(e).reduce(function(t, i) { + var s = e[i]; + return s = (s = s.sort((function(e, t) { + return t.views_count - e.views_count + }))).slice(0, this._maxPlatesPerBar), t.concat(s) + }.bind(this), []) + } + _layout(e) { + switch (e) { + default: + case 0: + return "up"; + case 1: + return "down"; + case 2: + return "up"; + case 3: + case 4: + case 5: + case 6: + return "up" + } + } + _theme(e) { + switch (e) { + default: + case 0: + return "neutral"; + case 1: + return "green"; + case 2: + return "red"; + case 3: + return "yellow"; + case 4: + return "blue"; + case 5: + return "green"; + case 6: + return "red" + } + } + _offset(e, t, i) { + var s; + switch (e) { + default: + case "up": + s = null === i ? t[TradingView.HIGH_PLOT] : i(t); + break; + case "down": + s = null === i ? t[TradingView.LOW_PLOT] : i(t) + } + return this.priceScale().priceToCoordinate(s, this.ownerSource() + .firstValue()) + } + _getIndex(e) { + return this.timeScale().timePointToIndex(e) + } + getViewData() { + return { + barWidth: this.barWidth(), + plates: this.getPlatesViewData(), + tooltip: this._tooltip + } + } + barWidth() { + return this.timeScale().barSpacing() + } + getPlatesViewData() { + var e = this._model.mainSeries(); + if (e.data().isEmpty()) return []; + for (var t = d(e.style()) ? e.barFunction() : null, i = this + .filterDisplayedPlates(this.getVisibleRangePlates()), s = this, + r = {}, n = this._model.lastHittestData(), o = (i = (i = i.map( + function(e) { + var i = this._getIndex(e.tickmark), + o = this._getBar(i); + if (null === o) return !1; + var a, l = this._layout(e.direction), + c = this._theme(e.direction), + h = null !== n && n.id === e.id, + u = this.timeScale().indexToCoordinate(i), + d = this._offset(l, o, t), + p = this.priceScale().isInverted(); + return i in r || (r[i] = { + up: 0, + down: 0 + }), a = r[i][l]++, TradingView.merge({ + id: e.id, + x: u, + y: d, + yInverted: p, + order: a, + direction: l, + theme: c, + hovered: h, + pinned: !0 === s.pinnedTooltips[e.id], + user__id: e.user__id, + label: e.label, + labelFontColor: e.labelFontColor || + "#444", + minSize: e.minSize || 5 + }, this._plateViewData(e)) + }.bind(this))).filter((function(e) { + return !!e + }))).filter((function(e) { + return !0 === e.hovered + })), a = 0; a < i.length; a++) null != o[0] && i[a].user__id === o[ + 0].user__id && (i[a].highlightByAuthor = !0); + return i.sort((function(e, t) { + return e.hovered && !t.hovered ? 1 : 0 + })), i + } + _getBar(e) { + return this._model.mainSeries().data().valueAt(e) + } + paneViews() { + var e = this; + return this._properties.visible.value() ? [new l(this, (function(t) { + return new c(t.getViewData(), e) + }))] : [] + } + dataWindowView() { + return null + } + priceAxisViews() { + return null + } + statusView() { + return null + } + updateAllViews() {} + pointsCount() { + return 0 + } + properties() { + return this._properties + } + _rangeDifference(e) { + return e = Object.assign({}, e), this._loadedRange && (e.start < this + ._loadedRange.start ? e.end = this._loadedRange.start : e.end > this + ._loadedRange.end && (e.start = this._loadedRange.end)), e + } + _rangeUnion(e, t) { + return e = Object.assign({}, e), t && (e.start = Math.min(t.start, e.start), + e.end = Math.max(t.end, e.end)), e + } + _pushGetDataStack(e) { + a(e.start) && a(e.end) ? (this._getDataTimeout && clearTimeout(this + ._getDataTimeout), this._collectedRange = this._rangeUnion(e, + this._collectedRange), this._getDataTimeout = setTimeout( + function() { + this._getData(this._collectedRange), this._getDataTimeout = + this._collectedRange = null + }.bind(this), 300)) : p.logError("Wrong tickmark range") + } + roundRange(e) { + return { + start: Math.round(e.start), + end: Math.round(e.end) + } + } + refreshData() { + this.getData(this._lastRange) + } + getData(e) { + a(e.start) && a(e.end) ? (this._lastRange = e, (e = Object.assign({}, e)) + .end = this._maxDate, this._pushGetDataStack(e)) : p.logError( + "Wrong range") + } + _abortAllRequests() { + this._requests.forEach((function(e) { + e.abort() + })), this._requests = [], this._getDataTimeout && clearTimeout(this + ._getDataTimeout), this._getDataTimeout = this._collectedRange = + null + } + clearMarks() { + this._abortAllRequests(), this._marks = {}, this._loadedRange = null + } + } + _.prototype._maxDate = Math.round(new Date(2037, 0, 1).getTime() / 1e3), _.prototype + ._maxPlatesPerBar = 10, t.BarsMarksContainer = _ + }).call(this, i("Kxc7"), i("tc+8"), i("aIyQ")) + }, + fZEr: function(e, t, i) { + "use strict"; + async function s(e, t) { + const s = await Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i.e(16), i.e(17), i + .e(28), i.e(88), i.e(0), i.e(2), i.e(15), i.e("simple-dialog") + ]).then(i.bind(null, "EcUf")); + return s.showSimpleDialog(e, s.renameModule, t) + } + async function r(e, t) { + const s = await Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i.e(16), i.e(17), i + .e(28), i.e(88), i.e(0), i.e(2), i.e(15), i.e("simple-dialog") + ]).then(i.bind(null, "EcUf")); + return s.showSimpleDialog(e, s.confirmModule, t) + } + async function n(e, t) { + const s = await Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i.e(16), i.e(17), i + .e(28), i.e(88), i.e(0), i.e(2), i.e(15), i.e("simple-dialog") + ]).then(i.bind(null, "EcUf")); + return s.showSimpleDialog(e, s.warningModule, t) + } + i.r(t), i.d(t, "showRename", (function() { + return s + })), i.d(t, "showConfirm", (function() { + return r + })), i.d(t, "showWarning", (function() { + return n + })) + }, + fgLi: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "DataSource", (function() { + return l + })); + var s = i("hY0g"), + r = i.n(s), + n = i("e3/o"), + o = i("aIyQ"), + a = i.n(o); + class l { + constructor() { + this.hasAlert = new r.a(!1), this._zorder = 0, this.m_priceScale = null, this._id = + Object(n.randomHashN)(6), this._ownerSource = null, this._userEditEnabled = !0, + this._onPriceScaleChanged = new a.a, this._isSelectionEnabled = !0, this + ._ownerSourceChanged = new a.a, this._zOrderChanged = new a.a + } + id() { + return this._id + } + preferNoScale() { + return !1 + } + idForAlert() { + return this._id + } + setId(e) { + this._id = e + } + zorder() { + return this._zorder + } + setZorder(e) { + "number" == typeof e && this._zorder !== e && (this._zorder = e, this._zOrderChanged + .fire(e)) + } + isSpeciallyZOrderedSource() { + return !1 + } + title() { + throw new Error("Implement this fun in a subclass") + } + priceScale() { + return this.m_priceScale + } + setPriceScale(e) { + this.m_priceScale = e, this._onPriceScaleChanged.fire() + } + ownerSource() { + return this._ownerSource + } + setOwnerSource(e) { + this._ownerSource = e, this._ownerSourceChanged.fire() + } + ownerSourceChanged() { + return this._ownerSourceChanged + } + zOrderChanged() { + return this._zOrderChanged + } + isSavedInChart(e) { + return !0 + } + isSavedInStudyTemplates() { + return !0 + } + isRemovedByStudyTemplates() { + return !0 + } + hasContextMenu() { + return !0 + } + showInObjectTree() { + return !0 + } + setUserEditEnabled(e) { + this._userEditEnabled = e + } + userEditEnabled() { + return this._userEditEnabled + } + canBeHidden() { + return this.userEditEnabled() + } + isUserDeletable() { + return this.userEditEnabled() + } + canHasAlert() { + return !1 + } + properties() { + throw new Error("Implement this fun in a subclass") + } + isVisible() { + return this.properties().visible.value() + } + statusView() { + return null + } + dataWindowView() { + return null + } + legendView() { + return null + } + marketStatusModel() { + return null + } + dataUpdatedModeModel() { + return null + } + dataProblemModel() { + return null + } + priceAxisViews(e, t) { + return null + } + timeAxisViews() { + return null + } + updateAllViews() {} + paneViews() { + return null + } + labelPaneViews() { + return null + } + isFailed() { + return !1 + } + isLoading() { + return !1 + } + isPhantom() { + return !1 + } + isChildStudy() { + return !1 + } + hasChildren() { + return !1 + } + canHaveChildren() { + return !1 + } + onClickOutside() {} + getSourceIcon() { + return null + } + state(e) { + throw new Error("Implement this fun in a subclass") + } + onPriceScaleChanged() { + return this._onPriceScaleChanged + } + doesMovingAffectsUndo() { + return !0 + } + isMultiPaneAvailable() { + return !1 + } + isMultiPaneEnabled() { + return !1 + } + copiable() { + return !1 + } + cloneable() { + return !1 + } + movable() { + return !1 + } + isIncludedInAutoScale() { + return !1 + } + isHoveredEnabled() { + return this.isSelectionEnabled() + } + isSelectionEnabled() { + return this._isSelectionEnabled + } + setSelectionEnabled(e) { + this._isSelectionEnabled = e + } + firstValue() { + return null + } + priceRange(e, t) { + return null + } + autoScaleInfo(e, t) { + return { + range: this.priceRange(e, t) + } + } + } + }, + fs3R: function(e, t) { + e.exports = + '' + }, + g5Qf: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "getFavoriteDrawingToolbarPromise", (function() { + return o + })), i.d(t, "createFavoriteDrawingToolbar", (function() { + return a + })); + i("YFKU"); + var s = i("yMne"); + let r = null, + n = null; + + function o() { + return n + } + + function a() { + null === n && (n = Promise.all([i.e("react"), i.e(1), i.e(4), i.e(6), i.e(11), i.e(12), i.e( + 13), i.e(14), i.e(17), i.e(21), i.e(22), i.e(24), i.e(28), i.e(33), i.e( + 41), i.e(48), i.e(51), i.e(52), i.e(60), i.e(67), i.e(75), i.e(0), i.e( + 5), i.e(30), i.e(38), i.e("line-tools-icons"), i.e(53), i.e(54), i.e( + "floating-toolbars")]).then(i.bind(null, "gmn6")).then(({ + FavoriteDrawingToolbar: e + }) => (r = null !== r ? r : new e({ + left: window.innerWidth / 2, + top: s.b + 61 + }), r))) + } + }, + gASG: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Ocx9"), + r = i("Ss5c"), + n = i("tc+8"), + o = i.n(n), + a = i("+FzY"), + l = i("aIyQ"), + c = i.n(l); + class h { + constructor(e) { + this._image = null, this._currentImageURL = null, this._imageReady = !1, this + ._ready = new c.a, this._source = e, this.updateImage() + } + updateImage() { + const e = this.imageURL(); + this._currentImageURL !== e && (this._currentImageURL = e, this._image = null, this + ._imageReady = !1, null !== this._currentImageURL && (this._image = + new Image, this._image.onload = () => { + this._imageReady = !0, this._ready.fire() + }, + this._image.crossOrigin = "anonymous", this._image.src = this + ._currentImageURL)) + } + itemIndex() { + return 1 + } + labelIndex() { + return 0 + } + image() { + return this._imageReady && this.showPlate() ? this._image : null + } + showPlate() { + return this._props().childs().showImage.value() + } + backgroundPlateColor(e) { + return this._props().childs().plateColor.value() + } + ready() { + return this._ready + } + type() { + return this._props().childs().itemType.value() + } + category() { + return 1 + } + index() { + const e = this._source.points(); + return 0 === e.length ? null : e[0].index + } + imageURL() { + const e = this._props().childs().emoji.value(); + return Object(a.a)(e, "png") || null + } + sourceImage() { + return null + } + additionalImageURL() { + return null + } + additionalImageSource() { + return null + } + name() { + return "" + } + headline() { + return this._props().childs().text.value() + } + text() { + return "" + } + fullTextAst() { + return null + } + position() { + return this._props().childs().position.value() + } + fontSize() { + return this._props().childs().fontSize.value() + } + fontBold() { + return this._props().childs().bold.value() + } + fontItalic() { + return this._props().childs().italic.value() + } + sourceLabel() { + return null + } + _props() { + return this._source.properties() + } + } + class u extends o.a { + constructor(e) { + super(), this._source = e, e.pointAdded().subscribe(this, () => this.listeners() + .fire(this)), e.pointChanged().subscribe(this, () => this.listeners() + .fire(this)) + } + value() { + const e = this._source.properties().childs().position.value(); + return parseFloat(e.toFixed(2)) + } + setValue(e) { + this._source.properties().childs().position.setValue(e), this._source.model() + .updateSource(this._source), this.listeners().fire(this), this._source + .syncMultichartState({ + pricesChanged: !1, + indexesChanged: !1 + }) + } + } + var d = i("j8de"); + class p extends d.a { + constructor(e, t) { + super(e, t), this._source = e + } + _setPointImpl(e) { + this._source.setPointAndChangeIndex(this._pointIndex, e) + } + } + var _ = i("j3hX"), + m = i("Eyy1"), + f = i("jvrd"), + g = i("mMWL"); + class b extends r.LineDataSource { + constructor() { + super(...arguments), this._startMovingAnchorY = NaN + } + priceSource() { + return this.ownerSource() + } + addPoint(e, t, i) { + return super.addPoint(this._updatePositionAndCorrectPoint(e), t, i) + } + setPoint(e, t, i) { + super.setPoint(e, this._updatePositionAndCorrectPoint(t, !this.isPhantom() && ! + this._allowChangeAnchorHorizontally()), i), this._syncPosition() + } + setPointAndChangeIndex(e, t, i) { + super.setPoint(e, this._updatePositionAndCorrectPoint(t, !1), i), this + ._syncPosition() + } + startMoving(e, t, i, s) { + s || (this._startMovingAnchorY = Object(m.ensureNotNull)(this + ._anchorYCoordinate())), super.startMoving(e, t, i) + } + move(e, t, i, s) { + var r; + const n = Object(m.ensureDefined)(Object(m.ensureNotNull)(this + .startMovingPoint()).logical), + o = Object(m.ensureDefined)(e.logical); + if (!s && 0 === t) { + const e = this._points[0], + t = o.index - n.index, + i = Object(m.ensureNotNull)(this.priceScale()), + s = Object(m.ensure)(null === (r = this.ownerSource()) || void 0 === r ? + void 0 : r.firstValue()), + a = i.priceToCoordinate(o.price, s) - i.priceToCoordinate(n.price, s), + l = this._startMovingAnchorY + a, + c = i.coordinateToPrice(l, s); + this._updatePositionAndCorrectPoint({ + index: e.index + t, + price: c + }) + } + super.move(e, t, i), s || this._syncPosition() + } + _allowChangeAnchorHorizontally() { + return !1 + } + _updatePositionAndCorrectPoint(e, t) { + t && (e.index = this._points[0].index); + const i = this.priceSource(); + if (null === i) return e; + const s = i.priceScale(), + r = i.firstValue(); + if (null === s || s.isEmpty() || null === r) return e; + const n = s.height(); + let o = n / 2, + a = e.price >= s.coordinateToPrice(o, r) ? 1 : -1; + const l = this._model.mainSeries(); + if (i === l) { + const t = l.data().search(this._baseSeriesIndexForPoint(e)); + if (null !== t) { + const i = Object(f.g)(l, t, -1), + n = Object(f.g)(l, t, 1); + a = e.price >= i ? 1 : -1, o = s.priceToCoordinate(1 === a ? n : i, r), + e.price = 1 === a ? Math.max(n, e.price) : e.price + } + } + const c = 1 === (-1 === a !== s.isInverted() ? -1 : 1) ? o : n - o, + h = s.priceToCoordinate(e.price, r), + u = Math.min(n, Math.abs(h - o)), + d = Math.max(0, Math.min(100, 100 * u / c)) * a; + return this.properties().childs().position.setValue(d), e + } + _baseSeriesIndexForPoint(e) { + return e.index + } + _syncPosition() { + const e = this.linkKey().value(); + if (null !== e) { + const t = { + position: this.properties().childs().position.value() + }; + Object(g.changeLineStyle)({ + linkKey: e, + state: t, + model: this._model + }) + } + } + _anchorYCoordinate() { + const e = this.priceSource(); + if (null === e) return null; + const t = e.priceScale(), + i = e.firstValue(); + if (null === t || t.isEmpty() || null === i) return null; + const s = this._model.mainSeries(), + r = this.customEvent(); + if (null === r) return null; + let n = null; + if (e === s && (n = Object(f.f)(s, r)), null === n && (n = Object(f.c)(r, t, + i)), null === n) return null; + const o = r.position(), + a = t.priceToCoordinate(n.price, i); + return Object(f.d)(o, t.height(), a, Object(f.e)(o, t.isInverted())) + } + } + i.d(t, "LineToolSignpost", (function() { + return v + })); + class v extends b { + constructor(e, t) { + const s = t || v.createProperties(); + super(e, s), this._item = new h(this), this.properties().childs().emoji.subscribe( + this, () => this._item.updateImage()), this._item.ready().subscribe(this, + () => this._model.updateSource(this)), i.e("lt-pane-views").then(i.bind( + null, + "KFbh")).then(t => { + this._setPaneViews([new t.SignpostPaneView(this, e)]) + }) + } + isItemHovered(e) { + return !1 + } + isItemSelected(e) { + return !1 + } + isHidden(e) { + return !1 + } + items() { + return [this.customEvent()] + } + priceSource() { + return this.ownerSource() + } + pointsCount() { + return 1 + } + properties() { + return super.properties() + } + name() { + return "Signpost" + } + customEvent() { + return this._item + } + showInObjectTree() { + return !this.isPhantom() && super.showInObjectTree() + } + isPhantom() { + return this._model.isPhantomLine(this) + } + clonePositionOffset() { + return { + barOffset: 1, + xCoordOffset: 0, + yCoordOffset: 0 + } + } + template() { + const e = super.template(), + t = this.properties().childs(); + return e.text = t.text.value(), e.position = t.position.value(), e + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolsignpost", e); + return v._configureProperties(t), t.hasChild("text") || t.addChild("text", new o.a( + window.t("Text"))), t.hasChild("position") || t.addChild("position", new o + .a(50)), t.addExclusion("text"), t.addExclusion("position"), t.addChild( + "backgroundsColors", new _.LineToolColorsProperty([t.childs().plateColor])), + t + } + _createPointProperty(e) { + super._createPointProperty(e); + const t = this._pointsProperty.childs().points[e]; + t.removeProperty("price"), t.removeProperty("bar"), t.addChild("price", new u( + this)), t.addChild("bar", new p(this, 0)) + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text), + this.properties().childs().position.setValue(e.position) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e("lt-property-pages-with-definitions")]) + .then(i.bind(null, "zb1A")).then(e => e.SignpostDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e) + } + } + v.supportPhantomMode = !0 + }, + gAom: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "clearRectWithGradient", (function() { + return o + })), i.d(t, "fillRectInnerBorder", (function() { + return a + })), i.d(t, "drawHorizontalLine", (function() { + return l + })), i.d(t, "drawVerticalLine", (function() { + return c + })), i.d(t, "drawRoundRect", (function() { + return u + })), i.d(t, "drawRoundRectWithInnerBorder", (function() { + return d + })), i.d(t, "fillRectWithBorder", (function() { + return p + })), i.d(t, "createCircle", (function() { + return _ + })); + var s = i("aO4+"), + r = i("jFln"), + n = i("972a"); + + function o(e, t, i, s, r, n, o) { + e.save(), e.globalCompositeOperation = "copy"; + const a = e.createLinearGradient(0, 0, 0, r); + a.addColorStop(0, n), a.addColorStop(1, o), e.fillStyle = a, e.fillRect(t, i, s, r), e + .restore() + } + + function a(e, t, i, s, r, n) { + e.fillRect(t + n, i, s - 2 * n, n), e.fillRect(t + n, i + r - n, s - 2 * n, n), e.fillRect( + t, i, n, r), e.fillRect(t + s - n, i, n, r) + } + + function l(e, t, i, s) { + e.beginPath(); + const r = e.lineWidth % 2 ? .5 : 0; + e.moveTo(i, t + r), e.lineTo(s, t + r), e.stroke() + } + + function c(e, t, i, s) { + e.beginPath(); + const r = e.lineWidth % 2 ? .5 : 0; + e.moveTo(t + r, i), e.lineTo(t + r, s), e.stroke() + } + + function h(e, t) { + return Array.isArray(e) ? e.map(e => 0 === e ? e : e + t) : e + t + } + + function u(e, t, i, s, r, n, o) { + let a, l, c, h; + if (Array.isArray(n)) + if (2 === n.length) { + const e = Math.max(0, n[0]), + t = Math.max(0, n[1]); + a = e, l = e, c = t, h = t + } else { + if (4 !== n.length) throw new Error( + "Wrong border radius - it should be like css border radius"); + a = Math.max(0, n[0]), l = Math.max(0, n[1]), c = Math.max(0, n[2]), h = Math.max(0, + n[3]) + } + else { + const e = Math.max(0, n); + a = e, l = e, c = e, h = e + } + o || e.beginPath(), e.moveTo(t + a, i), e.lineTo(t + s - l, i), 0 !== l && e.arcTo(t + s, i, + t + s, i + l, l), e.lineTo(t + s, i + r - c), 0 !== c && e.arcTo(t + s, i + r, t + + s - c, i + r, c), e.lineTo(t + h, i + r), 0 !== h && e.arcTo(t, i + r, t, i + r - h, + h), e.lineTo(t, i + a), 0 !== a && e.arcTo(t, i, t + a, i, a) + } + + function d(e, t, i, s, o, a, l = 0, c = 0, d = "", p = n.b.Solid) { + if (e.save(), !c || !d || d === a) return u(e, t, i, s, o, l), e.fillStyle = a, e.fill(), + void e.restore(); + const _ = c / 2; + if ("transparent" !== a) { + const r = "transparent" !== d && p !== n.b.Solid; + u(e, r ? t : t + c, r ? i : i + c, r ? s : s - 2 * c, r ? o : o - 2 * c, r ? l : h(l, - + c)), e.fillStyle = a, e.fill() + } + if ("transparent" !== d) { + u(e, t + _, i + _, s - c, o - c, h(l, -_)), e.lineWidth = c, e.strokeStyle = d, Object(r + .setLineStyle)(e, p), e.closePath(), e.stroke() + } + e.restore() + } + + function p(e, t, i, n, o, a, l, c, h, u, d, p, _, m, f) { + const g = u ? 0 : t, + b = d ? _ : n; + if (void 0 !== a && (e.fillStyle = a, e.fillRect(g, i, b - g + m, o - i)), void 0 !== l && + c > 0) { + if (e.beginPath(), Object(r.setLineStyle)(e, h), void 0 !== f) { + const t = f.map(e => e * c); + Object(r.setLineDash)(e, t) + } + let a = Object(s.point)(0, 0), + u = Object(s.point)(0, 0), + d = Object(s.point)(0, 0), + _ = Object(s.point)(0, 0); + switch (p) { + case "outer": { + const e = .5 * c; + d = Object(s.point)(0, e), _ = Object(s.point)(0, e), a = Object(s.point)(e, - + c), u = Object(s.point)(e, -c); + break + } + case "center": { + const e = c % 2 ? .5 : 0, + t = c % 2 ? .5 : m; + d = Object(s.point)(.5 * c - e, -e), _ = Object(s.point)(t + .5 * c, -e), a = + Object(s.point)(-e, e + .5 * c), + u = Object(s.point)(t, e + .5 * c); + break + } + case "inner": { + const e = .5 * c; + d = Object(s.point)(0, -e), _ = Object(s.point)(1, -e), a = Object(s.point)(-e, + c), u = Object(s.point)(1 - e, c); + break + } + } + e.lineWidth = c, e.strokeStyle = l, e.moveTo(g - d.x, i - d.y), e.lineTo(b + _.x, i - _ + .y), e.moveTo(n + u.x, i + u.y), e.lineTo(n + u.x, o - u.y), e.moveTo(g - d.x, + o + d.y), e.lineTo(b + _.x, o + _.y), e.moveTo(t - a.x, i + a.y), e.lineTo(t - a + .x, o - a.y), e.stroke() + } + } + + function _(e, t, i, s) { + e.beginPath(), e.arc(t, i, s, 0, 2 * Math.PI, !1), e.closePath() + } + }, + gLxC: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("tc+8"), + n = i("Ocx9").DefaultProperty; + class o extends s { + constructor(e, t) { + super(e, t || o.createProperties()), this.version = o.version, i.e("lt-pane-views") + .then(i.bind(null, "Dz+H")).then(({ + NotePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Note" + } + getTooltipWidth() { + return o.TOOLTIP_WIDTH + } + getTooltipPadding() { + return o.TOOLTIP_PADDING + } + getTooltipLineSpacing() { + return o.TOOLTIP_LINESPACING + } + template() { + var e = s.prototype.template.call(this); + return e.text = this.properties().childs().text.value(), e + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + static createProperties(e) { + void 0 !== e && void 0 !== e.markerColor && void 0 === e.borderColor && (e + .borderColor = e.markerColor); + var t = new n("linetoolnote", e); + return o._configureProperties(t), t + } + state(e) { + var t = s.prototype.state.call(this, e); + return e && (t.state.fixedSize = !1), t + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "74nv"))) + .NoteDefinitionsViewModel + } + static _configureProperties(e) { + s._configureProperties(e), e.hasChild("text") || e.addChild("text", new r(window.t( + "Text"))), e.addExclusion("text") + } + } + o.TOOLTIP_WIDTH = 300, o.TOOLTIP_PADDING = 10, o.TOOLTIP_LINESPACING = 5, o.version = 1; + class a extends o { + constructor(e, t) { + super(e, t || a.createProperties()) + } + title() { + return window.t("Anchored Note") + } + name() { + return "Anchored Note" + } + isFixed() { + return !0 + } + hasEditableCoordinates() { + return !1 + } + static createProperties(e) { + var t = new n("linetoolnoteabsolute", e); + return a._configureProperties(t), t + } + static _configureProperties(e) { + o._configureProperties(e) + } + } + t.LineToolNote = o, t.LineToolNoteAbsolute = a + }, + gMtF: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolRiskRewardPriceAxisView", (function() { + return r + })); + var s = i("KcY8"); + class r extends s.a { + constructor(e, t) { + super(), this._source = e, this._data = t + } + _updateRendererData(e, t, i) { + if (e.visible = !1, !this._showAxisLabel()) return; + const s = this._source.priceScale(); + if (0 === this._source.points().length || null === s || s.isEmpty()) return; + const r = this._source.ownerSource(), + n = null !== r ? r.firstValue() : null; + if (null === n) return; + const o = this._data.priceProperty.value(), + a = this._data.colorProperty.value(); + i.background = a, i.textColor = this.generateTextColor(a), i.coordinate = s + .priceToCoordinate(o, n), e.text = s.formatPrice(o, n), e.visible = !0 + } + _showAxisLabel() { + return this._source.properties().childs().showPriceLabels.value() + } + } + }, + gP14: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("hbEN"), + r = i("Eyy1"), + n = i("aO4+"), + o = i("eJTA"), + a = i("HGP3"), + l = i("oiZD"), + c = i("JWMC"), + h = i("jofe"), + u = i("vTIA"), + d = i("GxN8"), + p = i("8sOK"), + _ = i("LxhU"), + m = i("tc+8"), + f = i.n(m), + g = i("gvrv"), + b = i("jenN"), + v = i("kcTO"), + S = i("Ocx9"), + y = i("wZIs"), + w = i("oV8k"), + P = i("Kxc7"), + C = i("n5al"), + x = i("sDZI"); + const T = new v.PriceFormatter; + class I extends w.a { + constructor(e, t, i) { + super(e, t), this._studySource = null, this._paneViews = [], this._metaInfo = + null, this._destroyed = !1, this._isStarted = !1, this._loadedGraphics = + null, this._doubleClickHandler = i; + const s = t.mainSeries(); + this._properties = new S.DefaultProperty("sessions"), Object(y + .applyDefaultsOverrides)(this._properties.childs().graphics, void 0, !1, + "sessions"), this._removeDuplicateProperties(), this._properties + .subscribe(this, this._onPropertiesChanged), t.studyMetaInfoRepository() + .findById({ + type: "java", + studyId: "Sessions@tv-basicstudies" + }).then(e => { + this._destroyed || null === this._loadedGraphics && (this + ._setMetaInfo(e), null !== this._metaInfo && (this + ._studySource = new g.a(t.chartApi(), s.seriesSource(), + "sessions_", this._metaInfo), this + ._createPaneViews(), this._studySource.dataCleared() + .subscribe(this, this.updateAllViews), this._studySource + .dataUpdated().subscribe(this, this.updateAllViews), + this._studySource.setInputs({}), this + ._processHibernate())) + }), t.timeScale().onReset().subscribe(this, this._clearData), t.timeScale() + .logicalRangeChanged().subscribe(this, this.updateAllViews), t.mainSeries() + .sessionIdProxyProperty().subscribe(this, this + ._updateVisibleOfPreAndPostMarketBackground), t.mainSeries() + .properties().interval.subscribe(this, this._processHibernate), this + ._updateVisibleOfPreAndPostMarketBackground(t.mainSeries().properties() + .sessionId) + } + applyOverrides(e) { + Object(y.applyPropertiesOverrides)(this._properties.childs().graphics, void 0, ! + 1, e, "sessions"), this._model.updateSource(this) + } + start() { + this._isStarted = !0, this._processHibernate() + } + restart() { + this._clearData(), P.enabled("stop_study_on_restart") && this.stop(), this + .start() + } + isStarted() { + return this._isStarted + } + stop() { + this._isStarted = !1, null !== this._studySource && this._studySource.stop() + } + isHoveredEnabled() { + return !1 + } + paneViews(e) { + return this._paneViews + } + updateAllViews() { + this._paneViews.forEach(e => e.update()) + } + updateViewsForPane(e) { + this.updateAllViews() + } + destroy() { + this._destroyed = !0, null !== this._studySource && (this._studySource + .dataCleared().unsubscribeAll(this), this._studySource.dataUpdated() + .unsubscribeAll(this), this._studySource.destroy(), this._studySource = + null), this._model.timeScale().logicalRangeChanged().unsubscribeAll( + this), this._model.timeScale().onReset().unsubscribeAll(this), this + ._model.mainSeries().sessionIdProxyProperty().unsubscribeAll(this), this + ._model.mainSeries().properties().interval.unsubscribeAll(this), this + ._properties.unsubscribeAll(this) + } + series() { + return this._model.mainSeries() + } + priceScale() { + return this.series().priceScale() + } + graphics() { + return this._loadedGraphics || Object(r.ensureNotNull)(this._studySource) + .graphics() + } + properties() { + return this._properties + } + graphicsInfo() { + return Object(r.ensureNotNull)(this._metaInfo).graphics + } + firstValue(e) { + return this._model.mainSeries().firstValue() + } + formatter() { + return T + } + state(e) { + const t = { + properties: this._properties.state() + }; + return e && null !== this._metaInfo && (t.data = { + graphics: Object(b.saveStudyGraphics)(this.graphics()), + metaInfo: this._metaInfo + }), t + } + restoreState(e, t) { + const i = e.properties; + this._migrateOutOfSessionProperty(i), this._properties.mergeAndFire(i), this + ._removeDuplicateProperties(), this + ._updateVisibleOfPreAndPostMarketBackground(this._model.mainSeries() + .properties().sessionId), void 0 !== e.data && t && (this + ._loadStudyGraphics(e.data.graphics), this._setMetaInfo(e.data + .metaInfo), this._createPaneViews()) + } + restoreOldState(e, t) { + const i = { + properties: { + graphics: e.state.graphics + } + }; + void 0 !== e.data && void 0 !== e.metaInfo && t && (i.data = { + metaInfo: e.metaInfo, + graphics: e.data.graphics + }), this.restoreState(i, t) + } + applyPreferences(e) { + this._properties.mergePreferences(e) + } + metaInfo() { + return Object(r.ensureNotNull)(this._metaInfo) + } + _loadStudyGraphics(e) { + const t = e.backgrounds; + if (void 0 !== t) { + const e = t.findIndex(e => "inSession" === e.styleId); - 1 !== e && t + .splice(e, 1) + } + this._loadedGraphics = Object(b.loadStudyGraphics)(e) + } + _setMetaInfo(e) { + const t = e.graphics.backgrounds; + void 0 !== t && void 0 !== t.inSession && delete t.inSession, this._metaInfo = e + } + _updateVisibleOfPreAndPostMarketBackground(e) { + const t = !Object(C.isRegularSessionId)(e.value()); + this._outOfSessionVisibilityProperty().setValue(t), this + ._preMarketVisibilityProperty().setValue(t), this + ._postMarketVisibilityProperty().setValue(t) + } + _clearData() { + null !== this._studySource && this._studySource.clearData() + } + _createPaneViews() { + const e = { + doubleClickHandler: this._doubleClickHandler + }; + Object(b.createGraphicsPaneViews)(this, this._model, e).then(e => { + this._paneViews = e, this._model.lightUpdate() + }) + } + _onPropertiesChanged() { + this._processHibernate(), this.updateAllViews() + } + _processHibernate() { + if (null !== this._studySource) { + const e = this._canBeHibernated(), + t = this._isHibernated(), + i = this._studySource.isStarted(); + !t && e && i ? this._studySource.stop() : !t || e || i || this._studySource + .start() + } + } + _canBeHibernated() { + const e = this._model.mainSeries(), + t = this._preMarketVisibilityProperty().value() && this + ._postMarketVisibilityProperty().value() && this + ._outOfSessionVisibilityProperty().value(); + return e.isDWM() || !t && !this._vertLinesVisibleProperty().value() + } + _isHibernated() { + return this._isStarted && (null === this._studySource || !this._studySource + .isStarted()) + } + _outOfSessionVisibilityProperty() { + return this._properties.childs().graphics.childs().backgrounds.childs() + .outOfSession.childs().visible + } + _preMarketVisibilityProperty() { + return this._properties.childs().graphics.childs().backgrounds.childs() + .preMarket.childs().visible + } + _postMarketVisibilityProperty() { + return this._properties.childs().graphics.childs().backgrounds.childs() + .postMarket.childs().visible + } + _vertLinesVisibleProperty() { + return this._properties.childs().graphics.childs().vertlines.childs().sessBreaks + .childs().visible + } + _removeDuplicateProperties() { + this._properties.hasChild("properties") && (this._properties.removeProperty( + "properties"), Object(S.saveDefaultProperties)(!0), this._properties + .childChanged("", null), + Object(S.saveDefaultProperties)(!1)) + } + _migrateOutOfSessionProperty(e) { + const t = e.graphics.backgrounds; + if (void 0 !== t) { + const i = t.outOfSession; + i.color === Object(r.ensureDefined)(x.sessionsPreferencesDefault.graphics + .backgrounds).outOfSession.color || "postMarket" in t || (e.graphics + .backgrounds = { + ...t, + postMarket: { + color: i.color, + transparency: i.transparency, + visible: i.visible + }, + preMarket: { + color: i.color, + transparency: i.transparency, + visible: i.visible + } + }) + } + } + } + var M = i("3ClC"), + O = i("aIyQ"), + L = i.n(O), + A = i("hY0g"), + E = i.n(A), + k = i("H0vP"), + D = i("iDOr"), + V = i("MbIA"), + B = i("gQ5K"), + R = i("3t3b"), + N = i("4kQX"), + j = i("mPvX"), + F = i("mMWL"), + W = i("txPx"), + H = i("CW80"), + U = i("e3/o"), + z = i("ogJP"), + G = i("Tmoa"), + q = i("fTGZ"), + Y = i("4vW/"); + + function K(e, t) { + return e.code < t.code ? -1 : e.code > t.code ? 1 : 0 + } + class J { + constructor(e) { + this._convertibleItems = e, this._idsToItems = new Map; + for (const t of e) this._idsToItems.set(t.id, t) + } + convertible(e) { + return void 0 !== this._idsToItems.get(e) + } + size() { + return this._convertibleItems.length + } + filterConvertible(e, t) { + const i = this._convertibleItems.filter(function(e, t) { + return i => !e.has(i.id) && t(i.id) + }(e, t)); + return i.sort(K), i + } + } + class Z { + constructor(e) { + this._allGroups = new Set, this._idToName = new Map, this._idToDescription = + new Map, this._groupedUnitIds = new Map, this._groupedUnits = new Map, this + ._groupById = new Map, this._size = 0, this._units = e; + for (const t in e) + if (e.hasOwnProperty(t)) { + this._allGroups.add(t), this._groupedUnitIds.set(t, new Set(e[t].map(e => e + .id))), this._groupedUnits.set(t, e[t]); + for (const i of e[t]) this._size++, this._idToName.set(i.id, i.name), this + ._idToDescription.set(i.id, i.description), this._groupById.set(i.id, t) + } + } + unitsChanged(e) { + return this._units !== e + } + size() { + return this._size + } + name(e) { + return this._idToName.get(e) || e + } + description(e) { + return this._idToDescription.get(e) || e + } + unitGroupById(e) { + return this._groupById.get(e) || null + } + allGroups() { + return new Set(this._allGroups) + } + unitsByGroups(e) { + const t = []; + return e.forEach(e => { + const i = this._groupedUnits.get(e); + void 0 !== i && t.push({ + name: e, + units: i + }) + }), t + } + convertible(e, t) { + for (const i of t) { + const t = this._groupedUnitIds.get(i); + if (void 0 !== t && t.has(e)) return !0 + } + return !1 + } + } + var X = i("ivNn"); + class $ { + constructor(e) { + this._source = null, this._sourcePane = null, this + ._currentToolSupportsPhantomMode = !1, this._model = e + } + destroy() { + this._source = null, this._sourcePane = null + } + source() { + return this._source + } + onToolChanged() { + this._removeSource(); + const e = this._model.currentTool(); + this._currentToolSupportsPhantomMode = Object(H.isLineToolName)(e) && Object(H + .supportsPhantomMode)(e) + } + onCursorPositionUpdated() { + if (!this._currentToolSupportsPhantomMode) return; + const e = this._model.crossHairSource(); + if (this._sourcePane !== e.pane && this._removeSource(), null === e.pane || !Object( + X.isNumber)(e.index) || !Object(X.isNumber)(e.price)) return void this + ._removeSource(); + const t = { + index: e.index, + price: e.price + }; + null !== this._source ? this._source.setPoint(0, t) : (this._source = this._model + .createLineTool(e.pane, t, this._model.currentTool(), void 0, null), this + ._sourcePane = e.pane) + } + _removeSource() { + null !== this._source && (this._model.removeSource(this._source), this._source = + null, this._sourcePane = null) + } + } + var Q = i("k9/m"), + ee = i("4o++"), + te = i("zL3Q"); + class ie { + align(e, t, i) { + let s = e; + if (!Object(te.a)().value()) return s; + const n = i.mainDataSource(); + if (null === n) return s; + const o = n.model().mainSeries(); + if (n !== o) return s; + const a = o.priceScale(), + l = o.bars(); + if (a.isEmpty() || !l.contains(t)) return s; + const c = l.valueAt(t); + if (null === c) return s; + const h = []; + null !== o.priceSource() ? h.push(o.barFunction()(c)) : h.push(c[1], c[2], c[3], c[ + 4]); + const u = Object(r.ensure)(o.firstValue()), + d = h.map(e => ({ + y: a.priceToCoordinate(e, u), + price: e + })), + p = a.priceToCoordinate(e, u); + d.sort((e, t) => Math.abs(e.y - p) - Math.abs(t.y - p)); + const _ = d[0]; + return (Object(te.b)().value() === ee.MagnetMode.StrongMagnet || Math.abs(_.y - p) < + 50) && (s = _.price), s + } + } + var se = i("Qb4w"), + re = i("jCNj"), + ne = i("OLhd"); + i.d(t, "ChartModelBase", (function() { + return ce + })); + const oe = Object(W.getLogger)("Chart.ChartModel"); + + function ae(e, t) { + const i = e.indexOf(t); + return -1 !== i && (e.splice(i, 1), !0) + } + const le = { + isSnapshot: !1, + readOnly: !1, + watermarkEnabled: !0, + shiftVisibleRangeOnNewBar: !0, + currencyConversionEnabled: !1, + unitConversionEnabled: !1, + countdownEnabled: !0, + lastPriceAnimationEnabled: !0 + }; + class ce { + constructor(e, t, i, r, n, o, a, c) { + this._onRearrangePanes = new L.a, this._lineToolsGroupModel = new j + .LineToolsGroupModel, this._sourcesBeingMoved = [], this._lineItemBeingMoved = + null, this._lineBeingEdited = null, this._linePointBeingEdited = null, this + ._linePointBeingChanged = null, this._customSourceBeingMovedHitTestData = null, + this._customSourceBeingMoved = null, this._dataSourceCollectionChanged = new L + .a, this._sourceProperitesChanged = new L.a, this._sourceZOrderChanged = new L + .a, this._dataSourceSymbolResolved = new L.a, this._sessions = null, this + ._currentTool = "", this._lineBeingCreated = null, this + ._paneBeingCreatedLineOn = null, this._lineCancelled = new L.a, this + ._phantomSourceContainer = new $(this), this._destroyed = !1, this + ._isSettingsExternalPosition = !1, this._isTimeScrolling = !1, this._magnet = + new ie, this._scrollingState = null, this._panes = [], this._tagsChanged = new L + .a, this._strategySources = [], this._strategySourcesChange = new L.a, this + ._activeStrategySource = new E.a(null), this._panesCollectionChanged = new L.a, + this._scrollEnabled = P.enabled("chart_scroll"), this._zoomEnabled = P.enabled( + "chart_zoom"), this._isScalesResetAvailableChanged = new L.a, this + ._isScalesResetAvailable = !1, this._esdWatcher = null, this._alertsWatcher = + null, this._hoveredSource = null, this._hoveredSourceChanged = new L.a, this + ._lastHoveredHittestData = null, this._lastSelectedHittestData = null, this + ._topmostCustomSources = [], this._fgCustomSources = [], this + ._bgCustomSources = [], this._allCustomSources = [], this._customSourcesMap = + new Map, this._multiPaneSources = [], this._showLegendProperty = new f.a, this + ._id = Object(U.guid)(), this._chartSaveTime = null, this + ._availableCurrenciesList = null, this._availableCurrencies = new J([]), this + ._availableUnitsObject = null, this._availableUnits = new Z({}), this + ._shouldBeSavedEvenIfHidden = !1, this._watchedThemeSpawn = l.watchedTheme + .spawn(), this._gradientColorsCache = null, this._recalcVRStudiesParams = {}, + this._recalcColorStudiesParams = {}, + this._recalcVisibleRangeStudiesImplDebounced = Object(s.default)(this + ._recalcVisibleRangeStudiesImpl.bind(this, this._recalcVRStudiesParams), 500 + ), this._recalcColorStudiesImplDebounced = Object(s.default)(this + ._recalcColorStudiesImpl.bind(this, this._recalcColorStudiesParams), 250), + this._width = 0, this._resetScales = new L.a, this._chartThemeLoaded = new L.a, + this._chartApi = e, this._invalidateHandler = t, this._undoModel = o, this + ._properties = i, this._options = Object(z.merge)(Object(z.clone)(le), c), this + ._studiesMetaInfoRepository = n, this._readOnly = this._options.readOnly, this + ._isSnapshot = this._options.isSnapshot, this._chartSaveTime = (new Date) + .valueOf(), this._backgroundColor = new E.a(this._getBackgroundColor()), this + ._backgroundTopColor = new E.a(this._getBackgroundColor(!0)), this._properties + .childs().paneProperties.childs().background.subscribe(this, this + ._updateBackgroundColor), this._properties.childs().paneProperties.childs() + .backgroundType.subscribe(this, this._updateBackgroundColor), this._properties + .childs().paneProperties.childs().backgroundGradientStartColor.subscribe(this, + this._updateBackgroundColor), this._properties.childs().paneProperties + .childs().backgroundGradientEndColor.subscribe(this, this + ._updateBackgroundColor), this._backgroundColor.subscribe(this + .recalcColorStudies.bind(this, !1)), this._watchedThemeSpawn.subscribe(this + ._updateBackgroundColor.bind(this)) + } + version() { + return 3 + } + chartSaveTime() { + return this._chartSaveTime + } + setChartSaveTime(e) { + this._chartSaveTime = e + } + destroy() { + this._phantomSourceContainer.destroy(), this._hoveredSourceChanged.destroy(), + null !== this._watermarkSource && (this._watermarkSource.destroy(), this + ._watermarkSource = null), Array.from(this._customSourcesMap.keys()) + .forEach(this._removeCustomSource, this), Object(r.assert)(0 === this + ._topmostCustomSources.length), Object(r.assert)(0 === this._fgCustomSources + .length), Object(r.assert)(0 === this._bgCustomSources.length), Object(r + .assert)(0 === this._allCustomSources.length), Object(r.assert)(0 === this + ._customSourcesMap.size), null !== this._esdWatcher && (this._esdWatcher + .destroy(), this._esdWatcher = null), null !== this._alertsWatcher && (this + ._alertsWatcher.destroy(), this._alertsWatcher = null), this._properties + .childs().paneProperties.childs().background.unsubscribeAll(this), this + ._properties.childs().paneProperties.childs().backgroundType.unsubscribeAll( + this), this._properties.childs().paneProperties.childs() + .backgroundGradientEndColor.unsubscribeAll(this), this._properties.childs() + .paneProperties.childs().backgroundGradientStartColor.unsubscribeAll(this), this + ._watchedThemeSpawn.destroy(), this._destroyed = !0 + } + undoModel() { + return this._undoModel + } + addStrategySource(e) { + -1 === this._strategySources.indexOf(e) && (this._strategySources.push(e), this + ._strategySourcesChange.fire(), this.setActiveStrategySource(e)) + } + removeStrategySource(e) { + const t = this._strategySources.indexOf(e); + if (-1 !== t) { + if (this._strategySources.splice(t, 1)[0] === this._activeStrategySource + .value() && this.unsetActiveStrategySource(), this._strategySources.length > + 0 + ) { + const e = this._strategySources[this._strategySources.length - 1]; + this.setActiveStrategySource(e) + } + this._strategySourcesChange.fire() + } + } + setActiveStrategySource(e) { + -1 !== this._strategySources.indexOf(e) && this._activeStrategySource.setValue(e) + } + unsetActiveStrategySource() { + this._activeStrategySource.setValue(null) + } + activeStrategySource() { + return this._activeStrategySource + } + strategySources() { + return this._strategySources + } + strategySourcesChange() { + return this._strategySourcesChange + } + setScrollEnabled(e) { + this._scrollEnabled = e + } + scrollEnabled() { + return this._scrollEnabled + } + setZoomEnabled(e) { + this._zoomEnabled = e + } + zoomEnabled() { + return this._zoomEnabled + } + zoomToViewport(e, t, i, s, r) { + this.setTimeViewport(e, t); + let n = Math.min(i, s), + o = Math.max(i, s); + const a = r.defaultPriceScale(); + a.isPercentage() || a.setMode({ + autoScale: !1 + }), a.isLog() && (n = a.priceToLogical(n), o = a.priceToLogical(o)), a + .setPriceRange(new se.PriceRange(n, o)), this.recalculateAllPanes(), this + .invalidate(this._paneInvalidationMask(r, k.InvalidationLevel.Light)), this + ._setScalesResetAvailable(!0) + } + setTimeViewport(e, t) { + this.timeScale().zoomToBarsRange(e, t), this.recalculateAllPanes(), this + .recalcVisibleRangeStudies(), this.lightUpdate() + } + onTagsChanged() { + return this._tagsChanged + } + canZoomIn() { + return this._timeScale.canZoomIn() && this._zoomEnabled + } + canZoomOut() { + return this._timeScale.canZoomOut() && this._zoomEnabled + } + onPaneTagsChanged() { + this._tagsChanged.fire() + } + panesCollectionChanged() { + return this._panesCollectionChanged + } + dataSourceCollectionChanged() { + return this._dataSourceCollectionChanged + } + symbolSourceResolved() { + return this._dataSourceSymbolResolved + } + sourceProperitesChanged() { + return this._sourceProperitesChanged + } + sourceZOrderChanged() { + return this._sourceZOrderChanged + } + updateCrosshairPositionByOriginCoords() { + const e = this.crossHairSource(), + t = e.pane; + let i = e.originX(), + s = e.originY(); + if (Number.isFinite(i) || (i = e.x, s = e.y), null !== t && Number.isFinite(i) && + Number.isFinite(s)) { + const e = this._timeScale.coordinateToVisibleIndex(i); + let n = NaN; + const o = t.defaultPriceScale(); + if (!o.isEmpty()) { + const e = Object(r.ensureNotNull)(t.mainDataSource()).firstValue(); + null !== e && (n = o.coordinateToPrice(s, Object(r.ensureNotNull)(e))) + } + this.crossHairSource().setPosition(e, n, t) && this._undoModel.chartWidget() + .isActive() && this._syncCrosshair() + } + } + zoomTime(e, t, i) { + if (!this._zoomEnabled) return; + const s = this.timeScale(); + if (s.isEmpty() || 0 === t) return; + const r = s.width(); + e = Math.max(1, Math.min(e, r - 2)), s.zoom(e, t, i), this.recalculateAllPanes(), + this.lightUpdate(), this.recalcVisibleRangeStudies(), this + ._setScalesResetAvailable(!0) + } + linePointBeingEdited() { + return this._linePointBeingEdited + } + linePointBeingChanged() { + return this._linePointBeingChanged + } + dataSources() { + const e = [this.crossHairSource()]; + for (const t of this._panes) + for (const i of t.dataSources()) e.push(i); + return e + } + priceDataSources() { + const e = []; + for (const t of this._panes) + for (const i of t.priceDataSources()) e.push(i); + return e + } + lineToolsGroupModel() { + return this._lineToolsGroupModel + } + restoreLineToolsGroups(e) { + this._lineToolsGroupModel = j.LineToolsGroupModel.fromState(this, e) + } + realignLineTools() { + for (const e of this._panes) e.realignLineTools() && this + ._dataSourceCollectionChanged.fire(e) + } + updateSource(e) { + const t = this._invalidationMaskForSource(e); + null !== t && this.invalidate(t) + } + updateSourcePriceScale(e) { + const t = this._invalidationMaskForSourcePriceScale(e); + null !== t && this.invalidate(t) + } + replaceStudyStub(e, t) { + const i = this.paneForSource(e); + if (null === i) return !1; + const s = e.priceScale(), + r = e.zorder(), + n = e.ownerSource(); + return this.paneForSource(e) === i ? i.replaceSource(e, t, s) : (i.insertDataSource( + t, s, r), this.removeSource(e)), t.setOwnerSource(n), this.dataSources() + .forEach(i => { + i.ownerSource() === e && i.setOwnerSource(t) + }), t.start(), this.recalculatePane(i), this.fullUpdate(), !0 + } + insertStudyStub(e) { + const t = this.mainSeries(), + i = Object(r.ensureNotNull)(this.paneForSource(t)), + s = new p.StudyStub(this, null, e), + n = i.createPriceScaleAtPosition("overlay"); + return i.addDataSource(s, n, !1), this.recalculatePane(i), this.fullUpdate(), s + } + removeStudyStub(e) { + const t = this.dataSourceForId(e); + return null === t ? (oe.logNormal("StudyStub id=" + e + + " is not found in chart model"), !1) : (this.removeSource(t), !0) + } + setHoveredSource(e, t = null) { + const i = this._hoveredSource !== e; + if (!i && this._lastHoveredHittestData === t) return; + this._lastHoveredHittestData = t; + let s = null; + if (this._hoveredSource) { + this._hoveredSource.updateAllViews(), s = new k.InvalidationMask(k + .InvalidationLevel.Cursor); + const e = this._invalidationMaskForSource(this._hoveredSource, k + .InvalidationLevel.Light); + null !== e && s.merge(e) + } + if (this._hoveredSource = e, e) { + e.updateAllViews(), s || (s = new k.InvalidationMask(k.InvalidationLevel + .Cursor)); + const t = this._invalidationMaskForSource(e, k.InvalidationLevel.Light); + null !== t && s.merge(t) + } + s && this.invalidate(s), i && this._hoveredSourceChanged.fire(e) + } + hoveredSource() { + return this._hoveredSource + } + hoveredSourceChanged() { + return this._hoveredSourceChanged + } + lastHittestData() { + return this._lastHoveredHittestData || this.lastSelectedHittestData() + } + lastSelectedHittestData() { + var e; + return this._lastSelectedHittestData || ((null === (e = this + ._customSourceBeingMovedHitTestData) || void 0 === e ? void 0 : e + .beingMoved) ? this._customSourceBeingMovedHitTestData : null) + } + syncTimeWithModel(e, t) { + const i = this.mainSeries().syncModel(); + if (null === i) return; + const s = 1e3 * this.createSyncPoint(Object(r.ensureNotNull)(e.mainSeries() + .syncModel()), i).sourceTimeToTargetTime(t / 1e3), + n = Object(re.get_timezone)(this.timezone()); + let o = Object(re.utc_to_cal)(n, s); + this.mainSeries().isDWM() && (o = i.getSession().spec.correctTradingDay(o), Object( + re.set_hms)(o, 0, 0, 0, 0, Object(re.get_timezone)("Etc/UTC"))), this + ._gotoTimeImpl(o.getTime(), { + centerIfVisible: !1 + }) + } + gotoTime(e) { + return this._gotoTimeImpl(e, { + centerIfVisible: !0 + }) + } + paneForSource(e) { + if (!Object(d.a)(e)) return Array.from(this._customSourcesMap.values()).includes( + e) ? this.paneForSource(this.mainSeries()) : null; + for (let t = this._panes.length - 1; t >= 0; t--) + if (this._panes[t].hasDataSource(e)) return this._panes[t]; + return e instanceof q.BarsMarksContainer ? this.paneForSource(this.mainSeries()) : + null + } + allStudies(e) { + const t = e ? e => Object(M.isStudy)(e) && !Object(M.isESDStudy)(e) : M.isStudy; + return this._getAllSources(t) + } + findNonOverlayStudyWithGroupingKey(e, t) { + const i = void 0 !== t ? [t] : this._panes; + for (const t of i) { + const i = t.dataSources().find(i => Object(M.isStudy)(i) && i.metaInfo() + .groupingKey === e && !t.isOverlay(i)); + if (void 0 !== i) return { + pane: t, + study: i + } + } + return null + } + movePaneUp(e) { + this.movePane(e, e - 1) + } + movePaneDown(e) { + this.movePane(e, e + 1) + } + movePane(e, t) { + const i = this._panes[e]; + this._panes.splice(e, 1), this._panes.splice(t, 0, i), this._panesCollectionChanged + .fire(this._panes), this._onRearrangePanes.fire(), this.invalidate(k + .InvalidationMask.panesOrder()) + } + backgroundColor() { + return this._backgroundColor + } + backgroundTopColor() { + return this._backgroundTopColor + } + backgroundColorAtYPercentFromTop(e) { + const t = this.backgroundColor().value(), + i = this.backgroundTopColor().value(); + if (t === i) return t; + if (e = Math.max(0, Math.min(100, Math.round(100 * e))), null === this + ._gradientColorsCache || this._gradientColorsCache.topColor !== i || this + ._gradientColorsCache.bottomColor !== t) this._gradientColorsCache = { + topColor: i, + bottomColor: t, + colors: new Map + }; + else { + const t = this._gradientColorsCache.colors.get(e); + if (void 0 !== t) return t + } + const s = Object(G.gradientColorAtPercent)(i, t, e / 100); + return this._gradientColorsCache.colors.set(e, s), s + } + backgroundCounterColor() { + const e = this.backgroundColor().value(); + if (void 0 === this._lastBackgroundColor || void 0 === this._lastOriginalColor || + e !== this._lastBackgroundColor) { + const t = Object(o.rgbToBlackWhiteString)(Object(o.parseRgb)(e), 150); + this._lastBackgroundColor = e, this._lastOriginalColor = "black" === t ? + "white" : "black" + } + return this._lastOriginalColor + } + isDark() { + return "white" === this.backgroundCounterColor() + } + defaultResolutions() { + return this.chartApi().defaultResolutions() + } + availableCurrencies() { + const e = this._getAvailableCurrencies(); + return e.length !== this._availableCurrencies.size() && (this._availableCurrencies = + new J(e)), this._availableCurrencies + } + currencyConversionEnabled() { + return this._options.currencyConversionEnabled + } + availableUnits() { + const e = this._getAvailableUnits(); + return this._availableUnits.unitsChanged(e) && (this._availableUnits = new Z(e)), + this._availableUnits + } + unitConversionEnabled() { + return this._options.unitConversionEnabled + } + studyTemplate(e, t, i) { + const s = { + panes: [], + version: this.version() + }; + for (const e of this.panes()) s.panes.push(e.state(!0, !1, !0)); + const r = this.mainSeries(); + return e && (s.symbol = r.symbol(), i && (s.currency = r.currency()), i && (s.unit = + r.unit())), t && (s.interval = r.interval()), s + } + restoreLineToolState(e, t) { + e.restorePoints(t.points, t.indexes || []), e.properties().merge(t.state), e + .restoreData && e.restoreData(t), e.linkKey().setValue(t.linkKey || null), e + .createServerPoints(), this.fullUpdate(); + const i = e.linkKey().value(); + null !== i && Object(F.restoreLineToolState)({ + model: this, + linkKey: i, + state: t + }) + } + updateLineTools() { + for (const e of this.dataSources()) Object(H.isLineTool)(e) && (e + .tryCreateServerPoints(), e.checkAlert && e.checkAlert()) + } + onResetScales() { + return this._resetScales + } + startMovingSources(e, t, i, s, n, o) { + if (this._sourcesBeingMoved = e, this._lineItemBeingMoved = i, this + ._sourcesBeingMoved.forEach(e => { + const a = Object(r.ensureNotNull)(this.paneForSource(e)), + l = Object(H.isLineTool)(e), + c = l && e.linkKey().value(); + if (!1 !== c && null !== c && s.has(c) && l && e.isFixed()) { + const t = Object(r.ensureDefined)(s.get(c)), + l = { + screen: this._percentPositionToPoint(t, a) + }; + e.startMoving(l, i, n, o) + } else e.startMoving(t, i, n, o); + const h = this._paneInvalidationMask(a, k.InvalidationLevel.Light); + this.invalidate(h) + }), !o) { + const s = e.filter(H.isLineTool).filter(e => e.linkKey().value() && e + .isSynchronizable()).map(e => e.linkKey().value()); + if (s.length && t.logical) { + const o = this.externalTimeStamp(t.logical.index), + a = { + linkKeys: s, + model: this, + symbol: this.mainSeries().symbol(), + point: { + price: t.logical.price, + timeStamp: o + }, + itemIndex: null !== i ? i : void 0, + envState: n, + pointPositionPercents: new Map + }; + e.forEach(e => { + if (Object(H.isLineTool)(e)) { + const i = e.linkKey().value(); + if (i && e.isSynchronizable() && e.isFixed()) { + const s = Object(r.ensureNotNull)(this.paneForSource( + e)); + a.pointPositionPercents.set(i, this + ._pointToPercentPosition(Object(r.ensureDefined) + (t.screen), s)) + } + } + }), Object(F.startMovingLineTool)(a) + } + } + F.isToolMovingNow.setValue(!0) + } + moveSources(e, t, i, s) { + if (this._sourcesBeingMoved.filter(e => !e.isLocked || !e.isLocked()).forEach(n => { + const o = Object(H.isLineTool)(n) ? n.linkKey().value() : null; + if (null !== o && t.has(o)) { + const e = Object(r.ensureNotNull)(this.paneForSource(n)), + a = Object(r.ensureDefined)(t.get(o)), + l = { + screen: this._percentPositionToPoint(a, e) + }; + n.move(l, this._lineItemBeingMoved, i, s) + } else n.move(e, this._lineItemBeingMoved, i, s) + }), this.lightUpdate(), !s && e.logical) { + const t = this._sourcesBeingMoved.filter(H.isLineTool).filter(e => e + .isSynchronizable() && !!e.linkKey().value()).map(e => e.linkKey() + .value()), + s = this.externalTimeStamp(e.logical.index), + n = { + linkKeys: t, + model: this, + point: { + price: e.logical.price, + timeStamp: s + }, + envState: i, + pointPositionPercents: new Map + }; + this._sourcesBeingMoved.filter(H.isLineTool).forEach(t => { + if (t.linkKey().value() && t.isSynchronizable() && t.isFixed()) { + const i = Object(r.ensureNotNull)(this.paneForSource(t)); + n.pointPositionPercents.set(t.linkKey().value(), this + ._pointToPercentPosition(Object(r.ensureDefined)(e + .screen), i)) + } + }), Object(F.moveLineTool)(n) + } + } + endMovingSources(e, t) { + const i = this._sourcesBeingMoved.map(i => { + const s = Object(r.ensureNotNull)(this.paneForSource(i)), + n = i.endMoving(e, t), + o = this._paneInvalidationMask(s, k.InvalidationLevel.Light); + return o.invalidateAll(k.InvalidationLevel.Light), this.invalidate(o), n + }), + s = this._sourcesBeingMoved.filter(H.isLineTool).filter(e => e + .isSynchronizable() && !!e.linkKey().value()).map(e => e.linkKey().value()), + n = this._sourcesBeingMoved.filter(H.isLineTool).filter(e => e + .isSynchronizable() && !!e.linkKey).map(e => { + const t = { + points: e.normalizedPoints(), + interval: this.mainSeries().interval() + }; + return e.isFixed() && (t.pointPositionPercents = e + .calcPositionPercents()), t + }); + s.length && Object(F.finishMovingLineTool)({ + linkKeys: s, + model: this, + finalStates: n, + changes: i + }), this._sourcesBeingMoved = [], this._lineItemBeingMoved = null, F + .isToolMovingNow.setValue(!1) + } + sourcesBeingMoved() { + return this._sourcesBeingMoved + } + setMovingCustomSource(e, t) { + this._customSourceBeingMoved = e, this._customSourceBeingMovedHitTestData = null !== + t ? { + beingMoved: !1, + ...t + } : null + } + processingCustomSourceMove() { + null !== this._customSourceBeingMovedHitTestData && (this + ._customSourceBeingMovedHitTestData.beingMoved = !0) + } + customSourceMovingHitTestData() { + return this._customSourceBeingMovedHitTestData + } + customSourceBeingMoved() { + return null !== this._customSourceBeingMovedHitTestData && this + ._customSourceBeingMovedHitTestData.beingMoved ? this._customSourceBeingMoved : + null + } + width() { + return this._width + } + setWidth(e, t) { + this._width = e, this._timeScale.setWidth(e, t); + for (const t of this._panes) t.setWidth(e); + this.recalculateAllPanes(), this.recalcVisibleRangeStudies() + } + setPaneHeight(e, t) { + e.setHeight(t), this.recalculateAllPanes(), this.lightUpdate() + } + isScalesResetAvailableChanged() { + return this._isScalesResetAvailableChanged + } + isScalesResetAvailable() { + return this._isScalesResetAvailable + } + panes() { + return this._panes + } + paneForId(e) { + return this._panes.find(t => t.id() === e) || null + } + createPane(e, t, i) { + const s = this._undoModel.chartWidget(); + s.isMaximizedPane() && s.toggleMaximizePane(); + const r = this._properties.childs().paneProperties; + t && r.merge(t); + const n = new D.Pane(this._timeScale, r, this, i); + return void 0 !== e ? this._panes.splice(e, 0, n) : this._panes.push(n), n + .onTagsChanged().subscribe(this, ce.prototype.onPaneTagsChanged), n + .dataSourcesCollectionChanged().subscribe(this, () => this + ._dataSourceCollectionChanged.fire(n)), n.sourcePropertiesChanged() + .subscribe(this, e => this._sourceProperitesChanged.fire(n, e)), n + .sourceZOrderChanged().subscribe(this, e => this._sourceZOrderChanged.fire(n, + e)), n.symbolSourceResolved().subscribe(this, e => this + ._dataSourceSymbolResolved.fire(n, e)), this._panesCollectionChanged.fire( + this._panes), this.invalidate(k.InvalidationMask.panesOrder()), n + } + removePane(e) { + const t = this._undoModel.chartWidget(); + t.isMaximizedPane() && t.toggleMaximizePane(); + const i = e; + i.destroy(); + const s = this._panes.indexOf(i); - 1 !== s && (this._panes.splice(s, 1), e + .dataSourcesCollectionChanged().unsubscribeAll(this), e + .sourcePropertiesChanged().unsubscribeAll(this), e.onTagsChanged() + .unsubscribeAll(this), e.symbolSourceResolved().unsubscribeAll(this)); + this.crossHairSource().pane === e && this.clearCurrentPosition(), this + ._panesCollectionChanged.fire(this._panes), this.invalidate(k.InvalidationMask + .panesOrder()) + } + changePanesHeight(e, t) { + if (this._panes.length < 2) return; + Object(r.assert)(e >= 0 && e < this._panes.length, "Invalid pane index"); + const i = this._panes[e], + s = this._panes.reduce((e, t) => e + t.stretchFactor(), 0), + n = this._panes.reduce((e, t) => e + t.height(), 0), + o = n - 30 * (this._panes.length - 1); + t = Math.min(o, Math.max(30, t)); + const a = s / n, + l = i.height(); + i.setStretchFactor(t * a); + let c = t - l, + h = this._panes.length - 1; + for (const e of this._panes) + if (e !== i) { + const t = Math.min(o, Math.max(30, e.height() - c / h)); + c -= e.height() - t, h -= 1; + const i = t * a; + e.setStretchFactor(i) + } this.fullUpdate() + } + clearCurrentPosition() { + const e = this.crossHairSource(); + e.clearPosition(), Object(r.ensureNotNull)(e.dataWindowView()).update(); + const t = this._panes; + for (let e = t.length; e--;) { + const i = t[e].dataSources(); + for (let e = i.length; e--;) { + const t = i[e].dataWindowView(); + t && t.update(); + const s = i[e].legendView(); + s && s.update() + } + } + this.invalidate(k.InvalidationMask.cursor()); + const i = this._undoModel.chartWidget(); + i.chartWidgetCollection().syncCrosshair(null, i), this._phantomSourceContainer + .onCursorPositionUpdated() + } + setAndSaveCurrentPosition(e, t, i, s) { + this.crossHairSource().saveOriginCoords(e, t), this.setCurrentPosition(e, t, i, s) + } + setCurrentPosition(e, t, i, s) { + let n = NaN; + const o = this._timeScale.coordinateToVisibleIndex(e), + a = i.defaultPriceScale(); + let l = null; + a.isEmpty() || (l = Object(r.ensureNotNull)(i.mainDataSource()).firstValue(), + null !== l && (n = a.coordinateToPrice(t, l))); + const c = this.crossHairSource(), + h = c.selectPointMode().value(), + u = this.currentTool(), + d = this.mainSeries(); + if (!this._isSettingsExternalPosition && (this._lineBeingCreated || this + ._lineBeingEdited || Object(H.isLineToolName)(u) || Object(F.toolIsMeasure)( + u)) && (n = this._magnet.align(n, o, i), null !== l && c + .saveOriginCoords(c.originX(), a.priceToCoordinate(n, l))), this + ._isTimeScrolling) { + if (!this._isSettingsExternalPosition && h) { + const e = d.bars().firstIndex(), + t = d.bars().lastIndex(); + if (null !== e && null !== t) { + const s = Math.min(Math.max(o, e), t); + s !== o && this._setCorrectedPositionToCrosshair(s, n, l, i) + } + } else c.setPosition(c.index, n, i); + return + } + c.setOnHoveredChartWidget(!0), c.setPosition(o, n, i), Object(r.ensureNotNull)(c + .dataWindowView()).update(); + const p = this._panes; + for (let e = p.length; e--;) { + const t = p[e].dataSources(); + for (let e = t.length; e--;) { + const i = t[e].dataWindowView(); + i && i.update(); + const s = t[e].legendView(); + s && s.update() + } + } + const _ = d.syncModel(); + if (this.crossHairSource().startMeasurePoint() || this._lineBeingCreated ? this + .lightUpdate() : this.invalidate(k.InvalidationMask.cursor()), this + ._lineBeingCreated) { + const e = this._lineBeingCreated.linkKey().value(); + if (!this._isSettingsExternalPosition) { + this._lineBeingCreated.setLastPoint({ + index: o, + price: n + }, s), this._lineBeingCreated.updateAllViews(); + const t = Object(r.ensureNotNull)(this._lineBeingCreated.lastPoint()); + if (t.price === n && t.index === o || this._setCorrectedPositionToCrosshair( + t.index, t.price, l, i), _ && e) { + const i = this._timeScale.points().roughTime(t.index, _.projectTime + .bind(_)); + Object(F.setLineToolLastPoint)({ + model: this, + linkKey: e, + point: { + timeStamp: Object(r.ensureNotNull)(i), + price: t.price + } + }) + } + } + } + if (!this._isSettingsExternalPosition && null !== this._lineBeingEdited && null !== + this._linePointBeingEdited) { + this.changeLinePoint({ + index: o, + price: n + }, s); + const e = this._lineBeingEdited.getPoint(this._linePointBeingEdited); + null !== e && this._setCorrectedPositionToCrosshair(e.index, e.price, l, i) + } + if (!this._isSettingsExternalPosition && h) { + const e = d.bars().firstIndex(), + t = d.bars().lastIndex(); + if (null !== e && null !== t) { + const s = Math.min(Math.max(o, e), t); + s !== o && this._setCorrectedPositionToCrosshair(s, n, l, i) + } + } + this._syncCrosshair(s) + } + setExternalPosition(e, t) { + let i; + const s = this.crossHairSource(); + if (s.setOnHoveredChartWidget(!1), null !== e && Object(z.isNumber)(e.timeStamp)) { + const t = this.mainSeries().syncModel(); + if (t) { + const s = this.createSyncPoint(e.syncModel, t).sourceTimeToTargetTime(e + .timeStamp); + i = this._timeScale.points().roughIndex(s, t.distance.bind(t)) + } + } + if (null !== e && null != i && Number.isFinite(i) && void 0 !== e.price && Number + .isFinite(e.price)) { + this._isSettingsExternalPosition = !0; + const n = Object(r.ensureNotNull)(this.paneForSource(this.mainSeries())), + o = this._timeScale.indexToCoordinate(i), + a = Object(r.ensureNotNull)(n.mainDataSource()).firstValue(); + if (null !== a) { + const i = this.mainSeries().priceScale().priceToCoordinate(e.price, a); + s.clearOriginCoords(), this.setCurrentPosition(o, i, n, t) + } + return s.setOnHoveredChartWidget(!1), void(this._isSettingsExternalPosition = ! + 1) + } + null != i && Number.isFinite(i) ? (s.clearOriginCoords(), s.setPosition(i, NaN, + null)) : (s.clearPosition(), Object(r.ensureNotNull)(s.dataWindowView()) + .update()); + const n = this.dataSources(); + for (let e = n.length; e--;) { + const t = n[e].dataWindowView(); + t && t.update(); + const i = n[e].legendView(); + i && i.update() + } + this.invalidate(k.InvalidationMask.cursor()) + } + startScaleTime(e) { + this._timeScale.startScale(e) + } + scaleTimeTo(e) { + this._timeScale.scaleTo(e), this.recalculateAllPanes(), this.lightUpdate(), this + ._setScalesResetAvailable(!0) + } + endScaleTime() { + this._timeScale.endScale(), this.lightUpdate(), this.recalcVisibleRangeStudies() + } + resetTimeScale() { + this._timeScale.restoreDefault(), this.recalculateAllPanes(), this + .recalcVisibleRangeStudies(), this.lightUpdate(), this._resetScales.fire(), this + ._setScalesResetAvailable(!1) + } + startScalePrice(e, t, i) { + e.startScalePrice(t, i) + } + scalePriceTo(e, t, i) { + e.scalePriceTo(t, i), this.mainSeries().priceScale().isLockScale() ? this + .lightUpdate() : this.invalidate(this._paneInvalidationMask(e, k + .InvalidationLevel.Light)), this._setScalesResetAvailable(!0) + } + endScalePrice(e, t) { + e.endScalePrice(t), this.invalidate(this._paneInvalidationMask(e, k + .InvalidationLevel.Light)) + } + resetPriceScale(e, t) { + this._setScalesResetAvailable(!1), e.resetPriceScale(t), this.invalidate(this + ._paneInvalidationMask(e, k.InvalidationLevel.Light)) + } + restorePriceScaleState(e, t, i) { + e.restorePriceScaleState(t, i), this.invalidate(this._paneInvalidationMask(e, k + .InvalidationLevel.Light)) + } + currentTool() { + return this._currentTool + } + setCurrentTool(e) { + this._currentTool !== e && (Object(H.isLineToolName)(e) && this.selectionMacro( + e => { + e.clearSelection() + }), this._currentTool = e, this._phantomSourceContainer.onToolChanged()) + } + onRearrangePanes() { + return this._onRearrangePanes + } + finishLineTool(e) { + const t = e.linkKey().value(); + Object(F.drawOnAllCharts)().value() && null !== t && e.isSynchronizable() && Object( + F.finishLineTool)({ + linkKey: t, + model: this + }) + } + startChangingLinetool(e, t, i, s, n) { + this._lineBeingEdited = e, this._linePointBeingChanged = t || null, this + ._linePointBeingEdited = void 0 === i ? null : i, F.isToolEditingNow.setValue(! + 0), this._lineBeingEdited.startChanging(i, t, n); + const o = Object(r.ensureNotNull)(this.paneForSource(e)); + this._lineBeingEdited.startDragPoint && void 0 !== i && void 0 !== t && this + ._lineBeingEdited.startDragPoint(i, t), n || void 0 === i || void 0 === t || + this._lineBeingEdited.setPoint(i, t, s, n), this._lineBeingEdited + .updateAllViews(); + const a = this._paneInvalidationMask(o, k.InvalidationLevel.Light); + this.invalidate(a); + const l = e.linkKey().value(); + if (l && e.isSynchronizable() && void 0 !== i && void 0 !== t) { + const e = Object(r.ensureNotNull)(this.externalTimeStamp(t.index)); + Object(F.startChangingLineTool)({ + linkKey: l, + model: this, + symbol: this.mainSeries().symbol(), + point: { + price: t.price, + timeStamp: e + }, + pointIndex: i, + envState: s || null + }) + } + } + createLineTool(e, t, i, s, o, a) { + if (Object(r.assert)(Object(H.isLineToolName)(i), + "Cannot create unknown line tool: " + i), "LineToolExecution" !== i && + Object(c.trackEvent)("drawings", "Study_Drawing_" + i), s) { + const e = s.state(); + s = Object(H.createLineToolProperties)(i, e) + } + const l = Object(H.createLineTool)(i, this, s, null), + h = !l.linkKey().value() && !o; + Object(F.drawOnAllCharts)().value() ? l.linkKey().setValue(o || Object(U.randomHash) + ()) : l.linkKey().setValue(o), a = a || Object(r.ensureNotNull)(e + .mainDataSource()), s || Object(H.prepareLineToolPropertiesByOwnerSource)(l + .properties(), a), l.setOwnerSource(a); + const u = a.priceScale(); + let d; + if (e.addDataSource(l, u, !1), l.isFixed()) { + const i = Object(r.ensureNotNull)(Object(r.ensureNotNull)(e.mainDataSource()) + .firstValue()), + s = this._timeScale.indexToCoordinate(t.index), + o = Object(r.ensureNotNull)(u).priceToCoordinate(t.price, i); + d = l.addFixedPoint(new n.Point(s, o)) + } else d = l.addPoint(t); + return d || (this._lineBeingCreated = l, this._paneBeingCreatedLineOn = e, F + .isToolCreatingNow.setValue(!0)), h && l.enableCurrentIntervalVisibility(), + this.fullUpdate(), l + } + endChangingLinetool(e, t) { + const i = Object(r.ensureNotNull)(this._lineBeingEdited), + s = i.endChanging(!1, e); + this._lineBeingEdited = null, F.isToolEditingNow.setValue(!1), this + ._linePointBeingEdited = null, this._linePointBeingChanged = null, this + .lightUpdate(); + const n = { + points: i.normalizedPoints(), + interval: this.mainSeries().interval() + }, + o = i.linkKey().value(); + null !== o && i.isSynchronizable() && Object(F.finishChangingLineTool)({ + model: this, + linkKey: o, + symbol: this.mainSeries().symbol(), + finalState: n, + changes: s + }) + } + continueCreatingLine(e, t, i, s) { + const n = Object(r.ensureNotNull)(this._lineBeingCreated), + o = n.addPoint(e, t, i); + n.updateAllViews(); + const a = new k.InvalidationMask(k.InvalidationLevel.Light); + return o && (this._paneBeingCreatedLineOn = null, this._lineBeingCreated = null, F + .isToolCreatingNow.setValue(!1)), this.invalidate(a), o + } + cancelCreatingLine() { + if (!this._lineBeingCreated) return; + const e = this._lineBeingCreated; + this.removeSource(this._lineBeingCreated), this._lineBeingCreated = null, this + ._lineCancelled.fire(), F.isToolCreatingNow.setValue(!1), Object(F + .drawOnAllCharts)().value() && e.isSynchronizable() && Object(F + .cancelLineTool)({ + model: this + }) + } + lineBeingCreated() { + return this._lineBeingCreated + } + paneBeingCreatedLineOn() { + return this._paneBeingCreatedLineOn + } + lineCancelled() { + return this._lineCancelled + } + isPhantomLine(e) { + return this._phantomSourceContainer.source() === e + } + changeLinePoint(e, t, i) { + const s = Object(r.ensureNotNull)(this._lineBeingEdited), + n = Object(r.ensureNotNull)(this._linePointBeingEdited); + let o = e.price, + a = e.index; + if (s.setPoint(n, e, t), !i) { + const e = s.getPoint(n); + null !== e && (a = e.index, o = e.price) + } + s.updateAllViews(), this.lightUpdate(); + const l = s.linkKey().value(); + if (!i && null !== l && s.isSynchronizable()) { + const e = Object(r.ensureNotNull)(this._linePointBeingChanged), + i = { + indexesChanged: a !== e.index, + pricesChanged: o !== e.price + }, + c = s.getChangePointForSync(n); + if (null !== c) { + const e = this.externalTimeStamp(a); + null !== e && (o = c.price, Object(F.changeLineTool)({ + linkKey: l, + model: this, + symbol: this.mainSeries().symbol(), + point: { + price: o, + timeStamp: e + }, + envState: t, + changes: i + })) + } + } + } + changeLinePoints(e, t, i) { + const s = e.points(), + n = e.linkKey().value(); + !i && n && e.isSynchronizable() && t.forEach((t, i) => { + const o = s[i], + a = o.price !== t.price, + l = o.index !== t.index; + if (e.getChangePointForSync(i)) { + const e = Object(r.ensureNotNull)(this.externalTimeStamp(t.index)); + Object(F.changeLineTool)({ + linkKey: n, + model: this, + symbol: this.mainSeries().symbol(), + point: { + price: t.price, + timeStamp: e + }, + changes: { + pricesChanged: a, + indexesChanged: l + } + }) + } + }), e.setPoints(t), e.updateAllViews(), this.lightUpdate() + } + addCustomSource(e, t, i = u.CustomSourceLayer.Foreground) { + this._customSourcesMap.has(e) && oe.logWarn( + `Attempt to add the same custom source multiple time "${e}"`), oe.logNormal( + `Adding custom source "${e}"`); + const s = t(e, this); + switch (i) { + case u.CustomSourceLayer.Background: + this._bgCustomSources.push(s); + break; + case u.CustomSourceLayer.Foreground: + this._fgCustomSources.push(s); + break; + case u.CustomSourceLayer.Topmost: + this._topmostCustomSources.push(s); + break; + default: + throw new Error("Unknown custom sources layer " + i) + } + this._allCustomSources.push(s), this._customSourcesMap.set(e, s), this.lightUpdate() + } + removeCustomSource(e) { + this._removeCustomSource(e), this.lightUpdate() + } + hasCustomSource(e) { + return this._customSourcesMap.has(e) + } + customSourceForName(e) { + return this._customSourcesMap.get(e) || null + } + customSourceName(e) { + let t = null; + return this._customSourcesMap.forEach((i, s) => { + i === e && (t = s) + }), t + } + customSources(e) { + switch (e) { + case u.CustomSourceLayer.Background: + return this._bgCustomSources; + case u.CustomSourceLayer.Foreground: + return this._fgCustomSources; + case u.CustomSourceLayer.Topmost: + return this._topmostCustomSources; + default: + return this._allCustomSources + } + } + addMultiPaneSource(e) { + this._multiPaneSources.push(e), this.lightUpdate() + } + removeMultiPaneSource(e) { + const t = this._multiPaneSources.indexOf(e); - 1 === t ? oe.logWarn( + "Attempt to remove multi-pane source which does not exist in the model") : + this._multiPaneSources.splice(t, 1), this.lightUpdate() + } + multiPaneSources(e) { + return this._multiPaneSources.filter(t => !e.hasDataSource(t)) + } + dateTimeFormatter() { + return this._dateTimeFormatter + } + dateFormatter() { + return this._dateFormatter + } + timeFormatter() { + return this._timeFormatter + } + sessions() { + return Object(r.ensureNotNull)(this._sessions) + } + createSessions(e) { + Object(r.assert)(null === this._sessions, "Sessions are already created"), this + .addCustomSource("sessions", (t, i) => (this._sessions = new I(t, i, e), this + ._sessions.start(), this._sessions), u.CustomSourceLayer.Background) + } + createPrePostMarket(e) { + this.addCustomSource("prePostMarket", (t, i) => new PrePostMarket(t, i, e)) + } + theme() { + const e = this.properties().paneProperties.state(); + delete e.topMargin, delete e.bottomMargin; + const t = this.mainSeries().state().state; + t && (delete t.symbol, delete t.interval, delete t.currencyId, delete t.unitId); + const i = { + mainSourceProperties: t, + sessions: this.sessions().properties().state(), + chartProperties: { + paneProperties: e, + scalesProperties: this.properties().scalesProperties.state() + } + }; + return i.version = this.version(), i + } + onChartThemeLoaded() { + return this._chartThemeLoaded + } + chartThemeLoaded() { + this._chartThemeLoaded.fire() + } + shouldBeSavedEvenIfHidden() { + return this._shouldBeSavedEvenIfHidden + } + setShouldBeSavedEvenIfHidden(e) { + this._shouldBeSavedEvenIfHidden = e + } + externalTimeStamp(e) { + const t = this.mainSeries().syncModel(); + return this.timeScale().points().roughTime(e, t && t.projectTime.bind(t)) + } + syncESD() { + null !== this._esdWatcher && this._esdWatcher.syncESDStudies() + } + recalcVisibleRangeStudies(e) { + this._recalcVRStudiesParams.force = this._recalcVRStudiesParams.force || Boolean(e), + this._recalcVisibleRangeStudiesImplDebounced() + } + recalcColorStudies(e) { + this._recalcColorStudiesParams.force = this._recalcColorStudiesParams.force || + Boolean(e), this._recalcColorStudiesImplDebounced() + } + alertsWatcher() { + return this._alertsWatcher + } + showLegend() { + return this._showLegendProperty + } + id() { + return this._id + } + recalculatePriceRangeOnce() { + const e = this.mainSeries(); + for (const t of this._panes) + for (const i of t.priceDataSources()) i.symbolSource() === e && i + .disablePriceRangeReady() + } + invalidate(e) { + var t; + null === (t = this._invalidateHandler) || void 0 === t || t.call(this, e) + } + appliedTimeFrame() { + return this._appliedTimeFrame.appliedTimeFrame() + } + _createESDWatcher() {} + _updateDateTimeFormatter() { + const e = R.dateFormatProperty.value(), + t = new B.DateFormatter(e); + if (this._dateFormatter = t, this.mainSeries().isDWM()) this._dateTimeFormatter = t, + this._timeFormatter = new N.TimeFormatter("%h:%m"); + else { + const t = _.Interval.parse(this.mainSeries().interval()), + i = t.isSeconds() || t.isTicks() ? "%h:%m:%s" : "%h:%m"; + this._dateTimeFormatter = new V.a({ + dateFormat: e, + timeFormat: i, + dateTimeSeparator: " " + }), this._timeFormatter = new N.TimeFormatter(i) + } + } + _setScalesResetAvailable(e) { + this._isScalesResetAvailable !== e && (this._isScalesResetAvailable = e, this + ._isScalesResetAvailableChanged.fire()) + } + _invalidationMaskForSource(e, t = k.InvalidationLevel.Light) { + if (e === this.crossHairSource()) return k.InvalidationMask.cursor(); + if (this._watermarkSource === e) return this._paneInvalidationMask(Object(r + .ensureNotNull)(this.paneForSource(this.mainSeries())), t); + if (-1 !== this._allCustomSources.indexOf(e)) { + const e = new k.InvalidationMask; + return e.invalidateAll(t), e + } + if (!Object(d.a)(e)) return null; + if (e.isMultiPaneEnabled()) return new k.InvalidationMask(t); + const i = this.paneForSource(e); + return null !== i ? this._paneInvalidationMask(i, t) : null + } + _paneInvalidationMask(e, t = k.InvalidationLevel.Light) { + const i = new k.InvalidationMask, + s = this._panes.indexOf(e); + return i.invalidateAllPane(s, t), i + } + _invalidationMaskForSourcePriceScale(e, t = k.InvalidationLevel.Light) { + if (!Object(d.a)(e)) return new k.InvalidationMask(t); + const i = this.paneForSource(e); + if (null === i) return null; + let s = e.priceScale(); + if (null === s) return null; + const r = this._panes.indexOf(i); + let n = i.priceScalePosition(s); + if ("overlay" === n) { + const e = this._panes[r].defaultPriceScale(); + s = e, n = i.priceScalePosition(e) + } + const o = i.priceScaleIndex(s, n); + if (void 0 === o) return null; + const a = new k.InvalidationMask; + return a.invalidatePriceScale(r, n, o, t), a + } + _removeCustomSource(e) { + const t = this._customSourcesMap.get(e); + if (void 0 === t) return void oe.logWarn( + `Attempt to remove custom source which does not exist in the model - "${e}"` + ); + oe.logNormal(`Removing custom source "${e}"`), + this.selectionMacro(e => { + e.removeSourceFromSelection(t) + }), this._hoveredSource === t && this.setHoveredSource(null), this + ._customSourceBeingMoved === t && this.setMovingCustomSource(null, null); + const i = ae(this._bgCustomSources, t), + s = ae(this._fgCustomSources, t), + n = ae(this._topmostCustomSources, t), + o = ae(this._allCustomSources, t); + Object(r.assert)(i || s || n, "Source should be presented in one of the layers"), + Object(r.assert)(o, "Source should be presented in the array"), this + ._customSourcesMap.delete(e), t.destroy() + } + _updateShowLegendProperty() { + const e = this._properties.childs().paneProperties.childs().legendProperties + .childs().showLegend, + t = this._showLegendProperty; + if (e.value()) t.setValue(!0); + else { + for (const e of this._panes) { + let i = 0; + for (const s of e.dataSources()) + if (s !== this.mainSeries() && null !== s.statusView() && (i++, i > 1)) + return void t.setValue(!1) + } + t.setValue(!0) + } + } + _pointToPercentPosition(e, t) { + return { + x: e.x / this._timeScale.width(), + y: e.y / Object(r.ensureNotNull)(Object(r.ensureNotNull)(t.mainDataSource()) + .priceScale()).height() + } + } + _percentPositionToPoint(e, t) { + const i = e.x * this._timeScale.width(), + s = e.y * Object(r.ensureNotNull)(Object(r.ensureNotNull)(t.mainDataSource()) + .priceScale()).height(); + return new n.Point(i, s) + } + _recalcVisibleRangeStudiesImpl(e) { + var t; + if (e.timerId = null, this.timeScale().isEmpty()) return; + const i = this.timeScale().visibleBarsStrictRange(); + if (null === i) return; + const s = this.mainSeries().nearestData(i.firstBar(), Q.PlotRowSearchMode + .NearestRight), + r = this.mainSeries().nearestData(i.lastBar(), Q.PlotRowSearchMode.NearestLeft), + n = this.mainSeries().bars().lastIndex(), + o = s ? s.index : void 0, + a = r ? r.index : void 0, + l = o === e.oldStartVisibleIndex, + c = a === e.oldEndVisibleIndex; + if (l && c && !e.force) return; + e.force = !1, e.oldStartVisibleIndex = void 0 !== o ? o : NaN, e + .oldEndVisibleIndex = void 0 !== a ? a : NaN; + const h = { + first_visible_bar_time: 1e3 * Math.floor(s && s.value ? s.value[0] : 0), + last_visible_bar_time: 1e3 * Math.floor(r && r.value ? r.value[0] : 0), + subscribeRealtime: r && r.index === n + }, + u = null !== (t = e.studies) && void 0 !== t ? t : this.priceDataSources(); + e.studies = void 0; + for (const e of u) + if (Object(M.isStudy)(e)) { + const t = e.metaInfo().inputs, + i = []; + for (const e of t) h.hasOwnProperty(e.id) && i.push(e.id); + const s = e.properties().inputs; + for (const e of i) s[e].setValueSilently(h[e]); + i.length > 0 && s.listeners().fire(s) + } + } + _recalcColorStudiesImpl(e) { + var t; + if (e.timerId = null, this.timeScale().isEmpty()) return; + const i = this.backgroundColor().value(), + s = this.isDark() ? a.colorsPalette["color-cold-gray-200"] : a.colorsPalette[ + "color-cold-gray-900"], + r = i === e.oldBgColor, + n = s === e.oldFgColor; + if (r && n && !e.force) return; + e.force = !1, e.oldBgColor = i, e.oldFgColor = s; + const o = { + chart_bgcolor: i, + chart_fgcolor: s + }, + l = null !== (t = e.studies) && void 0 !== t ? t : this.priceDataSources(); + e.studies = void 0; + for (const e of l) + if (Object(M.isStudy)(e)) { + const t = e.metaInfo(), + i = t.inputs, + s = t.isRGB, + r = []; + for (const e of i) o.hasOwnProperty(e.id) && r.push(e.id); + const n = e.properties().inputs; + for (const e of r) n[e].setValueSilently(s ? Object(G.colorToInteger)(o[ + e]) : o[e]); + r.length > 0 && n.listeners().fire(n) + } + } + _getAllSources(e) { + const t = []; + for (const i of this._panes) { + const s = i.sourcesByGroup().all(); + for (const i of s) e(i) && t.push(i) + } + return t + } + _getAvailableCurrencies() { + return this._options.currencyConversionEnabled ? Object(z.isArray)(this + ._availableCurrenciesList) ? this._availableCurrenciesList : (null !== this + ._availableCurrenciesList || (this._availableCurrenciesList = this + .chartApi().availableCurrencies(), this._availableCurrenciesList.then( + e => { + this._destroyed || (this._availableCurrenciesList = e, this + .lightUpdate()) + }).catch(e => { + oe.logWarn( + "An error occurred while getting currencies config: " + + e) + })), []) : [] + } + _getAvailableUnits() { + return this._options.unitConversionEnabled ? this + ._availableUnitsObject instanceof Promise || null === this + ._availableUnitsObject ? (null !== this._availableUnitsObject || (this + ._availableUnitsObject = this.chartApi().availableUnits(), this + ._availableUnitsObject.then(e => { + this._destroyed || (this._availableUnitsObject = e, this + .lightUpdate()) + }).catch(e => { + oe.logWarn("An error occurred while getting units config: " + e) + })), {}) : this._availableUnitsObject : {} + } + _getBackgroundColor(e) { + const t = this._properties.childs().paneProperties.childs(); + if (t.backgroundType.value() === Y.ColorType.Gradient) { + const i = t.backgroundGradientStartColor.value(), + s = t.backgroundGradientEndColor.value(); + return e ? i : s + } + return t.background.value() + } + _updateBackgroundColor() { + this._backgroundColor.setValue(this._getBackgroundColor()), this._backgroundTopColor + .setValue(this._getBackgroundColor(!0)) + } + _syncCrosshair(e) { + if (!this._isSettingsExternalPosition) { + const t = this._undoModel.chartWidget(), + i = this._undoModel.mainSeries(), + s = i.syncModel(), + r = this._undoModel.crossHairSource(), + n = r.pane; + if (null !== s && null !== n) { + const o = { + timeStamp: this._timeScale.points().roughTime(r.index, s.projectTime + .bind(s)), + syncModel: s + }; + n.mainDataSource() === i && (o.price = r.price, o.symbol = i.symbol()), o + .syncModel = s; + let a = this._lineBeingCreated || null !== this._linePointBeingEdited || + Boolean(this._sourcesBeingMoved.length); + a = a && Object(F.drawOnAllCharts)().value(), t.chartWidgetCollection() + .syncCrosshair(o, t, a, e) + } + this._phantomSourceContainer.onCursorPositionUpdated() + } + } + _gotoTimeImpl(e, t) { + const i = this.timeScale(), + s = this.mainSeries(); + let n; + if (void 0 !== e) { + if (this._scrollingState && this._scrollingState.deferred.reject(), n = Object(h + .createDeferredPromise)(), !s.isDWM()) { + const t = s.symbolInfo(); + if (null !== t) { + let i = this.properties().timezone.value(); + "exchange" === i && (i = t.timezone); + const r = Object(re.cal_to_utc)(Object(re.get_timezone)(i), new Date( + e)), + n = Object(ne.createTimeToBarTimeAligner)(s.interval(), t)(r); + e = Object(re.utc_to_cal)(Object(re.get_timezone)(i), n).getTime() + } + } + this._scrollingState = { + targetDate: e, + deferred: n, + centerIfVisible: t.centerIfVisible + } + } else { + if (!this._scrollingState) return oe.logError( + "scrollTo called without an argument"), Promise.reject(); + e = this._scrollingState.targetDate, n = this._scrollingState.deferred + } + if (void 0 === i.tickMarks().minIndex) return n.resolve(void 0), n.promise; + let o = ((e, t) => { + if ((e => Object(r.ensureNotNull)(i.tickMarks().indexToTime(Object(r + .ensureDefined)(i.tickMarks().minIndex))).valueOf() - e)(t) < + 0) { + let n = i.tickMarks().nearestIndex(t); + const o = s.bars().lastIndex(); + if (null === o) return null; + n = Math.min(n, o); + let a = Object(r.ensureNotNull)(i.tickMarks().indexToTime(n)) + .valueOf(); + for (; a < t && n < o;) n++, a = Object(r.ensureNotNull)(i + .tickMarks().indexToTime(n)).valueOf(); + const l = Object(r.ensureNotNull)(i.visibleBarsStrictRange()), + c = l.lastBar() - l.firstBar(); + return !e && l.contains(n) || i.zoomToBarsRange(n - c / 2, n + c / + 2), { + timestamp: Object(r.ensureNotNull)(i.indexToTimePoint(n)) + } + } + return null + })(this._scrollingState.centerIfVisible, this._scrollingState.targetDate); + if (!o) { + const t = Object(r.ensureDefined)(i.tickMarks().minIndex), + n = Object(r.ensureNotNull)(i.visibleBarsStrictRange()), + a = n.lastBar() - n.firstBar(); + if (s.endOfData()) i.zoomToBarsRange(t - a / 2, t + a / 2), o = { + timestamp: Object(r.ensureNotNull)(i.indexToTimePoint(t)), + eod: !0 + }; + else { + const t = i.tickMarks().estimateLeft(e); + i.requestMoreHistoryPoints(Math.ceil(t + a / 2)) + } + } + return o && (this.fullUpdate(), this._scrollingState = null, n.resolve(o)), n + .promise + } + _setCorrectedPositionToCrosshair(e, t, i, s) { + const n = this.crossHairSource(); + n.setPosition(e, t, s); + const o = this._timeScale.indexToCoordinate(e), + a = s.defaultPriceScale().priceToCoordinate(t, Object(r.ensureNotNull)(i)); + n.saveOriginCoords(o, a) + } + } + }, + gQ5K: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "DateFormatter", (function() { + return n + })); + var s = i("iboI"), + r = i("e1ZQ"); + class n { + constructor(e = "yyyy-MM-dd") { + this._dateFormatFunc = r.b[e] + } + format(e) { + return s.customFormatters && s.customFormatters.dateFormatter ? s.customFormatters + .dateFormatter.format(e) : this._dateFormatFunc(e, !1) + } + formatLocal(e) { + return s.customFormatters.dateFormatter ? s.customFormatters.dateFormatter + .formatLocal ? s.customFormatters.dateFormatter.formatLocal(e) : s + .customFormatters.dateFormatter.format(e) : this._dateFormatFunc(e, !0) + } + } + }, + gWrr: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return n + })); + const s = new WeakMap; + + function r(e, t) { + let i, r; + return i = null == t ? document.documentElement : 9 === t.nodeType ? t.documentElement : t, + s && (r = s.get(i)), r || (r = i.ownerDocument.createRange(), r.selectNodeContents(i), + s && s.set(i, r)), r.createContextualFragment(e) + } + + function n(e, t) { + const i = r(e, t); + let s; + if ("firstElementChild" in i) s = i.firstElementChild; + else { + s = null; + for (let e = 0; e < i.childNodes.length; e++) { + const t = i.childNodes[e]; + if (1 === t.nodeType) { + s = t; + break + } + } + } + return null !== s && i.removeChild(s), s + } + }, + gaBL: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "sourceNewCurrencyOnPinningToPriceScale", (function() { + return r + })); + var s = i("/tGj"); + + function r(e, t, i, r) { + let n = null; + if (i.currencyConversionEnabled() && Object(s.isSymbolSource)(e)) { + const s = i.availableCurrencies(), + o = t.currency(s), + a = e.currency(); + null !== o && null !== o.selectedCurrency && !o.allCurrenciesAreOriginal && o + .selectedCurrency !== a && (r && null === a || null !== a && s.convertible(a)) && ( + n = o.selectedCurrency) + } + return n + } + }, + gf4d: function(e, t, i) { + "use strict"; + var s = i("Eyy1").assert, + r = i("MSvv").StudyLineDataSource, + n = i("tqok").INVALID_TIME_POINT_INDEX, + o = "RegressionTrend@tv-basicstudies"; + + function a(e) { + return void 0 !== e.startPrice && void 0 !== e.endPrice + } + class l extends r { + constructor(e, t, s) { + s = s || e.studyMetaInfoRepository().findByIdSync({ + type: "java", + studyId: o + }); + var n = t || r._createPropertiesFromStudyMetaInfo(s, e.studyVersioning()); + super(e, s, "linreg_", n), this._trendData = null, i.e("lt-pane-views").then(i.t + .bind(null, "IMGS", 7)).then(({ + RegressionTrendPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + formatter() { + s(!1, "This method should never be called") + } + pointsCount() { + return 2 + } + clearData() { + this._trendData = null, super.clearData() + } + state(e) { + var t = r.prototype.state.call(this, e); + return e ? Object.assign({}, t, { + nonseriesdata: this._trendData + }) : t + } + restoreData(e) { + super.restoreData(e), this._trendData = e.nonseriesdata ? e.nonseriesdata : null + } + startIndex() { + if (null === this._trendData || null === this._indexes) return null; + var e = this._indexes[this._trendData.startIndex]; + return e !== n ? e : null + } + endIndex() { + if (null === this._trendData || null === this._indexes) return null; + var e = this._indexes[this._trendData.endIndex]; + return e !== n ? e : null + } + baseLine() { + return null === this._trendData ? null : this._trendData.baseLine + } + downLine() { + return null === this._trendData ? null : this._trendData.downLine + } + upLine() { + return null === this._trendData ? null : this._trendData.upLine + } + pearsons() { + return null === this._trendData ? null : this._trendData.pearsons + } + recalcStudyIfNeeded() { + this._onStudyInputsMayChange() + } + _studyInputs(e) { + s(2 === e.length, "all the line tool points should be defined"); + var t = e[0], + i = e[1]; + if (t.index === i.index) return null; + const r = this._getPointTime(t.index <= i.index ? t : i, !0), + n = this._getPointTime(i.index >= t.index ? i : t, !0); + if (null === r || null === n) return this._subscribeApplyInputsOnSeriesCompleted(), + null; + var o = 1e3 * r, + a = 1e3 * n; + return { + "upper diviation": this.properties().inputs["upper diviation"].value(), + "lower diviation": this.properties().inputs["lower diviation"].value(), + "use upper diviation": this.properties().inputs["use upper diviation"].value(), + "use lower diviation": this.properties().inputs["use lower diviation"].value(), + "first bar time": o, + "last bar time": a, + source: this.properties().inputs.source.value() + } + } + _onDataUpdated(e, t, i) { + null !== t && (t.indexes_replace || (this._trendData = t.data), this._indexes = i, + super._onDataUpdated(e, t, i)) + } + _updateAnchorsPrice() { + !this._trendData || TradingView.isNaN(this._trendData.baseLine.startPrice) || + TradingView.isNaN(this._trendData.baseLine.endPrice) || (this._points[0].price = + this._trendData.baseLine.startPrice, this._points[1].price = this._trendData + .baseLine.endPrice) + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(61), i.e(62), i.e( + "study-property-pages-with-definitions")]).then(i.bind(null, "4lou"))) + .RegressionTrendDefinitionsViewModel + } + _isReady() { + return this._trendData && void 0 !== this._trendData.startIndex && void 0 !== this + ._trendData.endIndex && a(this._trendData.upLine) && a(this._trendData + .baseLine) && a(this._trendData.downLine) + } + static createProperties(e) { + return r._createPropertiesFromStudyIdAndState(o, e) + } + static createPropertiesFromStudyMetaInfoAndState(e, t, i, s) { + return r.createPropertiesFromStudyMetaInfoAndState(e, t, i, s) + } + static studyId() { + return o + } + cloneable() { + return !1 + } + } + l.prototype.version = 2, t.LineToolRegressionTrend = l + }, + gvrv: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return m + })); + var s = i("Eyy1"), + r = i("aIyQ"), + n = i.n(r), + o = i("k9/m"), + a = i("hsV8"), + l = i("jy4L"), + c = i("w4Ji"), + h = i("jenN"), + u = i("txPx"); + const d = Object(u.getLogger)("Chart.StudyDataSource"); + var p, _; + ! function(e) { + e[e.Undefined = 0] = "Undefined", e[e.Loading = 1] = "Loading", e[e.Completed = 2] = + "Completed", e[e.Error = 3] = "Error" + }(p || (p = {})), + function(e) { + e[e.Idle = 0] = "Idle", e[e.AwaitingConnection = 1] = "AwaitingConnection", e[e + .AwaitingParent = 2] = "AwaitingParent", e[e.AwaitingFirstDataUpdate = 3] = + "AwaitingFirstDataUpdate", e[e.Active = 4] = "Active" + }(_ || (_ = {})); + class m { + constructor(e, t, i, s) { + this._inputs = null, this._status = _.Idle, this._studyId = null, this + ._turnaroundCounter = 1, this._studyStatus = { + type: p.Undefined + }, this._studyStatusChanged = new n.a, this._graphics = new h.LiveStudyGraphics, + this._dataCleared = new n.a, this._dataUpdated = new n.a, this + ._boundOnGatewayIsConnectedChanged = this._onGatewayIsConnectedChanged.bind( + this), this._ongoingDataUpdate = Promise.resolve(), this._gateway = e, this + ._metaInfo = s, this._seriesSource = t, this._turnaroundPrefix = i, this + ._plots = new o.PlotList(Object(c.studyPlotFunctionMap)(s), c + .studyEmptyPlotValuePredicate), this._gateway.isConnected().subscribe(this + ._boundOnGatewayIsConnectedChanged) + } + destroy() { + this.stop(), this._gateway.isConnected().unsubscribe(this + ._boundOnGatewayIsConnectedChanged), this._dataUpdated.destroy(), this + ._dataCleared.destroy(), this._studyStatusChanged.destroy() + } + metaInfo() { + return this._metaInfo + } + inputs() { + return this._inputs + } + setInputs(e) { + this._inputs = e, null !== this._studyId && (this._turnaroundCounter++, this + ._onStudyStatusChangedTo({ + type: p.Undefined + }), this._gateway.modifyStudy(this._studyId, this._turnaround(), e, this + ._onMessage.bind(this)), this._status === _.Active && this + ._changeStatusTo(_.AwaitingFirstDataUpdate)) + } + isStarted() { + return this._status !== _.Idle + } + isActive() { + return this._status === _.Active + } + start() { + this.isStarted() ? d.logNormal( + "start: data source is already started, nothing to do") : (Object(s.assert)( + null !== this._inputs, + "Inputs should be defined when starting a study data source"), this + ._gateway.isConnected().value() ? this._createStudy() : this + ._changeStatusTo(_.AwaitingConnection)) + } + stop() { + this.isStarted() ? (null !== this._studyId && (this._gateway.removeStudy(this + ._studyId), this._studyId = null, this._onStudyStatusChangedTo({ + type: p.Undefined + })), this._changeStatusTo(_.Idle)) : d.logNormal( + "stop: data source is already stopped, nothing to do") + } + studyId() { + return this._studyId + } + studyStatus() { + return this._studyStatus + } + studyStatusChanged() { + return this._studyStatusChanged + } + plots() { + return this._plots + } + graphics() { + return this._graphics + } + clearData() { + this._plots.clear(), this._graphics.clear(), this._dataCleared.fire() + } + stopAndStealData() { + Object(s.assert)(this._status === _.Active, + "Couldn't steal data from non-active data source"), this.stop(); + const e = this._plots, + t = this._graphics.extract(); + return this._plots = new o.PlotList(Object(c.studyPlotFunctionMap)(this._metaInfo), + c.studyEmptyPlotValuePredicate), { + plots: e, + graphics: t + } + } + dataCleared() { + return this._dataCleared + } + dataUpdated() { + return this._dataUpdated + } + moveData(e) { + this._ongoingDataUpdate = this._ongoingDataUpdate.then(() => { + this._plots.move(e) + }) + } + _changeStatusTo(e) { + Object(s.assert)(this._status !== e, + "Source and destination status should be distinct"), d.logNormal( + `Status changed from ${_[this._status]} to ${_[e]}`), this._status = e + } + _createStudy() { + const e = this._seriesSource.instanceId(); + null !== e ? this._createStudyUsingParentId(e) : (this._changeStatusTo(_ + .AwaitingParent), this._seriesSource.dataEvents().completed().subscribe( + this, this._onSeriesCompleted, !0)) + } + _createStudyUsingParentId(e) { + Object(s.assert)(this._status !== _.Active, + 'Status should not be "Active" when creating a study'), Object(s.assert)( + this._studyStatus.type === p.Undefined, + 'Study status should be "Undefined" when creating a study'), Object(s + .assert)(null === this._studyId, + "Study id should be empty when creating a study"), this._studyId = Object(l + .makeNextStudyId)(), this._gateway.createStudy(this._studyId, this + ._turnaround(), e, this._metaInfo.fullId + ("tv-basicstudies" === this + ._metaInfo.packageId ? "" : "!"), Object(s.ensureNotNull)(this._inputs), + this._onMessage.bind(this)), this._changeStatusTo(_.AwaitingFirstDataUpdate) + } + _onGatewayIsConnectedChanged(e) { + e ? this._onGatewayConnected() : this._onGatewayDisconnected() + } + _onGatewayConnected() { + this._status === _.AwaitingConnection && this._createStudy() + } + _onGatewayDisconnected() { + this._status !== _.Idle && this._status !== _.AwaitingConnection && (this._studyId = + null, this._changeStatusTo(_.AwaitingConnection), this._studyStatus.type !== + p.Undefined && this._onStudyStatusChangedTo({ + type: p.Undefined + })), this._turnaroundCounter = 1 + } + _onSeriesCompleted() { + this._status === _.AwaitingParent && this._createStudyUsingParentId(Object(s.ensure) + (this._seriesSource.instanceId())) + } + _onStudyStatusChangedTo(e) { + const t = this._studyStatus; + this._studyStatus = e, d.logNormal( + `Study status type changed from ${p[t.type]} to ${p[e.type]}`), this + ._studyStatusChanged.fire(t, e) + } + _onMessage(e) { + if ("data_update" === e.method) { + const { + customId: t, + turnaround: i, + plots: r, + nonseries: n + } = e.params; + t === this._studyId && this._checkTurnaround(i) && this._onDataUpdate(r, Object( + s.ensureDefined)(n)) + } else if ("study_loading" === e.method) { + const [t, i, s] = e.params; + t === this._studyId && this._checkTurnaround(i) && this._onStudyLoading(s) + } else if ("study_completed" === e.method) { + const [t, i, s] = e.params; + t === this._studyId && this._checkTurnaround(i) && this._onStudyCompleted(s) + } else if ("study_error" === e.method) { + const [t, i, s, r, n] = e.params; + t === this._studyId && this._checkTurnaround(i) && this._onStudyError(s, r, n) + } else "clear_data" === e.method && this._checkTurnaround(e.params.turnaround) && + this.clearData() + } + _onDataUpdate(e, t) { + const i = Object(a.unpackNonSeriesData)(t.d); + return this._ongoingDataUpdate = this._ongoingDataUpdate.then(() => i, () => i) + .then(this._onDataUnpacked.bind(this, e, t.indexes)), this._ongoingDataUpdate + } + _onDataUnpacked(e, t, i) { + this._status !== _.Idle && (this._status === _.AwaitingFirstDataUpdate && (this + ._changeStatusTo(_.Active), this.clearData()), this._mergePlots(e), + null !== i && (i.indexes_replace ? (Object(s.assert)("nochange" !== t), this + ._graphics.replaceIndexesTo(t)) : ("nochange" !== t && this + ._graphics.replaceIndexesTo(t), + void 0 !== i.graphicsCmds && this._graphics.processCommands(i + .graphicsCmds, this._metaInfo.graphics))), this._dataUpdated.fire(e, + i, t)) + } + _onStudyLoading(e) { + this._onStudyStatusChangedTo({ + type: p.Loading, + startTime: Date.now() + }) + } + _onStudyError(e, t, i) { + this.clearData(); + const s = "string" == typeof e ? { + error: e.split(":", 2)[0] + } : e; + this._onStudyStatusChangedTo({ + type: p.Error, + errorDescription: s + }) + } + _onStudyCompleted(e) { + this._onStudyStatusChangedTo({ + type: p.Completed + }) + } + _mergePlots(e) { + this._plots.merge(e) + } + _turnaround() { + return `${this._turnaroundPrefix}${this._turnaroundCounter}` + } + _checkTurnaround(e) { + const t = this._turnaround(); + return e === t || e === this._seriesSource.turnaround() || e === + `${this._seriesSource.turnaround()}_${t}` + } + } + }, + gyZD: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PaneRendererLine", (function() { + return l + })); + var s = i("aO4+"), + r = i("GEp6"), + n = i("VdBB"), + o = i("jFln"), + a = i("Zp/P"); + class l { + constructor(e) { + this._data = e + } + hitTest(e, t) { + const i = Object(a.interactionTolerance)().series + this._data.lineWidth / 2; + let o = 0, + l = this._data.items.length - 1; + for (; l - o > 2;) { + const t = Math.round((l + o) / 2); + this._data.items[t].x <= e.x ? o = t : l = t + } + o = Math.max(1, o - 1), l = Math.min(this._data.items.length - 1, l + 1); + for (let t = o; t <= l; ++t) { + const o = this._data.items[t - 1], + a = this._data.items[t], + l = o.x, + c = a.x; + if (Object(r.distanceToSegment)(new s.Point(l, o.y), new s.Point(c, a.y), new s + .Point(e.x, e.y)).distance <= i) return this._data.hittest ? this._data + .hittest : new n.HitTestResult(n.HitTestResult.REGULAR) + } + return null + } + draw(e, t) { + e.save(), e.scale(t.pixelRatio, t.pixelRatio), e.lineCap = "square", e.lineJoin = + "round", e.strokeStyle = this._data.lineColor, e.fillStyle = this._data + .lineColor, e.lineWidth = this._data.lineWidth, Object(o.setLineStyle)(e, this + ._data.lineStyle), Object(a.setValidLineStyle)(e, this._data.lineStyle), + this._data.simpleMode ? this._drawSimpleMode(e, t.pixelRatio) : this._drawLines( + e), e.restore() + } + _drawSimpleMode(e, t) { + if (e.beginPath(), this._walkLine(e, this._data.items, !1, NaN), e.stroke(), this + ._data.withMarkers) { + e.save(), e.scale(1 / t, 1 / t); + const i = Math.max(1, Math.floor(t)) % 2 / 2, + s = (this._data.lineWidth + 2) * t + i, + r = 2 * Math.PI; + e.beginPath(); + for (let n = this._data.items.length; n--;) { + const o = this._data.items[n]; + if (o) { + const n = Math.round(o.x * t) + i, + a = o.y * t; + e.moveTo(n, a), e.arc(n, a, s, 0, r) + } + } + e.fill(), e.restore() + } + } + _walkLine(e, t, i, s) { + if (!t) return; + const r = .25 * this._data.barSpacing; + let n, o, l, c, h; + const u = a.coordinateIsValid; + for (let e = 0; e < t.length; e++) { + const i = t[e]; + if (u(i.y)) { + o = i, n = e; + break + } + } + if (void 0 !== n && void 0 !== o) + for (let o = n; o < t.length; o++) { + c = t[o], h = t[o + 1] || {}; + const a = Math.round(c.x); + if (u(c.y)) + if (l && u(l.y)) e.lineTo(a, c.y), i && !u(h.y) && e.lineTo(a, s); + else if (h && u(h.y)) i ? (o !== n && e.lineTo(a, s), e.lineTo(a, c + .y)) : e.moveTo(a, c.y); + else if (i) { + if (0 === o) continue; + o !== n && e.lineTo(a - r, s), e.lineTo(a - r, c.y), e.lineTo(a + r, c + .y), e.lineTo(a + r, s) + } else e.moveTo(a - r, c.y), e.lineTo(a + r, c.y); + l = c + } + } + _drawLines(e) { + if (!this._data.items.length) return; + let t, i, s; + const r = .25 * this._data.barSpacing, + n = a.coordinateIsValid; + e.beginPath(); + const o = this._data.items[0]; + o && e.moveTo(o.x, o.y); + let l, c = e.strokeStyle, + h = e.lineWidth; + for (let o = 1; o < this._data.items.length; ++o) { + let _, m, f; + t = this._data.items[o - 1], i = this._data.items[o], s = this._data.items[o + + 1], i.style && !this._data.forceLineColor ? (_ = i.style.color, m = i + .style.width, f = i.style.style) : (_ = this._data.lineColor, m = this + ._data.lineWidth, f = this._data.lineStyle), this._data + .ignorePaletteLineWidth && (m = this._data.lineWidth); + (_ !== c || m !== h || f !== l) && (c = _, h = m, l = f, e.stroke(), e + .beginPath(), e.strokeStyle = _, e.lineWidth = m, Object(a + .setValidLineStyle)(e, f), e.moveTo(t.x, t.y)), u = t, p = s, n((d = i) + .y) && (n(u.y) ? e.lineTo(d.x, d.y) : p && n(p.y) ? e.moveTo(d.x, d.y) : + (e.moveTo(d.x - r, d.y), e.lineTo(d.x + r, d.y))) + } + var u, d, p; + e.stroke() + } + } + }, + gzUS: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PointsetsManager", (function() { + return o + })); + var s = i("LxhU"), + r = i("txPx"); + const n = Object(r.getLogger)("ChartApi.PointsetsManager"); + class o { + constructor() { + this._pointsetsDataBySymbol = new Map + } + destroy() { + this._pointsetsDataBySymbol.clear() + } + createPointset(e, t, i, s, r) { + let o = this._pointsetsDataBySymbol.get(t); + void 0 === o && (o = new Map, this._pointsetsDataBySymbol.set(t, o)); + const a = []; + for (const t of s) { + const [i, s] = t; + "number" != typeof i || Number.isNaN(i) ? n.logWarn( + `Pointset time is invalid: id=${e}, ${i} of type ${typeof i}`) : a + .push({ + point: t, + extrapolation: r.extrapolateTimeWithOffsetToTime(1e3 * i, s) + }) + } + s.length === a.length && o.set(e, { + resolution: i, + points: a + }) + } + removePointset(e) { + const t = []; + this._pointsetsDataBySymbol.forEach((i, s) => { + i.delete(e), 0 === i.size && t.push(s) + }); + for (const e of t) this._pointsetsDataBySymbol.delete(e) + } + invalidatePointsetsForSymbol(e, t) { + const i = this._pointsetsDataBySymbol.get(e); + void 0 !== i && i.forEach((e, i) => { + if (s.Interval.isEqual(e.resolution, t)) + for (const t of e.points) null !== t.extrapolation && t + .extrapolation.exact && (t.extrapolation.exact = !1) + }) + } + getUpdatesForSymbol(e, t, i, s) { + const r = new Map, + n = this._pointsetsDataBySymbol.get(e); + return void 0 !== n && n.forEach((e, n) => { + const o = this._refreshPointsetData(e, t, i, s); + null !== o && r.set(n, o) + }), r + } + _refreshPointsetData(e, t, i, r) { + if (s.Interval.isEqual(e.resolution, t)) + for (let t = 0; t < e.points.length; ++t) { + const s = e.points[t]; + if (null !== s.extrapolation && s.extrapolation.exact) continue; + const [r, n] = s.point; + s.extrapolation = i.extrapolateTimeWithOffsetToTime(1e3 * r, n) + } + const o = []; + for (let i = 0; i < e.points.length; ++i) { + const s = e.points[i]; + if (null === s.extrapolation) return null; + const a = r.indexOfTime(s.extrapolation.timeMs); + if (null === a) return n.logWarn( + `Cannot get index of time: time=${s.extrapolation.timeMs}, ${e.resolution} -> ${t}` + ), null; + o.push({ + index: i, + value: [a.index, a.timeMs / 1e3] + }) + } + return o + } + } + }, + h24c: function(e, t, i) { + "use strict"; + var s = i("Kxc7"), + r = i("pPtI"), + n = i("PT1i"), + o = i("LxhU"); + i.d(t, "d", (function() { + return a + })), i.d(t, "c", (function() { + return l + })), i.d(t, "a", (function() { + return c + })), i.d(t, "b", (function() { + return h + })); + new RegExp("^quandl", "i"); + + function a(e) { + let t; + t = /^[,\s]*(\d*)\s*([hdwmst]?)\s*$/i; + const i = t.exec(e) || [], + s = ~~i[1], + r = i[2] && i[2].toUpperCase() || null, + n = { + qty: !s && r ? 1 : s, + unit: r + }; + return n.error = !s && !r, n.intraday = !(n.error || n.unit && "H" !== n.unit && "S" !== n + .unit && "T" !== n.unit), n + } + + function l(e) { + if (s.enabled("allow_supported_resolutions_set_only")) { + const t = o.Interval.normalize(e); + return null !== t && Object(r.isAvailable)(t) + } { + const t = a(e); + if (t.error) return !1; + if (t.intraday) return n.linking.intraday.value(); { + const e = n.linking.supportedResolutions.value(); + return !e || null !== t.unit && !!~e.indexOf(t.unit) + } + } + } + + function c() { + let e = !1; + return s.enabled("show_spread_operators") && (e = !0), e + } + + function h(e) { + return !e.ctrlKey && (!e.metaKey && (!!e.charCode && (!(!e.which || e.which <= 32) && ( + null === e.target || !/^(input|textarea)$/i.test(e.target.tagName))))) + } + }, + hBTJ: function(e, t, i) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.intersectPolygons = t.intersectPolygonAndHalfplane = t.intersectRayAndBox = t + .intersectLineAndBox = t.intersectLineSegments = t.intersectLines = t + .intersectLineSegmentAndBox = void 0; + var s = i("Eyy1"), + r = i("aO4+"), + n = i("GEp6"), + o = i("f6yo"); + + function a(e, t) { + var i = e.A, + s = t.A, + n = e.B, + o = t.B, + a = e.C, + l = t.C, + c = i * o - s * n; + if (Math.abs(c) < 1e-6) return null; + var h = (n * l - o * a) / c, + u = (s * a - i * l) / c; + return new r.Point(h, u) + } + + function l(e, t, i, s) { + var r = function(e, t, i, s) { + var r = t.subtract(e), + n = s.subtract(i), + o = r.x * n.y - r.y * n.x; + if (Math.abs(o) < 1e-6) return null; + var a = e.subtract(i); + return (a.y * n.x - a.x * n.y) / o + }(e, t, i, s); + if (null === r) return null; + var o = t.subtract(e).scaled(r).add(e), + a = n.distanceToSegment(i, s, o); + return Math.abs(a.distance) < 1e-6 ? r : null + } + + function c(e, t) { + for (var i = 0, s = e; i < s.length; i++) { + var n = s[i]; + if (r.equalPoints(n, t)) return !1 + } + return e.push(t), !0 + } + + function h(e, t) { + return !(e.length > 0 && (r.equalPoints(e[e.length - 1], t) || r.equalPoints(e[0], t))) && ( + e.push(t), !0) + } + + function u(e, t) { + for (var i = [], s = 0; s < e.length; ++s) { + var n = e[s], + l = e[(s + 1) % e.length], + c = r.lineThroughPoints(n, l); + if (o.pointInHalfplane(n, t)) { + if (h(i, n), !o.pointInHalfplane(l, t)) null !== (u = a(c, t.edge)) && h(i, u) + } else if (o.pointInHalfplane(l, t)) { + var u; + null !== (u = a(c, t.edge)) && h(i, u) + } + } + return i.length >= 3 ? i : null + } + t.intersectLineSegmentAndBox = function(e, t) { + var i = e[0].x, + s = e[0].y, + n = e[1].x, + o = e[1].y, + a = t.min.x, + l = t.min.y, + c = t.max.x, + h = t.max.y; + + function u(e, t, i, s, r, n) { + var o = 0; + return e < i ? o |= 1 : e > r && (o |= 2), t < s ? o |= 4 : t > n && (o |= 8), o + } + for (var d = u(i, s, a, l, c, h), p = u(n, o, a, l, c, h), _ = !1, m = 0;;) { + if (m > 1e3) throw new Error("Cohen - Sutherland algorithm: infinity loop"); + if (m++, !(d | p)) { + _ = !0; + break + } + if (d & p) break; + var f = d || p, + g = void 0, + b = void 0; + 8 & f ? (g = i + (n - i) * (h - s) / (o - s), b = h) : 4 & f ? (g = i + (n - i) * ( + l - s) / (o - s), b = l) : 2 & f ? (b = s + (o - s) * (c - i) / (n - i), g = + c) : (b = s + (o - s) * (a - i) / (n - i), g = a), f === d ? d = u(i = g, + s = b, a, l, c, h) : p = u(n = g, o = b, a, l, c, h) + } + return _ ? r.equalPoints(r.point(i, s), r.point(n, o)) ? r.point(i, s) : r.lineSegment(r + .point(i, s), r.point(n, o)) : null + }, t.intersectLines = a, t.intersectLineSegments = l, t.intersectLineAndBox = function(e, + t) { + var i = t.min.x, + n = t.min.y, + o = t.max.x, + a = t.max.y; + if (0 === e.A) { + var l = -e.C / e.B; + return n <= l && l <= a ? r.lineSegment(r.point(i, l), r.point(o, l)) : null + } + if (0 === e.B) { + var h = -e.C / e.A; + return i <= h && h <= o ? r.lineSegment(r.point(h, n), r.point(h, a)) : null + } + var u = [], + d = function(t) { + var i = function(e, t) { + return -(e.C + e.A * t) / e.B + }(e, t); + n <= i && i <= a && c(u, new r.Point(t, i)) + }, + p = function(t) { + var s = function(e, t) { + return -(e.C + e.B * t) / e.A + }(e, t); + i <= s && s <= o && c(u, new r.Point(s, t)) + }; + switch (d(i), p(n), d(o), p(a), u.length) { + case 0: + return null; + case 1: + return u[0]; + case 2: + return r.equalPoints(u[0], u[1]) ? u[0] : r.lineSegment(u[0], u[1]) + } + return s.assert(!1, "We should have at most two intersection points"), null + }, t.intersectRayAndBox = function(e, t, i) { + var s = l(e, t, i.min, new r.Point(i.max.x, i.min.y)), + n = l(e, t, new r.Point(i.max.x, i.min.y), i.max), + a = l(e, t, i.max, new r.Point(i.min.x, i.max.y)), + c = l(e, t, new r.Point(i.min.x, i.max.y), i.min), + h = []; + if (null !== s && s >= 0 && h.push(s), null !== n && n >= 0 && h.push(n), null !== a && + a >= 0 && h.push(a), null !== c && c >= 0 && h.push(c), 0 === h.length) return null; + h.sort((function(e, t) { + return e - t + })); + var u = o.pointInBox(e, i) ? h[0] : h[h.length - 1]; + return e.addScaled(t.subtract(e), u) + }, t.intersectPolygonAndHalfplane = u, t.intersectPolygons = function(e, t) { + for (var i = e, s = 0; s < t.length && null !== i; ++s) { + var n = t[s], + o = t[(s + 1) % t.length], + a = t[(s + 2) % t.length], + l = r.lineThroughPoints(n, o); + i = u(i, r.halfplaneThroughPoint(l, a)) + } + return i + } + }, + hGf4: function(e, t, i) { + "use strict"; + (function(e, t) { + var s = i("UXvI").default, + r = i("hbEN").default, + n = i("kcTO").PriceFormatter; + const { + uniq: o + } = i("L6rT"); + var a, l = i("e3/o"), + c = i("i/Bj").parseUpdateMode, + h = i("FIi8").deepExtend; + + function u(t, i) { + this.options = Object.assign({ + throttleTimeout: 125 + }, i), this._connected = !1, this._symbol_data = {}, this._subscriptions = {}, + this.onConnect = new e, this.onDisconnect = new e, this._quoteApi = new a(window + .ChartApiInstance), this._type = t || "full", this._delayUpdateFastSymbols = + r(this._updateFastSymbols, 250), this._throttledSymbolData = {}, this + ._formatterValuesCache = {}, this._waitingForFormatters = {}, this + ._snapshotValuesCache = {}, this._waitingForSnapshot = {}, this.connect() + } + a = i("wi9r"), u.prototype.destroy = function() { + this._quoteApi.destroy(), this._quoteApi = null, this._connected = !1, this + .onDisconnect.fire() + }, u.prototype.typeFields = {}, u.prototype.typeFields.simple = [ + "base-currency-logoid", "ch", "chp", "currency-logoid", "currency_code", + "current_session", "description", "exchange", "format", "fractional", + "is_tradable", "language", "local_description", "logoid", "lp", "lp_time", + "minmov", "minmove2", "original_name", "pricescale", "pro_name", "short_name", + "type", "update_mode", "volume" + ], u.prototype.typeFields.simpleDetailed = [].concat(u.prototype.typeFields.simple, + ["ask", "bid", "fundamentals", "high_price", "is_tradable", "low_price", + "open_price", "prev_close_price", "rch", "rchp", "rtc", "rtc_time", + "status", "basic_eps_net_income", "beta_1_year", + "earnings_per_share_basic_ttm", "industry", "market_cap_basic", + "price_earnings_ttm", "sector", "volume", "dividends_yield", "timezone" + ]), u.prototype.typeFields.full = [], u.prototype.typeFields.watchlist = [] + .concat(u.prototype.typeFields.simple, ["rchp", "rtc", "country_code", + "provider_id" + ]), u.prototype.typeFields.portfolio = ["pro_name", "short_name", + "exchange", "description", "sector", "type", "currency_code", "currency_id", + "ch", "chp", "logoid", "currency-logoid", "base-currency-logoid", + "earnings_per_share_forecast_next_fq", "earnings_release_next_date", + "earnings_release_date", "earnings_per_share_fq", "lp", "volume", + "average_volume", "market_cap_basic", "total_revenue", + "earnings_per_share_basic_ttm", "price_earnings_ttm", "beta_1_year", + "dps_common_stock_prim_issue_fy", "dividends_yield" + ], u.prototype.connect = function(e) { + this._quoteApi.connect(this.quoteHandler.bind(this)) + }, + u.prototype.quoteHandler = function(e) { + var t = e.method, + i = e.params; + switch (t) { + case "connected": + this._connected || (this._connected = !0, this.onConnected()); + break; + case "quote_list_fields": + break; + case "quote_symbol_data": + this._connected && this.onSymbolData(i[0]); + break; + case "quote_completed": + this._connected && this.onSymbolData({ + symbolname: i[0], + complete: performance.now(), + values: {} + }); + break; + case "disconnected": + this._connected && (this._connected = !1, this.onDisconnect.fire()) + } + }, u.prototype.onConnected = function() { + this.setFields(); + var e = Object.keys(this._symbol_data); + e.length && (this._quoteApi.quoteAddSymbols(e, { + forcePermission: !0 + }), this._delayUpdateFastSymbols()), this.onConnect.fire() + }, u.prototype.setFields = function() { + var e = u.prototype.typeFields[this._type]; + e && e.length && this._quoteApi.quoteSetFields(e) + }, u.prototype.onSymbolData = function(e) { + var t = e.symbolname, + i = this._throttledSymbolData[t]; + i || (i = this._throttledSymbolData[t] = { + fnDispatch: s(this.dipatchSymbolData.bind(this), this.options + .throttleTimeout) + }), i.cache ? h(i.cache, e) : i.cache = e, i.fnDispatch(t) + }, u.prototype._parseUpdateMode = function(e) { + var t = c(e.update_mode); + null !== t && (e.update_mode = t.mode, e.update_mode_seconds = t.interval) + }, u.prototype.dipatchSymbolData = function(e) { + var t = this._symbol_data[e], + i = this._throttledSymbolData[e].cache; + if (delete this._throttledSymbolData[e].cache, this._symbol_data[e]) + for (var s in h(t, i), t.values && this._parseUpdateMode(t.values), this + ._subscriptions) { + var r = this._subscriptions[s]; + r.has(e) && r.get(e).forEach((function(e) { + e(t, i) + })) + } + }, u.prototype.subscribe = function(e, t, i) { + this._subscriptions[e] = this._subscriptions[e] || new Map; + var s = this._subscriptions[e]; + t = [].concat(t); + var r = []; + t.forEach((function(e) { + this._symbol_data[e] ? s && s.has(e) || this._symbol_data[e] + .subscribers_count++ : (this._symbol_data[e] = { + subscribers_count: 1 + }, r.push(e)), s.has(e) || s.set(e, []), s.get(e).push(i), s + .get(e).fast = !0, this._symbol_data[e] && this + ._symbol_data[e].values && i(this._symbol_data[e], this + ._symbol_data[e]) + }), this), r.length && this._connected && (this._quoteApi.quoteAddSymbols( + r, { + forcePermission: !0 + }), this._delayUpdateFastSymbols()) + }, u.prototype.unsubscribe = function(e, t, i) { + t = [].concat(t); + for (var s = this._subscriptions[e], r = [], n = 0; n < t.length; n++) { + var o = t[n]; + if (s) + if (s.has(o) && i) { + var a = s.get(o).indexOf(i); + ~a && s.get(o).splice(a, 1), s.get(o).length || s.delete(o) + } else s.delete(o); + s && 0 === s.size && delete this._subscriptions[e], this._symbol_data + .hasOwnProperty(o) && (s && !s.has(o) && this._symbol_data[o] + .subscribers_count--, this._symbol_data[o].subscribers_count || ( + delete this._symbol_data[o], r.push(o))) + } + r.length && this._connected && (this._quoteApi.quoteRemoveSymbols(r), this + ._delayUpdateFastSymbols()) + }, u.prototype.setFastSymbols = function(e, t) { + if (this._subscriptions[e]) + for (var i = this._subscriptions[e], s = Array.from(i.keys()), r = 0; r < s + .length; ++r) { + var n = s[r]; + i.get(n).fast = -1 !== t.indexOf(n) + } + this._delayUpdateFastSymbols() + }, u.prototype._updateFastSymbols = function() { + if (this._connected) { + var e = this._fastSymbols(); + 0 === e.length ? this._quoteApi.quoteHibernateAll() : this._quoteApi + .quoteFastSymbols(e) + } + }, + u.prototype._delayUpdateFastSymbols = u.prototype._updateFastSymbols, u.prototype + ._fastSymbols = function() { + var e = []; + for (var t in this._subscriptions) + for (var i = this._subscriptions[t], s = Array.from(i.keys()), r = 0; r < s + .length; ++r) { + var n = s[r]; + i.get(n).fast && e.push(n) + } + return e = o(e) + }, u.prototype.formatter = function(e, t) { + var i = this; + if (this._waitingForFormatters[e]) return this._waitingForFormatters[e]; + + function s(e) { + var i = t && !e.fractional ? 1 : e.minmov; + return new n(e.pricescale, i, e.fractional, e.minmove2) + } + var r = new Promise((function(t, r) { + if (i._formatterValuesCache[e]) t(s(i._formatterValuesCache[ + e])); + else { + var n = l.guid(); + i.subscribe(n, [e], (function(o) { + "error" === o.status && (i + ._waitingForFormatters[e] = null, r( + "Quotes snapshot is not received" + )), + function(e) { + return e && null != e.pricescale && + null != e.minmov + }(o.values) && (i._waitingForFormatters[ + e] = null, i + ._formatterValuesCache[e] = o + .values, t(s(o.values)), i + .unsubscribe(n, e)) + })) + } + })); + return this._waitingForFormatters[e] = r, r + }, u.prototype.snapshot = function(e) { + var t = this; + if (this._waitingForSnapshot[e]) return this._waitingForSnapshot[e]; + var i = new Promise((function(i, s) { + if (t._snapshotValuesCache[e]) i(t._snapshotValuesCache[e]); + else { + var r = l.guid(); + t.subscribe(r, [e], (function(n) { + "error" === n.status && (t + ._waitingForSnapshot[e] = null, s( + "Quotes snapshot is not received" + )); + var o = n.values; + o && o.minmov && o.pricescale && o + .description && (t._waitingForSnapshot[ + e] = null, t + ._snapshotValuesCache[e] = o, i(o), + t.unsubscribe(r, e)) + })) + } + })); + return this._waitingForSnapshot[e] = i, i + }, TradingView.QuoteSessionMultiplexer = u, t && t.exports && (t.exports = u) + }).call(this, i("aIyQ"), i("YuTi")(e)) + }, + hOqT: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "getTranslatedSymbolDescription", (function() { + return s + })); + i("YFKU"); + + function s(e) { + return e.description || "" + } + }, + hP9j: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolPolyline", (function() { + return l + })); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("Ocx9"), + o = i("Zp/P"), + a = i("Ss5c"); + class l extends a.LineDataSource { + constructor(e, t) { + const s = t || l.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "C2CE")).then(t => { + this._setPaneViews([new t.PolylinePaneView(this, e)]) + }) + } + pointsCount() { + return -1 + } + properties() { + return super.properties() + } + name() { + return "Polyline" + } + hasEditableCoordinates() { + return !1 + } + addPoint(e, t, i) { + var n; + const a = Object(s.ensureNotNull)(this.priceScale()), + l = this._model.timeScale().indexToCoordinate(e.index), + c = e.price, + h = Object(s.ensure)(null === (n = this.ownerSource()) || void 0 === n ? + void 0 : n.firstValue()), + u = a.priceToCoordinate(c, h), + d = Object(o.interactionTolerance)().minDistanceBetweenPoints; + if (this._points.length > 0) { + const e = this._points[this._points.length - 1], + t = this._model.timeScale().indexToCoordinate(e.index), + i = e.price, + s = a.priceToCoordinate(i, h); + if (new r.Point(l, u).subtract(new r.Point(t, s)).length() < d) return this + ._lastPoint = null, this.normalizePoints(), this + .createServerPoints(), !0; + const n = this._points[0], + o = this._model.timeScale().indexToCoordinate(n.index), + c = n.price, + p = a.priceToCoordinate(c, h); + if (new r.Point(l, u).subtract(new r.Point(o, p)).length() < d) return this + .properties().childs().filled.setValue(!0), this._lastPoint = null, + this.normalizePoints(), this.createServerPoints(), !0 + } + return super.addPoint(e, t, i) + } + setPoint(e, t, i) { + var n; + super.setPoint(e, t, i); + const a = this.priceScale(); + if (!(this._model.timeScale().isEmpty() || null === a || a.isEmpty() || e !== + this._points.length - 1 && 0 !== e)) { + const i = Object(s.ensure)(null === (n = this.ownerSource()) || void 0 === + n ? void 0 : n.firstValue()), + l = this._model.timeScale().indexToCoordinate(t.index), + c = a.priceToCoordinate(t.price, i), + h = e === this._points.length - 1 ? this._points[0] : this._points[this + ._points.length - 1], + u = this._model.timeScale().indexToCoordinate(h.index), + d = a.priceToCoordinate(h.price, i); + new r.Point(l, c).subtract(new r.Point(u, d)).length() < Object(o + .interactionTolerance)().minDistanceBetweenPoints && this + .properties().childs().filled.setValue(!0) + } + } + static createProperties(e) { + const t = new n.DefaultProperty("linetoolpolyline", e); + return l._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "91EF")).then( + e => e.PolylinesDefinitionsViewModel) + } + static _configureProperties(e) { + a.LineDataSource._configureProperties(e), e.addExclusion("filled") + } + } + }, + hXqA: function(e, t, i) { + "use strict"; + var s = i("c7G1"); + class r { + constructor() { + this.isUpdate = !1, this.graphicsCmds = new s.c, this._offsetsChanged = !1, this + ._disableGraphicsAndData = !1 + } + isNaN() { + return this.graphicsCmds.isNaN() + } + primitiveData(e) { + const t = {}; + if (!this._disableGraphicsAndData) { + const i = this.graphicsCmds.primitiveData(e); + null !== i && (t.graphicsCmds = i) + } + return this.isUpdate && (t.isUpdate = !0), void 0 === t.graphicsCmds ? void 0 : t + } + disable() { + this._disableGraphicsAndData = !0 + } + checkForChangeAndResetChangedState(e) { + const t = this._offsetsChanged, + i = this.graphicsCmds.isModified(); + this.graphicsCmds.setModified(!1), this._offsetsChanged = !1; + return i || t || 0 !== e.length + } + } + var n = i("ogJP"), + o = i("dhFz"); + + function a(e) { + return Boolean(e.isPosted) + } + class l { + isIgnoredObj(e, t) { + return l.isIgnoredObjDefault(e, t) + } + static isIgnoredObjDefault(e, t) { + if (void 0 === t) return l.isIgnoredObjNaNable(e); + const i = e[t]; + return l.isIgnoredByGeneralRules(e, t) || l.isIgnoredObjNaNable(i) || l + .isIgnoredObjListOfNaNables(i) + } + static isIgnoredObjNaNable(e) { + return Object(o.a)(e) && e.isNaN() + } + static isIgnoredObjListOfNaNables(e) { + if (!Object(n.isArray)(e)) return !1; + let t = !0; + for (const i of e) + if (!Object(o.a)(i) || !i.isNaN()) { + t = !1; + break + } return t + } + static isIgnoredObjPosted(e) { + return a(e) && e.isPosted() + } + static isIgnoredObjErased(e) { + return a(e) && e.isErased() + } + static isIgnoredByGeneralRules(e, t) { + const i = e[t]; + return Object(n.isArray)(i) && 0 === i.length + } + } + class c { + isIgnoredObj(e, t) { + if (void 0 === t) return l.isIgnoredObjDefault(e) || l.isIgnoredObjErased(e); + const i = e[t]; + return l.isIgnoredObjDefault(e, t) || l.isIgnoredObjErased(i) + } + } + class h { + isIgnoredObj(e, t) { + if (void 0 === t) return l.isIgnoredObjDefault(e) || l.isIgnoredObjErased(e) || l + .isIgnoredObjPosted(e); + const i = e[t]; + return l.isIgnoredObjDefault(e, t) || l.isIgnoredObjErased(i) || l + .isIgnoredObjPosted(i) + } + } + i.d(t, "a", (function() { + return u + })); + class u extends class extends class { + constructor(e) { + this._dataObj = new r, this._isDirty = !1, this._eraseCmds = [], + this._enableCmdDataStudy = e + } + init(e) { + this._dataObj.graphicsCmds.setCreate(e), this.update(!0) + } + dataObj() { + return this._dataObj + } + setEraseCmds(e) { + this._eraseCmds = e + } + resetDirtyState() { + this._isDirty = !1 + } + disable() { + this._dataObj.disable() + } + } { + constructor(e) { + super(e), this._snapshotPredicate = new c, this._dataSnapShot = {} + } + getData() { + return this._dataSnapShot + } + getUpdate() { + return this._isDirty ? this._dataSnapShot : {} + } + update(e) { + (this._dataObj.checkForChangeAndResetChangedState(this._eraseCmds) || e) && ( + null !== this._dataObj.graphicsCmds.create && (this._dataObj.graphicsCmds.create + .deleteErasedObjs(), this._dataObj.graphicsCmds.erase = [new s.a]), this + ._makeSnapshot(), this._isDirty = !0) + } + _makeSnapshot() { + this._json = this._dataObj.primitiveData(this._snapshotPredicate), this + ._dataSnapShot = { + json: this._json + } + } + } { + constructor(e) { + super(e), this._updatePredicate = new h, this._sendShapshotOnly = !0, this + ._isFirstNotForcedUpdate = !0 + } + update(e) { + (this._dataObj.checkForChangeAndResetChangedState(this._eraseCmds) || e) && ( + null !== this._dataObj.graphicsCmds.create && (this._dataObj.graphicsCmds + .erase = [new s.a]), this._dataObj.isUpdate = !0, this._makeSnapshot(), + null !== this._dataObj.graphicsCmds.create && (this._dataObj.graphicsCmds + .erase = this._eraseCmds), this._dataObj.isUpdate = !0, this._jsonUpdate = + this._dataObj.primitiveData(this._updatePredicate), null !== this._dataObj + .graphicsCmds.create && this._dataObj.graphicsCmds.create + .deleteErasedAndMarkPostedObjs(), this._sendShapshotOnly = e || this + ._isFirstNotForcedUpdate, this._isFirstNotForcedUpdate = Boolean(e), this + ._isDirty = !0) + } + getUpdate() { + return this._isDirty ? this._enableCmdDataStudy ? { + json: this._sendShapshotOnly ? this._json : void 0, + jsonUpdate: this._sendShapshotOnly ? void 0 : this._jsonUpdate + } : { + json: this._json, + jsonUpdate: this._sendShapshotOnly ? void 0 : this._jsonUpdate + } : {} + } + } + }, + hY0g: function(e, t, i) { + "use strict"; + (function(e) { + var t = i("txPx").getLogger("Common.WatchedValue"); + + function s() {} + + function r(e) { + if (!(this instanceof r)) return new r(e); + arguments.length > 0 && (this._value = e), this._listeners = [] + } + r.prototype.value = function() { + return this._owner ? this._owner._value : this._value + }, r.prototype.setValue = function(e, i) { + var s = this._owner ? this._owner : this; + if ("function" == typeof s.hook && (e = s.hook(e)), s.writeLock) return s + ._value; + var r = s._value === e || Number.isNaN(s._value) && Number.isNaN(e); + if (!i && r && s.hasOwnProperty("_value")) return e; + s._value = e; + for (var n = s._listeners.slice(), o = 0, a = 0; a < n.length; a++) { + n[a].once && (s._listeners.splice(a - o, 1), o++); + try { + n[a].cb(e) + } catch (e) { + t.logError(e.stack || e.message) + } + } + return e + }, r.prototype.deleteValue = function() { + var e = this._owner ? this._owner : this; + if (e.hasOwnProperty("_value")) { + if (e.writeLock) return e._value; + delete e._value; + for (var i = e._listeners.slice(), s = 0, r = 0; r < i.length; r++) { + i[r].once && (e._listeners.splice(r - s, 1), s++); + try { + i[r].cb() + } catch (e) { + t.logError(e.stack || e.message) + } + } + } + }, r.prototype.subscribe = function(e, i) { + if ("function" != typeof e) throw new TypeError("callback must be a function"); + var s = !!i && !!i.once, + r = !!i && !!i.callWithLast, + n = this._owner ? this._owner : this; + if (r && n.hasOwnProperty("_value")) { + try { + e(n._value) + } catch (e) { + t.logError(e.stack || e.message) + } + if (s) return + } + n._listeners.push({ + cb: e, + owner: this, + once: !!i && !!i.once + }) + }, r.prototype.unsubscribe = function(e) { + var t = this._owner ? this._owner : this; + void 0 === e && (e = null); + for (var i = t._listeners, s = i.length; s--;) i[s].owner !== this && t !== + this || i[s].cb !== e && null !== e || i.splice(s, 1) + }, r.prototype.listeners = function() { + return (this._owner ? this._owner : this)._listeners + }, r.prototype.readonly = function() { + if (this._readonlyInstance) return this._readonlyInstance; + var e = this._readonlyInstance = new s; + return e.subscribe = this.subscribe.bind(this), e.unsubscribe = this.unsubscribe + .bind(this), e.value = this.value.bind(this), e.when = this.when.bind(this), + e.spawn = function() { + return this.spawn().readonly() + }.bind(this), this.destroy && (e.destroy = this.destroy.bind(this)), e + }, r.prototype.spawn = function(e) { + var i = new r; + return delete i._listeners, i._owner = this._owner || this, i.destroy = + function() { + if ("function" == typeof e) try { + e() + } catch (e) { + t.logError(e.stack || e.message) + } + this.unsubscribe(), delete this._owner + }, i + }, r.prototype.when = function(e) { + var i = this; + if (this.value()) try { + e() + } catch (e) { + t.logError(e.stack || e.message) + } else { + var s = function(t) { + t && (i.unsubscribe(s), e()) + }; + i.subscribe(s) + } + }, r.prototype.opposite = function() { + if (!this._opposite) { + var e = this, + t = new r(!this.value()); + this.subscribe((function(e) { + t.setValue(!e) + })), t.subscribe((function(t) { + e.setValue(!t) + })), this._opposite = t + } + return this._opposite + }, "undefined" != typeof window && (window.WatchedValue = r), e && e.exports && (e + .exports = r) + }).call(this, i("YuTi")(e)) + }, + hY3j: function(e, t, i) { + "use strict"; + var s = i("PAcw").GridRenderer; + + function r() { + this._id = "grid", this.visible = !0, this.horzLinesVisible = !0, this.horzLinesColor = + "white", this.horzLinesStyle = "", this.vertLinesVisible = !0, this.vertLinesColor = + "white", this.vertLinesStyle = "" + } + + function n(e, t) { + this.source = e, this.pane = t, this._renderer = new s + } + r.prototype.id = function() { + return this._id + }, r.prototype.paneViews = function(e) { + return [new n(this, e)] + }, n.prototype.update = function() {}, n.prototype.renderer = function() { + var e = {}; + return this.pane.defaultPriceScale().isEmpty() || this.pane.timeScale().isEmpty() ? + null : (e.horzLinesVisible = !0, e.vertLinesVisible = !0, e.horzLinesColor = this + .pane._model.properties().paneProperties.horzGridProperties.color.value(), e + .vertLinesColor = this.pane._model.properties().paneProperties + .vertGridProperties.color.value(), e.horzLineStyle = this.pane._model + .properties().paneProperties.horzGridProperties.style.value(), e.vertLineStyle = + this.pane._model.properties().paneProperties.vertGridProperties.style.value(), e + .priceMarks = this.pane.defaultPriceScale().marks(), e.timeMarks = this.pane + .timeScale().marks(), e.w = this.pane.width(), e.h = this.pane.height(), this + ._renderer.setData(e), this._renderer) + }, t.Grid = r + }, + hezA: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyPriceAxisView", (function() { + return r + })); + var s = i("KcY8"); + class r extends s.a { + constructor(e, t) { + super(), this._model = e.model(), this._source = e, this._data = t + } + _updateRendererData(e, t, i) { + e.visible = !1, t.visible = !1; + const s = this._source.model(), + r = this._source.priceScale(); + if (null === r) return; + if (!s.isPriceScaleVisible(r)) return; + const n = this._source.lastValueData(this._data.plotIndex, !1); + if (n.noData) return; + i.background = n.color; + let o = n.color; + "transparent" === o && (o = this._model.properties().scalesProperties + .backgroundColor.value()), i.textColor = this.generateTextColor(o), i + .coordinate = n.coordinate, i.floatCoordinate = n.floatCoordinate, this + ._showAxisLabel() && (e.text = n.text, e.visible = !0), this + ._updatePaneRendererData(t) + } + _showPaneLabel() { + return this._model.properties().scalesProperties.showStudyPlotLabels.value() + } + _showAxisLabel() { + return this._model.properties().scalesProperties.showStudyLastValue.value() + } + _updatePaneRendererData(e) { + e.text = "", this._showPaneLabel() && (e.text = this._source.priceLabelText(this + ._data.plotIndex), e.visible = !0) + } + } + }, + hfHJ: function(e, t, i) { + "use strict"; + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.transformPoint = t.translationMatrix = t.scalingMatrix = t.rotationMatrix = t + .multiplyMatrices = t.identityMatrix = void 0; + var s = i("aO4+"); + t.identityMatrix = function() { + return [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1] + ] + }, t.multiplyMatrices = function(e, t) { + for (var i = [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ], s = 0; s < 3; s++) + for (var r = 0; r < 3; r++) + for (var n = 0; n < 3; n++) i[s][r] += e[s][n] * t[n][r]; + return i + }, t.rotationMatrix = function(e) { + var t = Math.cos(e), + i = Math.sin(e); + return [ + [t, -i, 0], + [i, t, 0], + [0, 0, 1] + ] + }, t.scalingMatrix = function(e, t) { + return [ + [e, 0, 0], + [0, t, 0], + [0, 0, 1] + ] + }, t.translationMatrix = function(e, t) { + return [ + [1, 0, e], + [0, 1, t], + [0, 0, 1] + ] + }, t.transformPoint = function(e, t) { + for (var i = [t.x, t.y, 1], r = [0, 0, 0], n = 0; n < 3; n++) + for (var o = 0; o < 3; o++) r[n] += i[o] * e[n][o]; + return new s.Point(r[0], r[1]) + } + }, + hsV8: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ensureTimePointIndexIndex", (function() { + return n + })), i.d(t, "unpackNonSeriesData", (function() { + return o + })); + var s = i("JmuD"), + r = i("qySK"); + + function n(e) { + if (e < 0) throw new Error("TimePointIndexIndex should be non-negative integer"); + return e + } + async function o(e) { + if ("" === e) return null; + const t = JSON.parse(e); + if (!Object(s.isObject)(t) || "function" == typeof t) throw new Error( + "Non-object content in the non-series envelope"); + if (Object(s.hasProperty)(t, "indexes_replace")) return { + indexes_replace: !0 + }; + const i = { + indexes_replace: !1 + }; + if (Object(s.hasProperty)(t, "offsets") && (i.offsets = t.offsets), Object(s + .hasProperty)(t, "isUpdate")) { + if ("boolean" != typeof t.isUpdate) throw new Error( + 'Invalid type of "isUpdate" field'); + i.isUpdate = t.isUpdate + } + return Object(s.hasProperty)(t, "data") && (i.data = t.data), Object(s.hasProperty)(t, + "graphicsCmds") && (i.graphicsCmds = Object(r.b)(t.graphicsCmds)), i + } + }, + htUT: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ChartChangesWatcher", (function() { + return n + })); + var s = i("aIyQ"), + r = i.n(s); + class n { + constructor(e, t, i) { + this._hasChanges = !1, this._undoHistory = e, this._chartSaver = t, this + ._globalEvents = i, this._onValueChanged = new r.a, this._subscribe() + } + destroy() { + this._unsubscribe(), this._onValueChanged.destroy() + } + hasChanges() { + return this._hasChanges + } + getOnChange() { + return this._onValueChanged + } + _subscribe() { + this._globalEvents.subscribe("chart_loaded", this._handleChartLoaded, this), this + ._undoHistory.undoStack().onChange().subscribe(this, this + ._handleChangeUndoStack), this._chartSaver.chartSaved().subscribe(this, this + ._handleChartSaved) + } + _unsubscribe() { + this._globalEvents.unsubscribe("chart_loaded", this._handleChartLoaded, this), this + ._undoHistory.undoStack().onChange().unsubscribe(this, this + ._handleChangeUndoStack), this._chartSaver.chartSaved().unsubscribe(this, + this._handleChartSaved) + } + _setChanges(e) { + this._hasChanges !== e && (this._hasChanges = e, this._onValueChanged.fire(e)) + } + _handleChartLoaded() { + this._setChanges(!1) + } + _handleChangeUndoStack(e) { + e && !e.customFlag("doesnt_affect_save") && this._setChanges(!0) + } + _handleChartSaved(e) { + e && this._setChanges(!1) + } + } + }, + "hyq/": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "pivotPointsStandardStudyItem", (function() { + return h + })); + var s = i("ocLq"), + r = i("LxhU"); + class n { + constructor() { + this.p = NaN, this.r1 = NaN, this.s1 = NaN, this.r2 = NaN, this.s2 = NaN, this.r3 = + NaN, this.s3 = NaN, this.r4 = NaN, this.s4 = NaN, this.r5 = NaN, this.s5 = NaN, + this.startIndex__t = NaN, this.endIndex__t = NaN + } + } + class o { + constructor() { + this.pivots = [] + } + } + + function a(e, t) { + e.setUTCMonth(e.getUTCMonth() + t) + } + + function l(e, t) { + if (s.Std.ismonthly(e)) { + let i = new Date(t); + return i.getUTCDay() < function(e, t) { + return new Date(t, e, 0).getDate() + }(i.getUTCMonth(), i.getUTCFullYear()) ? (a(i, s.Std.interval(e)), i = s.Std + .add_days_considering_dst("Etc/UTC", i, 1 - i.getUTCDay())) : (i = s.Std + .add_days_considering_dst("Etc/UTC", i, 1), a(i, s.Std.interval(e))), i + .valueOf() + } + return t + r.Interval.parse(e.symbol.resolution).inMilliseconds(t) + } + + function c(e, t) { + switch (t) { + case "Auto": + return function(e) { + const t = r.Interval.parse(e.symbol.interval + e.symbol.resolution); + switch (t.kind()) { + case r.ResolutionKind.Weeks: + case r.ResolutionKind.Months: + return "12M"; + case r.ResolutionKind.Days: + return "1M"; + case r.ResolutionKind.Minutes: + return t.multiplier() >= 1 && t.multiplier() <= 15 ? "1D" : "1W"; + case r.ResolutionKind.Seconds: + case r.ResolutionKind.Ticks: + return "1D" + } + throw new Error("Unexpected resolution type: " + e.symbol.resolution) + }(e); + case "Daily": + return "1D"; + case "Weekly": + return "1W"; + case "Monthly": + return "1M"; + case "Yearly": + return "12M"; + default: + throw new Error("No such pivTimeFrame: " + t) + } + } + const h = { + name: "Pivot Points Standard", + metainfo: { + _metainfoVersion: 44, + defaults: { + inputs: { + kind: "Traditional", + lookBack: 15, + pivTimeFrame: "Auto", + showHistoricalPivots: !0 + }, + precision: "4" + }, + description: "Pivot Points Standard", + id: "PivotPointsStandard@tv-basicstudies-80", + inputs: [{ + defval: "Traditional", + id: "kind", + name: "Type", + options: ["Traditional", "Fibonacci", "Woodie", "Classic", "DeMark", + "Camarilla" + ], + type: "text" + }, { + defval: !0, + id: "showHistoricalPivots", + name: "Show historical pivots", + type: "bool" + }, { + defval: "Auto", + id: "pivTimeFrame", + name: "Pivots Timeframe", + options: ["Auto", "Daily", "Weekly", "Monthly", "Yearly"], + type: "text" + }, { + defval: 15, + id: "lookBack", + max: 5e3, + min: 2, + name: "Number of Pivots Back", + type: "integer" + }], + is_price_study: !0, + linkedToSeries: !0, + shortDescription: "Pivots" + }, + constructor: class { + constructor() { + this._secondaryRes = "1D", this._firstMainSeriesBarTime = NaN + } + init(e, t) { + const i = t(0), + r = t(1), + n = t(2), + a = t(3); + this._data = new o, this._firstMainSeriesBarTime = NaN, this._kindPP = + function(e) { + switch (e) { + case "Traditional": + return 0; + case "Fibonacci": + return 1; + case "Woodie": + return 2; + case "Classic": + return 3; + case "DeMark": + return 4; + case "Camarilla": + return 5; + default: + throw new Error("Unknown kind " + e) + } + }(i), this._showHistoricalPivots = r, this._historicalPivotsToKeep = + a, this._pivTimeFrame = n, this._isValidResolution = function(e, + t) { + return (!s.Std.isdaily(e) || "Daily" !== t) && ((!s.Std + .isweekly(e) || "Daily" !== t && "Weekly" !== t) && + (!s.Std.ismonthly(e) || "Daily" !== t && "Weekly" !== + t && "Monthly" !== t)) + }(e, this._pivTimeFrame), this._isValidResolution || s.Std.error( + "You cannot see this pivot timeframe on this resolution"), this + ._isValidResolution && (this._secondaryRes = c(e, this + ._pivTimeFrame)), e.new_sym(e.symbol.tickerid, this + ._secondaryRes) + } + main(e) { + if (!this._isValidResolution) return null; + if (e.symbol.time) return isNaN(this._firstMainSeriesBarTime) && (this + ._firstMainSeriesBarTime = e.symbol.time, this + ._removeUnusedPivots()), e.symbol.isLastBar && e.symbol + .isNewBar ? this._createResponse() : null; + e.select_sym(1); + const t = e.new_var(s.Std.open(e)), + i = e.new_var(s.Std.high(e)), + r = e.new_var(s.Std.low(e)), + o = e.new_var(s.Std.close(e)), + a = e.new_var(s.Std.time(e)), + c = this._data, + h = t.get(0), + u = a.get(0), + d = t.get(1), + p = i.get(1), + _ = r.get(1), + m = o.get(1), + f = e.symbol.isLastBar; + if (0 !== c.pivots.length && e.symbol.isNewBar) { + const e = c.pivots[c.pivots.length - 1]; + e.endIndex__t !== u && (e.endIndex__t = u) + } + if (0 === e.symbol.index || !e.symbol.isNewBar) return e.select_sym(0), + null; + const g = function(e, t, i, r, o, a, l, c) { + const h = new n; + let u = NaN; + const d = i - r; + switch (c) { + case 0: + u = (i + r + o) / 3, h.p = u, h.r1 = 2 * u - r, h.s1 = + 2 * u - i, h.r2 = u + (i - r), h.s2 = u - (i - r), h + .r3 = 2 * u + (i - 2 * r), h.s3 = 2 * u - (2 * i - + r), h.r4 = 3 * u + (i - 3 * r), h.s4 = 3 * u - ( + 3 * i - r), h.r5 = 4 * u + (i - 4 * r), h.s5 = + 4 * u - (4 * i - r); + break; + case 1: + u = (i + r + o) / 3, h.p = u, h.r1 = u + .382 * d, h + .s1 = u - .382 * d, h.r2 = u + .618 * d, h.s2 = u - + .618 * d, h.r3 = u + d, h.s3 = u - d; + break; + case 2: + u = (i + r + 2 * e) / 4, h.p = u, h.r1 = 2 * u - r, h + .s1 = 2 * u - i, h.r2 = u + d, h.s2 = u - d, h.r3 = + i + 2 * (u - r), h.s3 = r - 2 * (i - u), h.r4 = h + .r3 + d, h.s4 = h.s3 - d; + break; + case 3: + u = (i + r + o) / 3, h.p = u, h.r1 = 2 * u - r, h.s1 = + 2 * u - i, h.r2 = u + d, h.s2 = u - d, h.r3 = u + + 2 * d, h.s3 = u - 2 * d, h.r4 = u + 3 * d, h.s4 = + u - 3 * d; + break; + case 4: + let n = NaN; + n = s.Std.equal(t, o) ? i + r + 2 * o : s.Std.greater(o, + t) ? 2 * i + r + o : 2 * r + i + o, u = n / 4, h + .p = u, h.r1 = n / 2 - r, h.s1 = n / 2 - i; + break; + case 5: + u = (i + r + o) / 3, h.p = u, h.r1 = o + 1.1 * d / 12, h + .s1 = o - 1.1 * d / 12, h.r2 = o + 1.1 * d / 6, h + .s2 = o - 1.1 * d / 6, h.r3 = o + 1.1 * d / 4, h + .s3 = o - 1.1 * d / 4, h.r4 = o + 1.1 * d / 2, h + .s4 = o - 1.1 * d / 2; + break; + default: + throw new Error("Unknown kind") + } + return h.startIndex__t = a, h.endIndex__t = l, h + }(h, d, p, _, m, u, l(e, u), this._kindPP); + return e.select_sym(0), this._showHistoricalPivots || (c.pivots = []), c + .pivots.push(g), c.pivots.length > this._historicalPivotsToKeep && c + .pivots.shift(), f ? this._createResponse() : null + } + _createResponse() { + return 0 === this._data.pivots.length ? null : { + nonseries: !0, + type: "non_series_data", + data: { + data: this._data + } + } + } + _removeUnusedPivots() { + const e = Math.max(this._data.pivots.findIndex(e => e.startIndex__t > + this._firstMainSeriesBarTime) - 1, 0); + e > 0 && this._data.pivots.splice(0, e) + } + } + } + }, + "i/Bj": function(e, t, i) { + "use strict"; + + function s(e) { + if (void 0 === e) return null; + const t = e.match(/(delayed_streaming)_([\d]{1,4})/); + return null === t ? null : { + mode: t[1], + interval: parseInt(t[2]) + } + } + i.r(t), i.d(t, "parseUpdateMode", (function() { + return s + })) + }, + i126: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyColorRotatorFactory", (function() { + return h + })); + var s = i("HGP3"), + r = i("eJTA"), + n = i("Tmoa"), + o = i("3ClC"); + const a = ["color-sky-blue-400", "color-banana-yellow-700", "color-deep-blue-500", + "color-grapes-purple-a700", "color-iguana-green-500", "color-minty-green-a700", + "color-ripe-red-a200", "color-berry-pink-200", "color-tv-blue-a100", + "color-tan-orange-a200", "color-sky-blue-a400", "color-deep-blue-a100", + "color-grapes-purple-400", "color-iguana-green-a700", "color-minty-green-200", + "color-ripe-red-200", "color-berry-pink-a200", "color-ripe-red-500", + "color-grapes-purple-500", "color-deep-blue-400", "color-tv-blue-a200", + "color-sky-blue-500", "color-iguana-green-400", "color-minty-green-400", + "color-banana-yellow-600", "color-tan-orange-500", "color-berry-pink-400", + "color-ripe-red-300", "color-grapes-purple-300", "color-deep-blue-300", + "color-tv-blue-300", "color-sky-blue-300", "color-iguana-green-300", + "color-minty-green-300", "color-banana-yellow-400", "color-tan-orange-300", + "color-berry-pink-300", "color-tan-orange-a700" + ]; + class l { + constructor(e) { + this._offset = 0, this._offset = e + } + getColor(e) { + if (0 === this._offset) return e; + const t = a[(this._offset - 1) % a.length], + i = s.colorsPalette[t], + o = Object(n.isHexColor)(e) ? 1 : Object(r.parseRgba)(e)[3]; + return Object(n.generateColor)(i, Object(n.alphaToTransparency)(o)) + } + } + class c { + constructor(e, t) { + this._offset = e, this._modelStartOffset = t + } + getColor(e) { + if (Object(n.isHexColor)(e)) { + const t = Object(r.parseRgb)(e); + return Object(r.rgbToHexString)(Object(r.shiftRgb)(t, this._offset, this + ._modelStartOffset)) + } { + const t = Object(r.parseRgba)(e); + return Object(r.rgbaToString)(Object(r.shiftRgba)(t, this._offset, this + ._modelStartOffset)) + } + } + } + class h { + constructor(e) { + this._chartModel = e + } + getColorRotator(e) { + const t = Object(o.studyColorRotationMode)(e); + if (null === t) return null; + const i = this._calcDefaultColorsOffset(e); + switch (t) { + case "loop": + return new l(i); + case "shift": { + const e = this._chartModel.getStudyShiftColorStartOffset(); + return new c(i, e) + } + } + } + _calcDefaultColorsOffset(e) { + let t = 0; + const i = Object(o.useSameColorRotationComparator)(e); + return this._chartModel.dataSources().filter(o.isStudy).forEach(s => { + i(e, s.metaInfo()) && t++ + }), t + } + } + }, + i6cO: function(e, t, i) { + "use strict"; + var s; + + function r(e) { + e.lineWidth = void 0, e.lineStyle = void 0; + for (let t = 0; t < e.colors.length; t++) e.colors[t] = void 0; + return e + } + + function n() { + return { + colors: [void 0, void 0, void 0, void 0, void 0, void 0, void 0] + } + } + i.r(t), i.d(t, "ColorerType", (function() { + return s + })), i.d(t, "clearStyle", (function() { + return r + })), i.d(t, "createEmptyStyle", (function() { + return n + })), + function(e) { + e[e.Main = 0] = "Main", e[e.Background = 1] = "Background", e[e.Text = 2] = "Text", e[e + .Border = 3] = "Border", e[e.Wick = 4] = "Wick", e[e.Up = 5] = "Up", e[e.Down = + 6] = "Down" + }(s || (s = {})) + }, + i80N: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "8MBc", 7)).then(({ + FibSpiralPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Fib Spiral" + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "nBUU"))) + .FibSpiralDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolfibspiral", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolFibSpiral = n + }, + iDOr: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("Y7w9").moveToHead, + r = i("704P").ExecutionsPositionController, + n = i("Ss5c").LineDataSource, + o = i("7ktv").PriceDataSource, + a = i("CW80").isLineTool, + l = i("1Wlv").PriceScale, + c = i("MWAT").createPriceScaleSelectionStrategy, + h = i("yfAl").PaneBase, + u = i("s1Gx").sortSources; + class d extends h { + constructor(t, i, s, r) { + super(t, i, s, r), this.m_timeScale = t, this.m_height = 0, this.m_width = + 0, this.m_mainDataSource = null, this._properties = i, this._model = s, + this._destroyed = new e, s.properties().priceScaleSelectionStrategyName + .listeners().subscribe(null, function(e) { + this._priceScaleSelectionStrategy = c(e.value()), this + ._priceScaleSelectionStrategy.apply(this) + }.bind(this)), this.m_timeScale.barSpacingChanged().subscribe(this, + function() { + this.m_mainDataSource === this._model.mainSeries() && this + ._recalculatePriceScaleByScaleRatio(this.m_mainDataSource + .priceScale()) + }.bind(this)), i.topMargin.listeners().subscribe(this, d.prototype + ._updateMargins), i.bottomMargin.listeners().subscribe(this, d + .prototype._updateMargins), this._updateMargins(), this + ._maximized = !1 + } + destroy() { + this._properties.topMargin.listeners().unsubscribe(this, d.prototype + ._updateMargins), this._properties.bottomMargin.listeners() + .unsubscribe(this, d.prototype._updateMargins), this._model.properties() + .priceScaleSelectionStrategyName.listeners().unsubscribeAll(this), this + .m_timeScale.barSpacingChanged().unsubscribeAll(this), this + ._leftPriceScales.concat(this._rightPriceScales).forEach((function(e) { + e.modeChanged().unsubscribeAll(this), e.priceRangeChanged() + .unsubscribeAll(this), e.internalHeightChanged() + .unsubscribeAll(this) + }), this); + for (var e = 0; e < this.m_dataSources.length; e++) { + var t = this.m_dataSources[e]; + this.removeSourceFromPriceScale(t), t.destroy && t.destroy() + } + this._destroyed.fire() + } + model() { + return this._model + } + width() { + return this.m_width + } + height() { + return this.m_height + } + setWidth(e) { + this.m_width = e, this.updateAllViews() + } + setHeight(e) { + this.m_height = e, this._leftPriceScales.forEach((function(t) { + t.setHeight(e) + })), this._rightPriceScales.forEach((function(t) { + t.setHeight(e) + })); + for (var t = 0; t < this.m_dataSources.length; t++) { + var i = this.m_dataSources[t]; + this.isOverlay(i) && i.priceScale() && i.priceScale().setHeight(e) + } + this.updateAllViews() + } + leftPriceScales() { + return this._leftPriceScales + } + rightPriceScales() { + return this._rightPriceScales + } + visibleLeftPriceScales() { + var e = this._model.priceScaleSlotsCount(); + if (this._leftPriceScales.length > e.left) { + var t = s(this._leftPriceScales, this.mainDataSource().priceScale()); + return t.splice(e.left), t + } + return this._leftPriceScales + } + visibleRightPriceScales() { + var e = this._model.priceScaleSlotsCount(); + if (this._rightPriceScales.length > e.right) { + var t = s(this._rightPriceScales, this.mainDataSource().priceScale()); + return t.splice(e.right), t + } + return this._rightPriceScales + } + timeScale() { + return this.m_timeScale + } + _processMainSourceChange() { + var e; + if (null === this.m_mainDataSource) + for (var t = 0; t < this.m_dataSources.length; t++) { + if ((r = this.m_dataSources[t]) instanceof o && !this.isOverlay( + r) && (!r.properties().linkedToSeries || !r.properties() + .linkedToSeries.value())) { + this.m_mainDataSource = r, e = !0; + break + } + } + if (this.m_mainDataSource && e) { + var i = []; + for (t = 0; t < this.m_dataSources.length; t++) { + (r = this.m_dataSources[t]) instanceof n && i.push(r) + } + i = u(i); + for (t = 0; t < i.length; t++) this.move(i[t], this.m_mainDataSource + .priceScale(), !0) + } else if (!this.m_mainDataSource || this.isOverlay(this + .m_mainDataSource) && 0 === this.nonOverlayPricesSourcesCount()) { + var s = null; + if (this.m_dataSources.includes(this._model.mainSeries())) s = this + ._model.mainSeries(); + else + for (t = 0; t < this.m_dataSources.length; t++) { + var r; + if ((r = this.m_dataSources[t]) instanceof o && this.isOverlay( + r) && r.showInObjectTree()) { + s = r; + break + } + } + if (null !== s) { + var a = this.m_mainDataSource === s; + this.m_mainDataSource = s; + var l = this.createNewPriceScaleIfPossible(); + if (a && s === this._model.mainSeries()) { + var c = s.priceScale(); + this._model.children(s, !0).forEach(e => { + this.removeSourceFromPriceScale(e), l.addDataSource( + e), e.setPriceScale(l) + }), this.removePriceScale(c) + } + this.move(s, l, !0), this.recalculatePriceScale(s.priceScale()) + } + } + } + startScrollPrice(e, t) { + e.startScroll(t) + } + scrollPriceTo(e, t) { + e.scrollTo(t), this.updateAllViews() + } + endScrollPrice(e) { + e.endScroll() + } + setPriceAutoScale(e, t) { + e.setMode({ + autoScale: t + }), this.timeScale().isEmpty() || this.recalculatePriceScale(e) + } + defaultPriceScale() { + var e = this.m_mainDataSource ? this.m_mainDataSource.priceScale() : null; + return null === e && (e = new l(this._model.properties().scalesProperties)), + e + } + _priceScaleIsPrice(e) { + var t = e.mainSource(); + return !!t && (!!TradingView.isInherited(t.constructor, TradingView + .Series) || !!TradingView.isInherited(t.constructor, TradingView + .Study) && t.metaInfo().is_price_study) + } + findSuitableScale(e, t, i) { + return this._priceScaleSelectionStrategy.findSuitableScale(this, e, t, i) + } + createNewPriceScaleIfPossible() { + return this._priceScaleSelectionStrategy.createNewPriceScaleIfPossible(this) + } + canCreateNewPriceScale() { + return this._priceScaleSelectionStrategy.canCreateNewPriceScale(this) + } + mainDataSource() { + return this.m_mainDataSource + } + recalculate() { + this.recalculatePriceScale(this.m_rightPriceScale), this + .recalculatePriceScale(this.m_leftPriceScale); + for (var e = 0; e < this.m_dataSources.length; e++) { + var t = this.m_dataSources[e]; + this.isOverlay(t) && !a(t) && this.recalculatePriceScale(t.priceScale()) + } + this.updateAllViews(), this._model.updatePane(this) + } + createDrawingsCaches() { + r.recreateOrderedByBarsSourcesCache(this) + } + clearDrawingCaches() { + r.clearOrderedByBarsSourcesCache() + } + _invalidateSourcesCache() { + this._cachedOrderedSources.clear(), this._leftPriceScales.forEach((function( + e) { + e.invalidateSourcesCache() + })), this._rightPriceScales.forEach((function(e) { + e.invalidateSourcesCache() + })) + } + onDestroyed() { + return this._destroyed + } + clearSeries(e) { + for (var t = this.m_dataSources.length - 1; t >= 0; t--) TradingView + .isInherited(this.m_dataSources[t].constructor, TradingView.Series) && + this._removeSourceFromCollections(t, e) + } + nonOverlayPricesSourcesCount() { + return this.m_dataSources.filter((function(e) { + return (!e.properties().linkedToSeries || !e.properties() + .linkedToSeries.value()) && (TradingView + .isInherited(e.constructor, o) && e + .showInObjectTree() && !this.isOverlay(e)) + }), this).length + } + canHaveMoreNoScaleSources() { + return this.nonOverlayPricesSourcesCount() > 1 + } + actionNoScaleIsEnabled(e) { + return !(!this.isOverlay(e) && TradingView.isInherited(e.constructor, o)) || + this.canHaveMoreNoScaleSources() + } + executionsPositionController() { + return this._executionsPositionController || (this + ._executionsPositionController = new r(this, this._model + .timeScale())), this._executionsPositionController + } + setMaximized(e) { + this._maximized = e + } + isMaximized() { + return this._maximized + } + properties() { + return this._properties + } + priceScaleRatio() { + return this._currentPriceScaleRatio + } + getPriceScaleById(e) { + var t = this.m_dataSources.find((function(t) { + return null !== t.priceScale() && t.priceScale().id() === e + })); + return void 0 === t ? null : t.priceScale() + } + setPriceScaleSelectionStrategy(e) { + this._priceScaleSelectionStrategy = e, e.apply(this) + } + priceScaleIndex(e, t) { + switch (t) { + case "left": + return this.leftPriceScales().indexOf(e); + case "right": + return this.rightPriceScales().indexOf(e) + } + } + } + d.DEFAULT_STRETCH_FACTOR = 1e3, d.PANE_ANIMATION_DURATION = 500, t.Pane = d + }).call(this, i("aIyQ")) + }, + iPBr: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TimeAxisWidget", (function() { + return y + })); + var s = i("Eyy1"), + r = i("XlJ7"), + n = i("S8xo"), + o = i("ikwP"), + a = i("H0vP"), + l = i("ogJP"), + c = i("u+0B"), + h = i("zDbI"), + u = i("aIyQ"), + d = i.n(u), + p = i("mE5r"), + _ = i("8OdW"), + m = i("7KDR"), + f = i("3/8U"), + g = i("GxN8"), + b = i("JWMC"), + v = i("5VQP"); + i("xrEm"); + const S = { + contextMenuEnabled: !0, + timezoneMenuEnabled: !0, + pressedMouseMoveScale: !0 + }; + class y { + constructor(e, t, i, s, r) { + this._rendererOptions = null, this._onLabelHovered = new d.a, this._mousedown = !1, + this._currentCursorClassName = "invalid", this._options = Object(l.merge)( + Object(l.clone)(S), t || {}), this.chart = e, this._properties = e + .properties().childs().scalesProperties, this._element = document.createElement( + "tr"), this._backgroundBasedTheme = r; + const a = () => this.backgroundColor(), + c = () => { + throw new Error("Time axis does not support real price scales") + }, + h = { + titlesProvider: i, + stubContextMenuProvider: (e, t) => { + const i = this.getContextMenuActions(!0); + let r = s(e, t); + if (r[r.length - 1] === this.chart.actions().scalesProperties) { + const e = [new m.Separator].concat(i); + Array.prototype.splice.apply(r, [r.length - 2, 0, ...e]) + } else r.push(new m.Separator), r = r.concat(i); + return r + }, + backgroundBasedTheme: r, + rendererOptionsProvider: e.model().model().rendererOptionsProvider(), + getBackgroundTopColor: a, + getBackgroundBottomColor: a, + showHorizontalBorder: !0 + }; + this._lhsStubContainer = new p.a(this._properties, "left", c, h, this._options + .priceAxisLabelsOptions), this._lhsStubContainer.onLabelHovered().subscribe( + this, (e, t) => { + this._onLabelHovered.fire(e, t) + }), this._rhsStubContainer = new p.a(this._properties, "right", c, h, this + ._options.priceAxisLabelsOptions), + this._rhsStubContainer.onLabelHovered().subscribe(this, (e, t) => { + this._onLabelHovered.fire(e, t) + }), this._element.appendChild(this._lhsStubContainer.getElement()), this._cell = + document.createElement("td"), this._element.appendChild(this._cell), this._cell + .classList.add("chart-markup-table", "time-axis"), this._cell.style.height = + "25px", this._dv = document.createElement("div"), this._dv.style.width = "100%", + this._dv.style.height = "100%", this._dv.style.position = "relative", this._dv + .style.overflow = "hidden", this._cell.appendChild(this._dv), this + ._canvasConfiguredHandler = () => this.chart.model().model().lightUpdate(), this + ._canvasBinding = Object(o.createBoundCanvas)(this._dv, new o.Size(16, 16)), + this._canvasBinding.subscribeCanvasConfigured(this._canvasConfiguredHandler); + const u = this._canvasBinding.canvas; + u.style.position = "absolute", u.style.zIndex = "1", u.style.left = "0", u.style + .top = "0", this._topCanvasConfiguredHandler = () => this.chart.model().model() + .lightUpdate(), this._topCanvasBinding = Object(o.createBoundCanvas)(this._dv, + new o.Size(16, 16)), this._topCanvasBinding.subscribeCanvasConfigured(this + ._topCanvasConfiguredHandler); + const f = this._topCanvasBinding.canvas; + f.style.position = "absolute", f.style.zIndex = "2", f.style.left = "0", f.style + .top = "0", this._element.appendChild(this._rhsStubContainer.getElement()), this + .restoreDefaultCursor(), this.update(), this._minVisibleSpan = _.MINUTE_SPAN, + this._mouseEventHandler = new n.MouseEventHandler(this._topCanvasBinding.canvas, + this, { + treatVertTouchDragAsPageScroll: !0, + treatHorzTouchDragAsPageScroll: !1 + }), this.size = new o.Size(0, 0) + } + destroy() { + this._mouseEventHandler.destroy(), this._topCanvasBinding + .unsubscribeCanvasConfigured(this._topCanvasConfiguredHandler), this + ._topCanvasBinding.destroy(), this._canvasBinding.unsubscribeCanvasConfigured( + this._canvasConfiguredHandler), this._canvasBinding.destroy(), this + ._rhsStubContainer.onLabelHovered().unsubscribeAll(this), this._lhsStubContainer + .onLabelHovered().unsubscribeAll(this), this._lhsStubContainer.destroy(), this + ._rhsStubContainer.destroy(), this.chart.properties().childs().paneProperties + .childs().background.unsubscribeAll(this) + } + setCursor(e) { + let t = ""; + "grabbing" !== e && "ew-resize" !== e || (t = "time-axis--cursor-" + e), this + ._currentCursorClassName !== t && (this._currentCursorClassName && this._cell + .classList.remove(this._currentCursorClassName), t && this._cell.classList + .add(t), this._currentCursorClassName = t, this._cell.style.cursor) + } + restoreDefaultCursor() { + this.setCursor("") + } + getElement() { + return this._element + } + optimalHeight() { + const e = this.rendererOptions(); + return Math.ceil(e.borderSize + e.offsetSize + e.fontSize + e.paddingTop + e + .paddingBottom + e.labelBottomOffset) + } + setSizes(e, t, i) { + this.size && this.size.equals(e) || (this.size = e, this._canvasBinding + .resizeCanvas({ + width: e.w, + height: e.h + }), this._topCanvasBinding.resizeCanvas({ + width: e.w, + height: e.h + }), this._cell.style.width = e.w + "px", this._cell.style.height = e.h + + "px"), this._lhsStubContainer.setSizes(e.h, t), this._rhsStubContainer + .setSizes(e.h, i) + } + hardResetCanvas() { + this.size && (Object(o.hardResizeCanvas)(this._canvasBinding, this.size), + Object(o.hardResizeCanvas)(this._topCanvasBinding, this.size)) + } + rendererOptions() { + if (!this._rendererOptions || this._rendererOptions.fontSize !== this.fontSize()) { + const e = this.fontSize(); + this._rendererOptions = { + borderSize: 1, + offsetSize: 5, + fontSize: e, + font: Object(r.makeFont)(e, h.CHART_FONT_FAMILY, ""), + widthCache: new c.TextWidthCache, + paddingTop: 3 * e / 12, + paddingBottom: 3 * e / 12, + paddingHorizontal: 9 * e / 12, + labelBottomOffset: 4 * e / 12 + } + } + return this._rendererOptions + } + backgroundColor() { + return this.chart.model().model().backgroundColor().value() + } + lineColor() { + return this._properties.childs().lineColor.value() + } + textColor() { + return this._properties.childs().textColor.value() + } + fontSize() { + return this._properties.childs().fontSize.value() + } + baseFont() { + return Object(r.makeFont)(this.fontSize(), h.CHART_FONT_FAMILY) + } + baseBoldFont() { + return Object(r.makeFont)(this.fontSize(), h.CHART_FONT_FAMILY, "", "bold") + } + hasCanvas(e) { + return this._canvasBinding.canvas === e || this._topCanvasBinding.canvas === e + } + onLabelHovered() { + return this._onLabelHovered + } + getScreenshotData() { + return { + content: this._canvasBinding.canvas.toDataURL(), + canvas: this._canvasBinding.canvas, + contentWidth: this.size.w, + contentHeight: this.size.h, + lhsStub: this._lhsStubContainer.getScreenshotData(), + rhsStub: this._rhsStubContainer.getScreenshotData() + } + } + getContextMenuActions(e) { + const t = this.chart; + t.updateActions(); + const i = t.actions(), + s = []; + return e || s.push(i.timeScaleReset, new m.Separator), this._options + .timezoneMenuEnabled && s.push(i.applyTimeZone), s.push(i.sessionBreaks), s + } + update() { + if (!this.chart.hasModel()) return; + const e = this.chart.model().timeScale().marks(); + if (e) { + this._minVisibleSpan = _.YEAR_SPAN; + for (const t of e) this._minVisibleSpan = Math.min(t.span, this._minVisibleSpan) + } + } + updatePriceAxisStubs() { + const e = this.chart.model().model(), + t = this.chart.isMaximizedPane() ? Object(s.ensureNotNull)(this.chart + .maximizedPaneWidget()).state() : e.paneForSource(e.mainSeries()); + if (!t) return; + const i = e.priceScaleSlotsCount(); + this._lhsStubContainer.setScales([], i.left, t.leftPriceScales().length, i.left + i + .right), this._rhsStubContainer.setScales([], i.right, t.rightPriceScales() + .length, i.left + i.right) + } + paint(e) { + if (e === a.InvalidationLevel.None) return; + const t = Object(o.getContext2D)(this._topCanvasBinding.canvas); + if (e > a.InvalidationLevel.Cursor) { + const i = Object(o.getContext2D)(this._canvasBinding.canvas), + s = this._canvasBinding.pixelRatio; + this.drawBackground(i, s), this.chart.hasModel() && (this.drawBorder(i, s), this + .drawTickMarks(i, s), this.drawBackLabels(i, s), this + .drawCrossHairLabel(t, s)), this._lhsStubContainer.paintStubs(e), this + ._rhsStubContainer.paintStubs(e) + } + this.drawCrossHairLabel(t, this._topCanvasBinding.pixelRatio) + } + drawBackground(e, t) { + if (Object(o.clearRect)(e, 0, 0, Math.ceil(this.size.w * t) + 1, Math.ceil(this.size + .h * t) + 1, this.backgroundColor()), !this.chart.hasModel()) return; + const i = this.chart.model(); + if (!i.timeScale().isEmpty()) { + const s = i.model().selection().lineDataSources().reduce((e, t) => { + const i = t.timeAxisPoints(); + return 0 === i.length ? e : e.concat(i) + }, []); + s.length > 0 && this._hightlightBackground(e, s, t) + } + const s = i.model().crossHairSource(); + s.startMeasurePoint() && this._hightlightBackground(e, s.measurePoints(), t) + } + drawBorder(e, t) { + e.save(), e.fillStyle = this.lineColor(); + const i = Math.max(1, Math.floor(this.rendererOptions().borderSize * t)), + s = Math.ceil(this.size.w * t); + e.fillRect(0, 0, s + 1, i), e.restore() + } + drawTickMarks(e, t) { + const i = this.chart.model().timeScale().marks(); + if (!i || 0 === i.length) return; + let s = i.reduce((e, t) => e.span > t.span ? e : t, i[0]).span; + s > 30 && s < 40 && (s = 30), e.save(), e.strokeStyle = this.lineColor(); + const r = this.rendererOptions(), + n = r.borderSize + r.offsetSize + r.paddingTop + r.fontSize / 2; + e.textAlign = "center", e.textBaseline = "middle", e.fillStyle = this.textColor(), + Object(o.drawScaled)(e, t, () => { + e.font = this.baseFont(); + for (let t = 0; t < i.length; t++) { + const r = i[t]; + r.span < s && e.fillText(r.label, r.coord, n) + } + e.font = this.baseBoldFont(); + for (let t = 0; t < i.length; t++) { + const r = i[t]; + r.span >= s && e.fillText(r.label, r.coord, n) + } + }), e.restore() + } + drawBackLabels(e, t) { + var i; + e.save(); + const s = new Set, + r = this.chart.model().model(); + let n = r.dataSources(); + const o = r.selection().allSources(); + for (const e of o) s.add(e); + r.hoveredSource() && s.add(r.hoveredSource()); + for (const e of r.sourcesBeingMoved()) s.add(e); + const a = r.customSourceBeingMoved(); + null !== a && s.add(a); + const l = null !== (i = r.lineBeingEdited()) && void 0 !== i ? i : r + .lineBeingCreated(); + l && s.add(l), s.add(this.chart.model().crossHairSource()), n = n.concat(r + .customSources()); + const c = this.rendererOptions(); + for (let i = 0; i < n.length; i++) { + const r = n[i]; + if (!s.has(r) && r.timeAxisViews) { + const i = r.timeAxisViews(); + if (i) + for (let s = 0; s < i.length; s++) i[s].renderer().draw(e, c, t) + } + } + e.restore() + } + drawCrossHairLabel(e, t) { + var i; + e.save(), e.clearRect(0, 0, Math.ceil(this.size.w * t) + 1, Math.ceil(this.size.h * + t) + 1); + const s = this.chart.model().model(), + r = [], + n = null !== (i = s.lineBeingEdited()) && void 0 !== i ? i : s + .lineBeingCreated(); + if (n && n.timeAxisViews) { + const e = n.timeAxisViews(); + e && e.length && r.push(e) + } + const o = s.customSourceBeingMoved(); + this._addViewsOrMaxMin(null === o ? [] : [o], r), this._addViewsOrMaxMin(s + .sourcesBeingMoved(), r), this._addViewsOrMaxMin(s.selection().allSources(), + r); + const a = s.hoveredSource(); + if (a && Object(g.a)(a) && !s.selection().isSelected(a) && a.timeAxisViews) { + const e = a.timeAxisViews(); + e && e.length && r.push(e) + } + const l = s.crossHairSource(), + c = l.timeAxisViews && l.timeAxisViews(); + c && c.length && r.push(c); + const h = this.rendererOptions(); + for (const i of r) + for (const s of i) e.save(), s.renderer().draw(e, h, t), e.restore(); + e.restore() + } + mouseDownEvent(e) { + this._mouseDownOrTouchStartEvent(e) + } + touchStartEvent(e) { + this._mouseOrTouchEnterEvent(e), this._mouseDownOrTouchStartEvent(e) + } + mouseDownOutsideEvent() { + this._zoomAvailable() && this._mousedown && (this._mousedown = !1, this.chart + .model().endScaleTime(), this.restoreDefaultCursor()) + } + pressedMouseMoveEvent(e) { + this._pressedMouseOrTouchMoveEvent(e) + } + touchMoveEvent(e) { + this._pressedMouseOrTouchMoveEvent(e) + } + mouseUpEvent(e) { + this._mouseUpOrTouchEndEvent(e) + } + touchEndEvent(e) { + this._mouseUpOrTouchEndEvent(e), this._mouseOrTouchLeaveEvent(e) + } + contextMenuEvent(e) { + this._contextMenuOrTouchContextMenuEvent(e) + } + touchContextMenuEvent(e) { + this._contextMenuOrTouchContextMenuEvent(e) + } + mouseEnterEvent(e) { + this._mouseOrTouchEnterEvent(e) + } + mouseLeaveEvent(e) { + this._mouseOrTouchLeaveEvent(e) + } + mouseDoubleClickEvent(e) { + this._mouseDoubleClickOrDoubleTapEvent(e) + } + doubleTapEvent(e) { + this._mouseDoubleClickOrDoubleTapEvent(e) + } + _hightlightBackground(e, t, i) { + const s = this.chart.model().timeScale(); + let r = t[0].index, + n = t[0].index; + for (let e = 1; e < t.length; e++) r = Math.min(r, t[e].index), n = Math.max(n, t[e] + .index); + const a = Math.floor(s.indexToCoordinate(r) * i), + l = Math.ceil(s.indexToCoordinate(n) * i); + Object(o.fillRect)(e, a, 0, l - a, Math.ceil(this.size.h * i) + 1, f.a) + } + _addViewsOrMaxMin(e, t) { + if (e.length <= 1) { + for (const i of e) + if (i.timeAxisViews) { + const e = i.timeAxisViews(); + e && e.length && t.push(e) + } + } else t.push(this._minMaxViews(e)) + } + _minMaxViews(e) { + const t = []; + let i = 1 / 0, + s = -1 / 0, + r = null, + n = null; + for (const t of e) + if (t.timeAxisViews) { + const e = t.timeAxisViews(); + if (e && e.length) + for (let t = 0; t < e.length; ++t) { + const o = e[t], + a = o.coordinate(); + a >= s && (s = a, n = o), a <= i && (i = a, r = o) + } + } return n && t.push(n), r && t.push(r), t + } + _zoomAvailable() { + return !this.chart.model().timeScale().isEmpty() && this.chart.model().model() + .zoomEnabled() && this._options.pressedMouseMoveScale + } + _mouseDownOrTouchStartEvent(e) { + if (this._mousedown || !this._zoomAvailable()) return; + this._mousedown = !0; + const t = this.chart.model(); + t.timeScale().isEmpty() || t.startScaleTime(e.localX) + } + _pressedMouseOrTouchMoveEvent(e) { + this._zoomAvailable() && this.chart.model().scaleTimeTo(e.localX) + } + _mouseUpOrTouchEndEvent(e) { + this._zoomAvailable() && (this._mousedown = !1, this.chart.model().endScaleTime(), + this.restoreDefaultCursor()) + } + _contextMenuOrTouchContextMenuEvent(e) { + this._options.contextMenuEnabled && this._createContextMenu().then(t => t.show(e)) + } + _mouseOrTouchEnterEvent(e) { + this._zoomAvailable() && this.setCursor("ew-resize") + } + _mouseOrTouchLeaveEvent(e) { + this.restoreDefaultCursor() + } + _mouseDoubleClickOrDoubleTapEvent(e) { + Object(b.trackEvent)("GUI", "Double click time scale"), this.chart.model() + .resetTimeScale() + } + _createContextMenu() { + return v.ContextMenuManager.createMenu(this.getContextMenuActions(), { + statName: "TimeScaleContextMenu" + }) + } + } + }, + iR50: function(e) { + e.exports = JSON.parse( + '{"color-white":"#ffffff","color-black":"#000000","color-cold-gray-50":"#F8F9FD","color-cold-gray-100":"#F0F3FA","color-cold-gray-150":"#E0E3EB","color-cold-gray-200":"#D1D4DC","color-cold-gray-250":"#C1C4CD","color-cold-gray-300":"#B2B5BE","color-cold-gray-350":"#A3A6AF","color-cold-gray-400":"#9598A1","color-cold-gray-450":"#868993","color-cold-gray-500":"#787B86","color-cold-gray-550":"#6A6D78","color-cold-gray-600":"#5D606B","color-cold-gray-650":"#50535E","color-cold-gray-700":"#434651","color-cold-gray-750":"#363A45","color-cold-gray-800":"#2A2E39","color-cold-gray-850":"#1E222D","color-cold-gray-900":"#131722","color-cold-gray-950":"#0C0E15","color-ripe-red-50":"#FFEBEE","color-ripe-red-100":"#FFCDD2","color-ripe-red-200":"#ef9a9a","color-ripe-red-300":"#E57373","color-ripe-red-400":"#EF5350","color-ripe-red-500":"#F44336","color-ripe-red-600":"#E53935","color-ripe-red-700":"#D32F2F","color-ripe-red-800":"#C62828","color-ripe-red-900":"#B71C1C","color-ripe-red-a200":"#FF5252","color-ripe-red-a700":"#862226","color-ripe-red-a800":"#5B1E24","color-ripe-red-a900":"#351E25","color-tan-orange-50":"#FFF3E0","color-tan-orange-100":"#FFE0B2","color-tan-orange-200":"#FFCC80","color-tan-orange-300":"#ffb74d","color-tan-orange-400":"#FFA726","color-tan-orange-500":"#FF9800","color-tan-orange-600":"#FB8C00","color-tan-orange-700":"#F57C00","color-tan-orange-800":"#EF6C00","color-tan-orange-900":"#e65100","color-tan-orange-a200":"#ffab40","color-tan-orange-a400":"#ff9100","color-tan-orange-a700":"#FF6D00","color-iguana-green-100":"#C8E6C9","color-iguana-green-200":"#A5D6A7","color-iguana-green-300":"#81c784","color-iguana-green-400":"#66BB6A","color-iguana-green-500":"#4caf50","color-iguana-green-600":"#43a047","color-iguana-green-700":"#388e3c","color-iguana-green-800":"#2E7D32","color-iguana-green-900":"#1B5E20","color-iguana-green-a700":"#00c853","color-banana-yellow-100":"#FFF9C4","color-banana-yellow-200":"#FFF59D","color-banana-yellow-300":"#FFF176","color-banana-yellow-400":"#ffee58","color-banana-yellow-500":"#ffeb3b","color-banana-yellow-600":"#fdd835","color-banana-yellow-700":"#fbc02d","color-banana-yellow-800":"#f9a825","color-banana-yellow-900":"#F57F17","color-banana-yellow-a400":"#ffea00","color-banana-yellow-a700":"#ffd600","color-tv-blue-50":"#E3EFFD","color-tv-blue-100":"#BBD9FB","color-tv-blue-200":"#90BFF9","color-tv-blue-300":"#5B9CF6","color-tv-blue-400":"#3179F5","color-tv-blue-500":"#2962FF","color-tv-blue-600":"#1E53E5","color-tv-blue-700":"#1848CC","color-tv-blue-800":"#143EB3","color-tv-blue-900":"#0C3299","color-tv-blue-a100":"#82b1ff","color-tv-blue-a200":"#448aff","color-tv-blue-a400":"#2979ff","color-tv-blue-a600":"#2962FF","color-tv-blue-a700":"#143A87","color-tv-blue-a800":"#142E61","color-tv-blue-a900":"#132042","color-deep-blue-100":"#D1C4E9","color-deep-blue-200":"#B39DDB","color-deep-blue-300":"#9575cd","color-deep-blue-400":"#7e57c2","color-deep-blue-500":"#673ab7","color-deep-blue-700":"#512da8","color-deep-blue-800":"#4527A0","color-deep-blue-900":"#311B92","color-deep-blue-a100":"#b388ff","color-deep-blue-a700":"#6200EA","color-minty-green-50":"#E0F2F1","color-minty-green-100":"#B2DFDB","color-minty-green-200":"#80cbc4","color-minty-green-300":"#4db6ac","color-minty-green-400":"#26a69a","color-minty-green-500":"#009688","color-minty-green-600":"#00897b","color-minty-green-700":"#00796b","color-minty-green-800":"#00695C","color-minty-green-900":"#004D40","color-minty-green-a400":"#1de9b6","color-minty-green-a700":"#00BFA5","color-grapes-purple-50":"#F3E5F5","color-grapes-purple-100":"#E1BEE7","color-grapes-purple-200":"#CE93D8","color-grapes-purple-300":"#ba68c8","color-grapes-purple-400":"#ab47bc","color-grapes-purple-500":"#9c27b0","color-grapes-purple-600":"#8e24aa","color-grapes-purple-700":"#7b1fa2","color-grapes-purple-800":"#6A1B9A","color-grapes-purple-900":"#4A148C","color-grapes-purple-a200":"#E040FB","color-grapes-purple-a400":"#D500F9","color-grapes-purple-a700":"#aa00ff","color-berry-pink-100":"#F8BBD0","color-berry-pink-200":"#f48fb1","color-berry-pink-300":"#f06292","color-berry-pink-400":"#ec407a","color-berry-pink-500":"#e91e63","color-berry-pink-600":"#D81B60","color-berry-pink-700":"#C2185B","color-berry-pink-800":"#AD1457","color-berry-pink-900":"#880E4F","color-berry-pink-a100":"#ff80ab","color-berry-pink-a200":"#ff4081","color-sky-blue-100":"#B2EBF2","color-sky-blue-200":"#80DEEA","color-sky-blue-300":"#4dd0e1","color-sky-blue-400":"#26c6da","color-sky-blue-500":"#00bcd4","color-sky-blue-600":"#00acc1","color-sky-blue-700":"#0097A7","color-sky-blue-800":"#00838F","color-sky-blue-900":"#006064","color-sky-blue-a400":"#00e5ff","color-sky-blue-a700":"#00B8D4","color-deep-blue-600":"#5E35B1","color-facebook":"#1877F2","color-deep-facebook":"#1564CA","color-twitter":"#1DA1F2","color-deep-twitter":"#188CD3","color-youtube":"#FF0000","color-linkedin":"#007BB5","color-aqua-spring":"#ebf9f5","color-army-green":"#3d2c12","color-army-green-2":"#31230d","color-athens-gray-1":"#f2f3f5","color-athens-gray-2":"#f7f8fa","color-athens-gray-3":"#eceff2","color-black-180":"#b4b4b4","color-blue-dianne":"#21384d","color-bluish":"#2185cc","color-bright-gray":"#363c4e","color-brownish-grey":"#8d6e63","color-carnation":"#f04561","color-catskill-white":"#e1ecf2","color-charade":"#2f3241","color-charcoal-grey":"#323337","color-curious-blue":"#299dcd","color-dark-blue-grey":"#123440","color-darkness-blue-grey":"#12213b","color-dark-grey":"#292a2d","color-dark-grey-blue":"#28415a","color-dark-sky-blue":"#37a6ef","color-deep-sea-blue":"#016087","color-ebony-clay":"#262b3e","color-foam":"#d7f0fb","color-gull-gray":"#9db2bd","color-humming-bird":"#d3eef9","color-keppel-1":"#37bc9b","color-keppel-2":"#34b293","color-lavender-blush":"#ffedf0","color-lightish-purple":"#a75ee8","color-loblolly":"#c5cbce","color-manatee":"#878ca8","color-mandy":"#eb4d5c","color-medium-blue":"#2e7bb2","color-milk-chocolate":"#6f2626","color-mirage-1":"#131722","color-mirage-2":"#171b29","color-mirage-3":"#1c2030","color-mischka":"#d6d8e0","color-morning-glory":"#9addcc","color-oslo-gray":"#8b8e95","color-pale":"#fff2cf","color-pale-grey-1":"#f9fafb","color-pale-grey-2":"#e7ebee","color-pale-sky":"#6b7988","color-picton-blue-1":"#3bb3e4","color-puerto-rico":"#3bc2a1","color-purple-brown":"#4e2934","color-purple-brown-2":"#3d2028","color-radical-red":"#ff4a68","color-regent-gray":"#8797a5","color-scooter":"#38acdb","color-silver-tree":"#53b987","color-slate-gray":"#758696","color-sundown":"#ffa4b3","color-sunglow":"#ffca3b","color-tan-hide":"#ff9850","color-trout-1":"#4c525e","color-trout-2":"#4f5966","color-violet-1":"#332738","color-violet-2":"#271d2b","color-white-ice":"#ebf7fc","color-wild-watermelon":"#ff5773","color-readonly-input":"#b4b4b4","color-brand-dark":"#2a2c39","color-seeking-alpha-brand":"#ff7200"}' + ) + }, + iboI: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "customFormatters", (function() { + return s + })); + const s = { + dateFormatter: null, + timeFormatter: null, + tickMarkFormatter: null + } + }, + icPo: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolIcon", (function() { + return o + })); + var s = i("Ocx9"), + r = i("Ss5c"), + n = i("j3hX"); + class o extends r.LineDataSource { + constructor(e, t) { + super(e, t || o.createProperties()), this._sizeScale = NaN, this.version = 1, + document.fonts && document.fonts.check && document.fonts.load && !document + .fonts.check("12px FontAwesome") && document.fonts.load("12px FontAwesome", + "☺").then(() => { + this._isDestroyed || e.updateSource(this) + }), i.e("lt-pane-views").then(i.bind(null, "8GeE")).then(t => { + this._setPaneViews([new t.IconPaneView(this, e)]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Icon" + } + hasEditableCoordinates() { + return !1 + } + getAnchorLimit() { + return 80 + } + applyTemplate(e) { + delete e.icon, super.applyTemplate(e) + } + startChanging(e, t) { + super.startChanging(e, t); + const i = this.properties().childs(); + i.size.value() < 80 ? this._sizeScale = i.size.value() / 80 : this._sizeScale = + 1 + } + getChangePointForSync(e) { + return null + } + setPoint(e, t, i) { + const s = Object.assign({}, t), + r = this.pointToScreenPoint(this.points()[0])[1], + n = this.pointToScreenPoint(s)[1], + o = this.properties().childs(); + if (0 === e || 1 === e) { + const t = n.subtract(r).normalized(), + i = -t.x; + let s = Math.acos(i); + Math.asin(t.y) > 0 && (s = 2 * Math.PI - s), 0 === e && (s += Math.PI), o + .angle.setValue(s) + } else { + let e = 2 * n.subtract(r).length(); + e *= this._sizeScale, o.size.setValue(e), o.scale.setValue(1) + } + } + endChanging(e, t) { + const i = super.endChanging(e, t); + return this._sizeScale = NaN, i + } + properties() { + return super.properties() + } + getSourceIcon() { + return { + type: "text", + text: String.fromCharCode(this.properties().childs().icon.value()) + } + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolicon", e); + return o._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "XCOO")).then( + e => e.IconsDefinitionsViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e), e.addChild("backgroundsColors", new n + .LineToolColorsProperty([e.childs().color])), e.addExclusion("angle"), e + .addExclusion("scale") + } + } + }, + ijBy: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SetChartLayoutCommand", (function() { + return n + })); + var s = i("RDU5"), + r = i("VNzU"); + class n extends s.UndoCommand { + constructor(e, t) { + super("Change Chart Layout to " + r.layouts[t].title), this + ._chartWidgetCollection = e, this._newLayoutType = t, this._oldLayoutType = + e.layout.value() + } + redo() { + this._chartWidgetCollection.setLayout(this._newLayoutType) + } + undo() { + this._chartWidgetCollection.setLayout(this._oldLayoutType) + } + } + }, + ikwP: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "Size", (function() { + return o + })), i.d(t, "getCanvasDevicePixelRatio", (function() { + return a + })), i.d(t, "getContext2D", (function() { + return l + })), i.d(t, "getPrescaledContext2D", (function() { + return c + })), i.d(t, "getPretransformedContext2D", (function() { + return h + })), i.d(t, "hardResizeCanvas", (function() { + return u + })), i.d(t, "resizeCanvasPreservingContent", (function() { + return d + })), i.d(t, "fillRect", (function() { + return p + })), + i.d(t, "clearRect", (function() { + return _ + })), i.d(t, "drawScaled", (function() { + return m + })), i.d(t, "createDisconnectedCanvas", (function() { + return f + })), i.d(t, "createDisconnectedBoundCanvas", (function() { + return g + })), i.d(t, "createBoundCanvas", (function() { + return v + })), i.d(t, "calcTextHorizontalShift", (function() { + return S + })), i.d(t, "disableSelection", (function() { + return y + })); + var s = i("f2KN"), + r = i("Eyy1"), + n = i("Ialn"); + class o { + constructor(e, t) { + this.w = e, this.h = t + } + equals(e) { + return this.w === e.w && this.h === e.h + } + } + + function a(e) { + var t, i; + return Math.max(1, (null === (i = null === (t = e.ownerDocument) || void 0 === t ? void 0 : + t.defaultView) || void 0 === i ? void 0 : i.devicePixelRatio) || 1) + } + + function l(e) { + const t = Object(r.ensureNotNull)(e.getContext("2d")); + return t.setTransform(1, 0, 0, 1, 0, 0), t + } + + function c(e) { + const t = Object(r.ensureNotNull)(e.getContext("2d")), + i = a(e); + return t.setTransform(i, 0, 0, i, 0, 0), t + } + + function h(e, t) { + const i = Object(r.ensureNotNull)(e.canvas.getContext("2d")); + return i.setTransform(e.pixelRatio, 0, 0, e.pixelRatio, 0, 0), t || i.translate(.5, .5), i + } + + function u(e, t) { + e.resizeCanvas({ + width: 0, + height: 0 + }), e.resizeCanvas({ + width: t.w, + height: t.h + }) + } + + function d(e, t) { + const i = g(document, t), + s = c(i.canvas); + return s.save(), s.setTransform(1, 0, 0, 1, 0, 0), s.drawImage(e.canvas, 0, 0, e.canvasSize + .width * e.pixelRatio, e.canvasSize.height * e.pixelRatio), s.restore(), i + } + + function p(e, t, i, s, r, n) { + e.save(), e.translate(-.5, -.5), e.fillStyle = n, e.fillRect(t, i, s, r), e.restore() + } + + function _(e, t, i, s, r, n) { + e.save(), e.translate(-.5, -.5), e.globalCompositeOperation = "copy", e.fillStyle = n, e + .fillRect(t, i, s, r), e.restore() + } + + function m(e, t, i) { + e.save(), e.scale(t, t), i(), e.restore() + } + + function f(e, t, i) { + const s = b(e); + return void 0 === i && (i = a(s)), s.width = t.w * i, s.height = t.h * i, s + } + + function g(e, t) { + const i = b(e), + r = Object(s.a)(i, { + allowDownsampling: !1 + }); + return r.resizeCanvas({ + width: t.w, + height: t.h + }), r + } + + function b(e) { + const t = e.createElement("canvas"); + return y(t), t + } + + function v(e, t) { + const i = b(Object(r.ensureNotNull)(e.ownerDocument)); + e.appendChild(i); + const n = Object(s.a)(i, { + allowDownsampling: !1 + }); + return n.resizeCanvas({ + width: t.w, + height: t.h + }), n + } + + function S(e, t) { + return "center" === e.textAlign ? 0 : Object(n.isRtl)() ? "start" === e.textAlign || + "right" === e.textAlign ? t : 0 : "start" === e.textAlign || "left" === e.textAlign ? + 0 : t + } + + function y(e) { + e.style.userSelect = "none", e.style.webkitUserSelect = "none", e.style.msUserSelect = + "none", e.style.MozUserSelect = "none", e.style.webkitTapHighlightColor = "transparent" + } + }, + isVH: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty, + n = i("j3hX").LineToolColorsProperty; + class o extends s { + constructor(e, t) { + super(e, t || o.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "D4q4", 7)).then(({ + TrianglePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 3 + } + name() { + return "Triangle" + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "Zd1D"))) + .GeneralFiguresDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetooltriangle", e); + return o._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e), e.addChild("linesColors", new n([e.childs().color])) + } + } + t.LineToolTriangle = o + }, + it7y: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyDataWindowView", (function() { + return n + })); + var s = i("4miz"), + r = i("EYFt"); + class n extends s.b { + constructor(e, t) { + super(), this._invalidated = !0, this._study = e, this._model = t, this + ._valueProvider = this._createValuesProvider(e, t), this._items = this + ._valueProvider.getItems().map(e => new s.a(e.title, "")), this.update() + } + update() { + this._invalidated = !0 + } + items() { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._items + } + study() { + return this._study + } + _updateImpl() { + this._header = this._study.title(!0), this._title = this._study.title(); + const e = this._valueProvider.getValues(this._currentIndex()); + for (let t = 0; t < e.length; ++t) { + const i = e[t], + s = this._items[t]; + s.setValue(i.value), s.setVisible(i.visible), s.setColor(i.color) + } + } + _currentIndex() { + const e = this._model.crossHairSource().lockedIndex; + return void 0 !== e ? e : null !== this._model.crossHairSource().pane ? this + ._model.crossHairSource().appliedIndex() : null + } + _createValuesProvider(e, t) { + return new r.a(e, t) + } + } + }, + iu9X: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return r + })), i.d(t, "a", (function() { + return n + })); + var s = i("Eyy1"); + class r { + constructor() { + this._horizlines = [], this._hhists = [], this._polygons = [], this._vertlines = [], + this._containersCache = [], this._containerNamesCache = [], this + ._containersMapCache = new Map, this._addToCache("horizlines", this + ._horizlines), this._addToCache("hhists", this._hhists), this._addToCache( + "polygons", this._polygons), this._addToCache("vertlines", this._vertlines) + } + primitiveData(e) { + const t = {}; + let i = !1; + for (const s of this._containerNamesCache) { + const r = [], + n = this.getObjsContainer(s); + for (const t of n) { + if (t.isNaN()) continue; + const i = t.primitiveData(e); + i.data.length > 0 && r.push(i) + } + r.length > 0 && (t[s] = r, i = !0) + } + return i ? t : null + } + deleteErasedAndMarkPostedObjs() { + this.forEachList(e => { + e.deleteErasedItems(), e.markPostedItems() + }) + } + deleteErasedObjs() { + this.forEachList(e => e.deleteErasedItems()) + } + getObjsContainer(e) { + return Object(s.ensureDefined)(this._containersMapCache.get(e)) + } + forEachList(e) { + for (const t of this._containersCache) + for (const i of t) e(i.data) + } + _addToCache(e, t) { + this._containersCache.push(t), this._containerNamesCache.push(e), this + ._containersMapCache.set(e, t) + } + } + class n { + constructor(e, t) { + this.styleId = e, this.data = t + } + isNaN() { + return this.data.isNaN() + } + primitiveData(e) { + return { + styleId: this.styleId, + data: this.data.primitivesData(e) + } + } + } + }, + ivNn: function(e, t, i) { + "use strict"; + + function s(e) { + return Math.round(1e10 * e) / 1e10 + } + Object.defineProperty(t, "__esModule", { + value: !0 + }), t.alignTo = t.fixComputationError = t.isNaN = t.isInteger = t.isNumber = void 0, t + .isNumber = function(e) { + return "number" == typeof e && isFinite(e) + }, t.isInteger = function(e) { + return "number" == typeof e && e % 1 == 0 + }, t.isNaN = function(e) { + return !(e <= 0 || e > 0) + }, t.fixComputationError = s, t.alignTo = function(e, t) { + var i = e / t, + r = Math.floor(i), + n = i - r; + return n > 2e-10 ? s(n > .5 ? (r + 1) * t : r * t) : e + } + }, + j3hX: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolMultiplePropertyBaseImpl", (function() { + return l + })), i.d(t, "LineToolCollectedProperty", (function() { + return c + })), + i.d(t, "LineToolWidthsProperty", (function() { + return h + })), i.d(t, "LineToolColorsProperty", (function() { + return u + })), i.d(t, "MultipleLineWidthsProperty", (function() { + return p + })), i.d(t, "MultipleLineColorsProperty", (function() { + return _ + })); + var s = i("txPx"), + r = i("aIyQ"), + n = i.n(r); + const o = Object(s.getLogger)("Chart.LineToolCollectedProperty"); + class a { + applyValue(e, t) { + e.setValue(t) + } + } + class l { + constructor(e, t) { + this._onChange = new n.a, this._properties = e, e.forEach(e => e.subscribe(this, + () => { + this._onChange.fire(this) + })), this._showIfProperty = t + } + visible() { + var e; + return !this._showIfProperty || (null === (e = this._showIfProperty) || void 0 === + e ? void 0 : e.value()) + } + value() { + if (0 === this._properties.length) return o.logError( + "Incorrect call, should not request value of 0 properties"), "mixed"; + const e = this._properties[0].value(); + return 1 === this._properties.length || this._properties.every(t => t.value() === + e) ? e : "mixed" + } + state() {} + merge() {} + destroy() { + this._properties.forEach(e => e.unsubscribeAll(this)) + } + subscribe(e, t) { + this._onChange.subscribe(e, t) + } + unsubscribe(e, t) { + this._onChange.unsubscribe(e, t) + } + unsubscribeAll(e) { + this._onChange.unsubscribeAll(e) + } + } + class c extends l { + setValue(e, t, i) { + if ("mixed" === e) return; + const s = null != i ? i : new a; + this._properties.forEach(t => s.applyValue(t, e)) + } + } + class h extends c {} + class u extends c { + firstColor() { + return this._properties[0].value() + } + } + class d extends l { + setValue(e, t, i) { + if ("mixed" === e) return; + const s = null != i ? i : new a; + this._properties.forEach(t => t.setValue(e, void 0, s)) + } + } + class p extends d {} + class _ extends d {} + }, + j8de: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("tc+8"), + r = i.n(s); + class n extends r.a { + constructor(e, t) { + super(), this._lineSource = e, this._pointIndex = t + } + value() { + return this._lineSource.points()[this._pointIndex].index + } + setValue(e) { + const t = this._lineSource.points()[this._pointIndex]; + t.index = e, this._lineSource.startChanging(this._pointIndex, t), this + ._setPointImpl(t), this._lineSource.model().updateSource(this._lineSource), + this._listeners.fire(this); + const i = this._lineSource.endChanging(!0, !1); + this._lineSource.syncMultichartState(i) + } + _setPointImpl(e) { + this._lineSource.setPoint(this._pointIndex, e) + } + } + }, + jA0t: function(e, t, i) { + "use strict"; + var s = function() { + var e = {}; + + function t(e) { + return e.is_price_study + } + + function i(e, t) { + var i = t.slice(0).toLowerCase(); + if (e) { + for (var s = 0; s < e.length; ++s) + if (e[s].description.toLowerCase() === i || e[s].shortDescription + .toLowerCase() === i) return e[s]; + throw new Error("Can't find metainfo for `" + t + "`") + } + throw new Error("There is no studies metainfo at all") + } + var s = { + bool: function(e) { + return !!e + }, + integer: function(e) { + return parseInt(e) + }, + float: function(e) { + return parseFloat(e) + }, + string: function(e) { + return e + } + }; + return e.getStudyRecordFromArray = function(e, r) { + return function(e, r) { + var n; + if (!Array.isArray(e)) return { + id: (n = i(r.model().studiesMetaData(), e)).id, + overlay: t(n) + }; + for (var o, a = e.slice(0), l = a[0], c = t(n = i(r.model() + .studiesMetaData(), l)), h = n.inputs.map((function(e) { + return { + id: e.id, + type: e.type, + name: e.name + } + })), u = a.splice(1), d = 0; d < u.length; ++d) { + o || (o = {}); + var p = s[h[d].type] || s.string; + o[h[d].id] = p(u[d]) + } + return { + id: n.id, + name: l, + overlay: c, + inputs: o + } + }(e, r) + }, + e + }(); + e.exports = s + }, + jCNj: function(e, t, i) { + "use strict"; + var s = i("99ZO"), + r = i("3UA0").tzData; + + function n(e) { + this._name = e; + var t = r[e]; + if (t || (t = { + time: [], + offset: [] + }, this._invalid = !0), t.time.length !== t.offset.length && (t = { + time: [], + offset: [] + }, this._invalid = !0), !t.time_utc) { + for (var i = t.time, s = t.offset, n = i.length, o = new Array(n), a = 0; a < n; a++) i[ + a] *= 1e3, s[a] *= 1e3, o[a] = i[a] - s[a]; + t.time_utc = o + } + this.tz = t + } + + function o(e, t) { + var i = e.length; + if (0 === i) return -1; + if (isNaN(t)) throw Error("Key is NaN"); + for (var s = 0, r = i - 1, n = a((s + r) / 2);;) { + if (e[n] > t) { + if ((r = n - 1) < s) return n + } else if (r < (s = n + 1)) return n < i - 1 ? n + 1 : -1; + n = a((s + r) / 2) + } + } + n.prototype.offset_utc = function(e) { + return n._offset(this.tz.time_utc, this.tz.offset, e) + }, n.prototype.offset_loc = function(e) { + return n._offset(this.tz.time, this.tz.offset, e) + }, n.prototype.name = function() { + return this._name + }, n.prototype.correction_loc = function(e) { + var t = this.tz.time, + i = this.tz.offset, + s = o(t, e); + if (s < 1) return 0; + var r = i[s] - i[s - 1]; + if (r > 0 && e - t[s - 1] <= r) return r; + return 0 + }, n.prototype.is_valid = function() { + return !this._invalid + }, n._offset = function(e, t, i) { + var s = o(e, i); + return -1 === s ? 0 : t[s] + }; + var a = function(e) { + return 0 | e + }, + l = function(e) { + return 60 * e * 1e3 + }, + c = function(e, t) { + return h(e) - h(t) + }, + h = function(e) { + return e < 0 ? a(e / 1e3) - (e % 1e3 != 0 ? 1 : 0) : a(e / 1e3) + }; + + function u(e) { + return e % 4 == 0 && (e % 100 != 0 || e % 400 == 0) + } + var d = { + 0: 0, + 1: 31, + 2: 59, + 3: 90, + 4: 120, + 5: 151, + 6: 181, + 7: 212, + 8: 243, + 9: 273, + 10: 304, + 11: 334 + }, + p = { + ...s.WeekDays, + ...s.Months, + YEAR: 1, + MONTH: 2, + WEEK_OF_YEAR: 3, + DAY_OF_MONTH: 5, + DAY_OF_YEAR: 6, + DAY_OF_WEEK: 7, + HOUR_OF_DAY: 11, + MINUTE: 12, + SECOND: 13, + minutesPerDay: 1440, + millisecondsPerDay: l(1440), + get_minutes_from_hhmm: function(e) { + return -1 !== e.indexOf(":") && (e = e.split(":").join("")), e % 100 + 60 * a( + e / 100) + }, + get_year: function(e) { + return e.getUTCFullYear() + }, + get_month: function(e) { + return e.getUTCMonth() + }, + get_hours: function(e) { + return e.getUTCHours() + }, + get_minutes: function(e) { + return e.getUTCMinutes() + }, + get_seconds: function(e) { + return e.getUTCSeconds() + }, + get_day_of_month: function(e) { + return e.getUTCDate() + }, + get_day_of_week: function(e) { + return e.getUTCDay() + 1 + }, + get_day_of_year: function(e) { + var t = e.getUTCMonth(), + i = d[t]; + return t > p.JANUARY + 1 && u(e.getUTCFullYear()) && (i += 1), i + e + .getUTCDate() + }, + get_week_of_year: function(e) { + var t = new Date(Date.UTC(e.getUTCFullYear(), 0, 1)).getUTCDay(), + i = 0 === t ? 1 : 8 - t, + s = p.get_day_of_year(e) - i; + return Math.ceil(s / 7) + 1 + }, + get_minutes_from_midnight: function(e) { + return 60 * p.get_hours(e) + p.get_minutes(e) + }, + set_hms: function(e, t, i, s, r, n) { + e.setUTCHours(t), e.setUTCMinutes(i), e.setUTCSeconds(s), e.setUTCMilliseconds( + r), p.correct_time(e, n) + }, + correct_time: function(e, t) { + var i = e.getTime(), + s = t.correction_loc(i); + e.setTime(i + s) + }, + add_days_considering_dst: function(e, t, i) { + var s = e.offset_utc(t), + r = this.clone(t); + this.add_date(r, i); + var n = e.offset_utc(r); + return r.setTime(r.getTime() + s - n), r + }, + add_date: function(e, t) { + e.setTime(e.getTime() + t * p.millisecondsPerDay) + }, + add_minutes: function(e, t) { + e.setTime(e.getTime() + l(t)) + }, + clone: function(e) { + return new Date(e.getTime()) + }, + get_days_per_year: function(e) { + var t = e.getUTCFullYear(); + return this.days_per_year(t) + }, + days_per_year: function(e) { + return u(e) ? 366 : 365 + }, + get_days_in_month: function(e, t) { + let i; + switch (e) { + case 0: + case 2: + case 4: + case 6: + case 7: + case 9: + case 11: + i = 31; + break; + case 1: + i = 28, u(t) && i++; + break; + default: + i = 30 + } + return i + }, + get_part: function(e, t) { + switch (t) { + case p.YEAR: + return p.get_year(e); + case p.MONTH: + return p.get_month(e); + case p.DAY_OF_MONTH: + return p.get_day_of_month(e); + case p.WEEK_OF_YEAR: + return p.get_week_of_year(e); + case p.DAY_OF_WEEK: + return p.get_day_of_week(e); + case p.HOUR_OF_DAY: + return p.get_hours(e); + case p.MINUTE: + return p.get_minutes(e); + case p.DAY_OF_YEAR: + return p.get_day_of_year(e); + case p.SECOND: + return p.get_seconds(e); + default: + return e.getTime() + } + }, + time_minutes: l, + time_seconds: function(e) { + return 1e3 * e + }, + time_minutes_diff: function(e, t) { + return a(c(e, t) / 60) + }, + time_seconds_diff: c, + utc_to_cal: function(e, t) { + return new Date(p.utc_to_cal_ts(e, t)) + }, + utc_to_cal_ts: function(e, t) { + return t + e.offset_utc(t) + }, + get_cal: function(e, t, i, s, r, n, o) { + var a = new Date(Date.UTC(t, i, s, r || 0, n || 0, o || 0)), + l = e.offset_utc(+a); + return new Date(a.valueOf() - l) + }, + get_cal_from_unix_timestamp_ms: function(e, t) { + return new Date(t + e.offset_utc(t)) + }, + get_cal_utc: function(e, t, i) { + return new Date(Date.UTC(e, t, i)) + }, + cal_to_utc: function(e, t) { + var i = t.getTime(); + return i - e.offset_loc(i) + }, + get_timezone: function(e) { + return new n(e) + }, + shift_day: function(e, t) { + var i = e - 1; + return (i += t) > 6 ? i %= 7 : i < 0 && (i = (7 + i % 7) % 7), i + 1 + } + }; + e.exports = p + }, + jFln: function(e, t, i) { + "use strict"; + var s = i("Hr11"), + r = s.greaterThan, + n = s.lessThan, + o = window.CanvasEx = i("8Uy/"); + o.computeDashPattern = function(e) { + return [ + [e.lineWidth, 2 * e.lineWidth], + [5 * e.lineWidth, 6 * e.lineWidth], + [6 * e.lineWidth, 6 * e.lineWidth], + [e.lineWidth, 4 * e.lineWidth], + [2 * e.lineWidth, e.lineWidth] + ][e.lineStyle - 1] + }, o.drawLine = function(e, t, i, s, r) { + isFinite(t) && isFinite(s) && isFinite(i) && isFinite(r) && (e.lineStyle !== o + .LINESTYLE_SOLID ? o.drawDashedLine(e, t, i, s, r) : o.drawSolidLine(e, t, i, s, + r)) + }, o.drawArrow = function(e, t, i, s, r, n) { + if (isFinite(t) && isFinite(s) && isFinite(i) && isFinite(r)) { + var o = Math.round(n / 2), + a = t + o, + l = s + o; + e.beginPath(), e.moveTo(l, r), e.lineTo(a, i), e.moveTo(t, i + o), e.lineTo(a, i), e + .lineTo(t + n, i + o), e.stroke() + } + }, o.drawSolidLine = function(e, t, i, s, r) { + e.beginPath(), e.moveTo(t, i), e.lineTo(s, r), e.stroke() + }, o.setLineStyle = function(e, t) { + e.lineStyle = t; + var i = []; + t !== o.LINESTYLE_SOLID && (i = o.computeDashPattern(e)), o.setLineDash(e, i) + }, o.setLineDash = function(e, t) { + "function" == typeof e.setLineDash ? e.setLineDash(t) : void 0 !== e.mozDash ? e + .mozDash = t : void 0 !== e.webkitLineDash && (e.webkitLineDash = t) + }, o.drawPoly = function(e, t, i) { + e.beginPath(), e.moveTo(t[0].x, t[0].y); + for (var s = 0; s < t.length; s++) { + var r = t[s]; + e.lineTo(r.x, r.y) + } + e.closePath(), e.stroke(), i && e.fill() + }, o.drawDashedLine = function(e, t, i, s, r) { + e.save(); + var n = o.computeDashPattern(e); + if (e.beginPath(), "function" == typeof e.setLineDash) e.setLineDash(n); + else if (void 0 !== e.mozDash) e.mozDash = n; + else { + if (void 0 === e.webkitLineDash) return o.dashedLineTo(e, t, i, s, r, n), e + .stroke(), void e.restore(); + e.webkitLineDash = n + } + e.moveTo(t, i), e.lineTo(s, r), e.stroke(), e.restore() + }, o.drawDashedLineHorizontal = function(e, t, i, s) { + e.save(); + var r = o.computeDashPattern(e), + n = 0, + a = e.lineWidth, + l = a / 2; + e.translate(-l, -l); + for (var c = !0, h = t + s; t < h;) { + var u = r[n]; + c && e.fillRect(t, i, u, a), c = !c, t += u, + n = n === r.length - 1 ? 0 : n + 1 + } + e.restore() + }, o.drawDashedLineVertical = function(e, t, i, s) { + e.save(); + var r = o.computeDashPattern(e), + n = 0, + a = e.lineWidth, + l = a / 2; + e.translate(-l, -l); + for (var c = !0, h = i + s; i < h;) { + var u = r[n]; + c && e.fillRect(t, i, a, u), c = !c, i += u, n = n === r.length - 1 ? 0 : n + 1 + } + e.restore() + }, o.dashedLineTo = function(e, t, i, s, o, a) { + var l = { + thereYet: r, + cap: Math.min + }, + c = { + thereYet: r, + cap: Math.min + }; + i - o > 0 && (c.thereYet = n, c.cap = Math.max), t - s > 0 && (l.thereYet = n, l.cap = + Math.max), e.moveTo(t, i); + for (var h = t, u = i, d = 0, p = !0; !l.thereYet(h, s) || !c.thereYet(u, o);) { + var _ = Math.atan2(o - i, s - t), + m = a[d]; + h = l.cap(s, h + Math.cos(_) * m), u = c.cap(o, u + Math.sin(_) * m), p ? e.lineTo( + h, u) : e.moveTo(h, u), d = (d + 1) % a.length, p = !p + } + }, o.setFont = function(e, t) { + if (e.font !== t) try { + e.font = t + } catch (e) {} + }, "undefined" != typeof CanvasRenderingContext2D && (CanvasRenderingContext2D.prototype + .setFont = function(e) { + o.setFont(this, e) + }, CanvasRenderingContext2D.prototype.lineStyle = o.LINESTYLE_SOLID), e.exports = o + }, + jJ9X: function(e, t, i) {}, + jRfx: function(e, t, i) { + "use strict"; + i.d(t, "c", (function() { + return o + })), i.d(t, "a", (function() { + return a + })), i.d(t, "b", (function() { + return l + })); + var s = i("Eyy1"), + r = i("3u3j"); + class n extends r.a { + constructor(e, t, i) { + super(e, t, i), this._restorePane = !1 + } + redo() { + const e = this._chartModel.panes().length, + t = this._chartModel.panes()[this._targetPaneIndex()], + i = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(this + ._sourceId)), + r = Object(s.ensureNotNull)(this._chartModel.paneForSource(i)), + n = this._chartModel.children(i, !0); + r.bulkActionMacro(() => { + n.forEach(e => this._chartModel.detachSource(e)), this + ._restorePane = this._chartModel.detachSource(i) + }); + const o = "overlay" === this._initialPriceScalePosition ? this + ._initialPriceScalePosition : void 0, + a = t.findSuitableScale(i, void 0, o), + l = 0 === a.dataSources().length; + if (t.bulkActionMacro(() => { + t.addDataSource(i, a, !1), n.forEach(e => t.addDataSource(e, a, !1)) + }), i === this._chartModel.mainSeries()) { + const e = t.priceScalePosition(a); + t.movePriceScale(a, e, 0) + } + if (l) { + Object(s.ensureNotNull)(i.priceScale()).restoreState(this + ._newPriceScaleState(t.isOverlay(i))) + } + this._chartModel.fullUpdate(), e !== this._chartModel.panes().length && this + ._chartModel.setShouldBeSavedEvenIfHidden(!0) + } + undo() { + let e; + e = this._restorePane ? this._chartModel.createPane(this._initialPaneIndex) : + this._chartModel.panes()[this._initialPaneIndex]; + const t = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(this + ._sourceId)), + i = Object(s.ensureNotNull)(this._chartModel.paneForSource(t)), + r = this._chartModel.children(t, !0); + i.bulkActionMacro(() => { + r.forEach(e => this._chartModel.detachSource(e)), this._chartModel + .detachSource(t) + }); + let n = e.getPriceScaleById(this._initialPriceScaleId); + null === n && (n = e.createPriceScaleAtPosition(this._initialPriceScalePosition, + this._initialPriceScaleIndex)), e.bulkActionMacro(() => { + e.addDataSource(t, n, !0), r.forEach(t => e.addDataSource(t, n, !1)) + }), Object(s.ensureNotNull)(t.priceScale()).restoreState(this + ._originalPriceScaleState()), this._chartModel.fullUpdate() + } + } + class o extends n { + constructor(e, t, i) { + super(e, t, i) + } + _targetPaneIndex() { + return this._initialPaneIndex - 1 + } + } + class a extends n { + constructor(e, t, i) { + super(e, t, i) + } + _targetPaneIndex() { + return this._initialPaneIndex + 1 + } + } + class l extends n { + constructor(e, t, i, s) { + super(e, t, s), this._targetPane = i + } + _targetPaneIndex() { + return this._targetPane + } + } + }, + jTis: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "CalloutConsts", (function() { + return s + })), + function(e) { + e[e.RoundRadius = 8] = "RoundRadius", e[e.TextMargins = 2] = "TextMargins", e[e + .MinWidth = 100] = "MinWidth" + }(s || (s = {})) + }, + jeZR: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "AppliedTimeFrame", (function() { + return r + })); + var s = i("QfUd"); + class r { + constructor(e) { + this._appliedTimeFrame = new s.a(null), this._appliedTimeFrameInfo = null, this + ._appliedTimeFrameChangedBound = this._appliedTimeFrameChanged.bind(this), this + ._model = e, e.mainSeries().dataEvents().seriesTimeFrame().subscribe(this, this + ._onSeriesTimeFrame), this._appliedTimeFrame.subscribe(this + ._appliedTimeFrameChangedBound) + } + destroy() { + this._appliedTimeFrame.unsubscribe(this._appliedTimeFrameChangedBound), this._model + .timeScale().logicalRangeChanged().unsubscribeAll(this), this._model + .mainSeries().dataEvents().seriesTimeFrame().unsubscribeAll(this) + } + appliedTimeFrame() { + return this._appliedTimeFrame + } + _appliedTimeFrameChanged() { + this._model.timeScale().logicalRangeChanged().unsubscribe(this, this + ._invalidateAppliedTimeFrame) + } + _onSeriesTimeFrame(e, t, i, s) { + if (s) { + const e = this._model.timeScale(); + this._appliedTimeFrameInfo = { + logicalRange: e.logicalRange(), + baseIndex: e.baseIndex() + }, e.logicalRangeChanged().subscribe(this, this._invalidateAppliedTimeFrame) + } + } + _invalidateAppliedTimeFrame() { + if (null === this._appliedTimeFrameInfo) return; + const e = this._model.timeScale(), + t = e.logicalRange(), + i = e.baseIndex(), + s = this._appliedTimeFrameInfo.logicalRange, + r = this._appliedTimeFrameInfo.baseIndex; + (null === t || null === s || Math.abs(i - t.left() - (r - s.left())) >= .01 || Math + .abs(i - t.right() - (r - s.right())) >= .01) && this._appliedTimeFrame + .setValue(null) + } + } + }, + jenN: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("txPx"), + r = i("7Fue"), + n = i("xWfy"), + o = i("qySK"), + a = i("KcY8"); + class l extends a.a { + constructor(e, t) { + super(), this._source = e, this._data = t + } + _updateRendererData(e, t, i) { + e.visible = !1; + const s = this._source.priceScale(), + r = this._source.properties().visible.value(); + if (!s || s.isEmpty() || !r) return; + const n = this._source.properties().graphics[this._data.lineType][this._data + .styleId + ]; + if (!(n.visible && n.visible.value() && n.showPrice && n.showPrice.value())) + return; + const o = this._source.firstValue(); + if (null === o) return; + const a = this._data.line.level, + l = n.color.value(); + i.background = l, i.textColor = this.generateTextColor(l), i.coordinate = s + .priceToCoordinate(a, o), e.text = s.formatPrice(a, o), e.visible = !0 + } + } + i.d(t, "createGraphicsPaneViews", (function() { + return d + })), i.d(t, "createGraphicsPriceAxisViews", (function() { + return _ + })), i.d(t, "isStudyGraphicsEmpty", (function() { + return r.a + })), i.d(t, "StaticStudyGraphics", (function() { + return n.a + })), i.d(t, "emptyStudyGraphics", (function() { + return n.b + })), i.d(t, "loadStudyGraphics", (function() { + return n.c + })), i.d(t, "saveStudyGraphics", (function() { + return n.d + })), i.d(t, "LiveStudyGraphics", (function() { + return o.a + })); + const c = Object(s.getLogger)("Chart.StudyGraphics"), + h = new Set(["dwgtablecells"]); + async function u(e, t, s, r) { + switch (e) { + case "hhists": + return new((await i.e("study-pane-views").then(i.bind(null, "Gj0v"))) + .HHistPaneView)(t, s, r); + case "horizlines": + return new((await i.e("study-pane-views").then(i.bind(null, "1sos"))) + .HorizLinePaneView)(t, s, r); + case "vertlines": + return new((await i.e("study-pane-views").then(i.bind(null, "psYU"))) + .VertLinePaneView)(t, s, r); + case "polygons": + return new((await i.e("study-pane-views").then(i.bind(null, "BJvp"))) + .PolygonPaneView)(t, s, r) + } + return null + } + async function d(e, t, i) { + const s = [], + r = Object.keys(e.graphicsInfo()); + r.sort((e, t) => p(e) - p(t)); + for (const n of r) { + const r = await u(n, e, t, i); + null !== r ? s.push(r) : h.has(n) || c.logWarn(n + + " is not supported by this build of graphics subsystem, skipping") + } + return s + } + + function p(e) { + switch (e) { + case "polygons": + return -100; + case "trendchannels": + return -90; + default: + return 0 + } + } + + function _(e) { + const t = Object.keys(e.graphicsInfo()), + i = []; + for (const s of t) switch (s) { + case "hlines": + e.graphics().hlines().forEach((t, r) => { + t.forEach(t => { + void 0 !== t.level && i.push(new l(e, { + line: { + level: t.level + }, + styleId: r, + lineType: s + })) + }) + }); + break; + case "horizlines": + e.graphics().horizlines().forEach((t, r) => { + t.forEach(t => { + void 0 !== t.level && i.push(new l(e, { + line: { + level: t.level + }, + styleId: r, + lineType: s + })) + }) + }) + } + return i + } + }, + jkoZ: function(e, t, i) { + "use strict"; + var s = i("XlJ7").makeFont, + r = i("XlJ7").parseFont, + n = (0, i("txPx").getLogger)("Model.ChartTradingUtils"), + o = { + _fontHeightCache: {}, + _parsedColorCache: {}, + _parseColor: function(e) { + if (this._parsedColorCache[e]) return this._parsedColorCache[e]; + var t = document.createElement("div"); + t.style.color = e; + var i = t.style.color.match( + /^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i) || t.style.color + .match( + /^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d*\.?\d+)\s*\)$/i), + s = { + r: i[1], + g: i[2], + b: i[3], + a: i[4] || "1" + }; + return this._parsedColorCache[e] = s, s + }, + getColorFromProperties: function(e, t) { + var i = 1 - t.value() / 100, + s = this._parseColor(e.value()); + return "rgba(" + s.r + "," + s.g + "," + s.b + "," + i + ")" + }, + setColorToProperties: function(e, t, i) { + var s = this._parseColor(e); + t.setValue("rgb(" + s.r + "," + s.g + "," + s.b + ")"); + var r = 100 * (1 - s.a); + i.setValue(Math.max(0, Math.min(r, 100))) + }, + getFontFromProperties: function(e, t, i, r) { + return s(t.value(), e.value(), r.value() ? "italic" : "", i.value() ? "bold" : + "") + }, + setFontToProperties: function(e, t, i, s, o) { + var a = r(e); + null !== a ? (a.family.length > 0 && t.setValue(a.family), i.setValue(a.size), s + .setValue(a.bold), o.setValue(a.italic)) : n.logError("Invalid font: " + + e) + }, + fontHeight: function(e) { + if (!this._fontHeightCache[e]) { + var t = document.createElement("span"); + t.appendChild(document.createTextNode("height")), document.body.appendChild( + t), t.style.cssText = "font: " + e + + "; white-space: nowrap; display: inline;"; + var i = t.offsetHeight; + document.body.removeChild(t), this._fontHeightCache[e] = Math.ceil(i) + } + return this._fontHeightCache[e] + }, + drawPolyHoverOrPress: function(e, t, i, s) { + s ? (e.save(), e.fillStyle = "rgba(0, 0, 0, 0.15)", CanvasEx.drawPoly(e, t, !0), + e.restore()) : i && (e.save(), e.fillStyle = "rgba(0, 0, 0, 0.1)", + CanvasEx.drawPoly(e, t, !0), e.restore()) + }, + repaint: function(e) { + e.lightUpdate() + }, + roundToMinTick: function(e, t) { + var i = 1 / e.mainSource().base(); + return i * Math.round(t / i) + } + }; + e.exports = o + }, + jofe: function(e, t, i) { + "use strict"; + + function s() { + let e, t; + return { + promise: new Promise((i, s) => { + e = i, t = s + }), + reject: t, + resolve: e + } + } + i.r(t), i.d(t, "createDeferredPromise", (function() { + return s + })) + }, + jpZi: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + var s = i("Eyy1"), + r = (i("YFKU"), i("HbRj"), i("RDU5")); + const n = window.t("Exclude line tools from group {group}"); + class o extends r.UndoCommand { + constructor(e, t, i) { + super(n.format({ + group: t.name() + })), this._model = e, this._groupId = t.id, this._groupName = t.name(), this + ._lineToolsIds = i.map(e => e.id()) + } + redo() { + const e = Object(s.ensureNotNull)(this._model.lineToolsGroupModel().groupForId( + this._groupId)), + t = this._lineToolsIds.map(e => this._model.dataSourceForId(e)); + e.excludeLineTools(t), 0 === e.lineTools().length && this._model + .lineToolsGroupModel().removeGroup(e) + } + undo() { + const e = this._lineToolsIds.map(e => this._model.dataSourceForId(e)), + t = this._model.lineToolsGroupModel().groupForId(this._groupId); + null !== t ? t.addLineTools(e) : this._model.lineToolsGroupModel().createGroup( + e, this._groupName, this._groupId) + } + } + }, + jvrd: function(e, t, i) { + "use strict"; + i.d(t, "g", (function() { + return n + })), i.d(t, "e", (function() { + return a + })), i.d(t, "d", (function() { + return l + })), i.d(t, "c", (function() { + return c + })), i.d(t, "f", (function() { + return h + })), i.d(t, "a", (function() { + return u + })), i.d(t, "b", (function() { + return d + })); + var s = i("Eyy1"), + r = i("k9/m"); + + function n(e, t, i) { + const s = e.barFunction(); + switch (e.style()) { + case 3: + case 10: + case 2: + return s(t.value); + default: + return t.value[-1 === i ? 3 : 2] + } + } + + function o(e) { + return e >= 0 ? 1 : -1 + } + + function a(e, t) { + return -1 === o(e) !== t ? -1 : 1 + } + + function l(e, t, i, s) { + const r = Math.min(t, Math.max(0, 1 === s ? i : t - i)); + return i - s * Math.abs(r * e / 100) + } + + function c(e, t, i) { + const s = e.index(); + return null === s ? null : { + index: s, + price: t.coordinateToPrice(t.height() / 2, i) + } + } + + function h(e, t) { + const i = e.data().bars(), + s = i.first(), + a = i.last(); + if (null === s || null === a) return null; + let l; + const c = t.index(); + if (null === c) { + if (void 0 === t.time) return null; + const e = t.time(), + n = s.value[0], + o = a.value[0]; + if (e < n - 86400 || e > o) return null; + l = i.searchByTime(e, r.PlotRowSearchMode.NearestRight, 4) + } else l = i.search(c); + return null === l ? null : { + index: l.index, + price: n(e, l, o(t.position())) + } + } + + function u(e, t, i) { + const s = c(e, t, i); + if (null === s) return null; + const r = a(e.position(), t.isInverted()); + return { + index: s.index, + price: s.price, + poleStartY: t.height(), + visualDirection: 1, + positionPointDirection: r + } + } + + function d(e, t) { + const i = h(e, t), + r = e.priceScale(), + n = Object(s.ensureNotNull)(e.firstValue()); + if (null === i) return u(t, r, n); + let o = 0; + const l = e.properties(), + c = e.model().timeScale(), + d = r.priceToCoordinate(i.price, n); + switch (e.style()) { + case 3: + o = l.areaStyle.linewidth.value() / 2; + break; + case 2: + o = l.lineStyle.linewidth.value() / 2; + break; + case 10: + const e = Math.abs(100 - l.baselineStyle.baseLevelPercentage.value()); + o = r.height() * e / 100 > d ? l.baselineStyle.topLineWidth.value() / 2 : l + .baselineStyle.bottomLineWidth.value() / 2; + break; + case 1: + case 9: + case 8: + case 12: + o = 3; + break; + case 0: + o = l.barStyle.thinBars.value() ? 3 : Math.max(3, .25 * c.barSpacing()); + break; + case 11: + o = l.rangeStyle.thinBars.value() ? 3 : Math.max(3, .25 * c.barSpacing()); + break; + case 4: + case 7: + o = 3; + break; + case 5: + o = Math.max(4, .25 * c.barSpacing()); + break; + case 6: + o = Math.max(5, .25 * c.barSpacing()) + } + const p = a(t.position(), r.isInverted()), + _ = d - p * o; + return { + index: i.index, + price: i.price, + poleStartY: _, + visualDirection: p, + positionPointDirection: p + } + } + }, + jy4L: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "makeNextSymbolId", (function() { + return r + })), i.d(t, "makeNextStudyId", (function() { + return o + })); + let s = 0; + + function r() { + return s++, "ss_" + s + } + let n = 0; + + function o() { + return n++, "st" + n + } + }, + k4w6: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })); + var s = i("2ijp"); + class r extends s.a { + constructor(e) { + super(), this._series = e, this._model = e.model() + } + } + }, + "k9/m": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PlotRowSearchMode", (function() { + return l + })), i.d(t, "PlotList", (function() { + return u + })), i.d(t, "mergeMinMax", (function() { + return d + })), i.d(t, "mergePlotRows", (function() { + return p + })); + var s = i("Eyy1"), + r = i("Y7w9"), + n = i("tqok"), + o = i("txPx"); + const a = Object(o.getLogger)("Chart.PlotList"); + var l; + ! function(e) { + e[e.NearestLeft = -1] = "NearestLeft", e[e.Exact = 0] = "Exact", e[e.NearestRight = 1] = + "NearestRight" + }(l || (l = {})); + + function c(e) { + return e.index + } + + function h(e) { + return e.value[0] + } + class u { + constructor(e = null, t = null) { + this._items = [], this._start = 0, this._end = 0, this._shareRead = !1, this + ._minMaxCache = new Map, this._rowSearchCacheByIndex = new Map, this + ._rowSearchCacheByIndexWithoutEmptyValues = new Map, this + ._rowSearchCacheByTime = new Map, this._rowSearchCacheByTimeWithoutEmptyValues = + new Map, this._plotFunctions = e || new Map, this._emptyValuePredicate = t + } + clear() { + this._items = [], this._start = 0, this._end = 0, this._shareRead = !1, this + ._minMaxCache.clear(), this._invalidateSearchCaches() + } + first() { + return this.size() > 0 ? this._items[this._start] : null + } + last() { + return this.size() > 0 ? this._items[this._end - 1] : null + } + firstIndex() { + return this.size() > 0 ? this._indexAt(this._start) : null + } + lastIndex() { + return this.size() > 0 ? this._indexAt(this._end - 1) : null + } + size() { + return this._end - this._start + } + isEmpty() { + return 0 === this.size() + } + contains(e) { + return null !== this.search(e, l.Exact) + } + valueAt(e) { + const t = this.search(e); + return null !== t ? t.value : null + } + add(e, t) { + if (this._shareRead) return a.logDebug( + "add: readonly collection modification attempt"), !1; + const i = { + index: e, + value: t + }, + s = this._nonCachedSearch(e, l.Exact, c); + return this._invalidateSearchCaches(), null === s ? (this._items.splice(this + ._lowerbound(e, c), 0, i), this._start = 0, this._end = this._items + .length, !0) : (this._items[s] = i, !1) + } + search(e, t = l.Exact, i) { + return this._searchImpl(e, t, this._rowSearchCacheByIndex, this + ._rowSearchCacheByIndexWithoutEmptyValues, c, i) + } + searchByTime(e, t = l.Exact, i) { + return this._searchImpl(e, t, this._rowSearchCacheByTime, this + ._rowSearchCacheByTimeWithoutEmptyValues, h, i) + } + fold(e, t) { + let i = t; + for (let t = this._start; t < this._end; ++t) { + i = e(this._indexAt(t), this._valueAt(t), i) + } + return i + } + findFirst(e, t) { + const i = void 0 !== t && Math.min(this._start + t, this._end) || this._end; + for (let t = this._start; t < i; ++t) { + const i = this._indexAt(t), + s = this._valueAt(t); + if (e(i, s)) return { + index: i, + value: s + } + } + return null + } + findLast(e, t) { + const i = void 0 !== t && Math.max(this._end - t, this._start) || this._start; + for (let t = this._end - 1; t >= i; --t) { + const i = this._indexAt(t), + s = this._valueAt(t); + if (e(i, s)) return { + index: i, + value: s + } + } + return null + } + each(e) { + for (let t = this._start; t < this._end; ++t) { + if (e(this._indexAt(t), this._valueAt(t))) break + } + } + reduce(e, t) { + let i = t; + for (let t = this._start; t < this._end; ++t) { + i = e(i, this._indexAt(t), this._valueAt(t)) + } + return i + } + range(e, t) { + const i = new u(this._plotFunctions, this._emptyValuePredicate); + return i._items = this._items, i._start = this._lowerbound(e, c), i._end = this + ._upperbound(t), i._shareRead = !0, i + } + rangeIterator(e, t) { + const i = this._lowerbound(e, c), + s = this._upperbound(t); + if (i === s) return { + hasNext: () => !1, + next: () => { + throw new Error("Invalid operation") + } + }; + let r = i - 1; + return { + hasNext: () => r < s - 1, + next: () => (r += 1, this._items[r]) + } + } + minMaxOnRangeCached(e, t, i) { + if (this.isEmpty()) return null; + let s = null; + for (const r of i) { + s = d(s, this._minMaxOnRangeCachedImpl(e - r.offset, t - r.offset, r.name)) + } + return s + } + minMaxOnRange(e, t, i) { + if (this.isEmpty()) return null; + let s = null; + for (const r of i) { + s = d(s, this._minMaxOnRange(e - r.offset, t - r.offset, r.name)) + } + return s + } + merge(e) { + return this._shareRead ? (a.logDebug( + "merge: readonly collection modification attempt"), null) : 0 === e.length ? + null : this.isEmpty() || e[e.length - 1].index < this._items[0].index ? this + ._prepend(e) : e[0].index > this._items[this._items.length - 1].index ? this + ._append(e) : 1 === e.length && e[0].index === this._items[this._items.length - + 1].index ? (this._updateLast(e[0]), e[0]) : this._merge(e) + } + addTail(e, t = !1) { + let i = 0; + t && this._end - this._start > 0 && (i = 1, this._items[this._end - this._start - 1] + .value = e[0].value); + for (let t = i; t < e.length; ++t) { + const i = e[t], + s = this.lastIndex(); + if (null === s) { + a.logError("Can't add tail to the empty plotlist"); + break + } + this.add(s + 1, i.value) + } + this._invalidateSearchCaches() + } + move(e) { + if (this._shareRead) return void a.logDebug( + "move: readonly collection modification attempt"); + if (0 === e.length) return; + const t = this._items.slice(); + for (const i of e) { + const e = this._bsearch(i.old, c); + if (null !== e && void 0 !== t[e]) + if (i.new === n.INVALID_TIME_POINT_INDEX) t[e] = void 0; + else { + t[e] = { + index: i.new, + value: t[e].value + }; + const s = this._bsearch(i.new, c); + if (null !== s) { + const e = t[s]; + void 0 !== e && e.index === i.new && (t[s] = void 0) + } + } + } + this._items = t.filter(e => void 0 !== e).sort((e, t) => e.index - t.index), this + ._invalidateSearchCaches(), this._minMaxCache.clear(), this._start = 0, this + ._end = this._items.length + } + remove(e) { + if (this._shareRead) return a.logDebug( + "remove: readonly collection modification attempt"), null; + const t = this._nonCachedSearch(e, l.NearestRight, c); + if (null === t) return null; + const i = this._items.splice(t); + return this._end = this._items.length, this._minMaxCache.clear(), this + ._invalidateSearchCaches(), i.length > 0 ? i[0] : null + } + state() { + return { + start: this._start, + end: this._end, + data: this._items, + shareread: this._shareRead + } + } + restoreState(e) { + e ? (this._start = e.start, this._end = e.end, this._shareRead = e.shareread, this + ._items = e.data, this._minMaxCache.clear(), this._invalidateSearchCaches() + ) : this.clear() + } + _indexAt(e) { + return this._items[e].index + } + _valueAt(e) { + return this._items[e].value + } + _length() { + return this._items.length + } + _searchImpl(e, t, i, s, r, n) { + const o = void 0 !== n ? i : s, + a = void 0 !== n ? 1e4 * (t + 1) + n : t; + let l = o.get(e); + if (void 0 !== l) { + const e = l.get(a); + if (void 0 !== e) return e + } + const c = this._nonCachedSearch(e, t, r, n); + if (null === c) return null; + const h = { + index: this._indexAt(c), + value: this._valueAt(c) + }; + return void 0 === l && (l = new Map, o.set(e, l)), l.set(a, h), h + } + _nonCachedSearch(e, t, i, s) { + const r = this._lowerbound(e, i), + n = r === this._end || e !== i(this._items[r]); + if (n && t !== l.Exact) switch (t) { + case l.NearestLeft: + return this._searchNearestLeft(r, s); + case l.NearestRight: + return this._searchNearestRight(r, s); + default: + throw new TypeError("Unknown search mode") + } + if (void 0 === s || n || t === l.Exact) return n ? null : r; + switch (t) { + case l.NearestLeft: + return this._nonEmptyNearestLeft(r, s); + case l.NearestRight: + return this._nonEmptyNearestRight(r, s); + default: + throw new TypeError("Unknown search mode") + } + } + _nonEmptyNearestRight(e, t) { + const i = Object(s.ensure)(this._emptyValuePredicate), + r = Object(s.ensure)(t); + for (; e < this._end && i(this._valueAt(e), r);) e += 1; + return e === this._end ? null : e + } + _nonEmptyNearestLeft(e, t) { + const i = Object(s.ensureNotNull)(this._emptyValuePredicate), + r = Object(s.ensure)(t); + for (; e >= this._start && i(this._valueAt(e), r);) e -= 1; + return e < this._start ? null : e + } + _searchNearestLeft(e, t) { + if (e === this._start) return null; + const i = e - 1, + s = i !== this._end ? i : null; + return void 0 !== t && null !== s ? this._nonEmptyNearestLeft(s, t) : s + } + _searchNearestRight(e, t) { + const i = e, + s = i !== this._end ? i : null; + return void 0 !== t && null !== s ? this._nonEmptyNearestRight(s, t) : s + } + _bsearch(e, t) { + const i = this._lowerbound(e, t); + return i !== this._end && e === t(this._items[i]) ? i : null + } + _lowerbound(e, t) { + return Object(r.lowerbound)(this._items, e, (e, i) => t(e) < i, this._start, this + ._end) + } + _upperbound(e) { + return Object(r.upperbound)(this._items, e, (e, t) => t.index > e, this._start, this + ._end) + } + _plotMinMax(e, t, i) { + let s = null; + const r = this._plotFunctions.get(i); + if (void 0 === r) throw new Error(`Plot "${i}" is not registered`); + for (let i = e; i < t; i++) { + const e = r(this._items[i].value); + null == e || Number.isNaN(e) || (null === s ? s = { + min: e, + max: e + } : (e < s.min && (s.min = e), e > s.max && (s.max = e))) + } + return s + } + _invalidateCacheForRow(e) { + const t = Math.floor(e.index / 30); + this._minMaxCache.forEach(e => e.delete(t)) + } + _prepend(e) { + return Object(s.assert)(!this._shareRead, "collection should not be readonly"), + Object(s.assert)(0 !== e.length, "plotRows should not be empty"), this + ._invalidateSearchCaches(), this._minMaxCache.clear(), this._items = e.concat( + this._items), this._start = 0, this._end = this._items.length, e[0] + } + _append(e) { + return Object(s.assert)(!this._shareRead, "collection should not be readonly"), + Object(s.assert)(0 !== e.length, "plotRows should not be empty"), this + ._invalidateSearchCaches(), this._minMaxCache.clear(), this._items = this._items + .concat(e), this._start = 0, this._end = this._items.length, e[0] + } + _updateLast(e) { + Object(s.assert)(!this.isEmpty(), "plot list should not be empty"); + const t = this._items[this._end - 1]; + Object(s.assert)(t.index === e.index, "last row index should match new row index"), + this._invalidateCacheForRow(e), this._invalidateSearchCaches(), this._items[this + ._end - 1] = e + } + _merge(e) { + return Object(s.assert)(0 !== e.length, "plot rows should not be empty"), this + ._invalidateSearchCaches(), this._minMaxCache.clear(), this._items = p(this + ._items, e), this._start = 0, this._end = this._items.length, e[0] + } + _minMaxOnRangeCachedImpl(e, t, i) { + if (this.isEmpty()) return null; + let r = null; + const n = Object(s.ensureNotNull)(this.firstIndex()), + o = Object(s.ensureNotNull)(this.lastIndex()), + a = Math.max(e, n), + l = Math.min(t, o), + c = 30 * Math.ceil(a / 30), + h = Math.max(c, 30 * Math.floor(l / 30)); + r = d(r, this._minMaxOnRange(a, Math.min(c, t, l), i)); + let u = this._minMaxCache.get(i); + void 0 === u && (u = new Map, this._minMaxCache.set(i, u)); + for (let e = Math.max(c + 1, a); e < h; e += 30) { + const t = Math.floor(e / 30); + let s = u.get(t); + if (void 0 === s) { + const e = 30 * t, + r = 30 * (t + 1) - 1; + s = this._minMaxOnRange(e, r, i), u.set(t, s) + } + r = d(r, s) + } + r = d(r, this._minMaxOnRange(h, l, i)); + return r + } + _minMaxOnRange(e, t, i) { + return this._plotMinMax(this._lowerbound(e, c), this._upperbound(t), i) + } + _invalidateSearchCaches() { + this._rowSearchCacheByIndex.clear(), this._rowSearchCacheByIndexWithoutEmptyValues + .clear(), this._rowSearchCacheByTime.clear(), this + ._rowSearchCacheByTimeWithoutEmptyValues.clear() + } + } + + function d(e, t) { + if (null === e) return t; + if (null === t) return e; + return { + min: Math.min(e.min, t.min), + max: Math.max(e.max, t.max) + } + } + + function p(e, t) { + const i = function(e, t) { + const i = e.length, + s = t.length; + let r = i + s, + n = 0, + o = 0; + for (; n < i && o < s;) e[n].index < t[o].index ? n++ : e[n].index > t[o].index ? + o++ : (n++, o++, r--); + return r + }(e, t), + s = new Array(i); + let r = 0, + n = 0; + const o = e.length, + a = t.length; + let l = 0; + for (; r < o && n < a;) e[r].index < t[n].index ? (s[l] = e[r], r++) : e[r].index > t[n] + .index ? (s[l] = t[n], n++) : (s[l] = t[n], r++, n++), l++; + for (; r < o;) s[l] = e[r], r++, l++; + for (; n < a;) s[l] = t[n], n++, l++; + return s + } + }, + kIXa: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "am+t", 7)).then(({ + TimeCyclesPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Time Cycles" + } + setPoint(e, t, i) { + var s = Object.assign({}, t), + r = this._points[0], + n = this._points[1]; + r.price = s.price, n.price = s.price, this._points[e] = s, this.normalizePoints() + } + addPoint(e, t, i) { + var r = s.prototype.addPoint.call(this, e, t, !0); + if (r) { + var n = this._points[0]; + this._points[1].price = n.price, i || (this.normalizePoints(), this + .createServerPoints()) + } + return r + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "BABJ"))) + .TimeCyclesPatternDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetooltimecycles", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolTimeCycles = n + }, + kNVT: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "setSymbolSearchCompleteOverrideFunction", (function() { + return r + })), i.d(t, "getSymbolSearchCompleteOverrideFunction", (function() { + return n + })); + let s = e => Promise.resolve(e); + + function r(e) { + s = e + } + + function n() { + return s + } + }, + kcTO: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "formatterOptions", (function() { + return l + })), i.d(t, "numberToStringWithLeadingZero", (function() { + return c + })), i.d(t, "isFormatterHasForexAdditionalPrecision", (function() { + return h + })), i.d(t, "PriceFormatter", (function() { + return u + })); + var s = i("YFKU"), + r = i("ogJP"), + n = i("Ialn"), + o = i("txPx"); + const a = Object(o.getLogger)("Chart.PriceFormatter"), + l = { + decimalSign: ".", + decimalSignFractional: "'" + }; + + function c(e, t) { + if (!Object(r.isNumber)(e)) return "n/a"; + if (!Object(r.isInteger)(t)) throw new TypeError("invalid length"); + if (t < 0 || t > 16) throw new TypeError("invalid length"); + if (0 === t) return e.toString(); + return ("0000000000000000" + e.toString()).slice(-t) + } + + function h(e) { + return "hasForexAdditionalPrecision" in e + } + class u { + constructor(e, t, i, n) { + if (this.type = "price", this._formatterErrors = { + custom: Object(s.t)("Price format is invalid."), + fraction: Object(s.t)("Fraction part is invalid."), + secondFraction: Object(s.t)("Second fraction part is invalid.") + }, t || (t = 1), Object(r.isNumber)(e) && Object(r.isInteger)(e) || (e = 100), + e < 0) throw new TypeError("invalid base"); + this._priceScale = e, this._minMove = t, this._minMove2 = n, i && void 0 !== n && + n > 0 && 2 !== n && 4 !== n && 8 !== n ? a.logDebug("invalid minmove2") : (this + ._fractional = i, this.calculateDecimal()) + } + isFractional() { + return !!this._fractional + } + state() { + return { + fractional: this._fractional, + fractionalLength: this._fractionalLength, + minMove: this._minMove, + minMove2: this._minMove2, + priceScale: this._priceScale + } + } + calculateDecimal() { + if (this._fractionalLength = 0, this._priceScale > 0 && this._minMove > 0) { + let e = this._priceScale; + for (this._fractional && this._minMove2 && (e /= this._minMove2); e > 1;) e /= + 10, this._fractionalLength++ + } + } + format(e, t, i, s = !0, r = !0) { + let o, a = ""; + return e < 0 ? (a = !1 === s ? "" : "−", e = -e) : e && !0 === t && (a = "+"), o = + this._fractional ? a + this._formatAsFractional(e, i) : a + this + ._formatAsDecimal(e, i), r ? Object(n.forceLTRStr)(o) : o + } + parse(e) { + return e = (e = Object(n.stripLTRMarks)(e)).replace("−", "-"), this._fractional ? + this._minMove2 ? this._parseAsDoubleFractional(e) : this + ._parseAsSingleFractional(e) : this._parseAsDecimal(e) + } + hasForexAdditionalPrecision() { + return !this._fractional && 10 === this._minMove2 + } + static serialize(e) { + return e.state() + } + static deserialize(e) { + return new u(e.priceScale, e.minMove, e.fractional, e.minMove2) + } + _formatAsDecimal(e, t) { + //格式化价格 + if (this.type == "price") { + var price = "0.00"; + //如果价格大于1则保留2位小数 + if (e > 1) { + price = e.toFixed(2) + } else { + //否则 + let splitList = e.toString().split(".") + let num = 0 + if (splitList[1]) { + for (var i = 0; i < splitList[1].length; i++) { + if (splitList[1][i] == "0") { + num++ + } else { + //如果不为0了 直接中断 + break; + } + } + } + if (num >= 4) { + var last = "" + splitList[1].substring(num, splitList[1].length) + if (last.length >= 5) { + if (parseInt(last[4]) >= 5) { + price = '0.0{' + num + '}' + (parseInt(last[0] + last[1] + last[2] + last[ + 3]) + 1) + } else { + price = '0.0{' + num + '}' + last[0] + last[1] + last[2] + last[3] + } + } else { + price = '0.0{' + num + '}' + last + } + } else { + price = Number(e).toFixed(5) + } + + } + return price + } else { + let i; + t = t || 0, i = this._fractional ? Math.pow(10, this._fractionalLength || 0) : + Math + .pow(10, t) * this._priceScale / this._minMove; + const s = 1 / i; + let r; + if (i > 1) r = Math.floor(e); + else { + const t = Math.floor(Math.round(e / s) * s); + r = 0 === Math.round((e - t) / s) ? t : t + s + } + let n = ""; + if (i > 1) { + let s = +(Math.round(e * i) - r * i).toFixed(this._fractionalLength); + s >= i && (s -= i, r += 1); + const o = void 0 !== this._fractionalLength ? this._fractionalLength : NaN; + n = l.decimalSign + c(+s.toFixed(this._fractionalLength) * this._minMove, + o + + t), n = this._removeEndingZeros(n, t) + } + return r.toString() + n + } + } + _getFractPart(e, t) { + const i = [0, 5], + s = [0, 2, 5, 7]; + return 2 === t ? void 0 === i[e] ? -1 : i[e] : 4 === t ? void 0 === s[e] ? -1 : s[ + e] : e + } + _formatAsFractional(e, t) { + const i = this._priceScale / this._minMove; + let s = Math.floor(e), + r = t ? Math.floor(e * i) - s * i : Math.round(e * i) - s * i; + r === i && (r = 0, s += 1); + let n = ""; + if (t) { + let o = (e - s - r / i) * i; + o = Math.round(o * Math.pow(10, t)), n = c(o, t), n = this._removeEndingZeros(n, + t) + } + if (!this._fractionalLength) throw new Error("_fractionalLength is not calculated"); + let o = ""; + if (this._minMove2) { + const e = r % this._minMove2; + r = (r - e) / this._minMove2; + const t = c(r, this._fractionalLength), + i = this._getFractPart(e, this._minMove2); + o = t + l.decimalSignFractional + i + } else r = this._getFractPart(r, this._priceScale), o = c(r * this._minMove, this + ._fractionalLength); + return s.toString() + l.decimalSignFractional + o + n + } + _removeEndingZeros(e, t) { + for (let i = 0; i < t && "0" === e[e.length - 1]; i++) e = e.substr(0, e.length - + 1); + return e + } + _parseAsDecimal(e) { + let t = new RegExp(/^(-?)[0-9]+$/).exec(e); + if (t) { + const t = parseFloat(e); + return { + value: t, + res: !0, + suggest: this.format(t) + } + } + if (t = new RegExp("^(-?)[0-9]+\\" + l.decimalSign + "[0-9]*$").exec(e), t) { + const t = parseFloat(e.replace(l.decimalSign, ".")); + return { + value: t, + res: !0, + suggest: this.format(t) + } + } + return { + error: this._formatterErrors.custom, + res: !1 + } + } + _patchFractPart(e, t) { + const i = { + 0: 0, + 5: 1 + }, + s = { + 0: 0, + 2: 1, + 5: 2, + 7: 3 + }; + return 2 === t ? void 0 === i[e] ? -1 : i[e] : 4 === t ? void 0 === s[e] ? -1 : s[ + e] : e + } + _parseAsSingleFractional(e) { + let t = new RegExp(/^(-?)[0-9]+$/).exec(e); + if (t) { + const t = parseFloat(e); + return { + value: t, + res: !0, + suggest: this.format(t) + } + } + if (t = new RegExp("^(-?)([0-9]+)\\" + l.decimalSignFractional + "([0-9]+)$").exec( + e), t) { + const e = !!t[1], + i = parseInt(t[2]), + s = this._priceScale, + r = this._patchFractPart(parseInt(t[3]), s); + if (r >= s || r < 0) return { + error: this._formatterErrors.fraction, + res: !1 + }; + let n = i + r / s; + return e && (n = -n), { + value: n, + res: !0, + suggest: this.format(n) + } + } + return { + error: this._formatterErrors.custom, + res: !1 + } + } + _parseAsDoubleFractional(e) { + let t = new RegExp(/^(-?)[0-9]+$/).exec(e); + if (t) { + const t = parseFloat(e); + return { + value: t, + res: !0, + suggest: this.format(t) + } + } + if (t = new RegExp("^(-?)([0-9]+)\\" + l.decimalSignFractional + "([0-9]+)\\" + l + .decimalSignFractional + "([0-9]+)$").exec(e), t) { + const e = !!t[1], + i = parseInt(t[2]), + s = void 0 !== this._minMove2 ? this._minMove2 : NaN, + r = this._priceScale / s, + n = this._minMove2, + o = this._patchFractPart(parseInt(t[3]), r), + a = this._patchFractPart(parseInt(t[4]), n); + if (o >= r || o < 0) return { + error: this._formatterErrors.fraction, + res: !1 + }; + if (void 0 !== n && a >= n || a < 0) return { + error: this._formatterErrors.secondFraction, + res: !1 + }; + let l = void 0 !== n ? i + o / r + a / (r * n) : NaN; + return e && (l = -l), { + value: l, + res: !0, + suggest: this.format(l) + } + } + return { + error: this._formatterErrors.custom, + res: !1 + } + } + } + }, + krs7: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("O+9b"), + n = i("ocLq"), + o = i("KG+6"), + a = i("LxhU"), + l = i("8LSp"), + c = i("aR4w"), + h = i("WYmP"); + class u extends c.a { + constructor(e, t, i, s, r, n, o, a, l, c, u) { + super(e, t, i, n, new h.a, o, !0, a, l, () => c, u, s, r, !1), this + ._firstBarTime = s, this._lastBarTime = r + } + update(e) { + this._supplyRowsLayout(this._ctx), this.timeInRequestedRange(e) && super.update( + e) + } + timeInRequestedRange(e) { + const t = this._timeScale().get(e); + return this._firstBarTime <= t && t < this._lastBarTime + } + } + var d = i("iu9X"), + p = i("c7G1"), + _ = i("hXqA"), + m = i("WTyR"), + f = i("rWtV"); + i.d(t, "VolumeProfileVisibleRange", (function() { + return g + })), i.d(t, "volumeProfileVisibleRangeStudyItem", (function() { + return b + })); + class g extends r.a { + constructor() { + super(...arguments), this._rowsLayout = "Number Of Rows", this._rowSize = 24, + this._volume = "Up/Down", this._firstBarTime = 0, this._lastBarTime = 0, + this._vaVolumePercent = 70, this._anInt = 0, this._eraseCmds = [] + } + nextGraphicsObjId() { + return ++this._anInt + } + pushEraseObjCmd(e, t) { + this._eraseCmds.push(new p.b(e, t)) + } + popEraseCmds() { + const e = this._eraseCmds; + return this._eraseCmds = [], e + } + init(e, t) { + this._studyDataUpdate = new _.a(!0), + this._hists = new l.a, this._pocLines = new h.a, this._valueAreaHists = + new l.a; + const i = new d.b; + i.getObjsContainer("hhists").push(new d.a("histBars2", this._hists)), i + .getObjsContainer("hhists").push(new d.a("histBarsVA", this + ._valueAreaHists)), i.getObjsContainer("horizlines").push(new d.a( + "pocLines", this._pocLines)), this._studyDataUpdate.init(i), this + ._rowsLayout = t(0), this._rowSize = t(1), this._volume = t(2), this + ._firstBarTime = t(3), this._lastBarTime = t(4), this._vaVolumePercent = t( + 5), this.verifyRowSizeInput(this._rowSize, this._rowsLayout), this + ._originalResolution = a.Interval.parse(e.symbol.interval + e.symbol + .resolution); + const n = this._lastBarTime + this._originalResolution.inMilliseconds(this + ._lastBarTime); + 0 === this._firstBarTime && 0 === this._lastBarTime ? this._basicResolution = + this._originalResolution : this._basicResolution = this + .findBasicResolutionForFromTo(this._originalResolution, this._firstBarTime, + n, Object(s.ensureDefined)(e.symbol.info)), this._hasSecondarySymbol = ! + this._originalResolution.isEqualTo(this._basicResolution), this + ._hasSecondarySymbol && e.new_sym(e.symbol.tickerid, this._basicResolution + .value()); + const o = this._getRowsLayout(this._rowsLayout, this._rowSize); + this._vbPCheckHaveVolumeExpr = new m.a(this), this._volumeByPriceExpr = new u( + Object(r.c)(this._volume), e, this, this._firstBarTime, n, this._hists, + this._pocLines, this._valueAreaHists, this._vaVolumePercent, o, Object(r + .b)()), this._volumeByPriceExpr.setIdsGeneratorProxy(this), this + ._developingPocSeries = new f.a, this._developingVAHighSeries = new f.a, + this._developingVALowSeries = new f.a + } + main(e, t, i) { + this._hasSecondarySymbol && e.select_sym(1), this._timeSeries = e + .new_unlimited_var(), this._openSeries = e.new_unlimited_var(), this + ._highSeries = e.new_unlimited_var(), this._lowSeries = e + .new_unlimited_var(), this._closeSeries = e.new_unlimited_var(), this + ._volumeSeries = e.new_unlimited_var(); + const r = { + type: "composite", + data: [] + }; + if (i && i.period === this._basicResolution.value() && (this._timeSeries.set(n + .Std.time(e)), this._openSeries.set(n.Std.open(e)), this._highSeries + .set(n.Std.high(e)), this._lowSeries.set(n.Std.low(e)), this + ._closeSeries.set(n.Std.close(e)), this._volumeSeries.set(n.Std.volume( + e)), this._developingPocSeries.addHist(n.Std.time(e)), this + ._developingVAHighSeries.addHist(n.Std.time(e)), this + ._developingVALowSeries.addHist(n.Std.time(e)), this + ._vbPCheckHaveVolumeExpr.update(0, e.symbol.isLastBar), this + ._volumeByPriceExpr.update(0), this._developingPocSeries + .removeLastIfNaN(), this._developingVAHighSeries.removeLastIfNaN(), this + ._developingVALowSeries.removeLastIfNaN(), e.symbol.isLastBar)) { + this._studyDataUpdate.setEraseCmds(this.popEraseCmds()), this + ._studyDataUpdate.update(); + const e = this._studyDataUpdate.getUpdate(); + e.json && r.data.push({ + nonseries: !0, + type: "study_graphics", + data: e.json + }), e.jsonUpdate && r.data.push({ + nonseries: !0, + type: "study_graphics", + data: e.jsonUpdate + }) + } + if (this._hasSecondarySymbol && e.select_sym(0), i && i.period === this + ._originalResolution.value()) { + Object(s.assert)(e.symbol.time === i.time); + const t = i.time, + n = t + this._originalResolution.inMilliseconds(t) - 1; + if (t && t >= this._firstBarTime) { + const e = this._developingPocSeries.getLeftOrEqual(n), + t = this._developingVAHighSeries.getLeftOrEqual(n), + i = this._developingVALowSeries.getLeftOrEqual(n); + r.data.push([e, t, i]) + } else r.data.push([NaN, NaN, NaN]) + } + return r + } + time() { + return this._timeSeries + } + open() { + return this._openSeries + } + high() { + return this._highSeries + } + low() { + return this._lowSeries + } + close() { + return this._closeSeries + } + volume() { + return this._volumeSeries + } + developingPoc() { + return this._developingPocSeries + } + developingVAHigh() { + return this._developingVAHighSeries + } + developingVALow() { + return this._developingVALowSeries + } + } + const b = { + constructor: g, + name: "Volume Profile Visible Range", + metainfo: { + _metainfoVersion: 51, + id: "VbPVisible@tv-basicstudies-49", + description: "Volume Profile Visible Range", + shortDescription: "VPVR", + format: { + type: "volume" + }, + is_price_study: !0, + linkedToSeries: !0, + palettes: {}, + inputs: [{ + id: "rowsLayout", + name: "Rows Layout", + defval: "Number Of Rows", + options: ["Number Of Rows", "Ticks Per Row"], + type: "text" + }, { + id: "rows", + name: "Row Size", + defval: 24, + max: 1e6, + min: 1, + type: "integer" + }, { + id: "volume", + name: "Volume", + defval: "Up/Down", + options: ["Up/Down", "Total"], + type: "text" + }, { + id: "first_visible_bar_time", + name: "First Visible Bar Time", + defval: 0, + isHidden: !0, + max: 253370764800, + min: -253370764800, + type: "time" + }, { + id: "last_visible_bar_time", + name: "Last Visible Bar Time", + defval: 0, + isHidden: !0, + max: 253370764800, + min: -253370764800, + type: "time" + }, { + id: "vaVolume", + name: "Value Area Volume", + defval: 70, + max: 100, + min: 0, + type: "integer" + }], + plots: [{ + id: "developingPoc", + type: "line" + }, { + id: "developingVAHigh", + type: "line" + }, { + id: "developingVALow", + type: "line" + }], + graphics: { + hhists: { + histBars2: { + location: o.b.Relative, + title: "Volume Profile", + titles: ["Up Volume", "Down Volume"] + }, + histBarsVA: { + location: o.b.Relative, + title: "Value Area", + titles: ["Value Area Up", "Value Area Down"] + } + }, + horizlines: { + pocLines: { + name: "POC", + showPrice: !0 + } + } + }, + defaults: { + graphics: { + hhists: { + histBars2: { + colors: ["#1592e6", "#fbc123"], + direction: o.a.RightToLeft, + percentWidth: 30, + showValues: !1, + transparencies: [76, 76], + valuesColor: "#424242", + visible: !0 + }, + histBarsVA: { + colors: ["#1592e6", "#fbc123"], + direction: o.a.RightToLeft, + percentWidth: 30, + showValues: !1, + transparencies: [30, 30], + valuesColor: "#424242", + visible: !0 + } + }, + horizlines: { + pocLines: { + color: "#ff0000", + style: 0, + visible: !0, + width: 2 + } + } + }, + inputs: { + first_visible_bar_time: 0, + last_visible_bar_time: 0, + rows: 24, + rowsLayout: "Number Of Rows", + vaVolume: 70, + volume: "Up/Down" + }, + styles: { + developingPoc: { + color: "#ff0000", + linestyle: 0, + linewidth: 1, + plottype: 9, + trackPrice: !1, + transparency: 0, + visible: !1 + }, + developingVAHigh: { + color: "#0000ff", + linestyle: 0, + linewidth: 1, + plottype: 9, + trackPrice: !1, + transparency: 0, + visible: !1 + }, + developingVALow: { + color: "#0000ff", + linestyle: 0, + linewidth: 1, + plottype: 9, + trackPrice: !1, + transparency: 0, + visible: !1 + } + } + }, + styles: { + developingPoc: { + histogramBase: 0, + title: "Developing Poc" + }, + developingVAHigh: { + histogramBase: 0, + title: "Developing VA High" + }, + developingVALow: { + histogramBase: 0, + title: "Developing VA Low" + } + } + } + } + }, + "l+oz": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ChartSaverBase", (function() { + return s + })); + class s { + constructor(e) { + this._chartWidgetCollection = e + } + _getCommonSavingInfo(e) { + const t = this._chartWidgetCollection, + i = this._chartWidgetCollection.chartsSymbols(), + s = i[t.activeChartWidget.value().id()], + r = { + ...(n = s, { + ...n, + legs: JSON.stringify(null !== (o = n.legs) && void 0 !== o ? o : []) + }) + }; + var n, o; + const a = t.metaInfo; + return a.id.value() && (r.id = a.id.value()), r.name = a.name.value() || "", r + .description = a.description.value() || "", r.charts_symbols = function(e) { + const t = {}; + for (const i of Object.keys(e)) t[i] = { + symbol: e[i].symbol + }; + return JSON.stringify(t) + }(i), r.is_realtime = r.is_realtime = e ? "0" : "1", r + } + } + }, + l4sv: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "HorizontalLineRenderer", (function() { + return a + })); + var s = i("VdBB"), + r = i("jFln"), + n = i("gAom"), + o = i("Zp/P"); + class a { + constructor() { + this._data = null, this._hitTest = new s.HitTestResult(s.HitTestResult.REGULAR) + } + setData(e) { + this._data = e + } + setHitTest(e) { + this._hitTest = e + } + hitTest(e) { + if (null === this._data || !1 === this._data.visible) return null; + const t = Object(o.interactionTolerance)().line, + i = Math.abs(e.y - this._data.y) <= t + this._data.linewidth / 2, + s = void 0 === this._data.left || this._data.left - e.x <= t, + r = void 0 === this._data.right || e.x - this._data.right <= t; + return i && s && r ? this._hitTest : null + } + draw(e, t) { + if (null === this._data) return; + if (!1 === this._data.visible) return; + if (this._data.y < -this._data.linewidth / 2 || this._data.y > t.cssHeight + this + ._data.linewidth / 2) return; + const i = t.pixelRatio; + e.lineCap = "butt", e.strokeStyle = this._data.color, e.lineWidth = Math.max(1, Math + .floor(this._data.linewidth * i)), void 0 !== this._data.linestyle && + Object(r.setLineStyle)(e, this._data.linestyle); + const s = void 0 !== this._data.left ? Math.max(this._data.left, 0) : 0, + o = void 0 !== this._data.right ? Math.min(this._data.right, t.cssWidth) : t + .cssWidth, + a = Math.round(this._data.y * i), + l = Math.floor(s * i), + c = Math.ceil(o * i); + Object(n.drawHorizontalLine)(e, a, l, c) + } + } + }, + l7y7: function(e, t) { + e.exports = + '' + }, + lA7n: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Kxc7"), + r = i("ulZB"); + class n extends r.b { + constructor(e, t) { + super(e, t, "FAVORITE_CHARTS_CHANGED", "loadChartDialog.favorites", {}) + } + } + var o = i("zUrt"), + a = i("FBuY"), + l = i("Vdly"), + c = i("/z0S"), + h = i("sQaR"); + i.d(t, "LoadChartService", (function() { + return u + })); + class u extends h.a { + constructor(e = null) { + super(), this._favoriteChartsService = new n(a.TVXWindowEvents, l), this + ._chartWidgetCollection = null, this._promise = null, this._dialog = null, + this._subscribe = e => { + this._setVisibility(e) + }, this._getChartEntry = e => ({ + id: e.id, + url: e.url, + title: e.name, + symbol: e.short_symbol, + interval: e.interval, + toolsCount: 0, + modified: e.modified_iso, + active: () => this._isActiveChart(e.id), + openAction: () => o.backend.loadChart(e), + deleteAction: () => o.backend.removeChart(e.image_url).then(() => + this._deleteChart(e.id)), + favoriteAction: this._updateFavorites + }), this._updateFavorites = e => this._favoriteChartsService.set(e), this + ._isActiveChart = e => null !== this._chartWidgetCollection && e === this + ._chartWidgetCollection.metaInfo.id.value(), this._deleteChart = e => { + this._isActiveChart(e) && (s.enabled("saveload_storage_customization") ? + null !== this._chartWidgetCollection && this + ._chartWidgetCollection.clearChartMetaInfo() : location.href = + "/chart/" + location.search) + }, this._chartWidgetCollection = e + } + showLoadDialog() { + Object(c.a)(this._showLoadDialog.bind(this), { + source: "Load chart", + sourceMeta: "Chart" + }) + } + show() { + this.showLoadDialog() + } + hide() { + var e, t; + null === (e = this._dialog) || void 0 === e || e.hide(), null === (t = this + ._dialog) || void 0 === t || t.visible().unsubscribe(this._subscribe) + } + _showLoadDialog() { + (s.enabled("saveload_requires_authentication") && !window.is_authenticated ? + Promise.resolve([]) : o.backend.getCharts()).then(e => e.map(this + ._getChartEntry)).then(e => { + const t = this._promise = Promise.all([i.e("redux"), i.e("react"), i + .e(1), i.e(3), i.e(4), i.e(6), i.e(8), i.e(9), i.e(12), + i.e(19), i.e(22), i.e(24), i.e(63), i.e(80), i.e(0), i + .e(2), i.e(5), i.e(7), i.e(10), i.e(18), i.e(20), i.e( + 56), i.e("load-chart-dialog") + ]).then(i.bind(null, "EgWQ")).then(i => { + if (this._promise === t) { + this._dialog && (this._dialog.hide(), this._dialog + .visible().unsubscribe(this._subscribe)); + const t = { + charts: e, + favoriteChartsService: this + ._favoriteChartsService, + chartWidgetCollection: this + ._chartWidgetCollection + }; + this._dialog = new i.LoadChartDialogRenderer(t), + this._dialog.visible().subscribe(this + ._subscribe), this._dialog.show() + } + }) + }) + } + } + }, + lCO3: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "Version", (function() { + return r + })); + var s = i("Eyy1"); + class r { + constructor(e, t) { + this._major = e, this._minor = t + } + major() { + return this._major + } + minor() { + return this._minor + } + isZero() { + return 0 === this._major && 0 === this._minor + } + toString() { + return this._major + "." + this._minor + } + compareTo(e) { + return this._major < e._major ? -1 : this._major > e._major ? 1 : this._minor < e + ._minor ? -1 : this._minor > e._minor ? 1 : 0 + } + isLess(e) { + return this.compareTo(e) < 0 + } + isLessOrEqual(e) { + return this.compareTo(e) <= 0 + } + isEqual(e) { + return 0 === this.compareTo(e) + } + isGreater(e) { + return this.compareTo(e) > 0 + } + isGreaterOrEqual(e) { + return this.compareTo(e) >= 0 + } + static parse(e) { + if (e instanceof r) return new r(e.major(), e.minor()); + if ("number" == typeof e) return Object(s.assert)(Math.floor(e) === e, + "Version should not be a float number"), new r(e, 0); + if ("string" == typeof e) { + const t = e.split("."); + if (1 === t.length) { + const i = parseInt(t[0], 10); + return Object(s.assert)(!isNaN(i), "Bad version string: " + e), new r(i, 0) + } + if (2 === t.length) { + const i = parseInt(t[0], 10); + Object(s.assert)(!isNaN(i), "Bad version string: " + e); + const n = parseInt(t[1], 10); + return Object(s.assert)(!isNaN(n), "Bad version string: " + e), new r(i, n) + } + throw new Error("Bad version string (one dot expected): " + e) + } + throw new Error("Bad version: " + e) + } + } + r.ZERO = new r(0, 0) + }, + lJvs: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("vAx0").ESDPaneView, + n = i("fTGZ").BarsMarksContainer, + o = i("mMWL"), + a = i("FQhm"), + l = i("zDbI").CHART_FONT_FAMILY, + c = i("Tmoa").generateColor, + h = i("XlJ7").makeFont; + class u extends r { + constructor(e, t, i) { + super(e, t, i), this.source = t, this.stylesCache = {}, this.templatesCache = {}, + this._lollipops = {}, this._lollipopsCounter = 0, this._itemIndexToId = new Map, + this._createLollipops() + } + _createLollipops() { + var e = this.source._model.timeScale(), + t = r.prototype._getY.call(this.source), + i = this.source._model.lastHittestData(), + n = this.source._model.hoveredSource(), + o = this; + Object.keys(this.source._marks).forEach((function(r) { + var a = this.source._marks[r], + l = a.id, + c = a.index; + if (null !== c) { + var h = l === o.getLastClickedLollipopId(), + u = void 0 !== o._lollipops[l] ? o._lollipops[l].itemIndex : + o._lollipopsCounter++; + o._itemIndexToId.has(u) || o._itemIndexToId.set(u, l); + var d = n === this.source && null !== i && i.activeItem === u; + o._lollipops[l] = { + id: l, + itemIndex: u, + basePoint: new s(e.indexToCoordinate(c) + 1, t), + hovered: d, + active: h, + barY: null, + label: a.label, + color: a.color, + items: a.tooltip, + visible: !0 + } + } + }), this), r.prototype._createRenderers.call(this) + } + createTooltipContent(e) { + return e.items ? { + title: e.items[0], + subTitle: e.items[1], + style: { + color: e.color + } + } : null + } + clearCaches() { + this.clearLastClicked(), this._lollipops = {}, this._lollipopsCounter = 0 + } + update() { + this._createLollipops(), this._invalidated = !1 + } + renderer() { + return this.update(), r.prototype.renderer.call(this) + } + _generateStyle(e, t, i) { + var s = e + t + i; + if (!(s in this.stylesCache)) { + var r = "hovered" === e, + n = "active" === e, + o = r || n, + a = "white"; + n ? a = t : r && (a = c(t, 85)) === t && (n = !0); + var u = { + strokeStyle: t, + lineWidth: 1, + fillStyle: "white", + barLine: { + lineStyle: CanvasEx.LINESTYLE_DASHED + }, + lollipop: { + width: 23, + height: 23, + lineWidth: 1.5, + bottom: 2, + fillStyle: a, + fillCircle: o, + strokeStyle: t, + text: { + label: i, + strokeStyle: n ? "white" : t, + font: h(12, l) + } + } + }; + this.stylesCache[s] = u + } + return this.stylesCache[s] + } + getStyle(e) { + var t = e.active ? "active" : e.hovered ? "hovered" : "default"; + return this._generateStyle(t, e.color, e.label) + } + createText(e, t) { + "string" == typeof e.items ? t.addTextLine(e.items) : Array.isArray(e.items) && e + .items.forEach((function(e) { + t.addTextLine(e) + })) + } + hasTooltip(e) { + return e.items && e.items.length + } + _getLollipopIdByIndex(e) { + return this._itemIndexToId.get(e) + } + } + e.exports = class extends n { + constructor(e) { + super(e), this.toolname = "UserDefinedTimescaleMarks"; + var t = this; + o.hideMarksOnBars().subscribe(this, (function() { + t._properties.visible.setValue(!o.hideMarksOnBars().value()) + })), this._paneView = new u(e, this, this._showTooltip.bind(this)), this + ._requestedPointsets = new Set + } + _initialize(e) { + this._properties.visible.setValue(!0) + } + userEditEnabled() { + return !1 + } + _plateViewData(e) { + return { + text: e.text + } + } + onClicked(e) { + var t = this._paneView._getLollipopIdByIndex(e.activeItem); + a.emit("onTimescaleMarkClick", t) + } + clearMarks() { + var e = this._model.chartApi(); + if (e.connected()) { + var t = this; + Object.keys(this._marks).forEach((function(i) { + var s = t._getPointsetId(i); + e.removePointset(s) + })) + } + this._requestedPointsets.clear(), super.clearMarks(), this._paneView + .clearCaches(), this.onNeedRepaint.fire() + } + _getData(e) { + var t = this._model.mainSeries().symbolInfo(); + if (t) { + var i = this.roundRange(this._rangeDifference(e)), + s = this, + r = this._model.mainSeries(), + n = r.seriesSource().symbolInstanceId(), + o = r.properties().interval.value(); + ChartApiInstance.getTimescaleMarks(t, i.start, i.end, (function(t) { + var i = s._model.chartApi(); + t.forEach((function(e) { + e.index = null; + var t = e.id, + r = s._getPointsetId(t), + a = s._marks[t]; + if (a && null !== a.index && (a.tickmark === + e.tickmark ? e.index = a.index : s + ._requestedPointsets.has(r) && i + .connected() && (i.removePointset( + r), s._requestedPointsets + .delete(r))), s._marks[t] = e, + null === e.index && i.connected()) { + s._requestedPointsets.add(r); + var l = [ + [e.tickmark, 0] + ]; + i.createPointset(r, "turnaround", n, o, + l, (function(e) { + s._onPointsetData(e) + })) + } + }), s), s._loadedRange = s._rangeUnion(e, s + ._loadedRange), s.onNeedRepaint.fire() + }), o) + } + } + _getPointsetId(e) { + return "pointsetMark_" + e + } + _onPointsetData(e) { + var t = e.params.customId.split("_")[1], + i = this._marks[t], + s = e.params.plots; + i && 1 === s.length && (i.index = s[0].value[0]) + } + updatePlateData(e, t) { + return t.barWidth = this.barWidth(), t.text = e.text, t.tooltipMargin = -1 * + Math.max(e.minSize / 2, .4 * this.barWidth()), t + } + hasContextMenu() { + return !1 + } + paneViews() { + return this._properties.visible.value() ? [this._paneView] : [] + } + _showTooltip(e, t) { + var s = t(); + if (s) { + var r = this._model.timeScale(), + n = [r.onScroll(), r.barSpacingChanged(), this._model.mainSeries() + .onSymbolIntervalChanged() + ], + o = this.onClickOutside.bind(this); + return Promise.all([i.e("react"), i.e(6), i.e(11), i.e(90), i.e(0), i.e(5), + i.e("lollipop-tooltip-renderer") + ]).then(i.bind(null, "qKHM")).then((function({ + showLollipopTooltip: t + }) { + t({ + items: s, + position: e, + customCloseSubscriptions: n, + onClose: o, + onClickOutside: o + }) + })) + } + } + onClickOutside(e) { + this._paneView.onClickOutside(e) + } + } + }, + "lNN+": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolTrianglePattern", (function() { + return o + })); + var s = i("Ocx9"), + r = i("Ss5c"), + n = i("j3hX"); + class o extends r.LineDataSource { + constructor(e, t) { + const s = t || o.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "Jej9")).then(t => { + this._setPaneViews([new t.LineToolTrianglePatternPaneView(this, e)]) + }) + } + pointsCount() { + return 4 + } + name() { + return "Triangle Pattern" + } + properties() { + return super.properties() + } + static createProperties(e) { + const t = new s.DefaultProperty("linetooltrianglepattern", e); + return o._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "/HOw")).then( + e => e.PatternWithBackgroundDefinitionViewModel) + } + static _configureProperties(e) { + r.LineDataSource._configureProperties(e), e.addChild("linesColors", new n + .LineToolColorsProperty([e.childs().color])), e.addChild("textsColors", + new n.LineToolColorsProperty([e.childs().textcolor])), e.addChild( + "backgroundsColors", new n.LineToolColorsProperty([e.childs() + .backgroundColor + ])) + } + } + }, + lReN: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolsGroupControllerApi", (function() { + return o + })); + var s = i("s1Gx"), + r = i("Eyy1"), + n = i("CW80"); + class o { + constructor(e, t) { + this._controller = e, this._model = t + } + createGroupFromSelection() { + return this._controller.createGroupFromSelection().id + } + removeGroup(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + this._controller.removeGroup(t) + } + groups() { + return this._controller.groups().map(e => e.id) + } + shapesInGroup(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + return Object(s.sortSources)(t.lineTools()).map(e => e.id()) + } + excludeShapeFromGroup(e, t) { + const i = Object(r.ensureDefined)(this._groupById(e)), + s = Object(r.ensureNotNull)(this._model.dataSourceForId(t)); + Object(r.assert)(Object(n.isLineTool)(s), "Passed shapeId is not a line tool"), this + ._controller.excludeLineToolFromGroup(i, s) + } + availableZOrderOperations(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + return this._controller.availableZOrderOperations(t) + } + bringToFront(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + this._controller.bringToFront(t) + } + bringForward(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + this._controller.bringForward(t) + } + sendBackward(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + this._controller.sendBackward(t) + } + sendToBack(e) { + const t = Object(r.ensureDefined)(this._groupById(e)); + this._controller.sendToBack(t) + } + insertAfter(e, t) { + const i = Object(r.ensureDefined)(this._groupById(e)), + s = Object(r.ensureNotNull)(this._groupById(t) || this._model.dataSourceForId( + t)); + this._controller.insertAfter(i, s) + } + insertBefore(e, t) { + const i = Object(r.ensureDefined)(this._groupById(e)), + s = Object(r.ensureNotNull)(this._groupById(t) || this._model.dataSourceForId( + t)); + this._controller.insertBefore(i, s) + } + groupVisibility(e) { + return Object(r.ensureDefined)(this._groupById(e)).visibility() + } + setGroupVisibility(e, t) { + const i = Object(r.ensureDefined)(this._groupById(e)); + this._controller.setGroupVisibility(i, t) + } + groupLock(e) { + return Object(r.ensureDefined)(this._groupById(e)).locked() + } + setGroupLock(e, t) { + const i = Object(r.ensureDefined)(this._groupById(e)); + this._controller.setGroupLock(i, t) + } + getGroupName(e) { + return Object(r.ensureDefined)(this._groupById(e)).name() + } + setGroupName(e, t) { + const i = Object(r.ensureDefined)(this._groupById(e)); + this._controller.setGroupName(i, t) + } + canBeGroupped(e) { + const t = e.map(e => Object(r.ensureNotNull)(this._model.dataSourceForId(e))); + return !t.some(e => !Object(n.isLineTool)(e)) && this._controller.canBeGroupped(t) + } + _groupById(e) { + return this._controller.groups().find(t => t.id === e) + } + } + }, + lUQk: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("qFKp"), + n = i("JWMC"), + o = i("FQhm"), + a = i("txPx"), + l = i("7ktv"), + c = i("XPit"), + h = i("tc+8"), + u = i.n(h), + d = i("n5al"), + p = i("kcTO"), + _ = i("dfhE"), + m = i("nBJD"), + f = i("YFKU"), + g = i("Kxc7"), + b = i.n(g), + v = i("hOqT"), + S = i("X0WL"), + y = i("xDuj"); + const w = b.a.enabled("hide_resolution_in_legend"); + + function P(e) { + const t = "QUANDL" === (e = e || {}).exchange, + i = { + symbolDescription: "", + interval: "", + exchange: "", + chartStyle: "", + sessionDescription: "", + provider: "", + ticker: "" + }; + if (e.description && t) + if (2 === e.description.split("/").length) i.symbolDescription = e.description.split( + "/")[1]; + else { + e.description.split("'").filter(e => e.length).forEach(e => { + let t = []; + t = e && ("/" === e[0] || /\d+\/\(?/.test(e)) ? [e] : e.split("/") + .filter(e => e.length), i.symbolDescription += t[2 === t.length ? + 1 : 0] + }) + } + else e.description ? i.symbolDescription = e.description : i.symbolDescription = e.symbol; + if (e.interval && (i.interval = Object(y.translatedIntervalString)(e.interval)), t && e + .description) { + const t = /[\w_]+\/[\w_]+/.exec(e.description); + t && t[0] ? i.provider = t[0].split("/")[0] : i.provider = e.description.split("/")[0] + } + return e.exchange && (i.exchange = e.exchange), i.chartStyle = function(e) { + return e.inputs, 8 === e.style ? window.t("Heikin Ashi") : "" + }(e), e.sessionDescription && (i.sessionDescription = e.sessionDescription), e.ticker && + (i.ticker = e.ticker), i + } + const C = Object(f.t)("Symbol Error"), + x = g.enabled("hide_unresolved_symbols_in_legend"); + class T extends S.a { + constructor(e, t, i, s) { + super(t), this._series = e, this._statusViewProperties = i, this._options = s || + {} + } + text() { + return function(e) { + const t = P(e); + return (t.symbolDescription + (t.interval ? ", " + t.interval : "") + + function(e, t = ", ") { + return (e.provider ? `${t}${e.provider}` : "") + (e + .exchange ? `${t}${e.exchange}` : "") + (e + .chartStyle ? `${t}${e.chartStyle}` : "") + (e + .sessionDescription ? + `${t}${e.sessionDescription}` : "") + }(t)).replace(/'/g, "") + }(this._getTitleGenerationOptions()) + } + getSplitTitle() { + return function(e) { + const t = P(e), + i = t.symbolDescription.replace(/'/g, ""), + s = function(e) { + const t = []; + e.provider && t.push(e.provider); + e.exchange && t.push(e.exchange); + e.chartStyle && t.push(e.chartStyle); + e.sessionDescription && t.push(e.sessionDescription); + return t + }(t).map(e => e.replace(/'/g, "")), + r = []; + return t.ticker && r.push(t.ticker), r.push(i), w || r.push(t + .interval || ""), r.push(...s), r + }(this._getTitleGenerationOptions()) + } + bold() { + return !1 + } + size() { + return this._statusViewProperties.childs().fontSize.value() + "px" + } + errorStatus() { + const e = this._series.seriesErrorMessage(); + return null !== e ? { + error: e, + title: C + } : null + } + _getTitleGenerationOptions() { + const e = this._series.symbolInfo(), + t = this._statusViewProperties.childs().symbolTextSource.value(); + return { + description: "ticker" === t ? e && e.name || void 0 : Object(v + .getTranslatedSymbolDescription)({ + pro_name: e && e.pro_name || void 0, + short_name: e && e.name || void 0, + description: e && e.description || void 0, + short_description: e && e.short_description || void 0, + local_description: e && e.local_description || void 0, + language: e && e.language || void 0 + }), + exchange: this._statusViewProperties.childs().showExchange.value() && e && e + .exchange || void 0, + symbol: x && null === e ? "" : this._series.symbol(), + interval: this._statusViewProperties.childs().showInterval.value() && !this + ._options.hideResolution ? this._series.interval() : void 0, + style: this._series.properties().childs().style.value(), + inputs: this._series.getInputsProperties().state(), + boxSize: this._series.data().boxSize, + reversalAmount: this._series.data().reversalAmount, + ticker: "ticker-and-description" === t ? e && e.name || void 0 : "" + } + } + } + class I extends m.a { + constructor(e, t, i) { + super(new T(e, t, i)), this._invalidated = !0, this._series = e, this._series + .onRestarted().subscribe(this, this.update), this._series.dataEvents() + .symbolResolved().subscribe(this, this.update), this._series.dataEvents() + .completed().subscribe(this, this.update), this._series.boxSizeValue() + .subscribe(this.update.bind(this)), i.childs().symbolTextSource.listeners() + .subscribe(this, this.update) + } + getSeriesPrecision() { + let e = 4; + const t = this._series.symbolInfo(); + return t && t.pricescale && (e = Math.round(Math.log(t.pricescale) / Math.log( + 10))), e + } + round(e) { + const t = this.getSeriesPrecision(), + i = Math.round(e * Math.pow(10, t)) / Math.pow(10, t); + return i ? i.toString() : "" + } + update() { + this._invalidated = !0 + } + text() { + return this._updateImpl(), super.text() + } + color() { + return this._updateImpl(), super.color() + } + bold() { + return this._updateImpl(), super.bold() + } + size() { + return this._updateImpl(), super.size() + } + getSplitTitle() { + return this._updateImpl(), this._statusProvider.getSplitTitle() + } + _updateImpl() { + this._invalidated && (this._bold = this._statusProvider.bold(), this._size = + this._statusProvider.size(), this._text = this._statusProvider.text(), + this._invalidated = !1) + } + } + var M = i("4miz"), + O = i("mMWL"), + L = i("6I19"), + A = i("CW80"); + const E = r.CheckMobile.any(), + k = b.a.enabled("hide_resolution_in_legend"); + class D extends M.b { + constructor(e, t) { + super(), this._invalidated = !0, this._series = e, this._model = t, this + ._valuesProvider = this._createValuesProvider(e, t), this._items = this + ._valuesProvider.getItems().map(e => new M.a(e.title, "")), this.update() + } + update() { + this._invalidated = !0 + } + items() { + return this._invalidated && (this._updateImpl(), this._invalidated = !1), this + ._items + } + series() { + return this._series + } + _updateImpl() { + const e = this._series.symbolInfo(); + if (e) { + const t = [e.name]; + k || t.push(Object(y.translatedIntervalString)(this._series.interval())), t + .push(e.exchange), this._header = t.join(", "), this._title = e + .description + } else this._header = this._series.symbol(); + const t = this._model.crossHairSource().appliedIndex(), + i = this._valuesProvider.getValues(t); + for (let e = 0; e < i.length; ++e) { + const t = i[e], + s = this._items[e]; + s.setValue(t.value), s.setVisible(t.visible), s.setColor(t.color) + } + } + _createValuesProvider(e, t) { + return new L.a(e, t) + } + _showLastPriceAndChangeOnly() { + return E && (null === this._model.crossHairSource().pane || Object(A + .isLineToolName)(O.tool.value()) || null !== this._model + .lineBeingEdited()) + } + } + const V = { + open: Object(f.t)("O", { + context: "in_legend" + }), + high: Object(f.t)("H", { + context: "in_legend" + }), + low: Object(f.t)("L", { + context: "in_legend" + }), + close: Object(f.t)("C", { + context: "in_legend" + }), + hl2: Object(f.t)("HL2", { + context: "in_legend" + }), + hlc3: Object(f.t)("HLC3", { + context: "in_legend" + }), + ohlc4: Object(f.t)("OHLC4", { + context: "in_legend" + }) + }; + class B extends L.a { + constructor(e, t) { + super(e, t), this._showBarChange = t.properties().paneProperties + .legendProperties.showBarChange, this._showSeriesOHLC = t.properties() + .paneProperties.legendProperties.showSeriesOHLC, this._seriesStyle = e + .properties().childs().style, this._emptyValues[0].title = V.open, this + ._emptyValues[1].title = V.high, this._emptyValues[2].title = V.low, this + ._emptyValues[3].title = V.close, this._emptyValues[6].title = "", this + ._emptyValues[4].title = "" + } + getValues(e) { + const t = super.getValues(e), + i = this._showSeriesOHLC.value(), + s = this._showBarChange.value(), + r = 12 === this._series.style(), + n = t[6]; + if (n.visible = n.visible && s && !r, this._showLastPriceAndChangeOnly()) { + const e = t[5]; + return e.visible = e.visible && i, t + } + const o = Object(d.isPriceSourceStyle)(this._seriesStyle.value()), + a = i && !o, + l = i && o; + return t[0].visible = a && !r, t[1].visible = a, t[2].visible = a, t[3] + .visible = a && !r, t[4].visible = l, t + } + } + const R = window.t("At close"); + class N extends D { + constructor(e, t) { + super(e, t), this._showBarChange = t.properties().paneProperties.legendProperties + .showBarChange, this._showSeriesOHLC = t.properties().paneProperties + .legendProperties.showSeriesOHLC, this._showBarChange.subscribe(this, this + .update), this._showSeriesOHLC.subscribe(this, this.update) + } + isValuesVisible() { + return this._showSeriesOHLC.value() || this._showBarChange.value() + } + additional() { + return null + } + marketTitle() { + const e = this._series.marketStatusModel().status().value(); + return this._showLastPriceAndChangeOnly() && ("pre_market" === e || + "post_market" === e) ? R + ":" : "" + } + destroy() { + this._showBarChange.unsubscribeAll(this), this._showSeriesOHLC.unsubscribeAll(this) + } + _createValuesProvider(e, t) { + return new B(e, t) + } + } + var j = i("hY0g"), + F = i.n(j), + W = i("x2L+"); + class H { + constructor(e, t) { + this._marketStatus = new F.a(null), this._lastMarketStatus = null, W.b.subscribe( + this, () => this._update()), this._quotesProvider = e, this._quotesProvider + .quotesUpdate().subscribe(this, this._update.bind(this)), this + ._resetSubscription = t, this._resetSubscription.subscribe(this, this + ._resetStatus) + } + destroy() { + W.b.unsubscribeAll(this), this._quotesProvider.quotesUpdate().unsubscribeAll(this), + this._resetSubscription.unsubscribeAll(this) + } + status() { + return this._marketStatus + } + _resetStatus() { + this._marketStatus.setValue(null) + } + _update(e = {}) { + void 0 !== e.values && (this._lastMarketStatus = e.values.current_session), + "market" !== this._lastMarketStatus || W.b.value() ? this._marketStatus + .setValue(this._lastMarketStatus) : this._resetStatus() + } + } + var U = i("LxhU"), + z = i("+DwS"), + G = i("8woN"), + q = i.n(G); + const Y = ["DJ", "CBOE", "JSE"]; + var K = i("Cf1E"); + const J = Object(a.getLogger)("Chart.Definitions.Series"); + + function Z(e) { + const t = []; + return ! function(e) { + return "index" === e.type && Y.includes(e.listed_exchange) + }(e) ? t.push("DelayToRealtime") : t.push("DelayNoRealtime"), t + } + + function X(e, t) { + const i = []; + return void 0 !== (s = e.delay) && s > 0 ? Z(e) : function(e, t) { + return q.a.hasEodSymbols(e.full_name) || t === _.STATUS_EOD + }(e, t) ? (i.push("EOD"), i) : i; + var s + } + class $ { + constructor(e, t, i) { + this._dataUpdatedModeStatus = new F.a(null), this._symbolInfo = Object(z.a)(e + .getter, e.onChange), this._status = Object(z.a)(t.getter, t.onChange), this + ._symbolInfo.subscribe(this._update.bind(this)), this._status.subscribe(this + ._update.bind(this)), this._resetSubscription = i, this._resetSubscription + .subscribe(this, this._resetStatus) + } + destroy() { + this._symbolInfo.destroy(), this._status.destroy(), this._resetSubscription + .unsubscribeAll(this) + } + status() { + return this._dataUpdatedModeStatus.readonly() + } + symbolName() { + const e = this._symbolInfo.value(); + return null !== e ? e.name : "" + } + time() { + const e = this._symbolInfo.value(), + t = null !== e && e.delay && e.delay > 0 ? e.delay : 900; + return Math.round(t / 60) + } + listedExchange() { + const e = this._symbolInfo.value(); + return null !== e ? e.listed_exchange : "" + } + async description() { + const e = this._symbolInfo.value(); + if (null === e) return ""; + let t = {}; + try { + t = Object(s.ensureNotNull)(await async function(e) { + return null + }()) + } catch (e) { + J.logWarn("Cannot get exchange " + Object(K.a)(e)) + } + return t.description || e.listed_exchange + } + exchange() { + const e = this._symbolInfo.value(); + return null !== e ? e.exchange : "" + } + firstReplacedByBatsExchange() { + const e = this._symbolInfo.value(); + return e && null + } + _resetStatus() { + this._dataUpdatedModeStatus.setValue(null) + } + _update() { + const e = this._symbolInfo.value(); + if (null === e) return void this._dataUpdatedModeStatus.setValue(null); + const t = this._status.value(); + if ("string" == typeof t) return void this._dataUpdatedModeStatus.setValue(null); + if (t === _.STATUS_LOADING || t === _.STATUS_RESOLVING) return; + const i = X(e, t); + 0 !== i.length ? this._dataUpdatedModeStatus.setValue(i) : this + ._dataUpdatedModeStatus.setValue(null) + } + } + var Q = i("QfUd"), + ee = i("ogJP"); + class te { + constructor(e, t) { + this._dataProblem = new Q.a(null), this._quotesProvider = e, this._quotesProvider + .quotesUpdate().subscribe(this, this._update.bind(this)), this + ._resetSubscription = t, this._resetSubscription.subscribe(this, this + ._resetStatus) + } + destroy() { + this._quotesProvider.quotesUpdate().unsubscribeAll(this), this._resetSubscription + .unsubscribeAll(this) + } + status() { + return this._dataProblem + } + _resetStatus() { + this._dataProblem.setValue(null) + } + _update(e) { + void 0 === e.values || void 0 === e.values.data_problem ? this._resetStatus() : this + ._dataProblem.setValue(Object(ee.clone)(e.values.data_problem)) + } + } + var ie = i("wOSo"), + se = i("Tmoa"), + re = i("KcY8"), + ne = i("oXaB"); + + function oe(e) { + return e < 10 ? "0" + e : e.toString() + } + const ae = [0, 1, 2, 3, 9, 8, 10], + le = g.enabled("force_exchange_as_title"), + ce = { + alwaysShowGlobalLast: !1, + visibleOnHistoryOnly: !1, + showCountdown: !0, + showSymbolLabel: !0 + }; + class he extends re.a { + constructor(e, t, i) { + super(), this._previousCountdown = "", this._source = e, this._model = t, this + ._options = { + ...ce, + ...i + } + } + updateCountdown() { + this._countdownText() !== this._previousCountdown && (this.update(), this._model + .updateSourcePriceScale(this._source)) + } + _getSource() { + return this._source + } + _getModel() { + return this._model + } + _isCountdownEnabled() { + return this._options.showCountdown + } + _countdownText() { + const e = U.Interval.parse(this._source.interval()); + if (e.isDWM() || e.isTicks() || e.isSeconds() && 1 === e.multiplier()) + return ""; + const t = this._source.data().bars().last(); + if (null === t) return ""; + const i = 1e3 * Object(s.ensure)(t.value[0]), + r = U.Interval.parse(this._source.interval()).inMilliseconds(), + n = i.valueOf() + r; + let o = Math.round((n - this._currentTime()) / 1e3); + if (o <= 0) return ""; + o = Math.min(o, r / 1e3); + let a = null; + o >= 3600 && (a = oe(Math.floor(o / 3600))), o %= 3600; + const l = oe(Math.floor(o / 60)); + o %= 60; + const c = oe(Math.floor(o)); + return null !== a ? `${a}:${l}:${c}` : `${l}:${c}` + } + _updateRendererData(e, t, i) { + if (e.visible = !1, t.visible = !1, !this._source.isVisible()) return; + const s = this._source.properties().childs(); + if (12 === s.style.value()) return; + if (this._options.visibleOnHistoryOnly) { + const e = this._model.timeScale().visibleBarsStrictRange(), + t = this._source.data().last(); + if (null === e || null === t || e.contains(t.index)) return + } + const r = this._model.properties().scalesProperties; + let n = r.showSeriesLastValue.value(), + o = this._isCountdownEnabled() && -1 !== ae.indexOf(s.style.value()) && s + .showCountdown.value(), + a = this._options.showSymbolLabel && r.showSymbolLabels.value(); + const l = r.seriesLastValueMode.value() === ne.PriceAxisLastValueMode + .LastPriceAndPercentageValue, + c = this._source.lastValueData(void 0, this._options.alwaysShowGlobalLast); + if (c.noData) return; + const h = 8 === s.style.value(); + if ((n || o || a) && h && s.haStyle.showRealLastPrice.value()) { + const e = this._source.lastValueData(void 0, !1), + t = this._source.lastValueData(void 0, !0); + e.noData || t.noData || e.index !== t.index || (n = !1, o = !1, a = !1) + } + if (n || o) { + const t = this._axisFirstLineText(c, n); + e.text = t, i.textColor = this.generateTextColor(i.background), e + .textColor = i.textColor; + const s = this._source.priceScale().isPercentage(), + r = n && l ? s ? c.formattedPriceAbsolute : c.formattedPricePercentage : + ""; + e.secondLine = r, i.secondLineTextColor = i.textColor; + const a = o ? this._countdownText() : ""; + this._previousCountdown = a, e.thirdLine = a, i.thirdLineTextColor = Object( + se.generateColor)(i.textColor, 25), 0 === t.length && 0 === r + .length && 0 === a.length || (e.visible = !0) + } + a && (t.text = this._paneText(a), t.visible = t.text.length > 0), i.background = + this._source.priceLineColor(c.color), i.coordinate = c.coordinate, i + .floatCoordinate = c.floatCoordinate + } + _paneText(e) { + let t = ""; + const i = this._source.symbolInfo(); + return le ? t = Object(d.displayedSymbolExchange)(i) : e && (t = Object(d + .displayedSymbolName)(i)), t + } + _axisFirstLineText(e, t) { + return t ? this._source.priceScale().isPercentage() ? e + .formattedPricePercentage : e.formattedPriceAbsolute : "" + } + _currentTime() { + return Date.now() + 1e3 * this._source.serverTimeOffset() + } + } + var ue = i("TmNs"), + de = i("k9/m"); + class pe extends he { + lastPrice() { + return this._getSource().data().lastProjectionPrice + } + _updateRendererData(e, t, i) { + e.visible = !1, t.visible = !1; + const r = this._getModel(), + n = this._getSource(), + o = n.priceScale(), + a = r.timeScale(), + l = this.lastPrice(); + if (a.isEmpty() || o.isEmpty() || void 0 === l) return; + const c = a.visibleBarsStrictRange(); + if (null === c) return; + const h = c.firstBar(), + u = c.lastBar(), + d = n.data(), + p = d.search(u, de.PlotRowSearchMode.NearestLeft); + if (null === p) return; + const _ = n.nearestIndex(h, de.PlotRowSearchMode.NearestRight); + if (void 0 === _) return; + const m = n.model().properties().scalesProperties, + f = Object(s.ensureNotNull)(d.valueAt(_))[4]; + let g = i.background, + b = m.showSeriesLastValue.value(), + v = !1, + S = !1, + y = !1; + const w = n.lastValueData(4, !1), + P = n.properties(); + if (8 === P.style.value() && P.haStyle.showRealLastPrice.value()) { + const e = n.lastValueData(4, !0); + if (e.noData || e.color === i.background || (g = e.color), !e.noData && !w + .noData) { + const t = e.index === w.index; + v = t && m.showSymbolLabels.value(), S = m.seriesLastValueMode.value() === + ne.PriceAxisLastValueMode.LastPriceAndPercentageValue, b = b && t, y = + t && this._isCountdownEnabled() && P.showCountdown.value() + } + } else { + g = n.barColorer().barStyle(p.index, !0).barColor + } + if (i.background = g, i.textColor = this.generateTextColor(g), i + .secondLineTextColor = i.textColor, i.thirdLineTextColor = Object(se + .generateColor)(i.textColor, 25), i.coordinate = o.priceToCoordinate(l, f), + e.visible = b || y, !w.noData) { + w.text = o.formatPrice(l, f), w.formattedPriceAbsolute = o.formatPriceAbsolute( + l), w.formattedPricePercentage = o.formatPricePercentage(l, f, !0), e + .text = this._axisFirstLineText(w, b); + const i = n.priceScale().isPercentage(); + e.secondLine = b && S ? i ? w.formattedPriceAbsolute : w + .formattedPricePercentage : "", e.thirdLine = y ? this._countdownText() : + "", t.text = this._paneText(v) + } + t.visible = v + } + } + var _e = i("KtbP"), + me = i("2ijp"), + fe = i("HGP3"), + ge = i("8Uy/"); + const be = { + light: { + lineStyle: ge.LINESTYLE_DOTTED, + lineWidth: 1, + textColor: fe.colorsPalette["color-cold-gray-900"], + backgroundColor: fe.colorsPalette["color-tv-blue-50"], + lineColor: fe.colorsPalette["color-cold-gray-500"] + }, + dark: { + lineStyle: ge.LINESTYLE_DOTTED, + lineWidth: 1, + textColor: fe.colorsPalette["color-white"], + backgroundColor: fe.colorsPalette["color-tv-blue-a800"], + lineColor: fe.colorsPalette["color-cold-gray-500"] + } + }; + + function ve(e) { + return e ? be.dark : be.light + } + class Se extends me.a { + constructor(e, t, i) { + super(), this._model = e, this._isVisible = t, this._getValue = i + } + _updateImpl() { + const e = this._lineRendererData; + if (e.visible = !1, !this._isVisible.value()) return; + const t = this._model.mainSeries(), + i = t.priceScale(), + s = t.firstValue(), + r = this._getValue(); + if (null === s || null === r) return; + const n = ve(this._model.isDark()); + e.visible = !0, e.y = i.priceToCoordinate(r, s), e.linestyle = n.lineStyle, e + .linewidth = n.lineWidth, e.color = n.lineColor + } + } + class ye extends re.a { + constructor(e, t, i, s) { + super(), this._model = e, this._label = t, this._isVisible = i, this._getValue = + s + } + _updateRendererData(e, t, i) { + if (e.visible = !1, t.visible = !1, !this._isVisible.value()) return; + const s = this._model.mainSeries(), + r = s.priceScale(), + n = s.firstValue(), + o = this._getValue(); + if (null === n || null === o) return; + const a = ve(this._model.isDark()); + e.visible = !0, t.visible = !0, e.text = r.formatPriceAbsolute(o), t.text = this + ._label, i.coordinate = r.priceToCoordinate(o, n), i.background = a + .backgroundColor, i.textColor = a.textColor + } + } + class we extends ue.PriceLineAxisView { + constructor(e, t, i) { + super(), this._model = e, this._isLineVisible = t, this._getValue = i + } + _isVisible() { + return this._isLineVisible.value() + } + _lineWidth() { + return ve(this._model.isDark()).lineWidth + } + _lineStyle() { + return ve(this._model.isDark()).lineStyle + } + _priceLineColor(e) { + return ve(this._model.isDark()).lineColor + } + _value() { + const e = this._model.mainSeries(), + t = e.priceScale(), + i = e.firstValue(), + s = this._getValue(); + if (null === i || null === s) return { + noData: !0 + }; + const r = t.priceToCoordinate(s, i); + return { + noData: !1, + floatCoordinate: r, + coordinate: r, + color: "", + formattedPricePercentage: "", + formattedPriceAbsolute: "", + text: "", + index: 0 + } + } + } + const Pe = Object(f.t)("High"), + Ce = Object(f.t)("Low"), + xe = Object(f.t)("Avg"); + + function Te(e, t, i, s, r, n) { + const o = new Se(e, r, n), + a = new ye(e, i, s, n); + return { + paneView: o, + panePriceAxisView: new _e.PanePriceAxisView(a, t, e), + priceAxisView: a, + priceLineAxisView: new we(e, r, n) + } + } + var Ie = i("aIyQ"), + Me = i.n(Ie), + Oe = i("WkOR"), + Le = i("aO4+"); + class Ae { + constructor() { + this._data = null + } + setData(e) { + this._data = e + } + data() { + return this._data + } + draw(e, t) { + const i = this._data; + if (null === i) return; + const s = t.pixelRatio; + e.save(); + const r = Math.max(1, Math.floor(s)), + n = r % 2 / 2, + o = Math.round(i.center.x * s) + n, + a = i.center.y * s; + e.fillStyle = i.seriesLineColor, e.beginPath(); + const l = Math.max(2, 1.5 * i.seriesLineWidth) * s; + e.arc(o, a, l, 0, 2 * Math.PI, !1), e.fill(), e.fillStyle = i.fillColor, e + .beginPath(), e.arc(o, a, i.radius * s, 0, 2 * Math.PI, !1), e.fill(), e + .lineWidth = r, e.strokeStyle = i.strokeColor, e.beginPath(), e.arc(o, a, i + .radius * s + r / 2, 0, 2 * Math.PI, !1), e.stroke(), e.restore() + } + hitTest(e, t) { + return null + } + } + + function Ee(e) { + return e + } + const ke = [{ + start: 0, + end: .25, + startRadius: 4, + endRadius: 10, + startFillAlpha: .25, + endFillAlpha: 0, + startStrokeAlpha: .4, + endStrokeAlpha: .8, + easing: Ee + }, { + start: .25, + end: .525, + startRadius: 10, + endRadius: 14, + startFillAlpha: 0, + endFillAlpha: 0, + startStrokeAlpha: .8, + endStrokeAlpha: 0, + easing: Ee + }, { + start: .525, + end: 1, + startRadius: 14, + endRadius: 14, + startFillAlpha: 0, + endFillAlpha: 0, + startStrokeAlpha: 0, + endStrokeAlpha: 0, + easing: Ee + }]; + + function De(e, t, i, s) { + const r = i + (s - i) * t; + return Object(se.applyTransparency)(e, Object(se.alphaToTransparency)(r)) + } + + function Ve(e, t) { + const i = e % 2600 / 2600; + let s; + for (const e of ke) + if (i >= e.start && i <= e.end) { + s = e; + break + } if (void 0 === s) throw new Error("Last price animation internal logic error"); + const r = s.easing((i - s.start) / (s.end - s.start)); + return { + fillColor: De(t, r, s.startFillAlpha, s.endFillAlpha), + strokeColor: De(t, r, s.startStrokeAlpha, s.endStrokeAlpha), + radius: (n = r, o = s.startRadius, a = s.endRadius, o + (a - o) * n) + }; + var n, o, a + } + class Be { + constructor(e) { + this._renderer = new Ae, this._invalidated = !0, this._stageInvalidated = !0, this + ._startTime = performance.now(), this._endTime = this._startTime - 1, this + ._series = e + } + update(e) { + if (this._invalidated = !0, e) { + const e = performance.now(), + t = this._endTime - e; + if (t > 0) return void(t < 650 && (this._endTime += 2600)); + this._startTime = e, this._endTime = e + 2600 + } + } + invalidateStage() { + this._stageInvalidated = !0 + } + animationActive() { + return performance.now() <= this._endTime + } + stopAnimation() { + this._endTime = this._startTime - 1 + } + renderer(e, t) { + return this._invalidated ? (this._updateImpl(e, t), this._invalidated = !1, this + ._stageInvalidated = !1) : this._stageInvalidated && (this + ._updateRendererDataStage(), this._stageInvalidated = !1), this._renderer + } + _updateImpl(e, t) { + this._renderer.setData(null); + const i = this._series.model().timeScale(), + s = i.visibleBarsStrictRange(), + r = this._series.firstValue(), + n = this._series.lastValueData(void 0, !0, !0); + if (null === s || null === r || void 0 === n.index || void 0 === n.price || !s + .contains(n.index)) return; + const o = new Le.Point(i.indexToCoordinate(n.index), this._series.priceScale() + .priceToCoordinate(n.price, r)), + a = n.color, + l = this._series.properties(); + let c; + switch (this._series.style()) { + case 3: + c = l.areaStyle.linewidth.value(); + break; + case 10: + const t = l.baselineStyle, + i = Math.round(e * (Math.abs(100 - t.baseLevelPercentage.value()) / + 100)); + c = o.y <= i ? t.topLineWidth.value() : t.bottomLineWidth.value(); + break; + default: + c = l.lineStyle.linewidth.value() + } + const h = Ve(this._duration(), a); + this._renderer.setData({ + seriesLineColor: a, + seriesLineWidth: c, + fillColor: h.fillColor, + strokeColor: h.strokeColor, + radius: h.radius, + center: o + }) + } + _updateRendererDataStage() { + const e = this._renderer.data(); + if (null !== e) { + const t = Ve(this._duration(), e.seriesLineColor); + e.fillColor = t.fillColor, e.strokeColor = t.strokeColor, e.radius = t.radius + } + } + _duration() { + return this.animationActive() ? performance.now() - this._startTime : 2599 + } + } + var Re = i("H0vP"), + Ne = i("BZtw"); + i.d(t, "SeriesBase", (function() { + return Ue + })); + const je = g.enabled("price_scale_always_last_bar_value"), + Fe = g.enabled("display_data_mode"), + We = (r.CheckMobile.any(), Object(a.getLogger)("Chart.Series")), + He = { + countdownEnabled: !0, + lastPriceAnimationEnabled: !0 + }; + class Ue extends l.PriceDataSource { + constructor(e, t, i, r) { + super(e), this.chartWidgetInitialized = new Me.a, this + .requestingIntradayWhenNotSupported = new Me.a, this + .requestingResolutionWhenNotSupported = new Me.a, this._paneView = null, + this._priceStep = null, this._symbolInfo = null, this._prevSymbolInfo = + null, this._isPrePostMarketPricesForbiddenProperty = new u.a(!0), this + ._highLowAvgPriceCache = new Map, + this._prevClosePriceAxisView = null, this._priceScaleChanged = new Me.a, + this._priceScaleAboutToBeChanged = new Me.a, this._onRestarted = new Me.a, + this._onStatusChanged = new Me.a, this._extendedHoursChanged = new Me.a, + this._tagsChanged = new Me.a, this._sessionIdChanged = new Me.a, this + ._currency = null, this._unit = null, this._endOfData = !1, this + ._lineStyleLastPriceCirclePaneView = new Be(this), this + ._prevClosePriceLineView = null, this._dataPoweredBy = null, this + ._loading = !0, this._seriesLoaded = !1, this._status = 0, this + ._boxSizeValue = new F.a, this._base = 100, this._pointValue = 1, this + ._formatter = new p.PriceFormatter(this._base), this + ._ignoreMinMoveFormatter = new p.PriceFormatter(this._base), this + ._ignoreMinMovePriceStep = null, this._lastBarCloseTime = null, this + ._onSessionIdPropertyChangedBound = this._onSessionIdPropertyChanged.bind( + this), this._ignoreSessionIdProxyPropertyChanges = !1, this + ._lastPriceAnimationActive = !1, this._currentSession = "out_of_session", + this._onStyleChanged = new Me.a, this._intervalObj = null, this + ._obsoleteZOrder = 0, this._seriesErrorMessage = null, this._seriesSource = + new Ne.a(e.chartApi(), "s", r); + const n = this._seriesSource.dataEvents(); + n.symbolResolved().subscribe(this, this._onSymbolResolved), n.symbolError() + .subscribe(this, this._onSymbolError), n.seriesTimeFrame().subscribe(this, + this._onSeriesTimeFrame), n.seriesError().subscribe(this, this + ._onSeriesError), n.loading().subscribe(this, this._onSeriesLoading), n + .completed().subscribe(this, this._onSeriesCompleted), n.dataUpdated() + .subscribe(this, this._onDataUpdated), n.barReceived().subscribe(this, this + ._onBarReceived), this._quotesProvider = new ie.a, this._quotesProvider + .quotesUpdate().subscribe(this, this._onQuotesUpdate); + const o = t.childs(); + if (t.hasChild("extendedHours")) { + Object(s.ensureDefined)(o.extendedHours).value() && !t.hasChild( + "sessionId") && t.addChild("sessionId", new u.a("extended")), t + .removeProperty("extendedHours") + } + t.hasChild("sessionId") || t.addChild("sessionId", new u.a("regular")), this + ._setProperties(t), this._sessionIdProxyProperty = new u.a(o.sessionId + .value()), o.sessionId.subscribe(this, () => this + ._updateSessionIdProxyProperty()), this._sessionIdProxyProperty + .subscribe(this, this._onSessionIdProxyPropertyChanged), this._options = + Object(ee.merge)(Object(ee.clone)(He), i), this._prevChartStyle = o.style + .value(); + const a = new he(this, e, { + alwaysShowGlobalLast: !0, + showCountdown: i.countdownEnabled + }); + this._priceAxisView = a; + let l = null; + je || (l = new he(this, e, { + visibleOnHistoryOnly: !0, + showSymbolLabel: !1, + showCountdown: !1, + alwaysShowGlobalLast: !1 + })), this._priceLinePriceAxisView = new ue.SeriesPriceLineAxisView(this), + this._priceLineAxisViews = [this._priceLinePriceAxisView]; + const c = new pe(this, e, { + showCountdown: i.countdownEnabled + }); + this._priceAxisViews = [a, c], null !== l && this._priceAxisViews.push(l), this + ._panePriceAxisView = new _e.PanePriceAxisView(a, this, e), this + ._historyPricePanePriceAxisView = null !== l ? new _e.PanePriceAxisView(l, + this, e) : null, this._projectionPriceAxisView = new _e + .PanePriceAxisView(c, this, e), this._labelPaneViews = [this + ._panePriceAxisView, this._projectionPriceAxisView + ], + null !== this._historyPricePanePriceAxisView && this._labelPaneViews.push( + this._historyPricePanePriceAxisView), this._highLowAvgPaneViews = [], + this._createHighLowAvgViews(), this._subscribeRestartToSessionIdChange(); + const h = this.properties(); + h.visible.subscribe(this, this._updateLastPriceAnimationActive), this + ._updateLastPriceAnimationActive(), this._dataWindowView = new D(this, e), + this._legendView = new N(this, e), this._statusView = new I(this, this + ._model.properties().scalesProperties.textColor, h.statusViewStyle), + this._marketStatusModel = new H(this._quotesProvider, h.symbol.listeners()), + this._dataUpdatedModeModel = Fe ? new $({ + getter: this.symbolInfo.bind(this), + onChange: n.symbolResolved() + }, { + getter: this.status.bind(this), + onChange: this._onStatusChanged + }, h.symbol.listeners()) : null, this._dataProblemModel = new te(this + ._quotesProvider, h.symbol.listeners()) + } + seriesErrorMessage() { + return this._seriesErrorMessage + } + destroy() { + this._quotesProvider.quotesUpdate().unsubscribeAll(this), this._model + .timeScale().visibleBarsStrictRangeChanged().unsubscribeAll(this), this + ._unsubscribeRestartToSessionIdChange() + } + zorder() { + return 0 + } + quotesProvider() { + return this._quotesProvider + } + currentSession() { + return this._currentSession + } + labelPaneViews() { + return this._labelPaneViews + } + topPaneViews() { + if (this._lastPriceAnimationActive) { + const e = this._lineStyleLastPriceCirclePaneView; + return e.animationActive() && setTimeout(() => this._model.invalidate(Re + .InvalidationMask.cursor()), 0), e.invalidateStage(), [e] + } + return null + } + priceAxisViews(e, t) { + return e.findTargetPriceAxisViews(this, t, this._priceAxisViews, this + ._priceLineAxisViews) + } + clearHighLowAvgPriceCache() { + this._highLowAvgPriceCache.clear() + } + priceScaleChanged() { + return this._priceScaleChanged + } + priceScaleAboutToBeChanged() { + return this._priceScaleAboutToBeChanged + } + isStatusBad() { + return 12 === this.status() || 4 === this.status() || 10 === this.status() + } + isStatusError() { + return 12 === this.status() + } + actualSymbol() { + return Object(d.actualSymbol)(this.symbolInfo(), this.symbol()) + } + proSymbol() { + return Object(d.proSymbol)(this.symbolInfo(), this.symbol()) + } + onStyleChanged() { + return this._onStyleChanged + } + style() { + return this.properties().style.value() + } + symbolSameAsCurrent(e) { + return Object(Oe.b)(e, this.m_symbol, this.symbolInfo()) + } + symbolInfo() { + return this._symbolInfo + } + symbolResolved() { + return this.dataEvents().symbolResolved() + } + formatter(e = !0) { + return e ? this._formatter : this._ignoreMinMoveFormatter + } + priceStep(e = !0) { + return e ? this._priceStep : this._ignoreMinMovePriceStep + } + interval() { + return this.properties().interval.value() + } + intervalObj() { + const e = this.interval(); + if (null !== this._intervalObj && this._intervalObj.resolutionString === e) + return this._intervalObj.interval; + const t = U.Interval.parse(e); + return this._intervalObj = { + resolutionString: e, + interval: t + }, t + } + prevClose() { + const e = this.priceScale(); + if (e.isEmpty() || this.data().isEmpty()) return null; + const t = this.quotes(), + i = this.firstValue(); + if (null === t || null === i) return null; + const s = t.prev_close_price; + return void 0 === s ? null : { + coordinate: e.priceToCoordinate(s, i), + floatCoordinate: e.priceToCoordinate(s, i), + formattedPricePercentage: e.formatPricePercentage(s, i, !0), + formattedPriceAbsolute: e.formatPriceAbsolute(s) + } + } + hasClosePrice() { + return 12 !== this.properties().style.value() + } + isDWM() { + return this.intervalObj().isDWM() + } + nearestValue(e, t, i) { + const s = this.nearestData(e, i); + return s ? s.value[t] : void 0 + } + onStatusChanged() { + return this._onStatusChanged + } + onRestarted() { + return this._onRestarted + } + onExtendedHoursChanged() { + return this._extendedHoursChanged + } + sessionId() { + return this.properties().sessionId.value() + } + sessionIdChanged() { + return this._sessionIdChanged + } + autoScaleInfo(e, t) { + const i = this.priceRange(e, t); + if (null === this._paneView) return { + range: i + }; + const s = this._paneView; + return { + range: i, + topPixelMargin: s.topPixelMargin ? s.topPixelMargin() : void 0, + bottomPixelMargin: s.bottomPixelMargin ? s.bottomPixelMargin() : void 0 + } + } + onChartStyleChanged() { + this._updateBarFunction(), this.isNeedRestart() && (this.data().clear(), this + .model().timeScale().scrollToRealtime(!1), this.restart()); + const e = this.properties(); + this._prevChartStyle = e.style.value(), this._onStyleChanged.fire(e.style + .value()), this.invalidateBarStylesCache(), this + ._updateLastPriceAnimationActive() + } + sessionIdProxyProperty() { + return this._sessionIdProxyProperty + } + isPrePostMarketPricesForbiddenProperty() { + return this._isPrePostMarketPricesForbiddenProperty + } + quotes() { + return this.data().isEmpty() ? null : this._quotesProvider.quotes() + } + base() { + return this._base + } + pointValue() { + return this._pointValue + } + barCloseTime() { + return this._lastBarCloseTime + } + barFunction() { + return this._barFunction + } + setSymbolCurrencyUnit(e, t, i) { + const s = this.properties(), + r = void 0 !== e && e !== s.symbol.value(), + n = void 0 !== t && t !== s.currencyId.value(), + o = void 0 !== i && i !== s.unitId.value(); + r && s.symbol.setValueSilently(e), n && s.currencyId.setValueSilently(t), o && s + .unitId.setValueSilently(i), r && s.symbol.listeners().fire(s.symbol), n && + s.currencyId.listeners().fire(s.currencyId), o && s.unitId.listeners().fire( + s.unitId) + } + setSymbol(e) { + this.setSymbolCurrencyUnit(e) + } + currency() { + return this.properties().currencyId.value() || null + } + setCurrency(e) { + this.setSymbolCurrencyUnit(void 0, e) + } + isConvertedToOtherCurrency() { + return Object(d.isConvertedToOtherCurrency)(this.symbolInfo()) + } + unit() { + return this.properties().unitId.value() || null + } + setUnit(e) { + this.properties().unitId.setValue(e) + } + isConvertedToOtherUnit() { + return Object(d.isConvertedToOtherUnit)(this.symbolInfo()) + } + symbolSource() { + return this + } + title() { + return this.symbolTitle() + } + symbolTitle(e, t) { + let i = this.properties().symbol.value(); + const s = this.symbolInfo(); + return null !== s && (i = Object(d.symbolTitle)(s, e)), t ? i : + `${i}, ${Object(y.translatedIntervalString)(this.properties().interval.value())}` + } + setObsoleteZOrder(e) { + this._obsoleteZOrder = e + } + obsoleteZOrder() { + return this._obsoleteZOrder + } + valuesProvider() { + return new B(this, this.model()) + } + statusProvider(e) { + return new T(this, this._model.properties().scalesProperties.textColor, this + .properties().statusViewStyle, e) + } + open(e) { + const t = this.data().valueAt(e); + return t && t[1] + } + high(e) { + const t = this.data().valueAt(e); + return t && t[2] + } + low(e) { + const t = this.data().valueAt(e); + return t && t[3] + } + close(e) { + const t = this.data().valueAt(e); + return t && t[4] + } + moveItem(e, t, i) { + if (10 === this.style() && 0 === t) { + const t = this.priceScale(), + i = this.properties().baselineStyle, + s = t.height(), + r = 100 - e.y / s * 100, + n = r < 0 ? 0 : Math.round(10 * r) / 10; + i.baseLevelPercentage.setValue(Math.max(Math.min(n, 100), 0)) + } + } + endOfData() { + return this._endOfData + } + dataPoweredBy() { + return null + } + boxSizeValue() { + return this._boxSizeValue + } + isUserDeletable() { + return !1 + } + changeSymbol() { + this.setSymbolIntervalCurrencyDelayed(), this.model().checkLineToolSelection() + } + changeInterval() { + this.setSymbolIntervalCurrencyDelayed() + } + changeTimeFrame() { + Object(n.trackEvent)("GUI", "Change timeframe") + } + onTagsChanged() { + return this._tagsChanged + } + _updateBarFunction() { + if (12 === this.properties().style.value()) this._barFunction = Object(c + .barFunction)("low"); + else { + const e = this.priceSource() || "close"; + this._barFunction = Object(c.barFunction)(e) + } + } + _setProperties(e) { + e.hasChild("timeframe") || e.merge({ + timeframe: "" + }), e.hasChild("shortName") || e.merge({ + shortName: "" + }), e.hasChild("currencyId") || e.addChild("currencyId", new u.a(null)), e + .hasChild("unitId") || e.addChild("unitId", new u.a(null)), this + ._properties = e; + const t = e.childs(); + t.symbol.listeners().subscribe(this, this.changeSymbol), t.interval.listeners() + .subscribe(this, this.changeInterval), t.currencyId.listeners().subscribe( + this, this._changeCurrency), t.unitId.listeners().subscribe(this, this + ._changeUnit), t.timeframe.listeners().subscribe(this, this + .changeTimeFrame), e.subscribe(this, this._onPropertiesChanged) + } + _updateSessionIdProxyProperty(e) { + const t = this._properties.childs().sessionId.value(); + let i = t; + if (e) { + const e = this.symbolInfo(); + null !== e && (i = e.subsession_id || t) + } + this._ignoreSessionIdProxyPropertyChanges = !0, this._sessionIdProxyProperty + .setValue(i), this._ignoreSessionIdProxyPropertyChanges = !1 + } + _onSessionIdProxyPropertyChanged() { + this._ignoreSessionIdProxyPropertyChanges || this._properties.childs().sessionId + .setValue(this._sessionIdProxyProperty.value()), this + ._updateLastPriceAnimationActive() + } + _onSeriesLoading(e) { + this._loading = !0, this._setStatus(2) + } + _onDataUpdated(e, t) { + if (this.hasDelayedSymbolIntervalChange()) { + if (this._willSymbolIntervalCurrencyChanged()) return void We.logNormal( + "command comes during symbol/interval changing"); + We.logNormal( + "data_update comes when symbol interval delay present but symbol/interval should not be changed" + ) + } + t ? this._endOfData = !1 : this._lastPriceAnimationActive && this + ._seriesLoaded && this._lineStyleLastPriceCirclePaneView.update(!0), this + ._lastBarCloseTime = e && e.closeTime || null, this._boxSizeValue.setValue( + this.data().boxSize), this._statusView.update(), this + .clearHighLowAvgPriceCache(); + const i = this.model(), + r = Object(s.ensureNotNull)(i.paneForSource(this)); + i.recalculatePane(r), i.updateSource(this), i.updateLineTools() + } + _setStatus(e) { + this._status = e, this._statusView.update(), this.model().updateSource(this), + this._onStatusChanged.fire() + } + _willSymbolIntervalCurrencyChanged() { + const e = this.properties(), + t = this._checkIntervalWillChanged(e.interval.value()), + i = this._checkSymbolWillChanged(e.symbol.value()), + s = this._checkCurrencyWillChanged(e.currencyId.value()), + r = this._checkUnitWillChanged(e.unitId.value()); + return i || t || s || r + } + _checkSymbolWillChanged(e) { + return !this.symbolSameAsCurrent(e) + } + _checkIntervalWillChanged(e) { + return !U.Interval.isEqual(this.m_interval, e) + } + _recreateFormatter() { + this._formatter = Object(d.createSeriesFormatter)(this.symbolInfo(), this + .properties().minTick.value()), this._ignoreMinMoveFormatter = Object(d + .createSeriesFormatter)(this.symbolInfo(), this.properties().minTick + .value(), !0), this.priceScale() && this.priceScale().updateFormatter(), + this._formatterChanged.fire() + } + _recreatePriceStep() { + const { + minMove: e, + priceScale: t + } = Object(d.getSeriesPriceFormattingState)(this.symbolInfo()), i = e / t; + this._ignoreMinMovePriceStep = 1 / t, this._priceStep !== i && (this + ._priceStep = i, this._priceStepChanged.fire()) + } + _recreatePriceFormattingDependencies() { + this._recreateFormatter(), this._recreatePriceStep() + } + _onQuotesUpdate(e, t) { + e.values.current_session !== this._currentSession && (this._currentSession = e + .values.current_session, this._updateLastPriceAnimationActive()) + } + _updateIsPrePostMarketPricesForbiddenProperty() { + const e = !this.isDWM() && !Object(d.isRegularSessionId)(this + .sessionIdProxyProperty().value()); + this._isPrePostMarketPricesForbiddenProperty.setValue(e) + } + _getSymbolForApi() { + return Object(d.symbolForApi)(this.symbolInfo() || this._prevSymbolInfo, this + .symbol()) + } + _getSymbolObject() { + const e = this._getExtendedSymbolObject(); + if (_.SYMBOL_STRING_DATA.hasOwnProperty(this.properties().style.value())) { + return { + symbol: e, + type: this.styleStudyInfo(this.getStyleShortName() + "Style").studyId + + "!", + inputs: this.getInputsProperties().state() + } + } + return e + } + _getExtendedSymbolObject() { + const e = { + symbol: this._getSymbolForApi() + }; + null !== this.currency() && (e["currency-id"] = this.currency()); + const t = this.unit(); + return null !== t && (e["unit-id"] = t), e + } + _changeCurrency() { + this.setSymbolIntervalCurrencyDelayed(), this.model().checkLineToolSelection(), + this._currencyChanged.fire() + } + _changeUnit() { + this.setSymbolIntervalCurrencyDelayed(), this.model().checkLineToolSelection(), + this._unitChanged.fire() + } + _checkCurrencyWillChanged(e) { + return this._currency !== e + } + _checkUnitWillChanged(e) { + return this._unit !== e + } + _createHighLowAvgViews() { + const e = this.properties().highLowAvgPrice, + t = this._getHighLowAvgPrice.bind(this), + i = function(e, t, i, s) { + const r = i.childs(), + n = Te(e, t, Pe, r.highLowPriceLabelsVisible, r + .highLowPriceLinesVisible, () => s(0)), + o = Te(e, t, Ce, r.highLowPriceLabelsVisible, r + .highLowPriceLinesVisible, () => s(1)), + a = Te(e, t, xe, r.averageClosePriceLabelVisible, r + .averageClosePriceLineVisible, () => s(2)); + return { + paneViews: [n.paneView, o.paneView, a.paneView], + panePriceAxisViews: [n.panePriceAxisView, o.panePriceAxisView, a + .panePriceAxisView + ], + priceAxisViews: [n.priceAxisView, o.priceAxisView, a.priceAxisView], + priceLineAxisViews: [n.priceLineAxisView, o.priceLineAxisView, a + .priceLineAxisView + ] + } + }(this._model, this, e, t); + this._highLowAvgPaneViews.push(...i.paneViews), this._labelPaneViews.push(...i + .panePriceAxisViews), this._priceAxisViews.push(...i.priceAxisViews), + this._priceLineAxisViews.push(...i.priceLineAxisViews) + } + _getHighLowAvgPrice(e) { + if (!this._highLowAvgPriceCache.has(e)) { + const t = this._model.timeScale().visibleBarsStrictRange(); + if (null === t) return null; + const i = this._model.mainSeries().bars(), + s = t.firstBar(), + r = t.lastBar(); + if (2 === e) { + const e = function(e, t, i) { + const s = Object(c.barFunction)("close"); + let r = 0, + n = 0; + for (let o = t; o <= i; o++) { + const t = e.valueAt(o); + null !== t && (r += s(t), n++) + } + return n ? r / n : null + }(i, s, r); + if (null === e) return null; + this._highLowAvgPriceCache.set(2, e) + } else { + const e = function(e, t, i) { + return e.minMaxOnRangeCached(t, i, [{ + name: "low", + offset: 0 + }, { + name: "high", + offset: 0 + }]) + }(i, s, r); + if (null === e) return null; + this._highLowAvgPriceCache.set(1, e.min), this._highLowAvgPriceCache + .set(0, e.max) + } + } + return this._highLowAvgPriceCache.get(e) + } + _onSessionIdPropertyChanged() { + this._sessionIdChanged.fire(), this.isDWM() || (this.restart(), this + ._updateLastPriceAnimationActive()) + } + _subscribeRestartToSessionIdChange() { + this.properties().sessionId.subscribe(this, this + ._onSessionIdPropertyChangedBound) + } + _unsubscribeRestartToSessionIdChange() { + this.properties().sessionId.unsubscribe(this, this + ._onSessionIdPropertyChangedBound) + } + _updateLastPriceAnimationActive() { + if (!this._options.lastPriceAnimationEnabled) return; + const e = this._lastPriceAnimationActive, + t = this.properties(), + i = t.style.value(); + if (this._model.isSnapshot() || !t.visible.value() || 3 !== i && 10 !== i && + 2 !== i) this._lastPriceAnimationActive = !1; + else { + const e = this.currentSession(), + t = !Object(d.isRegularSessionId)(this.sessionIdProxyProperty() + .value()) && !this.isDWM(); + this._lastPriceAnimationActive = "market" === e || t && ("pre_market" === + e || "post_market" === e) + } + this._lastPriceAnimationActive && e !== this._lastPriceAnimationActive && this + .model().invalidate(Re.InvalidationMask.cursor()) + } + _onPropertiesChanged(e) { + const t = this._properties.childs(); + e !== t.symbol && e !== t.interval && e !== t.timeframe && (this._tagsChanged + .fire(), this.createPaneView(), this.updateAllViews(), this.model() + .updateSource(this), Object(o.emit)("series_properties_changed", this + ._id)) + } + } + }, + "lW/c": function(e, t, i) { + "use strict"; + i.r(t); + i("YFKU"); + var s = i("hY0g"), + r = i.n(s), + n = i("HySD"); + class o { + constructor(e) { + this._document = e, this.isFullscreen = new r.a; + const t = () => { + const e = ["fullscreenElement", "webkitFullscreenElement", + "mozFullscreenElement", "mozFullScreenElement", + "msFullscreenElement" + ]; + for (let t = 0; t < e.length; t++) { + const i = e[t]; + if (i in this._document) { + this.isFullscreen.setValue(!!this._document[i]); + break + } + } + }; + t(); + for (const i of ["fullscreenchange", "webkitfullscreenchange", + "mozfullscreenchange", "MSFullscreenChange" + ]) e.addEventListener(i, t, !1) + } + enter() { + const e = this._document.documentElement; + for (const t of ["requestFullscreen", "mozRequestFullScreen", + "webkitRequestFullscreen", "msRequestFullscreen" + ]) + if ("function" == typeof e[t]) { + e[t](); + break + } this.isFullscreen.setValue(!0) + } + exit() { + const e = this._document; + for (const t of ["exitFullscreen", "mozCancelFullScreen", "mozExitFullscreen", + "webkitExitFullscreen", "msExitFullscreen" + ]) + if ("function" == typeof e[t]) { + e[t](); + break + } this.isFullscreen.setValue(!1) + } + } + class a { + constructor(e) { + let t; + this.isVisible = new r.a(!0); + let i = null; + for (const s of ["", "moz", "ms", "webkit"]) { + const r = s ? s + "Hidden" : "hidden"; + if (r in e) { + t = s + "visibilitychange", i = () => { + this.isVisible.setValue(!e[r]) + }, i(), e.addEventListener(t, i, !1); + break + } + } + this.destroy = () => { + i && (e.removeEventListener(t, i, !1), i = null) + } + } + } + var l = i("mNbo"), + c = i("Eyy1"), + h = i("qFKp"); + i.d(t, "Root", (function() { + return u + })); + class u { + constructor(e) { + this._updateDocumentHeight = e => { + "visual" === this._viewportType && this._window.document.documentElement + .style.setProperty("height", e + "px", "important") + }, this._window = e, this._fullscreenApi = new o(e.document), this + ._viewportType = h.isChrome || Object(l.isOnMobileAppPage)("any") || !this + ._window.visualViewport ? "quirks" : "visual", "visual" === this._viewportType ? + this._viewport = Object(c.ensureDefined)(this._window.visualViewport) : this + ._viewport = this._window; + const t = this._layoutSizeSensor = this._window.document.createElement("div"); + t.id = "layout-size-sensor", t.style.position = "fixed", t.style.top = "0", t.style + .left = "0", t.style.right = "0", t.style.bottom = "0", t.style.pointerEvents = + "none", t.style.visibility = "hidden", this._initFullscreen() + } + allocate() { + this.free(); + const e = this._window.document, + t = e.createElement("div"); + t.classList.add("js-rootresizer__contents"), t.style.position = "relative", t.style + .width = "100%", t.style.height = "100%", e.body.insertAdjacentElement( + "afterbegin", t), e.body.insertAdjacentElement("afterbegin", this + ._layoutSizeSensor), this._visibilityApi = new a(this._window.document); + const i = { + alive: new r.a(!0), + fullscreenable: new r.a(!0), + container: new r.a(t), + width: new r.a, + height: new r.a, + availWidth: new r.a, + availHeight: new r.a, + visible: this._visibilityApi.isVisible, + fullscreen: this._fullscreenApi.isFullscreen, + remove: () => { + i.alive.setValue(!1) + }, + attach: () => { + i.alive.setValue(!1), this._window.close() + }, + requestFullscreen: () => { + this._requestFullscreen() + }, + exitFullscreen: () => { + this._exitFullscreen() + } + }; + return i.alive.subscribe(e => { + e || i !== this._area || this.free() + }), this._area = i, this._resizeHandler = () => { + const e = this._width(i) || 800, + t = this._height(i) || 600; + i.availHeight.setValue(t), i.availWidth.setValue(e), i.height.setValue(t), i + .width.setValue(e) + }, this._area.height.subscribe(this._updateDocumentHeight, { + callWithLast: !0 + }), this._resizeHandler(), this._viewport.addEventListener("resize", this + ._resizeHandler), new n.ResizerDetacherState(i).bridge() + } + free() { + if (this._resizeHandler && (this._viewport.removeEventListener("resize", this + ._resizeHandler), this._resizeHandler = void 0), this._visibilityApi && ( + this._visibilityApi.destroy(), this._visibilityApi = void 0), this._area) { + const e = this._area; + this._area = void 0, e.height.unsubscribe(this._updateDocumentHeight), e.alive + .setValue(!1); + const t = e.container.value(), + i = null == t ? void 0 : t.parentElement; + i && (i.removeChild(t), i.removeChild(this._layoutSizeSensor)) + } + } + _height(e) { + if ("visual" === this._viewportType) return this._layoutSizeSensor.clientHeight; + return e.container.value().clientHeight + } + _width(e) { + return e.container.value().clientWidth + } + _requestFullscreen() { + this._fullscreenApi.enter() + } + _exitFullscreen() { + this._fullscreenApi.exit() + } + _initFullscreen() { + this._fullscreenApi.isFullscreen.subscribe(e => { + this._resizeHandler && this._resizeHandler() + }) + } + } + }, + ltKl: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SeriesApi", (function() { + return l + })); + var s = i("Eyy1"), + r = i("jRfx"), + n = i("HGup"), + o = i("/ToI"), + a = i("GD+X"); + class l { + constructor(e, t) { + this._series = e, this._undoModel = t, this._model = t.model() + } + isUserEditEnabled() { + return this._series.userEditEnabled() + } + setUserEditEnabled(e) { + this._series.setUserEditEnabled(e) + } + mergeUp() { + this._model.isMergeUpAvailableForSource(this._series) && new r.c(this._model, this + ._series, "").redo() + } + mergeDown() { + this._model.isMergeDownAvailableForSource(this._series) && new r.a(this._model, this + ._series, "").redo() + } + unmergeUp() { + this._model.isUnmergeAvailableForSource(this._series) && new n.c(this._model, this + ._series, "").redo() + } + unmergeDown() { + this._model.isUnmergeAvailableForSource(this._series) && new n.a(this._model, this + ._series, "").redo() + } + detachToRight() { + new o.b(this._model, this._series, this._pane(), "right", "").redo() + } + detachToLeft() { + new o.b(this._model, this._series, this._pane(), "left", "").redo() + } + detachNoScale() { + new o.b(this._model, this._series, this._pane(), "overlay", "").redo() + } + changePriceScale(e) { + const t = Object(s.ensureNotNull)(this._model.paneForSource(this._series)); + switch (e) { + case "new-left": + new o.b(this._model, this._series, t, "left", "").redo(); + break; + case "new-right": + new o.b(this._model, this._series, t, "right", "").redo(); + break; + case "no-scale": + Object(s.assert)(t.actionNoScaleIsEnabled(this._series), + "Unable to leave a pane without any non-overlay price scale"), new o + .b(this._model, this._series, t, "overlay", "").redo(); + break; + default: + const i = this._model.dataSourceForId(e); + if (null === i) throw new Error(`There is no study with entityId='${e}'`); + const r = this._model.paneForSource(i) === t; + Object(s.assert)(r, "Study should be on the main pane"); + const n = Object(s.ensureNotNull)(i.priceScale()); + new o.a(this._model, this._series, t, n, "").redo() + } + } + isVisible() { + return this._series.properties().visible.value() + } + setVisible(e) { + this._series.properties().visible.setValue(e) + } + bringToFront() { + this._model.bringToFront([this._series]) + } + sendToBack() { + this._model.sendToBack([this._series]) + } + entityId() { + return this._series.id() + } + chartStyleProperties(e) { + return this._series.properties().child(c(e)).state(["inputs", "inputsInfo"]) + } + setChartStyleProperties(e, t) { + this._series.properties().child(c(e)).mergeAndFire(t) + } + barsCount() { + return this._series.bars().size() + } + symbolSource() { + return { + symbol: this._series.symbol(), + currencyId: this._series.currency(), + unitId: this._series.unit() + } + } + isLoading() { + return this._series.isLoading() + } + data() { + return this._series.data() + } + priceScale() { + return new a.a(this._undoModel, this._series.priceScale()) + } + _pane() { + return Object(s.ensureNotNull)(this._model.paneForSource(this._series)) + } + } + + function c(e) { + switch (e) { + case 0: + return "barStyle"; + case 1: + return "candleStyle"; + case 2: + return "lineStyle"; + case 3: + return "areaStyle"; + case 4: + return "renkoStyle"; + case 5: + return "kagiStyle"; + case 6: + return "pnfStyle"; + case 7: + return "pbStyle"; + case 8: + return "haStyle"; + case 9: + return "hollowCandleStyle"; + case 10: + return "baselineStyle"; + case 11: + return "rangeStyle"; + case 12: + return "hiloStyle"; + default: + Object(s.ensureNever)(e) + } + throw new Error("unsupported chart style: " + e) + } + }, + lxNp: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("/3z9"), + r = i("d700"), + n = i("hY0g"), + o = i.n(n); + var a = i("JWMC"); + class l { + constructor(e, t) { + this._group = e, this.hotkey = t.hotkey, + this.handler = t.handler, this.desc = t.desc, this.element = t.element || null, + t.isDisabled ? "function" == typeof t.isDisabled ? this.isDisabled = t + .isDisabled : this.isDisabled = () => !0 : this.isDisabled = () => !1 + } + destroy() { + this._group && (this._group.remove(this), this._group = null) + } + } + class c { + constructor(e, t) { + this._actions = [], this._manager = e, this.modal = !(!t || !t.modal), t && (this + .desc = t.desc), t && t.isDisabled ? "function" == typeof t.isDisabled ? + this.isDisabled = t.isDisabled : this.isDisabled = () => !0 : this.isDisabled = + () => !1, this._manager.registerGroup(this) + } + add(e) { + const t = new l(this, e); + return this._actions.push(t), t + } + remove(e) { + for (let t = this._actions.length; t-- > 0;) this._actions[t] === e && this._actions + .splice(t, 1) + } + handleHotkey(e, t) { + for (let i = this._actions.length; i-- > 0;) { + const r = this._actions[i]; + if (r.hotkey === e && ((!r.element || t.target && r.element.contains(t + .target)) && !r.isDisabled())) return r.handler(t), t.preventDefault(), + Object(a.trackEvent)("Keyboard Shortcuts", Object(s.humanReadableHash)( + e)), !0 + } + return !1 + } + promote() { + this._manager.promoteGroup(this) + } + destroy() { + this._actions.length = 0, this._manager.unregisterGroup(this) + } + } + i.d(t, "pressedKeys", (function() { + return u + })), i.d(t, "createGroup", (function() { + return d + })), i.d(t, "registerWindow", (function() { + return p + })), i.d(t, "unregisterWindow", (function() { + return _ + })), i.d(t, "Modifiers", (function() { + return s.Modifiers + })); + const h = new class { + constructor() { + this._groups = [], this._pressedKeys = new o.a(0), this._keyDownListener = + e => { + if (e.defaultPrevented) return; + const t = Object(s.hashFromEvent)(e); + if (this._pressedKeys.setValue(t), !Object(r.a)(t, e.target)) + for (let i = this._groups.length; i-- > 0;) { + const s = this._groups[i]; + if (!s.isDisabled()) { + if (s.handleHotkey(t, e)) return; + if (s.modal) return + } + } + }, this._keyUpListener = e => { + const t = Object(s.hashFromEvent)(e); + this._pressedKeys.setValue(t) + }, this._blurEvent = () => { + this._pressedKeys.setValue(0) + }, this._mouseEvent = e => { + const t = Object(s.modifiersFromEvent)(e), + i = 255 & this._pressedKeys.value(); + this._pressedKeys.setValue(t | i) + } + } + listen(e) { + e.addEventListener("keydown", this._keyDownListener), e.addEventListener( + "keyup", this._keyUpListener), e.addEventListener("blur", this + ._blurEvent), e.addEventListener("mousemove", this._mouseEvent) + } + unlisten(e) { + e.removeEventListener("keydown", this._keyDownListener), e.removeEventListener( + "keyup", this._keyUpListener), e.removeEventListener("blur", this + ._blurEvent), e.removeEventListener("mousemove", this._mouseEvent) + } + registerGroup(e) { + this._groups.push(e) + } + unregisterGroup(e) { + for (let t = this._groups.length; t--;) this._groups[t] === e && this._groups + .splice(t, 1) + } + promoteGroup(e) { + let t = this._groups.length - 1; + for (let i = this._groups.length; i--;) { + if (this._groups[i] === e) return void(i !== t && (this._groups.splice(i, + 1), this._groups.splice(t, 0, e))); + this._groups[i].modal && (t = i - 1) + } + } + pressedKeys() { + return this._pressedKeys + } + }, + u = h.pressedKeys(); + + function d(e) { + return new c(h, e) + } + + function p(e) { + h.listen(e) + } + + function _(e) { + h.unlisten(e) + } + p(window) + }, + "m/3z": function(e, t, i) { + "use strict"; + i.d(t, "d", (function() { + return d + })), i.d(t, "c", (function() { + return p + })), i.d(t, "b", (function() { + return _ + })), i.d(t, "a", (function() { + return m + })); + var s = i("lxNp"), + r = i("/3z9"), + n = i("d700"), + o = i("hY0g"), + a = i.n(o), + l = i("KnF9"); + const c = new a.a(Boolean(s.pressedKeys.value() & r.Modifiers.Shift)), + h = new a.a(Boolean(s.pressedKeys.value() & r.Modifiers.Mod)), + u = new a.a(Boolean(s.pressedKeys.value() & r.Modifiers.Alt)); + + function d() { + return c + } + + function p() { + return h + } + + function _() { + return new l.a({ + altKey: u.value(), + ctrlKey: p().value(), + metaKey: p().value(), + shiftKey: d().value() + }) + } + s.pressedKeys.subscribe(e => { + c.setValue(Boolean(e & r.Modifiers.Shift)), h.setValue(Boolean(e & r.Modifiers + .Mod)), u.setValue(Boolean(e & r.Modifiers.Alt)) + }); + class m { + constructor(e, t) { + this._pressedKeyCode = null, this._boundKeydownHandler = null, this + ._boundKeyupHandler = null, this._chartWidget = e, this._parent = t, this + ._boundKeydownHandler = this._keydownHandler.bind(this), this + ._boundKeyupHandler = this._keyupHandler.bind(this), this._parent.ownerDocument + .addEventListener("keydown", this._boundKeydownHandler), this._parent + .ownerDocument.addEventListener("keyup", this._boundKeyupHandler) + } + destroy() { + null !== this._boundKeydownHandler && (this._parent.ownerDocument + .removeEventListener("keydown", this._boundKeydownHandler), this + ._boundKeydownHandler = null), null !== this._boundKeyupHandler && (this + ._parent.ownerDocument.removeEventListener("keyup", this + ._boundKeyupHandler), this._boundKeyupHandler = null) + } + _keydownHandler(e) { + this._chartWidget.hasModel() && window.document.activeElement === window.document + .body && this._chartWidget.isActive() && (this._handleMoveDrawingsKeyDown(e) || + this._handleScrollKeyDown(e) || this._handleZoomKeyDown(e)) && e + .preventDefault() + } + _keyupHandler(e) { + this._chartWidget.hasModel() && this._handleScrollKeyUp(e) + } + _handleMoveDrawingsKeyDown(e) { + const t = 255 & Object(r.hashFromEvent)(e), + i = this._chartWidget.model(); + switch (t) { + case 37: + return i.moveSelectedToolsLeft(); + case 39: + return i.moveSelectedToolsRight(); + case 38: + return i.moveSelectedToolsUp(); + case 40: + return i.moveSelectedToolsDown() + } + return !1 + } + _handleScrollKeyDown(e) { + if (null !== this._pressedKeyCode) return !1; + const t = Object(r.hashFromEvent)(e), + i = 255 & t, + s = Object(r.modifiersFromEvent)(e); + let o; + if (37 === i) o = 1; + else { + if (39 !== i) return !1; + o = -1 + } + return !(r.isMacKeyboard && s === r.Modifiers.Mod || s !== r.Modifiers.Mod && s !== + r.Modifiers.Alt && s !== r.Modifiers.None) && (!Object(n.a)(t, e.target) && + (this._pressedKeyCode = i, s === r.Modifiers.None ? this._chartWidget + .scrollHelper().moveByBar(o) : this._chartWidget.scrollHelper().move(o), + !0)) + } + _handleScrollKeyUp(e) { + if (null === this._pressedKeyCode) return !1; + const t = Object(r.hashFromEvent)(e); + if (Object(n.a)(t, e.target)) return !1; + return (255 & t) === this._pressedKeyCode && (this._pressedKeyCode = null, this + ._chartWidget.scrollHelper().stopMove(), !0) + } + _handleZoomKeyDown(e) { + const t = Object(r.hashFromEvent)(e), + i = 255 & t; + if (Object(r.modifiersFromEvent)(e) !== r.Modifiers.Mod || Object(n.a)(t, e.target)) + return !1; + const s = this._chartWidget.model(); + if (38 === i) s.zoomIn(); + else { + if (40 !== i) return !1; + s.zoomOut() + } + return !0 + } + } + }, + "m/cY": function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("tc+8"), + r = i.n(s); + + function n(e) { + return new r.a(e) + } + }, + mE5r: function(e, t, i) { + "use strict"; + var s = i("Eyy1"), + r = i("ikwP"), + n = i("gAom"), + o = i("H0vP"), + a = i("aO4+"), + l = i("XlJ7"), + c = i("EsvI"), + h = i("OsWk"), + u = i("rL76"), + d = i("zDbI"); + const p = parseInt(u.labelheight), + _ = parseInt(u.bottommargin); + + function m(e) { + return e / 11 + } + class f { + constructor() { + this._wrapper = document.createElement("div"), this._element = document + .createElement("div"), this._labelElement = document.createElement("div"), this + ._gearElement = document.createElement("div"), this._currentScale = 1, this + ._info = null, this._mode = "auto", this._wrapper.appendChild(this._element), + this._wrapper.classList.add(u.wrapper), this._element.classList.add(u.label), + this._labelElement.className = u.symbol, this._element.appendChild(this + ._labelElement), this._gearElement.className = u.gear, this._gearElement + .innerHTML = h, this._element.appendChild(this._gearElement) + } + getElement() { + return this._wrapper + } + setMode(e) { + this._mode !== e && (this._mode = e) + } + align(e, t) { + const i = m(t); + Math.abs(i - this._currentScale) > .1 && (this._currentScale = i, Math.abs(this + ._currentScale - 1) > .1 ? this._element.style.transform = + `scale(${this._currentScale})` : (this._currentScale = 1, this._element + .style.transform = "")) + } + drawLabelForScreenshot(e, t) { + if (null === this._info || "gear" === this._mode) return; + const i = Object(l.makeFont)(t.fontSize, d.CHART_FONT_FAMILY); + e.fillStyle = c.themes[t.theme].getThemedColor("color-price-axis-label-back"), e + .globalAlpha = .5, e.beginPath(); + const s = m(t.fontSize) * p / 2, + r = Object(a.point)(t.offset + t.width / 2, t.height / 2); + e.arc(r.x, r.y, s, 0, 2 * Math.PI, !0), e.fill(), e.globalAlpha = 1, e.fillStyle = c + .themes[t.theme].getThemedColor("color-price-axis-label-text"), e.textAlign = + "center", e.font = i, e.textBaseline = "middle", e.fillText(this._info.label, r + .x, r.y) + } + setAxisNameInfo(e) { + this._info = e, null !== e && (this._labelElement.textContent = e.label) + } + static height(e) { + return (p + _) * e + } + } + var g = i("aIyQ"), + b = i.n(g), + v = i("S8xo"), + S = i("5VQP"), + y = i("CPmC"); + const w = { + enableTooltip: !0, + showLabels: !0, + enableMenu: !0, + enableHighlight: !0 + }; + class P { + constructor(e, t, i, s, n) { + this._invalidated = !0, this._size = new r.Size(0, 0), this._offset = 0, this + ._axisInfo = null, this._onLabelHovered = new b.a, this._highlighted = !1, this + ._labelMode = "auto", this._fixedLabelMode = null, this + ._canvasConfiguredHandler = () => this.update(), this._isLeft = "left" === e, + this._rendererOptionsProvider = s.rendererOptionsProvider, this + ._sourcesTitlesProvider = s.sourcesTitlesProvider, this + ._contextMenuItemsProvider = s.contextMenuItemsProvider, this + ._backgroundBasedTheme = s.backgroundBasedTheme, this._getBackgroundTopColor = s + .getBackgroundTopColor, this._getBackgroundBottomColor = s + .getBackgroundBottomColor, this._showHorizontalBorder = Boolean(s + .showHorizontalBorder), this._properties = t, this._axisInfo = i, this + ._labelOptions = { + ...w, + ...n + }, this._properties.lineColor.subscribe(this, this._onPropertyChanged), this + ._cell = document.createElement("div"), this._cell.classList.add(u[ + "price-axis-stub"]), this._labelOptions.enableTooltip && this._cell + .classList.add("apply-common-tooltip"), this._cell.style.width = "25px", this + ._cell.style.height = "100%", this._cell.style.position = "absolute", this._cell + .style.left = "0", this._cell.style.overflow = "hidden", this._labelOptions + .showLabels ? (this._label = new f, + this._label.setAxisNameInfo(this._axisInfo), this._cell.appendChild(this + ._label.getElement()), this._labelOptions.enableTooltip && Object(y.b)( + this._cell, "text", e => this._tooltipContent())) : this._label = null, + this._mouseEventHandler = new v.MouseEventHandler(this._cell, this, { + treatHorzTouchDragAsPageScroll: !0, + treatVertTouchDragAsPageScroll: !0 + }), this._canvasBinding = Object(r.createBoundCanvas)(this._cell, new r.Size(16, + 16)), this._canvasBinding.subscribeCanvasConfigured(this + ._canvasConfiguredHandler); + const o = this._canvasBinding.canvas; + o.style.position = "absolute", o.style.left = "0", o.style.top = "0" + } + destroy() { + this._canvasBinding.unsubscribeCanvasConfigured(this._canvasConfiguredHandler), this + ._canvasBinding.destroy(), this._properties.lineColor.unsubscribe(this, this + ._onPropertyChanged), this._mouseEventHandler.destroy() + } + mouseEnterEvent(e) { + this._mouseOrTouchEnterEvent(e) + } + touchStartEvent(e) { + this._mouseOrTouchEnterEvent(e) + } + mouseLeaveEvent(e) { + this._mouseOrTouchLeaveEvent(e) + } + touchEndEvent(e) { + this._mouseOrTouchLeaveEvent(e) + } + mouseClickEvent(e) { + this._mouseClickOrTapEvent(e) + } + tapEvent(e) { + this._mouseClickOrTapEvent(e) + } + update() { + this._invalidated = !0 + } + getElement() { + return this._cell + } + onLabelHovered() { + return this._onLabelHovered + } + setSizeAndOffset(e, t) { + if (e.w < 0 || e.h < 0) throw new Error( + "Try to set invalid size to PriceAxisStub " + JSON.stringify(e)); + this._size.equals(e) || (this._size = e, this._canvasBinding.resizeCanvas({ + width: e.w, + height: e.h + }), this._cell.style.width = e.w + "px", this._cell.style.minWidth = e.w + + "px", this._cell.style.height = e.h + "px", this._invalidated = !0), this + ._offset !== t && (this._offset = t, this._cell.style.left = t + "px") + } + paint(e) { + if (e < o.InvalidationLevel.Full && !this._invalidated) return; + if (0 === this._size.w || 0 === this._size.h) return; + this._invalidated = !1; + const t = Object(r.getContext2D)(this._canvasBinding.canvas); + this._drawBackground(t, this._canvasBinding.pixelRatio), this._drawVerticalBorder(t, + this._canvasBinding.pixelRatio), this._showHorizontalBorder && this + ._drawHorizontalBorder(t, this._canvasBinding.pixelRatio) + } + hardResetCanvas() { + Object(r.hardResizeCanvas)(this._canvasBinding, this._size) + } + getWidth() { + return this._size.w + } + getImage() { + const e = Object(r.createDisconnectedCanvas)(document, this._size), + t = Object(r.getPrescaledContext2D)(e), + i = this._getBackgroundTopColor(), + s = this._getBackgroundBottomColor(); + return i === s ? Object(r.clearRect)(t, 0, 0, this._size.w, this._size.h, i) : + Object(n.clearRectWithGradient)(t, 0, 0, this._size.w, this._size.h, i, s), t + .drawImage(this._canvasBinding.canvas, 0, 0, this._size.w, this._size.h), + null !== this._label && this._label.drawLabelForScreenshot(t, { + offset: 0, + width: this._size.w, + height: this._size.h, + fontSize: this._properties.fontSize.value(), + theme: this._backgroundBasedTheme.value() + }), e + } + setLabelMode(e) { + e !== this._labelMode && (this._labelMode = e, null !== this._label && this._label + .setMode(e), this._cell.classList.toggle(u["fixed-gear"], "gear" === e), + this._cell.classList.toggle(u["fixed-symbol"], "symbol" === e), this._cell + .classList.toggle("apply-common-tooltip", "symbol" !== e && this + ._labelOptions.enableTooltip)) + } + _setHighlighted(e) { + this._labelOptions.enableHighlight && (this._onLabelHovered.fire("stubButton", e), + this._highlighted !== e && (this._highlighted = e, this._invalidated = !0)) + } + _onPropertyChanged() { + this._invalidated = !0 + } + _drawVerticalBorder(e, t) { + const i = this._size.w; + e.save(), e.fillStyle = this._properties.lineColor.value(); + const s = Math.max(1, Math.floor(this._rendererOptionsProvider.options() + .borderSize * t)), + r = this._isLeft ? Math.floor(i * t) - s : 0, + n = Math.ceil(this._size.h * t); + e.fillRect(r, 0, s, n + 1), e.restore() + } + _drawHorizontalBorder(e, t) { + e.save(), e.fillStyle = this._properties.lineColor.value(); + const i = Math.max(1, Math.floor(this._rendererOptionsProvider.options() + .borderSize * t)), + s = Math.ceil(this._size.w * t), + r = this._isLeft ? 0 : i; + e.fillRect(r, 0, s - i, i), e.restore() + } + _drawBackground(e, t) { + const i = Math.ceil(t * this._size.w), + s = Math.ceil(t * this._size.h), + o = this._getBackgroundTopColor(), + a = this._getBackgroundBottomColor(); + if (o === a ? Object(r.clearRect)(e, 0, 0, i + 1, s + 1, o) : Object(n + .clearRectWithGradient)(e, 0, 0, i + 1, s + 1, o, a), this._highlighted) { + const t = c.themes[this._backgroundBasedTheme.value()].getThemedColor( + "color-price-axis-highlight"); + Object(r.fillRect)(e, 0, 0, i + 1, s + 1, t), e.globalAlpha = 1 + } + } + _tooltipContent() { + return this._sourcesTitlesProvider().join("\n") + } + _mouseOrTouchEnterEvent(e) { + null !== this._label && "symbol" !== this._labelMode && this._labelOptions + .enableHighlight && this._setHighlighted(!0) + } + _mouseOrTouchLeaveEvent(e) { + "symbol" !== this._labelMode && this._setHighlighted(!1) + } + _mouseClickOrTapEvent(e) { + e.preventDefault(), null === this._fixedLabelMode && "symbol" !== this._labelMode && + this._labelOptions.enableMenu && this._labelOptions.showLabels ? (this + ._fixedLabelMode = this._labelMode, this.setLabelMode("gear"), S + .ContextMenuManager.createMenu(this._contextMenuItemsProvider(), { + statName: "PriceScaleLabelContextMenu" + }, () => { + this.setLabelMode(Object(s.ensureNotNull)(this._fixedLabelMode)), + this._fixedLabelMode = null + }).then(e => e.show((e, t) => { + const i = this._cell.getBoundingClientRect(); + return { + clientX: this._isLeft ? i.left : i.right - e, + clientY: i.top - Math.min(t, i.top), + overrideHeight: i.top < t ? i.top : void 0 + } + }, this.getElement(), !0))) : S.ContextMenuManager.hideAll() + } + } + var C = i("Daqx"); + i.d(t, "a", (function() { + return x + })); + class x { + constructor(e, t, i, s, n) { + this._axises = [], this._stubs = [], this._size = new r.Size(0, 0), this + ._onLabelHovered = new b.a, this._scalesProperties = e, this + ._priceAxisWidgetFactory = i, this._rendererOptionsProvider = s + .rendererOptionsProvider, this._titlesProvider = s.titlesProvider, this + ._stubContextMenuProvider = s.stubContextMenuProvider, this + ._backgroundBasedTheme = s.backgroundBasedTheme, this._getBackgroundTopColor = s + .getBackgroundTopColor, this._getBackgroundBottomColor = s + .getBackgroundBottomColor, this._showHorisontalBorder = Boolean(s + .showHorizontalBorder), this._labelsOptions = { + ...w, + ...n + }; + const o = this._scalesProperties.childs(); + this._stubProperties = { + lineColor: o.lineColor, + fontSize: o.fontSize + }, this._side = t, this._cell = document.createElement("td"), this._cell + .classList.add("chart-markup-table", "price-axis-container"), this._cell.style + .width = "25px", this._cell.style.position = "relative" + } + destroy() { + this.setScales([], 0, 0, 0) + } + onLabelHovered() { + return this._onLabelHovered + } + setScales(e, t, i, r) { + for (; e.length > this._axises.length && this._axises.length < t;) { + const e = Object(C.a)(this._side, this._axises.length), + t = this._priceAxisWidgetFactory(this._side, this._rendererOptionsProvider, + this._scalesProperties, e, this._backgroundBasedTheme); + this._axises.push(t), this._cell.appendChild(t.getElement()) + } + for (; e.length < this._axises.length;) { + const e = Object(s.ensureDefined)(this._axises.pop()); + this._cell.removeChild(e.getElement()), e.destroy() + } + for (let t = 0; t < this._axises.length; ++t) this._axises[t].setPriceScale(e[t]); + const n = t - e.length, + o = Math.max(0, n); + for (; this._stubs.length > o;) { + const e = Object(s.ensureDefined)(this._stubs.pop()); + e.onLabelHovered().unsubscribeAll(this), this._cell.removeChild(e.getElement()), + e.destroy() + } + for (; this._stubs.length < n;) { + const e = this._labelsOptions.showLabels ? Object(C.a)(this._side, this._stubs + .length) : null, + t = this._stubs.length, + i = new P(this._side, this._stubProperties, e, this._stubParams(t), this + ._labelsOptions); + i.onLabelHovered().subscribe(this, (t, i) => { + this._labelsOptions.showLabels && this._labelsOptions + .enableHighlight && this._onLabelHovered.fire({ + owner: t, + axis: Object(s.ensureNotNull)(e) + }, i) + }), this._stubs.push(i), this._cell.appendChild(i.getElement()) + } + const a = this._labelsOptions.enableMenu; + 1 === r ? this._stubs.forEach((e, t) => e.setLabelMode(a ? "gear" : "symbol")) : + this._stubs.forEach((e, t) => e.setLabelMode(t < i && a ? "auto" : "symbol")) + } + getElement() { + return this._cell + } + optimalWidths() { + return this._axises.map(e => e.optimalWidth()) + } + setSizes(e, t) { + this._size = new r.Size(t.reduce((e, t) => e + t, 0), e), this._cell.style.width = + this._size.w + "px", this._cell.style.minWidth = this._size.w + "px", this._cell + .style.height = this._size.h + "px", t.length !== this._axises.length + this + ._stubs.length && Object(s.assert)(t.length === this._axises.length + this + ._stubs.length, "Widgets count should be the same as widths one"); + let i = 0; + this._forEachWidgetFromLeft((s, n) => { + const o = t[n]; + s.setSizeAndOffset(new r.Size(o, e), i), i += o + }) + } + update() { + this._axises.forEach(e => e.update()), this._stubs.forEach(e => e.update()) + } + paint(e) { + this._axises.forEach((t, i) => t.paint(e(i))), this._stubs.forEach((t, i) => t + .paint(e(i))) + } + paintStubs(e) { + this._stubs.forEach(t => t.paint(e)) + } + hardResetCanvas() { + this._axises.forEach(e => e.hardResetCanvas()), this._stubs.forEach(e => e + .hardResetCanvas()) + } + restoreDefaultCursor() { + this._axises.forEach(e => e.restoreDefaultCursor()) + } + getWidth() { + return this._size.w + } + findAxisWidgetForScale(e) { + const t = this._axises.find(t => t.priceScale() === e); + return void 0 === t ? null : t + } + getScreenshotData() { + const e = this._getImage(); + return { + content: e.toDataURL(), + canvas: e, + contentHeight: this._size.h, + contentWidth: this._size.w + } + } + getImage() { + return this._getImage() + } + slotsCount() { + return this._axises.length + this._stubs.length + } + highlightPriceAxisByLabel(e) { + this._axises.forEach(t => { + const i = t.axisInfo(); + t.setHighlighted(null !== i && i.equals(e)) + }) + } + axes() { + return this._axises + } + _stubParams(e) { + return { + rendererOptionsProvider: this._rendererOptionsProvider, + backgroundBasedTheme: this._backgroundBasedTheme, + sourcesTitlesProvider: () => this._titlesProvider(this._side, e), + contextMenuItemsProvider: () => this._stubContextMenuProvider(this._side, e), + getBackgroundTopColor: this._getBackgroundTopColor, + getBackgroundBottomColor: this._getBackgroundBottomColor, + showHorizontalBorder: this._showHorisontalBorder + } + } + _getImage() { + const e = Object(r.createDisconnectedCanvas)(document, this._size), + t = Object(r.getPrescaledContext2D)(e); + let i = 0; + return this._forEachWidgetFromLeft((e, s) => { + const r = e.getWidth(); + 0 !== r && (t.drawImage(e.getImage(), i, 0, r, this._size.h), i += r) + }), e + } + _forEachWidgetFromLeft(e) { + const t = [...this._axises, ...this._stubs], + i = "left" === this._side, + s = i ? -1 : t.length, + r = i ? -1 : 1; + for (let n = i ? t.length - 1 : 0; n !== s; n += r) e(t[n], n, t) + } + } + }, + "mKT+": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("QloM"); + + function r(e, t, s, r, n) { + return Promise.all([i.e("redux"), i.e("react"), i.e(1), i.e(3), i.e(4), i.e(6), i.e(8), i.e( + 9), i.e(11), i.e(12), i.e(13), i.e(14), i.e(16), i.e(17), i.e(19), i.e(21), + i.e(22), i.e(23), i.e(26), i.e(29), i.e(33), i.e(34), i.e(35), i.e(36), i.e(39), + i.e(42), i.e(43), i.e(45), i.e(49), i.e(50), i.e(59), i.e(64), i.e(65), i.e(86), + i.e(0), i.e(2), i.e(5), i.e(7), i.e(10), i.e(15), i.e(18), i.e(20), i.e(25), i + .e(27), i.e(30), i.e(31), i.e(32), i.e(37), i.e(40), i.e(44), i.e(47), i.e(46), + i.e(55), i.e(58), i.e("new-edit-object-dialog") + ]).then(i.bind(null, "Y5hB")).then(i => { + const s = new(0, i.EditObjectDialogRenderer)(e, t, r, n); + return s.show(), s + }) + } + var n = i("3ClC"); + let o = null; + var a = i("USzt"), + l = i("CW80"); + i.d(t, "resolveAndShowEditObjectDialog", (function() { + return h + })); + const c = { + [s.TabNames.symbol]: "symbol", + [s.TabNames.legend]: "legend", + [s.TabNames.scales]: "scales", + [s.TabNames.trading]: "trading", + [s.TabNames.events]: "events", + [s.TabNames.timezoneSessions]: "appearance", + [s.TabNames.text]: "text", + [s.TabNames.style]: "style" + }; + async function h(e, t, s = {}, h, u) { + const d = h.activeChartWidget.value(); + if (Object(l.isStudyLineTool)(e) && function(e) { + return [a.a].some(t => e instanceof t) + }(e)) return d.propertiesDefinitionsForSource(e).then(i => null !== i ? r(e, t, 0, + u, i) : null); + if (Object(n.isStudy)(e) && function(e) { + const { + shortId: t + } = e.metaInfo(); + return "Overlay" === t + }(e) || Object(l.isLineTool)(e)) return d.propertiesDefinitionsForSource(e).then( + r => { + if (null !== r) { + const { + tabName: n + } = s; + return function(e) { + return Promise.all([i.e("redux"), i.e("react"), i.e(1), i.e( + 3), i.e(4), i.e(6), i.e(8), i.e(9), i.e(11), + i.e(12), i.e(13), i.e(14), i.e(16), i.e(17), i + .e(19), i.e(21), i.e(22), i.e(23), i.e(26), i.e( + 33), i.e(34), i.e(35), i.e(36), i.e(39), i + .e(42), i.e(43), i.e(45), i.e(49), i.e(65), i.e( + 96), i.e(0), i.e(2), i.e(5), i.e(7), i.e( + 10), i.e(15), i.e(18), i.e(20), i.e(25), i + .e( + 27), i.e(30), i.e(31), i.e(32), i.e(37), i + .e( + 40), i.e(44), i.e(47), i.e(58), i.e( + "source-properties-editor") + ]).then(i.bind(null, "CbZh")).then(t => { + const i = new(0, t + .SourcePropertiesEditorRenderer)(e); + return null !== o && o.hide(), i.show(), o = i, + i + }) + }({ + propertyPages: r, + model: t, + source: e, + activePageId: n && c[n] + }) + } + return null + }); + if (Object(n.isStudy)(e) && !Object(n.isESDStudy)(e)) return r(e, t, 0, u); { + const { + tabName: t + } = s, i = Object(n.isESDStudy)(e) ? "events" : t && c[t], r = h + .getChartPropertiesDialogRenderer(); + return r.setActivePage(i), r.show() + } + } + }, + mMWL: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "toolIsCursor", (function() { + return d + })), + i.d(t, "toolIsMeasure", (function() { + return p + })), i.d(t, "resetToCursor", (function() { + return _ + })), i.d(t, "lockTimeAxisTime", (function() { + return y + })), i.d(t, "tool", (function() { + return w + })), i.d(t, "iconTool", (function() { + return P + })), i.d(t, "cursorTool", (function() { + return C + })), i.d(t, "isToolCreatingNow", (function() { + return x + })), i.d(t, "isToolEditingNow", (function() { + return T + })), i.d(t, "isToolMovingNow", (function() { + return I + })), i.d(t, "isDirectionalMovementActive", (function() { + return M + })), i.d(t, "createdLineTool", (function() { + return O + })), i.d(t, "continuedLineTool", (function() { + return L + })), i.d(t, "cancelledLineTool", (function() { + return A + })), i.d(t, "beenSetLineToolLastPoint", (function() { + return E + })), i.d(t, "startedMovingLineTool", (function() { + return k + })), i.d(t, "movedLineTool", (function() { + return D + })), i.d(t, "finishedMovingLineTool", (function() { + return V + })), i.d(t, "startedChangingLineTool", (function() { + return B + })), i.d(t, "changedLineTool", (function() { + return R + })), i.d(t, "finishedChangingLineTool", (function() { + return N + })), i.d(t, "removedLineTool", (function() { + return j + })), i.d(t, "finishedLineTool", (function() { + return F + })), i.d(t, "changedLineStyle", (function() { + return W + })), i.d(t, "copiedLineTool", (function() { + return H + })), i.d(t, "restoredLineTool", (function() { + return U + })), i.d(t, "restoredLineToolState", (function() { + return z + })), i.d(t, "createLineTool", (function() { + return Y + })), i.d(t, "continueLineTool", (function() { + return K + })), i.d(t, "cancelLineTool", (function() { + return J + })), i.d(t, "setLineToolLastPoint", (function() { + return Z + })), i.d(t, "startMovingLineTool", (function() { + return X + })), i.d(t, "moveLineTool", (function() { + return $ + })), i.d(t, "finishMovingLineTool", (function() { + return Q + })), i.d(t, "startChangingLineTool", (function() { + return ee + })), i.d(t, "changeLineTool", (function() { + return te + })), i.d(t, "finishChangingLineTool", (function() { + return ie + })), i.d(t, "removeLineTool", (function() { + return se + })), i.d(t, "finishLineTool", (function() { + return re + })), i.d(t, "changeLineStyle", (function() { + return ne + })), i.d(t, "copyLineTool", (function() { + return oe + })), i.d(t, "restoreLineTool", (function() { + return ae + })), i.d(t, "restoreLineToolState", (function() { + return le + })), i.d(t, "init", (function() { + return ue + })), i.d(t, "runOnDrawingStateReady", (function() { + return de + })), i.d(t, "properties", (function() { + return pe + })), i.d(t, "hideAllDrawings", (function() { + return _e + })), i.d(t, "hideAllIndicators", (function() { + return me + })), i.d(t, "lockDrawings", (function() { + return fe + })), i.d(t, "hideMarksOnBars", (function() { + return ge + })), i.d(t, "drawOnAllCharts", (function() { + return be + })), i.d(t, "lockTimeAxis", (function() { + return ve + })); + var s = i("Eyy1"), + r = i("m/cY"), + n = i("Ocx9"), + o = i("hY0g"), + a = i.n(o), + l = i("aIyQ"), + c = i.n(l), + h = i("Vdly"), + u = i("FQhm"); + + function d(e) { + return "cursor" === e || "arrow" === e || "dot" === e + } + + function p(e) { + return "measure" === e + } + + function _(e = !1) { + if (!e && m) { + if (m.childs().stayInDrawingMode.value()) return + } + w.setValue(C.value()) + } + let m = null, + f = null, + g = null, + b = null, + v = null, + S = null; + const y = new a.a, + w = new a.a, + P = new a.a, + C = new a.a, + x = new a.a(!1), + T = new a.a(!1), + I = new a.a(!1), + M = new a.a(!1), + O = new c.a, + L = new c.a, + A = new c.a, + E = new c.a, + k = new c.a, + D = new c.a, + V = new c.a, + B = new c.a, + R = new c.a, + N = new c.a, + j = new c.a, + F = new c.a, + W = new c.a, + H = new c.a, + U = new c.a, + z = new c.a; + + function G(e, t) { + const i = t || { + value: !1 + }; + return t => { + i.value || (i.value = !0, e.fire(t), i.value = !1) + } + } + const q = { + value: !1 + }, + Y = G(O, q), + K = G(L, q), + J = G(A, q), + Z = G(E, q), + X = G(k), + $ = G(D), + Q = G(V), + ee = G(B), + te = G(R), + ie = G(N), + se = G(j), + re = G(F), + ne = G(W, q), + oe = G(H, q), + ae = G(U), + le = G(z); + let ce = !1, + he = []; + + function ue() { + ce || (w.setValue(h.getValue("chart.cursorPreference", "cursor")), w.subscribe(e => d(e) && + C.setValue(e), { + callWithLast: !0 + }), C.subscribe(e => { + e && h.setValue("chart.cursorPreference", e) + }), m = new n.DefaultProperty("drawings"), f = Object(r.a)(), g = Object(r.a)(), b = + Object(r.a)(), v = Object(r.a)(), S = Object(r.a)(), f.setValue(!1), g.setValue(!1), + b.setValue(!1), v.setValue(!1), S.setValue(!1), w.subscribe(() => { + Object(u.emit)("onSelectedLineToolChanged") + }), ce = !0, he.forEach(e => e()), he = []) + } + + function de(e) { + ce ? e() : he.push(e) + } + + function pe() { + return Object(s.ensureNotNull)(m) + } + + function _e() { + return Object(s.ensureNotNull)(f) + } + + function me() { + return Object(s.ensureNotNull)(g) + } + + function fe() { + return Object(s.ensureNotNull)(b) + } + + function ge() { + return Object(s.ensureNotNull)(v) + } + + function be() { + return pe().childs().drawOnAllCharts + } + + function ve() { + return Object(s.ensureNotNull)(S) + } + }, + mNbo: function(e, t, i) { + "use strict"; + + function s(e, t = !1) { + return !1 + } + + function r(e) { + return e + } + i.r(t), i.d(t, "isOnMobileAppPage", (function() { + return s + })), i.d(t, "urlWithMobileAppParams", (function() { + return r + })) + }, + mPvX: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolsGroupModel", (function() { + return o + })); + var s = i("aIyQ"), + r = i.n(s), + n = i("UqOQ"); + class o { + constructor(e) { + this._onChanged = new r.a, this._groups = [], this._groups = e || [], this._groups + .forEach(e => { + e.onChanged().subscribe(null, t => this._onChanged.fire(e.id, t)) + }) + } + groups() { + return this._groups.filter(e => e.isActualSymbol()) + } + groupsForAllSymbols() { + return this._groups + } + createGroup(e, t, i) { + t = t || this._generateNextName(); + const s = new n.a(e, t, i); + this._groups.push(s), s.onChanged().subscribe(null, e => this._onChanged.fire(s.id, + e)); + const r = { + visibilityChanged: !1, + lockedChanged: !1, + titleChanged: !1, + isActualIntervalChanged: !1, + affectedLineTools: e.map(e => e.id()) + }; + return this._onChanged.fire(s.id, r), s + } + addGroup(e) { + this._groups.push(e), e.onChanged().subscribe(null, t => this._onChanged.fire(e.id, + t)), this._onChanged.fire(e.id) + } + removeGroup(e) { + const t = this._groups.findIndex(t => t.id === e.id); + this._groups.splice(t, 1), this._onChanged.fire(e.id) + } + groupForId(e) { + return this._groups.find(t => t.id === e) || null + } + groupForLineTool(e) { + return this._groups.find(t => t.containsLineTool(e)) || null + } + removeLineTools(e) { + this._groups.forEach(t => t.excludeLineTools(e)); + this._groups.filter(e => 0 === e.lineTools().length).forEach(e => this.removeGroup( + e)) + } + state(e) { + return { + groups: (e ? this._groups.filter(e => e.isActualSymbol()) : this._groups).map( + e => e.state()) + } + } + onChanged() { + return this._onChanged + } + fireChangedAll() { + this._groups.forEach(e => { + this._onChanged.fire(e.id) + }) + } + static fromState(e, t) { + const i = []; + for (const s of t.groups) { + const t = n.a.fromState(e, s); + null !== t && i.push(t) + } + return new o(i) + } + _generateNextName() { + const e = new Set(this.groups().map(e => e.name())); + for (let t = 1;; t++) { + const i = "Group " + t, + s = "Group_" + t; + if (!e.has(i) && !e.has(s)) return i + } + } + } + }, + mZrn: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("FBuY"), + r = i("JWMC"), + n = i("+6II"); + + function o(e, t = !1) { + ("attachEvent" in document ? "complete" === document.readyState : "loading" !== document + .readyState) ? t ? setTimeout(() => e(), 1) : e(): document.addEventListener( + "DOMContentLoaded", () => e()) + } + new Promise(e => { + o(e) + }); + const a = /\b(msie|trident)\b/i.test(navigator.userAgent) ? 1 : 0; + + function l(e) { + return e.offsetWidth + a < e.scrollWidth + } + o(() => { + document.addEventListener("mouseenter", e => { + const t = e.target; + var i; + t instanceof HTMLElement && t.matches(".apply-overflow-title") && ((i = + t).getAttribute("title") || i.offsetWidth + a >= i + .scrollWidth || i.setAttribute("title", i.textContent || "")) + }, !0), document.addEventListener("mouseenter", e => { + const t = e.target; + if (t instanceof HTMLElement && t.matches(".apply-overflow-tooltip")) { + if (t.matches(".apply-overflow-tooltip--check-children")) { + let e = !1; + const i = t.children; + for (let t = 0; t < i.length; t++) { + const s = i[t]; + if (s instanceof HTMLElement && l(s)) { + e = !0; + break + } + } + if (!e) return + } else if (!l(t)) return; + let e = ""; + e = t.matches && t.matches(".apply-overflow-tooltip--allow-text") ? + t.textContent || "" : Array.from(t.childNodes).reduce((e, t) => + (t.nodeType === Node.TEXT_NODE && e.push(t.textContent || + ""), e), []).join("").trim(), Object(n.c)(t, { + text: e + }); + const i = () => { + Object(n.a)(), ["mouseleave", "mousedown"].forEach(e => t + .removeEventListener(e, i)) + }; + ["mouseleave", "mousedown"].forEach(e => t.addEventListener(e, i)) + } + }, !0) + }); + var c = i("aIyQ"), + h = i.n(c), + u = i("VVxS"), + d = i("FIi8"); + let p; + + function _(e) { + window.iframeAuthWidget && !1 === window.user.profile_data_filled && (window + .iframeAuthWidget.preventClose = !0); + const t = window.user.available_offers || {}; + window.TVSettings && window.TVSettings.sync(window.user.settings), window.is_authenticated ? + (e || (initOfferLoginStateChangeButton(), onGoPro() && window.user.is_pro && window + .location.reload()), !1 === window.user.profile_data_filled && (Object(r + .trackEvent)("Conversion", "First login"), delete window.user + .profile_data_filled)) : (Object.keys(t).forEach(e => { + const i = e; + t[i].available_for_anons || delete t[i] + }), window.user = { + username: "Guest", + following: "0", + followers: "0", + ignore_list: [], + available_offers: t + }, u.TVLocalStorage.removeItem("trial_availiable")) + } + p = window.loginStateChange ? window.loginStateChange : window.loginStateChange = new h.a, p + .subscribe(null, _), s.TVXWindowEvents.on("loginStateChange", e => { + const t = JSON.parse(e); + window.user = t.user, window.is_authenticated = !!t.is_authenticated, p.fire() + }), s.TVXWindowEvents.on("signOut", () => { + ! function() { + if (window.initData.lfs) { + const e = document.getElementsByClassName("js-admin-warning")[0]; + document.body.removeChild(e) + } + let e = !0; + [/^\/chart\//, /^\/share-your-love\//].forEach(t => { + t.test(window.location.pathname) && (e = !1) + }), e && window.location.reload() + }() + }), (() => { + const e = {}; + window.crossTabSyncUserAttr = e => { + const t = {}; + e instanceof Array ? e.forEach(e => { + t[e] = window.user[e] + }) : t[e] = window.user[e], + s.TVXWindowEvents.emit("user-obj-changed", JSON.stringify(t)) + }, s.TVXWindowEvents.on("user-obj-changed", t => { + const i = JSON.parse(t); + let s; + for (s in i) + if (i.hasOwnProperty(s)) { + window.user[s] = i[s]; + (e[s] || []).forEach(e => { + e.fire(i[s]) + }) + } + }) + })(), window.TradingView.changeLoginState = e => { + window.is_authenticated = !!e, s.TVXWindowEvents.emit("loginStateChange", JSON + .stringify({ + is_authenticated: window.is_authenticated, + user: window.user + })), p.fire() + }, window.loginUser = function(e, t) { + window.TVDialogs && window.TVDialogs.signModal && window.TVDialogs.signModal.close(), + window.user = Object(d.deepExtend)({}, e), window.TradingView.changeLoginState(!0), + "function" == typeof t && window.TVDialogs && window.TVDialogs.signModal ? window + .TVDialogs.signModal.on("signinSuccess", () => { + t() + }) : "function" == typeof t && t() + }, window.loginRequiredDelegate = new h.a, window.runOrSignIn = (e, t) => { + t || (t = {}), e() + }, window.onLoginStateChange = _, window.TradingView.setTrialAvailiable = e => { + u.TVLocalStorage.setItem("trial_availiable", e ? "1" : "0") + }, window.TradingView.notificationsChanged = new h.a + }, + me8f: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolBalloon", (function() { + return h + })); + var s = i("YFKU"), + r = i("Ocx9"), + n = i("Ss5c"), + o = i("tc+8"), + a = i.n(o), + l = i("j3hX"); + const c = Object(s.t)("Comment"); + class h extends n.LineDataSource { + constructor(e, t) { + const s = t || h.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "Hyqq")).then(t => { + this._setPaneViews([new t.BalloonPaneView(this, e)]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Balloon" + } + properties() { + return super.properties() + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e + } + static createProperties(e) { + const t = new r.DefaultProperty("linetoolballoon", e); + return h._configureProperties(t), t + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "RhWr")).then( + e => e.BalloonDefinitionsViewModel) + } + static _configureProperties(e) { + n.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new a.a(c)), e.addExclusion("text"), e.addChild("linesColors", + new l.LineToolColorsProperty([e.childs().borderColor])), e.addChild( + "textsColors", new l.LineToolColorsProperty([e.childs().color])) + } + } + }, + mf9N: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("GD+X"), + n = i("96Yh"), + o = i("ogJP"), + a = i("RDU5"); + class l extends a.UndoCommand { + constructor(e, t, i) { + super("Change Pane Height"), this._model = e, this._paneIndex = t, this + ._paneHeight = i, this._prevStretchFactors = this._model.panes().map(e => e + .stretchFactor()) + } + redo() { + this._model.changePanesHeight(this._paneIndex, this._paneHeight) + } + undo() { + const e = this._model.panes(); + for (let t = 0; t < e.length; ++t) e[t].setStretchFactor(Object(s.ensureDefined) + (this._prevStretchFactors[t])); + this._model.fullUpdate() + } + } + i.d(t, "PaneApi", (function() { + return c + })); + class c { + constructor(e, t) { + this._priceScales = new WeakMap, this._pane = e, this._chartWidget = t + } + hasMainSeries() { + return this._pane.containsMainSeries() + } + getLeftPriceScales() { + return this._pane.leftPriceScales().map(this._getPriceScaleApi, this) + } + getRightPriceScales() { + return this._pane.rightPriceScales().map(this._getPriceScaleApi, this) + } + getMainSourcePriceScale() { + const e = this._pane.mainDataSource(); + if (null === e) return null; + const t = e.priceScale(); + return null === t || this._pane.isOverlay(e) ? null : this._getPriceScaleApi(t) + } + setMaximized(e) { + if (this._pane.isMaximized() !== e) + for (const e of this._chartWidget.paneWidgets()) + if (e.state() === this._pane) { + this._chartWidget.toggleMaximizePane(e); + break + } + } + legendLoaded() { + const e = this._chartWidget.paneByState(this._pane); + return Boolean(e && e.statusWidget()) + } + getAllEntities() { + const e = this._pane.model(); + return this._pane.sourcesByGroup().allIncludingHidden().map(t => Object(n + .entityForDataSource)(e, t)).filter(o.notNull).filter(e => null !== e.name) + } + getHeight() { + return this._pane.height() + } + setHeight(e) { + const t = this._chartWidget.model().model(), + i = t.panes(); + Object(s.assert)(i.length > 1, + "Unable to change pane's height if there is only one pane"); + const r = i.indexOf(this._pane); + Object(s.assert)(-1 !== r, "Invalid pane index"); + const n = new l(t, r, e); + this._chartWidget.model().undoHistory().pushUndoCommand(n) + } + moveTo(e) { + const t = this.paneIndex(); + t !== e && (Object(s.assert)(e >= 0 && e < this._chartWidget.paneWidgets().length, + "Invalid pane index"), this._chartWidget.model().movePane(t, e)) + } + paneIndex() { + return this._chartWidget.model().model().panes().indexOf(this._pane) + } + _getPriceScaleApi(e) { + let t = this._priceScales.get(e); + return void 0 === t && (t = new r.a(this._chartWidget.model(), e), this._priceScales + .set(e, t)), t + } + } + }, + mkn5: function(e, t, i) { + "use strict"; + (function(t, s) { + i("AE9l"), i("YFKU"); + var r = i("UCjq").PaneWidgetBase, + n = i("1IXQ").scaleRatioForContextMenuTransformer(7), + o = i("CW80").isLineToolName, + a = i("YmeR").ActionBinder, + l = i("7KDR"), + c = l.Action, + h = l.Separator, + u = i("mMWL"), + d = i("FQhm"), + p = i("S8xo").MouseEventHandler; + e.exports.PaneWidget = class extends r { + constructor(e, i, s, r) { + super(e, i, s, r), this.setCursorForTool(), this._mouseEventHandler = + new p(this._topCanvasBinding.canvas, this, { + treatVertTouchDragAsPageScroll: !this._options.handleScroll + .vertTouchDrag, + treatHorzTouchDragAsPageScroll: !this._options.handleScroll + .horzTouchDrag + }), this.actions = [], this.readonlyActions = [], this + ._prevHoveredHittest = null, this._chart.withModel(this, ( + function() { + var e = this._chartUndoModel(); + e.onSimpleZoomIn().subscribe(this, this + ._updateCrosshairOnZoom), e.onSimpleZoomOut() + .subscribe(this, this._updateCrosshairOnZoom) + })), this._highlightedPriceAxis = new t({ + owner: "", + axis: null + }), this._highlightedPriceAxis.subscribe(function(e) { + this._highlightPriceAxisByLabel(e.axis) + }.bind(this)), this._prevPinchScale = 0, this._isDestroyed = !1 + } + destroy() { + for (var e in super.destroy(), this._prevHoveredHittest = null, this + ._mouseEventHandler.destroy(), this._rowElement.parentElement + .removeChild(this._rowElement), this) delete this[e]; + this._isDestroyed = !0 + } + _highlightPriceAxisByLabel(e) { + this._lhsPriceAxisesContainer.highlightPriceAxisByLabel(e), this + ._rhsPriceAxisesContainer.highlightPriceAxisByLabel(e) + } + chart() { + return this._chart + } + stretchFactor() { + return this._state ? this._state._stretchFactor : 0 + } + setStretchFactor(e) { + this.hasState() && (this._state._stretchFactor = e) + } + hideInplaceEditor() { + return !!this._inplaceEditor && (this._inplaceEditor.remove(), this + ._inplaceEditor = void 0, !0) + } + drawRightThere(e) { + if (o(e)) { + var t = this._chartUndoModel(), + i = t.crossHairSource(), + s = t.model().magnet().align(i.price, i.index, this._state); + t.createLineTool(this.state(), { + index: i.index, + price: s + }, e) + } + } + createRemoveMenu() { + var e = this._chart.actions(); + return new c({ + label: window.t("Remove"), + statName: "Remove", + subItems: [e.paneRemoveAllStudies, e + .paneRemoveAllDrawingTools, e + .paneRemoveAllStudiesDrawingTools + ] + }) + } + _customActions() { + var e = { + top: [], + bottom: [], + remove: [] + }, + t = this._chartUndoModel().timeScale(), + i = this._state && this._state.defaultPriceScale(); + if (!s.enabled("custom_items_in_context_menu")) return e; + var r, n = t.isEmpty() ? void 0 : t.indexToUserTime(t.coordinateToIndex( + this._contextMenuX)); + if (i && !i.isEmpty()) { + var o = this._state.mainDataSource().firstValue(); + r = i.coordinateToPrice(this._contextMenuY, o) + } + return d.emit("onContextMenu", { + unixtime: n ? n / 1e3 : void 0, + price: r, + callback: function(t) { + [].concat(t).forEach((function(t) { + var i; + t.text && (t.text.length > 1 && + "-" === t.text[0] ? e.remove + .push(t.text.slice(1)) : ( + i = "-" === t.text ? + new h : new c({ + label: t.text, + onExecute: t + .click + }), t.position && + "top" === t.position ? e + .top.push(i) : e.bottom + .push(i))) + })) + } + }), e + } + update() { + this._lhsPriceAxisesContainer.update(), this._rhsPriceAxisesContainer + .update(), null !== this._legendWidget && this._legendWidget + .update(), this.updateControls() + } + createActionLockScale(e) { + if (!(e instanceof TradingView.Series)) return null; + var t = n(e.priceScale(), this._chartUndoModel().model() + .mainSeriesScaleRatio()), + i = new c({ + checkable: e.priceScale().isLockScale(), + label: window.t("Lock Scale") + " " + t, + statName: "LockScale" + }); + return i._binding = new a(i, e.priceScale().properties().lockScale, this + ._chartUndoModel(), "Lock Scale", (function() { + var t = { + lockScale: this.value() + }; + this._undoModel.setPriceScaleMode(t, e.priceScale(), + this._undoText) + })), i + } + _updateCrosshairOnZoom() { + if (u.lockTimeAxis().value()) { + var e = this._chartUndoModel().crossHairSource(); + e.setPosition(e.index, e.price, this.state()) + } + } + highlightedPriceAxis() { + return this._highlightedPriceAxis + } + } + }).call(this, i("hY0g"), i("Kxc7")) + }, + n0Bl: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "migrateShortcut", (function() { + return o + })); + var s = i("/3z9"); + + function r(e) { + if ("number" == typeof e) return e; + switch (e.toLowerCase()) { + case "ctrl": + return s.Modifiers.Control; + case "shift": + return s.Modifiers.Shift; + case "alt": + return s.Modifiers.Alt; + default: + return e.toUpperCase().charCodeAt(0) + } + } + + function n(e) { + let t = 0; + for (let i = 0; i < e.length; i++) t |= r(e[i]); + return t + } + + function o(e) { + return "number" == typeof e ? e : "string" == typeof e ? n(e.split("+")) : Array.isArray( + e) ? n(e) : 0 + } + }, + n40Z: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolVertLine", (function() { + return h + })); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("Ocx9"), + o = i("tc+8"), + a = i.n(o), + l = i("Ss5c"), + c = i("GmZZ"); + class h extends l.LineDataSource { + constructor(e, t) { + const s = t || h.createProperties(); + super(e, s), this._timeAxisView = new c.a(this), this._paneViewFactory = null, + this.properties().childs().extendLine.subscribe(this, () => e + .lightUpdate()), + i.e("lt-pane-views").then(i.bind(null, "BSCN")).then(t => { + this._paneViewFactory = i => new t.VertLinePaneView(this, e, i), + this._model.lightUpdate() + }) + } + destroy() { + this.properties().childs().extendLine.unsubscribeAll(this), super.destroy() + } + pointsCount() { + return 1 + } + properties() { + return super.properties() + } + name() { + return "Vertical Line" + } + timeAxisViews() { + return this.isSourceHidden() ? null : this.properties().childs().showTime + .value() ? [this._timeAxisView] : null + } + updateAllViews() { + super.updateAllViews(), this._timeAxisView.update() + } + canHasAlert() { + return !0 + } + template() { + const e = super.template(); + return e.text = this.properties().childs().text.value(), e.showLabel = this + .properties().childs().showLabel.value(), e + } + isMultiPaneAvailable() { + return !0 + } + isMultiPaneEnabled() { + return this.properties().childs().extendLine.value() + } + paneViews(e) { + return e = Object(s.ensureDefined)(e), this.isMultiPaneEnabled() || this._model + .paneForSource(this) === e ? (null === this._getPaneViews(e) && null !== + this._paneViewFactory && this._setPaneViews([this._paneViewFactory(e)], + e, !0), super.paneViews(e)) : null + } + priceAxisViews() { + return null + } + priceAxisPoints() { + return [] + } + pointToScreenPoint(e) { + const t = this._model.timeScale(); + if (t.isEmpty()) return [new r.Point(0, 0), new r.Point(0, 0)]; + const i = t.indexToCoordinate(e.index), + s = new r.Point(i, 0); + return [s, s] + } + convertYCoordinateToPriceForMoving(e) { + return 0 + } + static createProperties(e) { + null != e && (void 0 === e.textOrientation && (e.textOrientation = + "horizontal"), void 0 === e.extendLine && (e.extendLine = !1)); + const t = new n.DefaultProperty("linetoolvertline", e); + return h._configureProperties(t), t + } + _getAlertPlots() { + const e = this._points[0], + t = { + index: e.index, + price: e.price + 1 + }; + return [this._linePointsToAlertPlot([e, t], null, !0, !0)] + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "FkpW")).then( + e => e.VerticalLineDefinitionsViewModel) + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text || + ""), this.properties().childs().showLabel.setValue(Boolean(e.showLabel)) + } + static _configureProperties(e) { + l.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new a.a("")), e.addExclusion("text"), e.addExclusion( + "showLabel") + } + } + }, + n5al: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "isRequiringRestartSeriesStyles", (function() { + return v + })), i.d(t, "isRangeBasedStyle", (function() { + return S + })), i.d(t, "isRangeStyle", (function() { + return y + })), i.d(t, "isTimeBasedStyle", (function() { + return w + })), i.d(t, "isValidStyle", (function() { + return P + })), i.d(t, "isSingleValueBasedStyle", (function() { + return C + })), i.d(t, "setLastUsedStyle", (function() { + return x + })), i.d(t, "getLastUsedStyle", (function() { + return T + })), i.d(t, "getDefaultStyle", (function() { + return I + })), i.d(t, "getChartStyleByResolution", (function() { + return M + })), i.d(t, "chartStyleStudyId", (function() { + return O + })), i.d(t, "preparePriceAxisProperties", (function() { + return L + })), i.d(t, "hasProjection", (function() { + return E + })), i.d(t, "isPriceSourceStyle", (function() { + return k + })), i.d(t, "getSeriesPriceFormattingState", (function() { + return D + })), + i.d(t, "createSeriesFormatter", (function() { + return V + })), i.d(t, "symbolCurrencyConvertible", (function() { + return B + })), i.d(t, "symbolCurrency", (function() { + return R + })), i.d(t, "symbolOriginalCurrency", (function() { + return N + })), i.d(t, "symbolBaseCurrency", (function() { + return j + })), i.d(t, "isConvertedToOtherCurrency", (function() { + return F + })), i.d(t, "symbolUnitConvertible", (function() { + return W + })), i.d(t, "symbolUnit", (function() { + return H + })), i.d(t, "symbolOriginalUnit", (function() { + return U + })), i.d(t, "isConvertedToOtherUnit", (function() { + return z + })), i.d(t, "symbolUnitConvertibleGroupsIfExist", (function() { + return G + })), i.d(t, "symbolCurrentContract", (function() { + return q + })), i.d(t, "extractSymbolNameFromSymbolInfo", (function() { + return Y + })), i.d(t, "symbolTitle", (function() { + return K + })), i.d(t, "displayedSymbolName", (function() { + return J + })), i.d(t, "displayedSymbolExchange", (function() { + return Z + })), i.d(t, "actualSymbol", (function() { + return X + })), i.d(t, "proSymbol", (function() { + return $ + })), i.d(t, "symbolForApi", (function() { + return Q + })), i.d(t, "isRegularSessionId", (function() { + return ee + })); + var s = i("Vdly"), + r = i("dfhE"), + n = i("LxhU"), + o = i("kcTO"), + a = i("Kxc7"), + l = i("Eyy1"), + c = i("nEwK"), + h = i("GH0z"); + const u = a.enabled("pay_attention_to_ticker_not_symbol"), + d = a.enabled("uppercase_instrument_names"), + p = a.enabled("charting_library_single_symbol_request"), + _ = a.enabled("use_ticker_on_symbol_info_update"), + m = [4, 5, 6, 7, 8], + f = [4, 5, 6, 7, 8, 11], + g = [0, 1, 9, 2, 3, 10], + b = [2, 10, 3]; + + function v(e) { + return -1 !== m.indexOf(e) + } + + function S(e) { + return -1 !== f.indexOf(e) + } + + function y(e) { + return 11 === e + } + + function w(e) { + return -1 !== g.indexOf(e) + } + + function P(e) { + return S(e) || w(e) + } + + function C(e) { + switch (e) { + case 3: + case 10: + case 2: + return !0; + default: + return !1 + } + } + + function x(e) { + P(e) && 11 !== e && s.setValue("chart.lastUsedStyle", e) + } + + function T() { + const e = s.getInt("chart.lastUsedStyle"); + return void 0 === e ? 1 : e + } + + function I(e) { + return e ? 11 : 1 + } + + function M(e, t) { + const i = y(t), + s = n.Interval.isRange(e); + return !i && s ? I(!0) : i && !s ? I(!1) : t + } + + function O(e, t) { + const i = r.SYMBOL_STRING_DATA[e]; + return void 0 === i ? null : t ? `${i.type}-${i.basicStudyVersion}` : i.type + } + + function L(e) { + const t = e.priceAxisProperties, + i = t.lockScale.value(), + s = 6 === e.style.value(); + (s || i) && (t.log.setValue(!1), t.percentage.setValue(!1)), t.logDisabled.setValue(!(!s && + !i)), t.percentageDisabled.setValue(!(!s && !i)) + } + const A = [4, 7, 5, 6]; + + function E(e) { + return -1 !== A.indexOf(e) + } + + function k(e) { + return b.includes(e) + } + + function D(e, t = "default", i = !1) { + let s, r, n = 100, + o = 1; + if ("default" === t) null != e && (n = e.pricescale, o = e.minmov, s = e.fractional, r = e + .minmove2); + else { + let e = t.split(","); + 3 !== e.length && (e = ["100", "1", "false"]), n = parseInt(e[0]), o = parseInt(e[1]), + s = "true" === e[2] + } + return i && (o = 1), { + priceScale: n, + minMove: o, + fractional: s, + minMove2: r + } + } + + function V(e, t, i = !1) { + if ("default" === t && null != e && ("volume" === e.formatter || "volume" === e.format)) + return new c.VolumeFormatter(2); + if ("default" === t && null != e && ("percent" === e.formatter || "percent" === e.format)) + return new h.PercentageFormatter; + const { + priceScale: s, + minMove: r, + fractional: n, + minMove2: a + } = D(e, t, i); + return new o.PriceFormatter(s, r, n, a) + } + + function B(e) { + return null !== e && "spread" !== e.type + } + + function R(e, t, i) { + if (null === e) return null; + const s = !t || i ? e.currency_id : e.currency_code; + return void 0 === s || "" === s ? null : s + } + + function N(e, t) { + return (t ? e.original_currency_code : e.original_currency_id) || R(e, t) + } + + function j(e) { + return e.base_currency_id || null + } + + function F(e) { + return !(null === e || !B(e)) && (void 0 !== e.original_currency_id && e + .original_currency_id !== e.currency_id) + } + + function W(e) { + return null !== e && "spread" !== e.type + } + + function H(e) { + if (null === e) return null; + const t = e.unit_id; + return void 0 === t || "" === t ? null : t + } + + function U(e) { + return e.original_unit_id || H(e) + } + + function z(e) { + return !(null === e || !W(e)) && (void 0 !== e.original_unit_id && e.original_unit_id !== e + .unit_id) + } + + function G(e) { + return null !== e && W(e) ? e.unit_conversion_types || null : [] + } + + function q(e) { + return "futures" === e.type && e.front_contract || null + } + + function Y(e, t) { + let i = e && (e.pro_name || e.full_name || e.name); + return p && t ? i = t : _ && e && e.ticker && (i = e.ticker), d && i && (i = i + .toUpperCase()), i + } + + function K(e, t) { + return t ? e.name : `${e.name}, ${e.exchange}` + } + + function J(e) { + let t = e && (q(e) || e.name) || ""; + return t.length > 40 && (t = t.substr(0, 37) + "..."), t.trim() + } + + function Z(e) { + const t = e ? e.exchange : ""; + return d ? t.toUpperCase() : t + } + + function X(e, t) { + return null !== e ? e.full_name : t + } + + function $(e, t) { + return null !== e ? e.pro_name : t + } + + function Q(e, t) { + return u && e ? Object(l.ensureDefined)(e.ticker) : X(e, t) + } + + function ee(e) { + return "regular" === e || "us_regular" === e + } + }, + nBJD: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor(e) { + this._text = "", this._color = "", this._size = "13px", this._bold = !1, this + ._statusProvider = e + } + text() { + return this._text + } + getSplitTitle() { + return [this._text] + } + color() { + return this._statusProvider.color() + } + bold() { + return this._bold + } + size() { + return this._size + } + } + }, + nEwK: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PLACE_HOLDER", (function() { + return a + })), i.d(t, "VolumeFormatter", (function() { + return l + })); + var s = i("YFKU"), + r = i("zXvd"), + n = i("ogJP"), + o = i("ivNn"); + const a = "---"; + class l { + constructor(e) { + this.type = "volume", this._numericFormatter = new r.NumericFormatter, this + ._fractionalValues = void 0 !== e && e > 0, this._precision = e + } + state() { + return { + precision: this._precision + } + } + format(e, t) { + if (!Object(n.isNumber)(e)) return a; + let i = ""; + return e < 0 ? (i = "−", e = -e) : e > 0 && t && (i = "+"), e >= 1e100 ? Object(s.t) + ("N/A") : (!this._fractionalValues || e >= 995 ? e = Math.round(e) : this + ._fractionalValues && (e = +e.toFixed(this._precision)), e < 995 ? i + this + ._formatNumber(e) : e < 999995 ? i + this._formatNumber(e / 1e3) + "K" : e < + 999999995 ? (e = 1e3 * Math.round(e / 1e3), i + this._formatNumber(e / + 1e6) + "M") : e < 999999999995 ? (e = 1e6 * Math.round(e / 1e6), i + + this._formatNumber(e / 1e9) + "B") : (e = 1e9 * Math.round(e / 1e9), i + + this._formatNumber(e / 1e12) + "T")) + } + parse(e) { + if ("---" === e) return { + error: "not a number", + res: !1, + value: NaN + }; + const t = { + K: 1e3, + M: 1e6, + B: 1e9 + }, + i = e.slice(-1); + if (t.hasOwnProperty(i)) { + const s = this._numericFormatter.parse(e.slice(0, -1)); + return Object(n.isNumber)(s) ? { + res: !0, + value: s * t[i] + } : { + error: "not a number", + res: !1, + value: NaN + } + } { + const t = this._numericFormatter.parse(e); + return Object(n.isNumber)(t) ? { + res: !0, + value: t + } : { + error: "not a number", + res: !1, + value: NaN + } + } + } + static serialize(e) { + return e.state() + } + static deserialize(e) { + return new l(e.precision) + } + _formatNumber(e) { + return this._fractionalValues && (e = Object(o.fixComputationError)(e)), this + ._numericFormatter.format(e).replace(/(\.[1-9]*)0+$/, (e, t) => t) + } + } + }, + nW7S: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("aO4+").Point, + r = i("Ss5c").LineDataSource, + n = i("Ocx9").DefaultProperty; + class o extends e { + constructor(e) { + super(), this._lineSource = e + } + value() { + var e = 180 * this._lineSource._angle / Math.PI; + return Math.round(e) + } + setValue(e) { + var t = e * Math.PI / 180; + this._lineSource._angle = t; + var i = this._lineSource.pointToScreenPoint(this._lineSource.points()[0])[ + 0], + r = Math.cos(this._lineSource._angle), + n = -Math.sin(this._lineSource._angle), + o = new s(r, n), + a = i.addScaled(o, this._lineSource._distance), + l = this._lineSource.screenPointToPoint(a); + this._lineSource._points[1] = l, this._lineSource._model.updateSource(this + ._lineSource), this._lineSource.updateAllViews(), this._lineSource + ._model.updateSource(this._lineSource) + } + } + class a extends r { + constructor(e, t) { + super(e, t || a.createProperties()), this._properties.addChild("angle", + new o(this)), i.e("lt-pane-views").then(i.t.bind(null, "XHET", 7)) + .then(({ + TrendAnglePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + isSynchronizable() { + return !1 + } + pointsCount() { + return 2 + } + name() { + return "Trend Angle" + } + _calculateAngle() { + var e = this.pointToScreenPoint(this.points()[0])[0], + t = this.pointToScreenPoint(this.points()[1])[0], + i = t.subtract(e); + i.length() > 0 ? (i = i.normalized(), this._angle = Math.acos(i.x), i.y > + 0 && (this._angle = -this._angle), this._distance = t.subtract(e) + .length()) : delete this._angle, this.properties().hasOwnProperty( + "angle") && this.properties().angle.listeners().fire(this + .properties().angle) + } + addPoint(e, t) { + var i = r.prototype.addPoint.call(this, e, t); + return i && this._calculateAngle(), i + } + setLastPoint(e, t) { + super.setLastPoint(e, t), this.points().length > 1 && this._calculateAngle() + } + axisPoints() { + if (this.points().length < 2) return []; + var e = [this.points()[0]], + t = this.pointToScreenPoint(this.points()[0])[1], + i = Math.cos(this._angle) * this._distance, + r = -Math.sin(this._angle) * this._distance, + n = t.add(new s(i, r)), + o = this.screenPointToPoint(n); + return e.push(o), e + } + setPoint(e, t, i) { + super.setPoint(e, t, i), this.points().length > 1 && 1 === e && this + ._calculateAngle() + } + restoreData(e) { + this._angle = e.angle, this._distance = e.distance + } + state(e) { + var t = r.prototype.state.call(this, e); + return t.angle = this._angle, t.distance = this._distance, t + } + cloneData(e) { + this._angle = e._angle, this._distance = e._distance + } + canHasAlert() { + return !0 + } + _getAlertPlots() { + return [this._linePointsToAlertPlot(this._points, null, this.properties() + .extendLeft.value(), this.properties().extendRight.value())] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, + "o1gc"))).TrendAngleDefinitionsViewModel + } + _snapTo45DegreesAvailable() { + return !0 + } + static createProperties(e) { + var t = new n("linetooltrendangle", e); + return a._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e) + } + } + t.LineToolTrendAngle = a + }).call(this, i("tc+8")) + }, + "nd9+": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolGannComplex", (function() { + return h + })); + var s = i("aO4+"), + r = i("Eyy1"), + n = i("T6Of"), + o = i("Ss5c"), + a = i("FaJS"), + l = i("LAp3"), + c = i("j3hX"); + class h extends o.LineDataSource { + constructor(e, t) { + super(e, t || h.createProperties()), this.version = 2, this + ._scaleRatioFormatter = new n.LimitedPrecisionNumericFormatter(7), i.e( + "lt-pane-views").then(i.bind(null, "X4Cb")).then(({ + GannComplexPaneView: e + }) => { + this._setPaneViews([new e(this, this.model())]) + }); + const s = this.properties(); + this._adjustScaleRatio(s), s.subscribe(this, this._adjustScaleRatio), s.childs() + .scaleRatio.subscribe(this, this._correctFirstPoint), this + ._syncStateExclusions = ["scaleRatio"], s.addExclusion("scaleRatio"), this + .properties().onRestoreFactoryDefaults().subscribe(this, this + ._handleRestoringFactoryDefaults), this._onTemplateApplying.subscribe( + this, this._handleTemplateApplying), this._onTemplateApplied.subscribe( + this, this._correctFirstPoint) + } + properties() { + return super.properties() + } + migrateVersion(e, t, i) { + 1 === e && (this._points.length >= this.pointsCount() ? setTimeout(() => this + ._migratePoint()) : this._timePoint.length >= this.pointsCount() && + this._pointAdded.subscribe(this, this._migratePoint)) + } + destroy() { + const e = this.properties(); + e.unsubscribe(this, this._adjustScaleRatio), e.childs().scaleRatio.unsubscribe( + this, this._correctFirstPoint), this.properties() + .onRestoreFactoryDefaults().unsubscribe(this, this + ._handleRestoringFactoryDefaults), this._onTemplateApplying.unsubscribe( + this, this._handleTemplateApplying), this._onTemplateApplied + .unsubscribe(this, this._correctFirstPoint), super.destroy() + } + pointsCount() { + return 2 + } + name() { + return "Gann Square" + } + addPoint(e, t, i) { + this._points.length > 1 && this._points.pop(); + const s = super.addPoint(e, t, i), + n = this.priceScale(); + return !Object(r.ensureNotNull)(n).isLog() && s && this._correctFirstPoint(), s + } + setPoint(e, t, i) { + super.setPoint(e, t, i), void 0 !== i && i.shift() ? this._correctPoint(e) : + this._correctScaleRatio() + } + setLastPoint(e, t) { + const i = this.priceScale(); + Object(r.ensureNotNull)(i).isLog() || (this._points[1] = e, this._correctPoint( + 1)), super.setLastPoint(e, t) + } + isReversed() { + return this.properties().childs().reverse.value() + } + levelsCount() { + return this.properties().childs().levels.childCount() + } + levels() { + const e = [], + t = this.properties().childs(), + i = t.levels.childCount(); + for (let s = 0; s < i; s++) { + const i = t.levels.childs()[s].childs(); + e.push({ + index: s, + visible: i.visible.value(), + color: i.color.value(), + width: i.width.value() + }) + } + return e + } + fanLinesCount() { + return this.properties().childs().fanlines.childCount() + } + fanLines() { + const e = [], + t = this.properties().childs(), + i = t.fanlines.childCount(); + for (let s = 0; s < i; s++) { + const i = t.fanlines.childs()[s].childs(); + e.push({ + index: s, + visible: i.visible.value(), + x: i.x.value(), + y: i.y.value(), + color: i.color.value(), + width: i.width.value() + }) + } + return e + } + arcsCount() { + return this.properties().childs().arcs.childCount() + } + arcs() { + const e = [], + t = this.properties().childs(), + i = t.arcs.childCount(); + for (let s = 0; s < i; s++) { + const i = t.arcs.childs()[s].childs(); + e.push({ + index: s, + visible: i.visible.value(), + x: i.x.value(), + y: i.y.value(), + color: i.color.value(), + width: i.width.value() + }) + } + return e + } + arcsBackgroundTransparency() { + return this.properties().childs().arcsBackground.childs().transparency.value() + } + isArcsBackgroundFilled() { + return this.properties().childs().arcsBackground.childs().fillBackground.value() + } + isLabelsVisible() { + return this.properties().childs().showLabels.value() + } + getLabelsStyle() { + const e = this.properties().childs(), + { + font: t, + fontSize: i, + bold: s, + italic: r + } = e.labelsStyle.childs(), + n = e.levels.childCount(); + return { + textColor: e.levels.childs()[n - 1].childs().color.value(), + font: t.value(), + fontSize: i.value(), + bold: s.value(), + italic: r.value() + } + } + getScaleRatioStep() { + return 1e-7 + } + getScaleRatioFormatter() { + return this._scaleRatioFormatter + } + getPriceDiff() { + const e = this.points(); + if (e.length < 2) return null; + const [t, i] = e; + return i.price - t.price + } + getIndexDiff() { + const e = this.points(); + if (e.length < 2) return null; + const [t, i] = e; + return i.index - t.index + } + getScaleRatio() { + const e = this.getPriceDiff(), + t = this.getIndexDiff(); + return null !== e && null !== t && 0 !== t ? Math.abs(e / t) : null + } + static createProperties(e) { + const t = Object(l.a)("linetoolganncomplex", e); + return h._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "WfUZ")).then( + e => e.GannComplexAndFixedDefinitionsViewModel) + } + static _configureProperties(e) { + o.LineDataSource._configureProperties(e); + const t = [], + i = [], + s = e.childs(); { + const e = s.levels.childCount(); + for (let r = 0; r < e; r++) { + const e = s.levels.childs()[r].childs(); + t.push(e.width), i.push(e.color) + } + } { + const e = s.fanlines.childCount(); + for (let r = 0; r < e; r++) { + const e = s.fanlines.childs()[r].childs(); + t.push(e.width), i.push(e.color) + } + } { + const e = s.arcs.childCount(); + for (let r = 0; r < e; r++) { + const e = s.arcs.childs()[r].childs(); + t.push(e.width), i.push(e.color) + } + } + e.addChild("linesColors", new c.LineToolColorsProperty(i)), e.addChild( + "linesWidths", new c.LineToolWidthsProperty(t)) + } + _correctScaleRatio() { + const e = this.properties().childs(), + t = this.getScaleRatio(); + e.scaleRatio.setValue(t) + } + _getAdjustedScaleRatio() { + const e = this.model().mainSeries().priceScale(), + t = this.model().timeScale(); + return Object(a.scaleRatio)(t, e) + } + _adjustScaleRatio(e) { + const t = e.scaleRatio.value(); + "" !== t && null !== t || e.scaleRatio.setValue(this._getAdjustedScaleRatio()) + } + _correctPoint(e) { + if (this._points.length < 2) return; + const t = this.getIndexDiff(); + if (null === t) return; + const i = this.properties().childs().scaleRatio.value(); + if (null !== i) { + const s = this._points[e], + r = 0 === e ? this._points[1] : this._points[0], + n = s.price - r.price > 0, + o = s.index - r.index > 0; + let a = n && !o || !n && o ? -1 : 1; + 0 === e && (a = -a), s.price = r.price + a * t * i, this._pointChanged.fire( + e) + } + this.normalizePoints() + } + _correctFirstPoint() { + this._correctPoint(this.isReversed() ? 0 : 1) + } + _handleRestoringFactoryDefaults() { + this.properties().childs().scaleRatio.setValue(this._getAdjustedScaleRatio()) + } + _handleTemplateApplying(e) { + "" === e.scaleRatio && (e.scaleRatio = this._getAdjustedScaleRatio()) + } + _migratePoint() { + if (this.points().length < this.pointsCount()) return; + const e = this._getScreenPoints(); + if (null === e) return; + const t = this.screenPointToPoint(e[1]); + this.setPoint(1, t), this._pointAdded.unsubscribe(this, this._migratePoint) + } + _getScreenPoints() { + const e = this._calcAngle(); + if (null === e) return null; + let [t, i] = this.points(); + this.isReversed() && ([t, i] = [i, t]); + const r = this.pointToScreenPoint(t)[0], + n = this.pointToScreenPoint(i)[0], + o = Math.sqrt(Math.pow(r.x - n.x, 2) + Math.pow(r.y - n.y, 2)), + a = new s.Point(Math.cos(e), -Math.sin(e)), + l = a.normalized(), + c = l.x < 0 ? -1 : 1, + h = l.y < 0 ? -1 : 1; + return [r.addScaled(a, o), r.add(new s.Point(5 * o * c, 5 * o * h))] + } + _calcAngle() { + const [e, t] = this.points(), i = this.pointToScreenPoint(e)[0]; + let s = this.pointToScreenPoint(t)[0].subtract(i); + if (s.length() > 0) { + s = s.normalized(); + let e = Math.acos(s.x); + return s.y > 0 && (e = -e), e + } + return null + } + } + }, + nda6: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TimeSpanFormatter", (function() { + return s + })); + i("YFKU"); + class s { + format(e) { + const t = e < 0; + e = Math.abs(e); + const i = Math.floor(e / 86400); + e -= 86400 * i; + const s = Math.floor(e / 3600); + e -= 3600 * s; + const r = Math.floor(e / 60); + e -= 60 * r; + let n = ""; + return i && (n += i + window.t("d", { + context: "dates" + }) + " "), s && (n += s + window.t("h", { + context: "dates" + }) + " "), r && (n += r + window.t("m", { + context: "dates" + }) + " "), e && (n += e + window.t("s", { + context: "dates" + }) + " "), t && (n = "-" + n), n.trim() + } + } + }, + "ng+v": function(e, t, i) { + "use strict"; + i.r(t); + var s = i("aO4+"), + r = i("Eyy1"), + n = i("FQhm"), + o = i("txPx"), + a = i("fgLi"), + l = i("mMWL"), + c = i("aIyQ"), + h = i.n(c), + u = i("tc+8"), + d = i.n(u), + p = i("j3hX"); + class _ extends d.a { + constructor(e, t) { + super(), this._lineSource = e, this._pointIndex = t, e.pointAdded().subscribe( + this, e => { + this._pointIndex === e && this._listeners.fire(this) + }), e.pointChanged().subscribe(this, e => { + this._pointIndex === e && this._listeners.fire(this) + }) + } + value() { + const e = this._lineSource.points()[this._pointIndex].price, + t = Object(r.ensureNotNull)(this._lineSource.ownerSource()).formatter(); + if (t.parse) { + const i = t.format(e), + s = t.parse(i); + return s.res ? s.value : e + } + return e + } + setValue(e) { + const t = this._lineSource.points()[this._pointIndex]; + t.price = parseFloat("" + e), this._lineSource.startChanging(this._pointIndex, + t), this._lineSource.setPoint(this._pointIndex, t), this._lineSource + .model().updateSource(this._lineSource), this._listeners.fire(this); + const i = this._lineSource.endChanging(!0, !1); + this._lineSource.syncMultichartState(i) + } + } + var m = i("j8de"), + f = i("LxhU"), + g = i("dOnf"), + b = i("Ocx9"), + v = i("WkOR"), + S = i("n5al"), + y = i("hY0g"), + w = i.n(y), + P = i("H0vP"), + C = i("pPtI"), + x = i("eCE5"); + i.d(t, "LineDataSourceBase", (function() { + return O + })); + const T = Object(o.getLogger)("Chart.LineDataSource"); + class I { + constructor() { + this._states = [] + } + start(e) { + this._states.push(e) + } + finish(e) { + const t = Object(r.ensureDefined)(this._states.pop()); + return s = t, (i = e).length !== s.length ? { + indexesChanged: !0, + pricesChanged: !0 + } : i.reduce((e, t, i) => { + const r = s[i]; + return e.indexesChanged = e.indexesChanged || t.index !== r.index, e + .pricesChanged = e.pricesChanged || t.price !== r.price, e + }, { + indexesChanged: !1, + pricesChanged: !1 + }); + var i, s + } + isEmpty() { + return 0 === this._states.length + } + } + let M = 0; + class O extends a.DataSource { + constructor(e, t) { + super(), this._currentPointsetId = null, this._pointChanged = new h.a, this + ._pointAdded = new h.a, this._alertUndoMode = !1, this._priceAxisViews = [], + this._timeAxisViews = [], this._timePoint = [], this._points = [], this + ._lastPoint = null, this._paneViews = new Map, this + ._normalizedPointsChanged = new h.a, + this._fixedPointsChanged = new h.a, this._changeStatesStack = new I, this + ._startMovingPoint = null, this._currentMovingPoint = null, this + ._fixedPoints = [], this._isActualSymbol = !1, this._isActualInterval = !1, + this._isActualCurrency = !1, this._isActualUnit = !1, this + ._onIsActualIntervalChange = new h.a, this._linkKey = new w.a(null), this + ._model = e, this._properties = t, this.localAndServerAlertsMismatch = !1, e + .mainSeries().symbolResolved().subscribe(this, this + ._onMainSeriesSymbolResolved) + } + destroy() { + this._paneViews.forEach((e, t) => this._destroyPanePaneViews(t)), this._model + .mainSeries().symbolResolved().unsubscribeAll(this) + } + linkKey() { + return this._linkKey + } + boundToSymbol() { + return !0 + } + points() { + const e = []; + for (let t = 0; t < this._points.length; t++) { + const i = this._points[t]; + e.push({ + index: i.index, + price: i.price, + time: i.time + }) + } + return this._lastPoint && e.push({ + index: this._lastPoint.index, + price: this._lastPoint.price + }), !this.isFixed() && this._currentMovingPoint && this._startMovingPoint && + this._correctPoints(e), e + } + timeAxisPoints() { + return this.points() + } + priceAxisPoints() { + return this.points() + } + normalizedPoints() { + return this._timePoint + } + normalizedPointsChanged() { + return this._normalizedPointsChanged + } + fixedPointsChanged() { + return this._fixedPointsChanged + } + widthsProperty() { + var e; + return null !== (e = this._properties.childs().linesWidths) && void 0 !== e ? + e : null + } + lineColorsProperty() { + var e; + return null !== (e = this._properties.childs().linesColors) && void 0 !== e ? + e : null + } + backgroundColorsProperty() { + var e; + return null !== (e = this._properties.childs().backgroundsColors) && void 0 !== + e ? e : null + } + textColorsProperty() { + var e; + return null !== (e = this._properties.childs().textsColors) && void 0 !== e ? + e : null + } + pointsProperty() { + return this._pointsProperty + } + startMoving(e, t, i, s) { + this.isFixed() && this.restoreFixedPoints(), this._startMovingPoint = e + } + move(e, t, i, s) { + if (i && (i.shiftOnly() || i.controlShift())) + if (this.isFixed()) { + const t = this._alignScreenPointHorizontallyOrVertically(Object(r + .ensureDefined)(e.screen)); + this._currentMovingPoint = { + screen: t + } + } else { + const t = this._alignPointHorizontallyOrVertically(Object(r + .ensureDefined)(e.logical)); + this._currentMovingPoint = { + logical: t + } + } + else this._currentMovingPoint = e; + this.updateAllViews() + } + endMoving(e, t) { + let i = !1, + s = !1; + if (this._currentMovingPoint && this._startMovingPoint) { + if (this.isFixed()) this._correctFixedPoints(this._fixedPoints) && this + ._fixedPointsChanged.fire(); + else { + const e = Object(r.ensureDefined)(this._currentMovingPoint.logical), + t = Object(r.ensureDefined)(this._startMovingPoint.logical); + i = e.index !== t.index, s = e.price !== t.price; + if (this._correctPoints(this._points)) { + n.emit("drawing_event", this._id, "move"); + for (let e = 0; e < this._points.length; e++) this._pointChanged + .fire(e) + } + } + this._startMovingPoint = null, this._currentMovingPoint = null + } + const o = { + indexesChanged: i, + pricesChanged: s + }; + return this.isFixed() ? (this.calcPositionPercents(), this.updateAllViews(), + o) : (this.updateAllViews(), i && !e ? (this._properties.childs() + .interval + .setValue(this._model.mainSeries().interval()), this + .normalizePoints(), this.createServerPoints()) : (this + ._copyPricesWithoutNormalization(), this._normalizedPointsChanged + .fire()), + (s || i) && this.synchronizeAlert(!this._alertUndoMode), o) + } + startMovingPoint() { + return this._startMovingPoint ? { + ...this._startMovingPoint + } : null + } + currentMovingPoint() { + return this._currentMovingPoint ? { + ...this._currentMovingPoint + } : null + } + startChanging(e, t) { + void 0 !== e && void 0 !== t && (e < this._priceAxisViews.length && this + ._priceAxisViews[e].setActive(!0), e < this._timeAxisViews.length && + this._timeAxisViews[e].setActive(!0)), this._changeStatesStack.start( + this.points()) + } + endChanging(e, t) { + const i = this._changeStatesStack.finish(this.points()); + i.indexesChanged && this._changeStatesStack.isEmpty() ? (this._properties + .childs().interval.setValue(this._model.mainSeries().interval()), this + .normalizePoints(), t || this.createServerPoints()) : (this + ._copyPricesWithoutNormalization(), this._normalizedPointsChanged.fire() + ); + for (let e = 0; e < this._priceAxisViews.length; e++) this._priceAxisViews[e] + .setActive(!1); + for (let e = 0; e < this._timeAxisViews.length; e++) this._timeAxisViews[e] + .setActive(!1); + return this.synchronizeAlert(!e), i + } + setPoint(e, t, i, s) { + if (i && i.shift() && this._snapTo45DegreesAvailable()) { + const i = 0 === e ? 1 : e - 1; + this._snapPoint45Degree(t, this.points()[i]) + } + this._points[e].index === t.index ? (this._points[e].price = t.price, this + ._pointChanged.fire(e)) : (this._points[e] = t, this._pointChanged.fire( + e)) + } + getPoint(e) { + return this.points()[e] || null + } + setLastPoint(e, t) { + this._lastPoint = this._preparePoint(e, t), this.updateAllViews() + } + lastPoint() { + return this._lastPoint + } + getChangePointForSync(e) { + return this.getPoint(e) + } + setPoints(e) { + this._points = e + } + clearData() { + this._points = [] + } + denormalizeTimePoints() { + let e = []; + for (let t = 0; t < this._timePoint.length; t++) { + const i = this._model.timeScale().denormalizeTimePoint(this._timePoint[t]); + if (void 0 === i) { + e = []; + break + } + e.push({ + index: i, + price: this._timePoint[t].price + }) + } + e.length > 0 && (this._points = e) + } + restorePoints(e, t, i) { + this._timePoint = Object(g.deepCopy)(e), this._points = t, i || this + .denormalizeTimePoints() + } + calcIsActualSymbol() { + if (this._model.mainSeries().hasDelayedSymbolIntervalChange()) return; + const e = this.ownerSource(); + if (null === e) this._isActualSymbol = !1; + else { + const t = Object(r.ensureNotNull)(e.symbolSource()); + this._migrateSymbolProperty(); + const i = this._properties.childs().symbol, + s = i.value(); + if (this._isActualSymbol = t.symbolSameAsCurrent(s), this._isActualSymbol) { + const e = t.symbol(); + Object(v.a)(s, e) || (T.logWarn( + 'Possible drawing "migrating" detected from "' + s + + '" to "' + e + '"'), T.logWarn("Series symbolInfo: " + JSON + .stringify(t.symbolInfo())), T.logWarn("" + (new Error) + .stack)), i.setValue(e) + } + } + this.calcIsActualInterval(), this.calcIsActualCurrency(), this + .calcIsActualUnit(), this._onSourceHiddenMayChange() + } + calcIsActualCurrency() { + const e = this.ownerSource(); + if (null === e) return void(this._isActualCurrency = !1); + const t = this._properties.childs().currencyId.value(); + if (null !== t) { + const i = e.symbolSource(); + if (null === i) return; + this._isActualCurrency = t === Object(S.symbolCurrency)(i.symbolInfo(), + void 0, !0) + } else { + const t = Object(r.ensureNotNull)(e.symbolSource()).symbolInfo(); + this._isActualCurrency = null !== t && Object(S.symbolCurrency)(t) === + Object(S.symbolOriginalCurrency)(t) + } + this._onSourceHiddenMayChange() + } + calcIsActualUnit() { + const e = this.ownerSource(); + if (null === e) return void(this._isActualUnit = !1); + const t = this._properties.childs().unitId.value(); + if (null !== t) this._isActualUnit = t === Object(r.ensureNotNull)(e + .symbolSource()).unit(); + else { + const t = Object(r.ensureNotNull)(e.symbolSource()).symbolInfo(); + this._isActualUnit = null !== t && Object(S.symbolUnit)(t) === Object(S + .symbolOriginalUnit)(t) + } + this._onSourceHiddenMayChange() + } + calcIsActualInterval() { + const e = this._isActualInterval, + t = this._properties, + i = this._model.mainSeries(); + this._isActualInterval = Object(x.a)(f.Interval.parse(i.interval()), t.childs() + .intervalsVisibilities), !this._isActualInterval && this._model + .selection().isSelected(this) && this._model.selectionMacro(e => e + .removeSourceFromSelection(this)), this._isActualInterval !== e && this + ._onIsActualIntervalChange.fire(), this._onSourceHiddenMayChange() + } + paneViews(e) { + if (this.isSourceHidden()) return null; + const t = this._getPaneViews(this.isMultiPaneAvailable() ? e : void 0); + if (null === t) return null; + if (1 === t.length) return [t[0]]; + const i = []; + for (let e = t.length - 1; e >= 0; --e) i.push(t[e]); + return i + } + detachAlert() { + const e = this.getAlertSync(); + if (e && this._alertCallbacks) { + const t = this._alertCallbacks; + e.off("destroy", t.remove), e.off("change:hovered", t.hovered), e.off( + "change:selected", t.selected) + } + this.hasAlert.setValue(!1), this._alertId = void 0 + } + start() { + this.createServerPoints() + } + onData(e) { + "pointset_error" !== e.method ? e.params.customId === this + ._currentPointsetIdWithPrefix() && this._onPointsetUpdated(e.params.plots) : + T.logError(`Error getting pointset: ${e.params[0]} ${e.params[1]}`) + } + isActualSymbol() { + return this._isActualSymbol + } + isActualCurrency() { + return this._isActualCurrency + } + isActualInterval() { + return this._isActualInterval + } + isActualUnit() { + return this._isActualUnit + } + onIsActualIntervalChange() { + return this._onIsActualIntervalChange + } + setOwnerSource(e) { + null !== this._ownerSource && (this._ownerSource.currencyChanged() + .unsubscribeAll(this), this._ownerSource.unitChanged().unsubscribeAll( + this)), super.setOwnerSource(e), e && (this.setPriceScale(e + .priceScale()), e.currencyChanged().subscribe(this, this + .calcIsActualCurrency), e.unitChanged().subscribe(this, this + .calcIsActualUnit), this.calcIsActualSymbol(), this + ._migrateZOrder()) + } + dataAndViewsReady() { + return this._paneViews.size > 0 + } + pointAdded() { + return this._pointAdded + } + pointChanged() { + return this._pointChanged + } + addPoint(e, t, i) { + const s = this._preparePoint(e, t); + return this._addPointIntenal(s, t, i) + } + updateAllViewsAndRedraw() { + this.updateAllViews(), this._model.updateSource(this) + } + restoreExternalPoints(e, t) { + if (this._timePoint = Object(g.deepCopy)(e.points), t.indexesChanged) { + if (this.properties().interval.setValue(e.interval), !this.isActualSymbol()) + return this._clearServerPoints(), void this._normalizedPointsChanged + .fire(); + this.createServerPoints() + } else { + const t = Math.min(this._points.length, e.points.length); + for (let i = 0; i < t; i++) this._points[i].price = e.points[i].price + } + this._normalizedPointsChanged.fire() + } + isSourceHidden() { + return !this._properties.childs().visible.value() || Object(l.hideAllDrawings)() + .value() && this.canBeHidden() || !this._isActualInterval || !this + ._isActualSymbol || !this._isActualCurrency || !this._isActualUnit + } + createServerPoints() { + if (!this._isActualSymbol) return; + if (!this._model.chartApi().isConnected().value()) return; + if (this._clearServerPoints(), this._model.timeScale().isEmpty()) return; + if (0 === this._timePoint.length && this._points.length > 0 && this + .normalizePoints(), !this._readyToCreatePointset()) return; + this._currentPointsetId = ++M; + const e = Object(r.ensureNotNull)(this._model.mainSeries().seriesSource() + .symbolInstanceId()), + t = this._pointsForPointset(), + i = Object(C.getServerInterval)(this.properties().interval.value()); + this._model.chartApi().createPointset(this._currentPointsetIdWithPrefix(), + "turnaround", e, i, t, this.onData.bind(this)) + } + finish() {} + tryCreateServerPoints() { + this.isFixed() || this.isSourceHidden() || null === this._currentPointsetId && + this.createServerPoints() + } + stop() { + this._clearServerPoints() + } + restart() { + this.isFixed() || (this._currentPointsetId = null, this.createServerPoints()) + } + isStarted() { + return null !== this._currentPointsetId + } + convertYCoordinateToPriceForMoving(e, t) { + var i; + const s = Object(r.ensureNotNull)(this.priceScale()); + if (s.isEmpty()) return null; + const n = this.ownerSource(), + o = Object(r.ensure)(null === (i = n || t) || void 0 === i ? void 0 : i + .firstValue()); + return s.coordinateToPrice(e, o) + } + syncMultichartState(e) { + const t = { + points: this._timePoint, + interval: this._model.mainSeries().interval() + }, + i = this.linkKey().value(); + if (null !== i && this.isSynchronizable()) { + const s = { + model: this._model, + linkKey: i, + symbol: this._model.mainSeries().symbol(), + finalState: t, + changes: e + }; + Object(l.finishChangingLineTool)(s) + } + } + enableCurrentIntervalVisibility() { + const e = this.properties().intervalsVisibilities.state(); + Object(x.b)(e, f.Interval.parse(this._model.mainSeries().interval())), this + .properties().intervalsVisibilities.mergeAndFire(e) + } + clonePositionOffset() { + return this.isFixed() ? { + barOffset: 0, + xCoordOffset: 20, + yCoordOffset: 20 + } : { + barOffset: 0, + xCoordOffset: 0, + yCoordOffset: -40 + } + } + _pointsForPointset() { + return this._timePoint.map(e => [e.time_t, e.offset]) + } + _snapPoint45Degree(e, t, i) { + const s = this._model.timeScale(), + n = s.indexToCoordinate(t.index), + o = s.indexToCoordinate(e.index) - n, + a = Object(r.ensureNotNull)(this.priceScale()), + l = t.price, + c = e.price, + h = Object(r.ensureNotNull)(Object(r.ensureNotNull)(this.ownerSource()) + .firstValue()), + u = a.priceToCoordinate(l, h), + d = a.priceToCoordinate(c, h) - u, + p = Math.round(Math.atan2(o, d) / Math.PI * 4); + if (2 === Math.abs(p)) i || (e.price = l); + else if (0 === Math.abs(p) || 4 === Math.abs(p)) i || (e.index = t.index); + else { + const t = Math.sqrt(o * o + d * d), + i = o < 0 ? -1 : 1, + r = d < 0 ? -1 : 1; + let l = Math.max(Math.abs(d), Math.abs(o)); + l /= l * Math.sqrt(2) / t; + const c = Math.round(s.coordinateToIndex(n + l * i)), + p = Math.abs(s.indexToCoordinate(c) - n), + _ = a.coordinateToPrice(u + p * r, h); + e.index = c, e.price = _ + } + } + normalizePoint(e) { + return { + ...this._model.timeScale().normalizeBarIndex(e.index), + price: e.price + } + } + normalizePoints() { + this._timePoint = []; + for (let e = 0; e < this._points.length; e++) + if (void 0 !== this._points[e].index) { + const t = this.normalizePoint(this._points[e]); + if (!t.time_t) { + this._timePoint = []; + break + } + this._timePoint.push(t) + } this._normalizedPointsChanged.fire() + } + _setPaneViews(e, t, i) { + this._paneViews.set(t, e), void 0 !== t && i && t.onDestroyed().subscribe(this, + () => this._destroyPanePaneViews(t)), this._model.lightUpdate() + } + _getPaneViews(e) { + return this._paneViews.get(e) || null + } + _updateAllPaneViews() { + this._paneViews.forEach(e => { + for (const t of e) t.update() + }) + } + _alignPointHorizontallyOrVertically(e) { + const t = this.pointToScreenPoint(e)[1], + i = Object(r.ensureDefined)(Object(r.ensureNotNull)(this._startMovingPoint) + .logical), + s = this.pointToScreenPoint(i)[1], + n = Math.abs(s.x - t.x), + o = Math.abs(s.y - t.y); + if (n < 10 && o < 10) return e; + return { + index: n < o ? i.index : e.index, + price: n < o ? e.price : i.price + } + } + _alignScreenPointHorizontallyOrVertically(e) { + const t = Object(r.ensureDefined)(Object(r.ensureNotNull)(this + ._startMovingPoint).screen), + i = Math.abs(t.x - e.x), + n = Math.abs(t.y - e.y); + return i < 10 && n < 10 ? e : i < n ? new s.Point(t.x, e.y) : new s.Point(e.x, t + .y) + } + _correctPoints(e) { + const t = Object(r.ensureDefined)(Object(r.ensureNotNull)(this + ._currentMovingPoint).logical), + i = Object(r.ensureDefined)(Object(r.ensureNotNull)(this._startMovingPoint) + .logical), + s = t.index - i.index, + n = t.price - i.price; + if (0 === s && 0 === n) return !1; + for (let t = 0; t < e.length; t++) { + const i = e[t]; + i.index = i.index + s, i.price += n, e[t] = i + } + return !0 + } + _correctFixedPoints(e) { + const t = Object(r.ensureDefined)(Object(r.ensureNotNull)(this + ._currentMovingPoint).screen), + i = Object(r.ensureDefined)(Object(r.ensureNotNull)(this._startMovingPoint) + .screen), + s = t.subtract(i); + if (s.length() >= 1) { + for (let t = 0; t < e.length; t++) e[t] = e[t].add(s); + return !0 + } + return !1 + } + _currentPointsetIdWithPrefix() { + return "pointset_" + this._currentPointsetId + } + _clearServerPoints() { + null !== this._currentPointsetId && this._model.chartApi().isConnected() + .value() && this._model.chartApi().removePointset(this + ._currentPointsetIdWithPrefix()), this._currentPointsetId = null + } + _createPointProperty(e) { + const t = this._pointsProperty.childs().points; + t.addProperty("" + e, {}); + const i = t[e]; + i.addChild("price", new _(this, e)), i.addChild("bar", new m.a(this, e)) + } + _createPointsProperties() { + this._pointsProperty = new d.a, this._pointsProperty.addChild("points", new d + .a); + for (let e = 0; e < this.pointsCount(); e++) this._createPointProperty(e) + } + _alignPointToRangeOfActualData(e) { + const t = Object(r.ensureNotNull)(this._model.mainSeries().bars().firstIndex()), + i = Object(r.ensureNotNull)(this._model.mainSeries().bars().lastIndex()); + let s = Math.max(e.index, t); + return s = Math.min(s, i), { + ...e, + index: s + } + } + _migrateSymbolProperty() { + const e = this._properties.childs(); + if (e.symbolStateVersion.value() < 2) { + const t = Object(r.ensureNotNull)(this.ownerSource()), + i = Object(r.ensureNotNull)(t.symbolSource()); + if (i === this._model.mainSeries()) return void e.symbolStateVersion + .setValueSilently(2); + if (null === i.symbolInfo()) return; + this._model.mainSeries().symbolSameAsCurrent(e.symbol.value()) && e.symbol + .setValueSilently(i.symbol()), e.symbolStateVersion.setValueSilently(2) + } + } + _migrateZOrder() { + const e = this._properties.childs(); + e.zOrderVersion.value() < 2 && (this.ownerSource() === this.model() + .mainSeries() && this.setZorder(this.zorder() - this.model() + .mainSeries() + .obsoleteZOrder()), e.zOrderVersion.setValueSilently(2)) + } + _preparePoint(e, t) { + const i = e; + return t && t.shift() && this.points().length >= 2 && this + ._snapTo45DegreesAvailable() && this._snapPoint45Degree(i, this.points()[ + this.points().length - 2]), i + } + _addPointIntenal(e, t, i) { + this._points.push(e); + const s = this._points.length === this.pointsCount(); + return s ? (this._lastPoint = null, i || (this.normalizePoints(), this + .createServerPoints())) : this._lastPoint = e, this._pointAdded.fire( + this._points.length - 1), s + } + _onSourceHiddenMayChange() { + this._model.invalidate(P.InvalidationMask.validateAction(() => { + this._isDestroyed || this._processHibernate() + })) + } + _processHibernate() { + this.isSourceHidden() ? this.isStarted() && this.stop() : this.isStarted() || + this.start() + } + _onPointsetUpdated(e) { + if (0 === e.length) return; + for (let t = 0; t < e.length; t++) { + const i = e[t], + s = this._timePoint[i.index], + r = { + index: i.value[0], + time: new Date(1e3 * i.value[1]), + price: s.price + }; + this._points.length <= i.index ? (this._points.push(r), this._pointAdded + .fire(this._points.length - 1)) : (this._points[i.index] = r, this + ._pointChanged.fire(i.index)) + } + const t = this; + t.checkAlert && t.checkAlert(), this.updateAllViewsAndRedraw() + } + _snapTo45DegreesAvailable() { + return !1 + } + _onMainSeriesSymbolResolved() { + const e = this.ownerSource(); + null === e || this._model.mainSeries() === e.symbolSource() || this + .isSourceHidden() || this.createServerPoints() + } + _readyToCreatePointset() { + return this._timePoint.length > 0 + } + static _addCollectedProperties(e) { + e.hasChild("linewidth") && e.addChild("linesWidths", new p + .LineToolWidthsProperty([Object(r.ensureDefined)(e.child("linewidth"))]) + ), e.hasChild("linecolor") && e.addChild("linesColors", new p + .LineToolColorsProperty([Object(r.ensureDefined)(e.child("linecolor"))]) + ), e.hasChild("backgroundColor") && e.addChild("backgroundsColors", + new p.LineToolColorsProperty([Object(r.ensureDefined)(e.child( + "backgroundColor"))])), e.hasChild("textColor") && e.addChild( + "textsColors", new p.LineToolColorsProperty([Object(r.ensureDefined)(e + .child("textColor"))])), e instanceof b.DefaultProperty && (e + .addExclusion("linesWidths"), e.addExclusion("linesColors"), e + .addExclusion("backgroundsColors"), e.addExclusion("textsColors")) + } + static _initialSymbolStateVersion() { + return 1 + } + static _initialZOrderVersion() { + return 1 + } + _destroyPanePaneViews(e) { + const t = this._paneViews.get(e); + if (void 0 !== t) + for (const e of t) e.destroy && e.destroy(); + void 0 !== e && e.onDestroyed().unsubscribeAll(this), this._paneViews.delete(e) + } + _copyPricesWithoutNormalization() { + const e = Math.min(this._points.length, this._timePoint.length); + for (let t = 0; t < e; t++) this._timePoint[t].price = this._points[t].price + } + } + }, + nqXy: function(e, t, i) { + "use strict"; + + function s(e, t) { + let { + deltaX: i, + deltaY: s + } = e; + switch (i /= 100, s /= 100, t.deltaMode) { + case t.DOM_DELTA_PAGE: + i *= 120, s *= 120; + break; + case t.DOM_DELTA_LINE: + i *= 32, s *= 32 + } + return { + deltaX: i, + deltaY: s + } + } + i.d(t, "a", (function() { + return r + })); + class r { + constructor() { + this._totalDeltaX = 0, this._totalDeltaY = 0, this._prevWheelTime = 0 + } + processWheel(e) { + e.timeStamp - this._prevWheelTime > 100 && this._reset(), + this._totalDeltaX += e.deltaX, this._totalDeltaY += e.deltaY, this + ._prevWheelTime = e.timeStamp; + const t = { + deltaX: e.deltaX, + deltaY: e.deltaY + }; + return 0 === this._totalDeltaX || 0 === this._totalDeltaY || (Math.abs(this + ._totalDeltaX) >= Math.abs(3 * this._totalDeltaY) && (t.deltaY = 0), + Math.abs(this._totalDeltaY) >= Math.abs(3 * this._totalDeltaX) && (t + .deltaX = 0)), s(t, e) + } + _reset() { + this._totalDeltaX = 0, this._totalDeltaY = 0 + } + } + }, + o2pV: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SelectionIndexes", (function() { + return r + })); + var s = i("Eyy1"); + class r { + constructor(e) { + this._baseIndex = null, this._offsetInBar = null, this._offsetInTime = null, this + ._barsBetweenPoints = null, this._timescale = e + } + indexes() { + const e = this._timescale.visibleBarsStrictRange(); + if (null === e) return []; + const t = e.firstBar(), + i = e.lastBar(); + if (null === this._offsetInTime || null === this._barsBetweenPoints) { + const e = this._timescale.barSpacing(); + this._barsBetweenPoints = Math.floor(120 / e), this._offsetInBar = i % this + ._barsBetweenPoints, this._offsetInTime = this._timescale.indexToTimePoint( + this._offsetInBar), this._baseIndex = this._timescale.baseIndex() + } + const r = this._timescale.baseIndex(); + this._baseIndex !== r && (this._baseIndex = r, this._offsetInBar = Object(s + .ensureNotNull)(this._timescale.timePointToIndex(this._offsetInTime))); + const n = Object(s.ensureNotNull)(this._offsetInBar), + o = []; + let a = Math.floor((t - n) / this._barsBetweenPoints); + const l = Math.floor((i - n) / this._barsBetweenPoints); + for (; a <= l; a++) o.push(n + a * this._barsBetweenPoints); + return o + } + clear() { + this._offsetInBar = null, this._offsetInTime = null, this._baseIndex = null, this + ._barsBetweenPoints = null + } + } + }, + oIoN: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()), this.version = n.version, i.e("lt-pane-views") + .then(i.t.bind(null, "pBAL", 7)).then(({ + DisjointChannelPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 3 + } + name() { + return "Disjoint Channel" + } + hasEditableCoordinates() { + return !1 + } + addPoint(e, t) { + return t && t.shift() && 2 === this.points().length && this._snapPoint45Degree(e, + this.points()[this.points().length - 2]), s.prototype.addPoint.call(this, e) + } + setLastPoint(e, t) { + return t && t.shift() && 2 === this.points().length && this._snapPoint45Degree(e, + this.points()[this.points().length - 2]), s.prototype.setLastPoint.call( + this, e) + } + setPoint(e, t, i) { + var s = .5 * (this._points[1].price + this._points[2].price); + if (i && i.shift() && 1 === e) { + this._snapPoint45Degree(t, this.points()[0]) + } + if (e < 3 && super.setPoint(e, t), 0 !== e && 2 !== e) { + if (1 === e) { + var r = this._points[1].price - s; + this._points[2].price = this._points[1].price - 2 * r + } else if (3 === e) { + r = t.price - this._points[2].price; + this._points[0].price = this._points[1].price - r, this._points[0].index = t + .index + } + this.normalizePoints() + } + } + getPoint(e) { + if (e < 3) return s.prototype.getPoint.call(this, e); + var t = this._points[0].price - this._points[2].price; + return { + index: this._points[0].index, + price: this._points[1].price - t + } + } + canHasAlert() { + return !0 + } + _getAlertPlots() { + var e = this._points[0], + t = this._points[1], + i = []; + e.index <= t.index ? (i.push(e), i.push(t)) : (i.push(t), i.push(e)); + var s = this._points[2]; + s.time = t.time, s.index = t.index; + var r, n, o, a, l = { + price: s.price + (t.price - e.price), + time: e.time, + index: e.index + }, + c = []; + s.index <= l.index ? (c.push(s), c.push(l)) : (c.push(l), c.push(s)), i[0].price > + c[0].price ? (r = i, n = c) : c[0].price > i[0].price || c[1].price > i[1] + .price ? (r = c, n = i) : (r = i, n = c); + var h = this.properties().extendLeft.value(), + u = this.properties().extendRight.value(); + return e.index <= t.index ? (o = h, a = u) : (o = u, a = h), [this + ._linePointsToAlertPlot(r, "Upper", o, a), this._linePointsToAlertPlot(n, + "Lower", o, a) + ] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "vm8R"))) + .GeneralTrendFiguresDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetooldisjointangle", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + n.version = 1, t.LineToolDisjointChannel = n + }, + oV8k: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return s + })); + class s { + constructor(e, t) { + this._id = e, this._model = t + } + id() { + return this._id + } + isHoveredEnabled() { + return !0 + } + isSelectionEnabled() { + return !1 + } + priceScale() { + return null + } + paneViews(e) { + return [] + } + labelPaneViews(e) { + return [] + } + priceAxisViews(e, t) { + return [] + } + updateViewsForPane(e) { + e.containsMainSeries() && this.updateAllViews() + } + } + }, + oXaB: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "PriceAxisLastValueMode", (function() { + return s + })), + function(e) { + e[e.LastPriceAndPercentageValue = 0] = "LastPriceAndPercentageValue", e[e + .LastValueAccordingToScale = 1] = "LastValueAccordingToScale" + }(s || (s = {})) + }, + oamr: function(e, t, i) { + "use strict"; + var s = i("ocLq"); + class r { + constructor(e, t, i, s) { + this._value = e, this._name = t, this._owner = i, this._comparer = void 0 !== s ? + s : (e, t) => null == e ? null != t : e === t + } + getName() { + return this._name + } + set(e) { + const t = this._comparer(this._value, e); + return t && this._owner.dirty(), this._value = e, t + } + get() { + return this._value + } + } + class n { + constructor(e, t, i) { + this._owner = null, this._value = e, this._name = t, this._owner = i + } + getName() { + return this._name + } + set(e) { + return this._value !== e && (this._value = e, null !== this._owner && this._owner + .dirty(), !0) + } + get() { + return this._value + } + } + class o extends r { + constructor(e, t, i, s) { + super(e, t, i, s) + } + } + class a { + constructor(e) { + this._owner = e + } + createField(e, t) { + return new r(e, t, this) + } + createDoubleField(e, t) { + return new r(e, t, this, (e, t) => !s.Std.equal(e, t)) + } + createDoubleArrayField(e, t) { + return new o(e, t, this, (e, t) => { + if (e === t) return !1; + const i = e.length; + if (t.length !== i) return !0; + for (let r = 0; r < i; r++) { + const i = e[r], + n = t[r]; + if (!s.Std.equal(i, n)) return !0 + } + return !1 + }) + } + createTimeField(e, t) { + return new n(e, t, this) + } + dirty() { + null !== this._owner && this._owner.dirty() + } + setOwner(e) { + this._owner = e + } + } + i.d(t, "a", (function() { + return l + })); + class l { + constructor(e) { + this._mixinJSONObject = new a(this), this._state = 0, this._owner = null, this + ._gen = e, this._id = e.nextGraphicsObjId(), this._id2 = this._mixinJSONObject + .createField(this.id(), "id") + } + dirty() { + null !== this._owner && this._owner.dirty() + } + setOwner(e) { + this._owner = e + } + id() { + return this._id + } + unsetOwner(e) { + this._owner === e && (this._owner = null) + } + state() { + return this._state + } + erase() { + 1 === this._state && this._gen.pushEraseObjCmd(this._id, this.jsonName()), this + ._state = 2, this.dirty() + } + markAsPosted() { + 1 !== this._state && (this._state = 1, this.dirty()) + } + isErased() { + return 2 === this._state + } + isPosted() { + return 1 === this._state + } + isNaN() { + return !1 + } + _processObjUpdate() { + 1 === this._state && (this._gen.pushEraseObjCmd(this._id, this.jsonName()), this + ._id = this._gen.nextGraphicsObjId(), this._id2.set(this._id), this._state = + 0), this.dirty() + } + } + }, + ocLq: function(e, t, i) { + "use strict"; + (function(t) { + var s = i("5B3K").StudyError, + r = i("Y7w9"), + n = i("ogJP").inherit, + o = i("E6p6").SessionStage, + a = i("LxhU").Interval, + l = i("OLhd").createDwmAligner, + c = i("OLhd").createTimeToBarTimeAligner, + h = i("5fI3").decodeExtendedSymbol, + u = i("5fI3").encodeExtendedSymbolOrGetSimpleSymbolString, + d = function() { + var e, p = "undefined" != typeof window ? window : t, + _ = p.PineJsCalendar ? p.PineJsCalendar : i("jCNj"), + m = i("IiTo"), + f = i("IDnv").extrapolateBarsFrontToTime, + g = {}; + + function b(e, t, i, s, r) { + var n = r, + o = 0; + if (isNaN(e.get(t - 1))) return { + index: NaN, + value: NaN + }; + for (var a = 0; a < t; ++a) s(e.get(a), n) && (o = a, n = e.get(a)); + return { + index: o, + value: n + } + } + + function v(e, t, i, s, r) { + this._areaRight = e, this._areaLeft = t, this._pivotType = i, this._series = + s, this._currentIndex = r.new_var(0), this._currentValue = r.new_var( + NaN), this._pivotIndex = r.new_var(-1), this._index = g.n(r), this + ._isNewBar = r.symbol.isNewBar; + var n = this._currentIndex.get(1), + o = this._currentValue.get(1), + a = this._pivotIndex.get(1); + this._index > 1 && (this._currentIndex.set(n), this._currentValue.set(o), + this._pivotIndex.set(a)) + } + + function S(e, t, i) { + this._deviation = e; + var s = i.new_var(g.high(i)), + r = i.new_var(g.low(i)); + s.get(2 * t + 1), r.get(2 * t + 1), this._pivotHigh = new v(t, t, v.HIGH, s, + i), this._pivotLow = new v(t, t, v.LOW, r, i), this._lastVal = i + .new_var(NaN), this._lastIndex = i.new_var(-1), this._lastType = i + .new_var(), this._index = g.n(i), this._isNewBar = i.symbol.isNewBar, + this._isBarClosed = i.symbol.isBarClosed; + var n = this._lastIndex.get(1), + o = this._lastVal.get(1), + a = this._lastType.get(1); + this._index > 1 && this.addPivot(n, o, a), this.processPivot(this + ._pivotHigh), this.processPivot(this._pivotLow) + } + + function y(e) { + this.symbol = e, this.vars = [], this.vars_index = 0, this.ctx = [], this + .ctx_index = 0, this.minimumAdditionalDepth = null + } + + function w(e) { + this.mindepth = 0, this.original = NaN, this.modified = !1, this.symbol = e + } + + function P(e) { + w.call(this, e) + } + + function C(e, t, i, s, r, n) { + var o = h(e); + const l = "string" == typeof o.symbol ? o : o.symbol; + this.ticker = l.symbol, this.currencyCode = i || l["currency-id"], this + .unitId = s || l["unit-id"]; + var c = l["currency-id"] !== this.currencyCode || l["unit-id"] !== this + .unitId; + l["currency-id"] = this.currencyCode, l["unit-id"] = this.unitId, c && (e = + u(o)), this.tickerid = e; + var d = a.parse(t); + this.resolution = d.letter(), this.interval = d.multiplier(), this.period = + d.value(), this.index = -1, this.time = NaN, this.open = NaN, this + .high = NaN, this.low = NaN, this.close = NaN, this.volume = NaN, this + .updatetime = NaN, this.isNewBar = !1, this.isBarClosed = !1, this + .session = new m.SessionInfo("Etc/UTC", "24x7"), this.script = r, this + .isAdditionalDepthAllowed = void 0 === o.type, n && this.set_symbolinfo( + n) + } + + function x(e, t, i, s, r, n, o, a, l, c) { + this.body = n, this.symbols = [], this.runner = r, this.inputCallback = a, + this.out = o, this.nonseriesOut = l, this.ctx = new y(this.add_sym(e, t, + i, s, c)), this.init() + } + + function T(e) { + this.symbols = [], this.barsets = [], + this.subscription = [], this.host = e, this.isRecalculated = !1, this + .isStarted = !1, this.start() + } + + function I(e) { + this.runner = new T(e) + } + + function M(e, t) { + this.info = e, this.bars = t || [], this.isBarClosed = !0, this + .firstLoadedTimeMs = 0 !== this.bars.length ? this.bars[0].time : 1 / 0 + } + + function O(e, t) { + this.period = e, this.generateEmptyBars = !!t + } + + function L() {} + return g.max_series_default_size = 10001, g.n = function(e) { + return e.symbol.index + 1 + }, g.nz = function(e, t) { + return t = t || 0, isFinite(e) ? e : t + }, g.na = function(e) { + return 0 === arguments.length ? NaN : isNaN(e) ? 1 : 0 + }, g.isZero = function(e) { + return Math.abs(e) <= 1e-10 + }, g.toBool = function(e) { + return isFinite(e) && !g.isZero(e) + }, g.eq = function(e, t) { + return g.isZero(e - t) + }, g.neq = function(e, t) { + return !g.eq(e, t) + }, g.ge = function(e, t) { + return g.isZero(e - t) || e > t + }, g.gt = function(e, t) { + return !g.isZero(e - t) && e > t + }, g.lt = function(e, t) { + return !g.isZero(e - t) && e < t + }, g.le = function(e, t) { + return g.isZero(e - t) || e < t + }, g.and = function(e, t) { + return isNaN(e) || isNaN(t) ? NaN : g.isZero(e) || g.isZero(t) ? 0 : 1 + }, g.or = function(e, t) { + return isNaN(e) || isNaN(t) ? NaN : g.isZero(e) && g.isZero(t) ? 0 : 1 + }, g.not = function(e) { + return isNaN(e) ? NaN : g.isZero(e) ? 1 : 0 + }, g.eps = function() { + return 1e-10 + }, g.greaterOrEqual = function(e, t, i) { + return t - e < (i || 1e-10) + }, g.lessOrEqual = function(e, t, i) { + return e - t < (i || 1e-10) + }, g.equal = function(e, t, i) { + return Math.abs(e - t) < (i || 1e-10) + }, g.greater = function(e, t, i) { + return e - t > (i || 1e-10) + }, g.less = function(e, t, i) { + return t - e > (i || 1e-10) + }, g.compare = function(e, t, i) { + return g.equal(e, t, i) ? 0 : g.greater(e, t, i) ? 1 : -1 + }, g.max = Math.max, g.min = Math.min, g.pow = Math.pow, g.abs = Math.abs, g + .log = Math.log, g.log10 = function(e) { + return Math.log(e) / Math.LN10 + }, g.sqrt = Math.sqrt, g.sign = function(e) { + return isNaN(e) ? NaN : g.isZero(e) ? 0 : e > 0 ? 1 : -1 + }, g.exp = Math.exp, g.sin = Math.sin, g.cos = Math.cos, g.tan = Math.tan, g + .asin = Math.asin, g.acos = Math.acos, g.atan = Math.atan, g.floor = Math + .floor, g.ceil = Math.ceil, g.round = Math.round, g.avg = function(e, t, i, + s, r, n) { + if (2 === arguments.length) return (e + t) / 2; + for (var o = 0, a = 0; a < arguments.length; a++) o += arguments[a]; + return o / arguments.length + }, g.open = function(e) { + return e.symbol.open + }, g.high = function(e) { + return e.symbol.high + }, g.low = function(e) { + return e.symbol.low + }, g.close = function(e) { + return e.symbol.close + }, g.hl2 = function(e) { + return (e.symbol.high + e.symbol.low) / 2 + }, g.hlc3 = function(e) { + return (e.symbol.high + e.symbol.low + e.symbol.close) / 3 + }, g.ohlc4 = function(e) { + return (e.symbol.open + e.symbol.high + e.symbol.low + e.symbol.close) / + 4 + }, g.volume = function(e) { + return e.symbol.volume + }, g.updatetime = function(e) { + return e.symbol.updatetime + }, g.time = function(e) { + return e.symbol.bartime() + }, g.period = function(e) { + return e.symbol.period + }, g.tickerid = function(e) { + return e.symbol.tickerid + }, g.currencyCode = function(e) { + return e.symbol.currencyCode + }, g.unitId = function(e) { + return e.symbol.unitId + }, g.ticker = function(e) { + return e.symbol.ticker + }, g.interval = function(e) { + return e.symbol.interval + }, g.isdwm = function(e) { + return e.symbol.isdwm() + }, g.isintraday = function(e) { + return !e.symbol.isdwm() + }, g.isdaily = function(e) { + return "D" === e.symbol.resolution + }, g.isweekly = function(e) { + return "W" === e.symbol.resolution + }, g.ismonthly = function(e) { + return "M" === e.symbol.resolution + }, + g.year = function(e) { + return g.timepart(e.symbol, _.YEAR, arguments[1]) + }, g.month = function(e) { + return g.timepart(e.symbol, _.MONTH, arguments[1]) + }, g.weekofyear = function(e) { + return g.timepart(e.symbol, _.WEEK_OF_YEAR, arguments[1]) + }, g.dayofmonth = function(e) { + return g.timepart(e.symbol, _.DAY_OF_MONTH, arguments[1]) + }, g.dayofweek = function(e) { + return g.timepart(e.symbol, _.DAY_OF_WEEK, arguments[1]) + }, g.hour = function(e) { + return g.timepart(e.symbol, _.HOUR_OF_DAY, arguments[1]) + }, g.minute = function(e) { + return g.timepart(e.symbol, _.MINUTE, arguments[1]) + }, g.second = function(e) { + return g.timepart(e.symbol, _.SECOND, arguments[1]) + }, g.add_days_considering_dst = function(e, t, i) { + return _.add_days_considering_dst(_.get_timezone(e), t, i) + }, g.selectSessionBreaks = function(e, t) { + if (g.isdwm(e) || void 0 === e.symbol.session.timezone) return []; + var i = m.newBarBuilder(e.symbol.period, e.symbol.session), + s = [], + r = t.length; + if (i.moveTo(t[r - 1]), 1 === r && i.startOfBar(0) === t[0]) s.push(t[ + 0]); + else { + for (var n = r - 2; n >= 0; --n) { + var o = t[n]; + if (!(o >= i.startOfBar(0))) { + i.moveTo(o); + var a = t[n + 1]; + s.push(a) + } + } + s.reverse() + } + return s + }, g.iff = function(e, t, i) { + return g.not(e) ? i : t + }, g.rising = function(e, t) { + for (var i = 1; i < t + 1; ++i) + if (e.get(i) > e.get(0)) return 0; + return 1 + }, g.falling = function(e, t) { + for (var i = 1; i < t + 1; ++i) + if (e.get(i) < e.get(0)) return 0; + return 1 + }, g.timepart = function(e, t, i) { + var s = _.utc_to_cal(e.timezone, i || e.bartime()); + return _.get_part(s, t) + }, g.rsi = function(e, t) { + return g.isZero(t) ? 100 : g.isZero(e) ? 0 : 100 - 100 / (1 + e / t) + }, g.sum = function(e, t, i) { + var s = i.new_var(), + r = g.nz(e.get()) + g.nz(s.get(1)) - g.nz(e.get(t)); + return s.set(r), r + }, g.sma = function(e, t, i) { + var s = g.sum(e, t, i); + return g.na(e.get(t - 1)) ? NaN : s / t + }, g.smma = function(e, t, i) { + var s = i.new_var(e), + r = d.Std.sma(s, t, i), + n = i.new_var(), + o = (n.get(1) * (t - 1) + e) / t; + return n.set(d.Std.na(n.get(1)) ? r : o), n.get(0) + }, g.rma = function(e, t, i) { + var s = g.sum(e, t, i), + r = t - 1, + n = e.get(r), + o = i.new_var(), + a = o.get(1), + l = e.get(), + c = g.na(n) ? NaN : g.na(a) ? s / t : (l + a * r) / t; + return o.set(c), c + }, g.fixnan = function(e, t) { + var i = t.new_var(); + return isNaN(e) ? i.get(1) : (i.set(e), e) + }, g.tr = function(e, t) { + 1 === arguments.length && (t = e, e = void 0); + var i = void 0 !== e && !!e, + s = t.new_var(g.close(t)), + r = s.get(1); + return i && isNaN(r) && (r = g.close(t)), g.max(g.max(g.high(t) - g.low( + t), g.abs(g.high(t) - r)), g.abs(g.low(t) - r)) + }, g.atr = function(e, t) { + var i = t.new_var(g.tr(t)); + return g.sma(i, e, t) + }, g.ema = function(e, t, i) { + var s = g.sum(e, t, i), + r = i.new_var(), + n = e.get(0), + o = e.get(t - 1), + a = r.get(1), + l = g.na(o) ? NaN : g.na(a) ? s / t : 2 * (n - a) / (t + 1) + a; + return r.set(l), l + }, g.wma = function(e, t, i) { + for (var s = 0, r = t = Math.round(t); r >= 0; r--) { + s += (t - r) * e.get(r) + } + return 2 * s / (t * (t + 1)) + }, g.vwma = function(e, t, i) { + var s = i.new_var(g.volume(i)), + r = i.new_var(e.get(0) * g.volume(i)); + return g.sma(r, t, i) / g.sma(s, t, i) + }, g.swma = function(e, t) { + return (e.get(0) + 2 * e.get(1) + 2 * e.get(2) + e.get(3)) / 6 + }, g.lowestbars = function(e, t, i) { + return -b(e, t, 0, (function(e, t) { + return g.lt(e, t) + }), Number.MAX_VALUE).index + }, g.lowest = function(e, t, i) { + return b(e, t, 0, (function(e, t) { + return g.lt(e, t) + }), Number.MAX_VALUE).value + }, g.highestbars = function(e, t, i) { + return -b(e, t, 0, (function(e, t) { + return g.gt(e, t) + }), Number.MIN_VALUE).index + }, g.highest = function(e, t, i) { + return b(e, t, 0, (function(e, t) { + return g.gt(e, t) + }), Number.MIN_VALUE).value + }, g.cum = function(e, t) { + var i = t.new_var(), + s = g.nz(i.get(1)) + e; + return i.set(s), s + }, g.accdist = function(e) { + var t = g.high(e), + i = g.low(e), + s = g.close(e), + r = g.volume(e); + return g.cum(s === t && s === i || t === i ? 0 : r * (2 * s - i - t) / ( + t - i), e) + }, g.correlation = function(e, t, i, s) { + var r = g.sma(e, i, s), + n = g.sma(t, i, s), + o = s.new_var(e.get() * t.get()); + return (g.sma(o, i, s) - r * n) / Math.sqrt(g.variance2(e, r, i) * g + .variance2(t, n, i)) + }, g.stoch = function(e, t, i, s, r) { + var n = g.highest(t, s), + o = g.lowest(i, s); + return g.fixnan(100 * (e.get() - o) / (n - o), r) + }, g.tsi = function(e, t, i, s) { + var r = s.new_var(g.change(e)), + n = s.new_var(g.abs(g.change(e))), + o = s.new_var(g.ema(r, i, s)), + a = s.new_var(g.ema(n, i, s)); + return g.ema(o, t, s) / g.ema(a, t, s) + }, g.cross = function(e, t, i) { + if (isNaN(e) || isNaN(t)) return !1; + var s, r = i.new_var((s = e - t) < 0 ? -1 : 0 === s ? 0 : 1); + return !isNaN(r.get(1)) && r.get(1) !== r.get() + }, g.linreg = function(e, t, i) { + for (var s = 0, r = 0, n = 0, o = 0, a = 0; a < t; ++a) { + var l = e.get(a), + c = t - 1 - a + 1; + s += c, r += l, n += c * c, o += l * c + } + var h = (t * o - s * r) / (t * n - s * s); + return r / t - h * s / t + h + h * (t - 1 - i) + }, g.sar = function(e, t, i, s) { + var r = s.new_var(), + n = s.new_var(), + o = s.new_var(), + a = g.high(s), + l = g.low(s), + c = g.close(s), + h = s.new_var(a), + u = s.new_var(l), + d = s.new_var(c), + p = s.new_var(), + _ = p.get(1), + m = n.get(1), + f = o.get(1); + n.set(m), o.set(f); + var b = !1, + v = u.get(1), + S = u.get(2), + y = h.get(1), + w = h.get(2), + P = d.get(), + C = d.get(1); + 2 === g.n(s) && (g.greater(P, C) ? (r.set(1), o.set(h.get()), _ = v, f = + h.get()) : (r.set(-1), o.set(u.get()), _ = y, f = u.get()), + b = !0, n.set(e), m = e); + var x = _ + m * (f - _); + return 1 === r.get() ? g.greater(x, u.get()) && (b = !0, r.set(-1), x = + Math.max(h.get(), o.get()), o.set(u.get()), n.set(e)) : g.less( + x, h.get()) && (b = !0, r.set(1), x = Math.min(u.get(), o + .get()), o.set(h.get()), n.set(e)), b || (1 === r.get() ? g + .greater( + h.get(), o.get()) && (o.set(h.get()), n.set(Math.min(n + .get() + t, i))) : g.less(u.get(), o.get()) && (o.set(u + .get()), + n.set(Math.min(n.get() + t, i)))), 1 === r.get() ? (x = Math + .min(x, v), g.n(s) > 2 && (x = Math.min(x, S))) : (x = Math.max( + x, y), g.n(s) > 2 && (x = Math.max(x, w))), p.set(x), x + }, g.alma = function(e, t, i, s) { + for (var r = Math.floor(i * (t - 1)), n = t / s * (t / s), o = [], a = + 0, l = 0; l < t; ++l) { + var c = Math.exp(-1 * Math.pow(l - r, 2) / (2 * n)); + a += c, o.push(c) + } + for (l = 0; l < t; ++l) o[l] /= a; + var h = 0; + for (l = 0; l < t; ++l) h += o[l] * e.get(t - l - 1); + return h + }, g.wvap = function(e, t) { + return e.get() - e.get(1) + }, g.change = function(e) { + return e.get() - e.get(1) + }, g.roc = function(e, t) { + var i = e.get(t); + return 100 * (e.get() - i) / i + }, g.dev = function(e, t, i) { + var s = g.sma(e, t, i); + return g.dev2(e, t, s) + }, g.dev2 = function(e, t, i) { + for (var s = 0, r = 0; r < t; r++) { + var n = e.get(r); + s += g.abs(n - i) + } + return s / t + }, g.stdev = function(e, t, i) { + var s = g.variance(e, t, i); + return g.sqrt(s) + }, g.variance = function(e, t, i) { + var s = g.sma(e, t, i); + return g.variance2(e, s, t) + }, g.variance2 = function(e, t, i) { + for (var s = 0, r = 0; r < i; r++) { + var n = e.get(r), + o = g.abs(n - t); + s += o * o + } + return s / i + }, g.percentrank = function(e, t) { + if (g.na(e.get(t - 1))) return NaN; + for (var i = 0, s = e.get(), r = 1; r < t; r++) { + var n = e.get(r); + g.ge(s, n) && i++ + } + return 100 * i / t + }, g.createNewSessionCheck = function(e) { + if (void 0 === e.symbol.session.timezone) return function() { + return !1 + }; + var t = m.newBarBuilder(e.symbol.period, e.symbol.session); + return function(e) { + return t.indexOfBar(e) === o.POST_SESSION && (t.moveTo(e), !0) + } + }, g.error = function(e) { + throw new s(e) + }, v.LOW = 0, v.HIGH = 1, v.prototype.isPivotFound = function() { + return -1 !== this._pivotIndex.get() + }, v.prototype.pivotIndex = function() { + return this._pivotIndex.get() + }, v.prototype.currentValue = function() { + return this._currentValue.get() + }, v.prototype.pivotType = function() { + return this._pivotType + }, v.prototype.reset = function() { + this._currentValue.set(NaN), this._currentIndex.set(0), this._pivotIndex + .set(-1) + }, v.prototype.isRightSideOk = function(e) { + return e - this._currentIndex.get() === this._areaRight + }, v.prototype.isViolate = function(e, t) { + if (e < 1 || isNaN(this._currentValue.get())) return !0; + var i = this._series.get(this._index - e); + return !!isNaN(i) || (i === this._currentValue.get() ? t : this + ._pivotType === v.HIGH ? i > this._currentValue.get() : i < this + ._currentValue.get()) + }, v.prototype.processPoint = function(e) { + this.isViolate(e, !1) && (this._currentValue.set(this._series.get()), + this._currentIndex.set(e)) + }, v.prototype.isRestartNeeded = function(e) { + return e - this._currentIndex.get() > this._areaRight + }, v.prototype.update = function() { + if (this._isNewBar && this.isPivotFound() && this.reset(), this + .processPoint(this._index), this.isRightSideOk(this._index)) { + if (-1 === this._pivotIndex.get()) { + for (var e = !0, t = 0; t < this._areaLeft; ++t) + if (this.isViolate(this._currentIndex.get() - 1 - t, !0)) { + e = !1; + break + } e && this._pivotIndex.set(this._currentIndex.get()) + } + } else -1 !== this._pivotIndex.get() && this._pivotIndex.set(-1); + if (this.isRestartNeeded(this._index)) { + this.reset(); + for (t = 0; t <= this._areaRight; ++t) this.processPoint(this + ._index - this._areaRight + t) + } + }, S.prototype.addPivot = function(e, t, i) { + this._lastIndex.set(e), this._lastVal.set(t), this._lastType.set(i) + }, S.prototype.updatePivot = function(e, t) { + this._lastIndex.set(e), this._lastVal.set(t) + }, S.prototype.lastPrice = function() { + return this._lastVal.get() + }, S.prototype.lastIndex = function() { + return this._lastIndex.get() + }, S.prototype.addPoint = function(e, t, i) { + if (isNaN(this._lastVal.get())) this.addPivot(e, t, i); + else { + var s = this._lastVal.get(); + if (this._lastType.get() !== i) Math.abs(s - t) / t > this + ._deviation && this.addPivot(e, t, i); + else(i === v.HIGH ? t > s : t < s) && this.updatePivot(e, t) + } + }, S.prototype.processPivot = function(e) { + e.update(), this._isBarClosed && e.isPivotFound() && this.addPoint(e + .pivotIndex(), e.currentValue(), e.pivotType()) + }, g.zigzag = function(e, t, i) { + return new S(e, t, i).lastPrice() + }, g.zigzagbars = function(e, t, i) { + var s = new S(e, t, i); + return -1 === s.lastIndex() ? NaN : s.lastIndex() - g.n(i) + }, y.prototype.new_sym = function(e, t, i, s) { + return this.symbol.script.add_sym(e, t, i, s) + }, y.prototype.select_sym = function(e) { + this.symbol = this.symbol.script.get_sym(e) + }, y.prototype.new_var = function(e) { + var t = this.vars; + t.length <= this.vars_index && t.push(new w(this.symbol)); + var i = t[this.vars_index++]; + return arguments.length > 0 && i.set(e), i + }, y.prototype.new_unlimited_var = function(e) { + var t = this.vars; + t.length <= this.vars_index && t.push(new P(this.symbol)); + var i = t[this.vars_index++]; + return arguments.length > 0 && i.set(e), i + }, y.prototype.new_ctx = function() { + return this.ctx.length <= this.ctx_index && this.ctx.push(new y(this + .symbol)), + this.ctx[this.ctx_index++] + }, y.prototype.prepare = function(e) { + this.ctx_index = 0, this.vars_index = 0; + for (var t = 0; t < this.vars.length; t++) this.vars[t].prepare(e); + for (var i = 0; i < this.ctx.length; i++) this.ctx[i].prepare(e) + }, y.prototype.maxAdditionalDepth = function() { + if (null !== this.minimumAdditionalDepth) return this + .minimumAdditionalDepth; + for (var e = 0, t = 0; t < this.vars.length; t++) { + var i = this.vars[t].mindepth; + !isNaN(i) && i > e && (e = i) + } + return e + }, y.prototype.stop = function() { + this.symbol = null, this.vars = null + }, y.prototype.setMinimumAdditionalDepth = function(e) { + this.minimumAdditionalDepth = e + }, w.prototype.valueOf = function() { + return this.get(0) + }, w.prototype.get = function(e) { + return isNaN(e) && (e = 0), e = e || 0, this.hist ? e >= this.hist + .length ? (console.error("not enough depth: " + this), NaN) : this + ._get(e) : (this.mindepth = g.max(this.mindepth, e), NaN) + }, w.prototype._get = function(e) { + var t = this.hist_pos - e; + return t < 0 && (t += this.hist.length), this.hist[t] + }, w.prototype.set = function(e) { + this.hist && (this.hist[this.hist_pos] = e, this.modified = !0) + }, w.prototype.prepare = function(e) { + e === this.symbol && (e.isNewBar ? (this.original = this.get(0), !this + .modified && this.hist || this.add_hist()) : this.set(this + .original), this.modified = !1) + }, w.prototype.add_hist = function() { + if (!this.hist) { + var e = g.na(this.mindepth) ? g.max_series_default_size : g.max(this + .mindepth + 1, 1); + e = Math.round(e); + for (var t = new Array(e), i = 0; i < e; i++) t[i] = NaN; + this.hist = t, this.hist_pos = -1 + } + this.hist_pos = Math.min(this.hist_pos + 1, this.hist.length), this + .hist_pos === this.hist.length && (this.hist_pos = this.hist + .length - 1, this.hist.shift(), this.hist.push(NaN)), this.hist[ + this.hist_pos] = this.original + }, w.prototype.adopt = function(e, t, i) { + this.hist || (this.mindepth = NaN); + var s = t.get(), + r = e.indexOf(s); + if (0 !== i) { + var n = t.get(1); + if (!g.na(n)) r = r === e.indexOf(n) ? -1 : r + } + return r < 0 ? NaN : this._get(r) + }, w.prototype.indexOf = function(e) { + if (!this.hist) return this.mindepth = NaN, -1; + if (g.na(e)) return -1; + var t = this.hist.length, + i = this.symbol.index + 1, + s = Math.min(t, i), + n = r.upperbound_int(this.hist, e, 0, s); + return 0 === n ? -1 : s - n + }, n(P, w), P.prototype.add_hist = function() { + if (this.hist || (this.hist = new Float64Array(2e3), this.hist_pos = - + 1), this.hist_pos = this.hist_pos + 1, this.hist_pos === this + .hist + .length) { + var e = new Float64Array(2 * this.hist.length); + e.set(this.hist), this.hist = e + } + this.hist[this.hist_pos] = this.original + }, C.prototype.set_symbolinfo = function(e) { + e || console.error("WARN: symbolinfo isn't defined for " + this + .tickerid), this.info = e, this.minTick = e.minmov / e + .pricescale, this.currencyCode = e.currency_code, this.unitId = e + .unit_id, this.timezone = _.get_timezone(e.timezone), this.session + .init(e.timezone, e.session, e.session_holidays, e.corrections) + }, C.prototype.isdwm = function() { + return "" !== this.resolution && "S" !== this.resolution && "T" !== this + .resolution + }, C.prototype.enable_dwm_aligning = function(e, t) { + this.dwm_aligner = m.newBarBuilder(this.period, e, t) + }, C.prototype.bartime = function() { + var e = this.time; + if (!this.isdwm() || isNaN(e)) return e; + var t = _.utc_to_cal(this.timezone, e); + return this.session.spec.correctTradingDay(t), _.cal_to_utc(this + .timezone, t) + }, C.prototype.lastbar = function(e) { + if (!isNaN(e.time)) { + var t = e.time; + this.dwm_aligner && (this.dwm_aligner.moveTo(t), t = this + .dwm_aligner.startOfBar(0)); + var i = this.time !== t; + i && this.index >= 0 && !this.isBarClosed && (this.isNewBar = !1, + this.isBarClosed = !0, this.script.calc(this)), this.time = + t, this.open = e.open, this.high = e.high, this.low = e.low, + this.close = e.close, this.volume = e.volume, this.updatetime = + e.updatetime, this.isNewBar = i, this.isBarClosed = e + .isBarClosed, this.isLastBar = e.isLastBar, this.isNewBar && ( + this.index++, this.isFirstBar = 0 === this.index), this + .script.calc(this) + } + }, x.prototype.calc = function(e) { + var t = this.ctx, + i = this.body; + t.prepare(e); + var s = i.main(t, this.inputCallback, e); + if (s && "composite" === s.type) + for (let e = 0; e < s.data.length; ++e) this._processResult(s.data[ + e]); + else this._processResult(s) + }, x.prototype._processResult = function(e) { + var t = this.ctx, + i = this; + this.out && e && (!isNaN(t.symbol.time) || e.nonseries) && (e + .nonseries ? ("projection" === e.type && (e.projectionTime = t + .symbol.time), this.nonseriesOut(t.symbol, e)) : e.bars ? e + .bars.forEach((function(e) { + i.out(t.symbol, e) + })) : this.out(t.symbol, e)) + }, x.prototype.init = function() { + var e = this.ctx, + t = this.body; + t.init && t.init(e, this.inputCallback), t.main(e, this.inputCallback) + }, x.prototype.add_sym = function(e, t, i, s, r) { + var n = this.runner.add_sym(e, t, i, s, this, r); + return this.symbols.push(n), n.isdwm() && this.symbols.length > 1 && n + .enable_dwm_aligning(this.symbols[0].session, n.session), n + }, x.prototype.maxAdditionalDepth = function() { + return this.symbols[0].isAdditionalDepthAllowed ? this.ctx + .maxAdditionalDepth() : 0 + }, x.prototype.stop = function() { + this.symbols = null, this.ctx.stop(), this.ctx = null + }, x.prototype.get_sym = function(e) { + return this.symbols[e] + }, T.prototype.add_sym = function(e, t, i, s, r, n) { + var o = new C(e, t, i, s, r, n); + return this.symbols.push(o), o + }, T.prototype.get_sym = function(e) { + return this.symbols[e] + }, T.prototype.out = function(e, t) { + if (this.nonseriesUpdate) { + var i = Object.assign({}, this.nonseriesUpdate); + t.splice(0, 0, e.time), i.lastBar = t, this.host.nonseriesOut(e, i) + } else this.host.out(e, t) + }, T.prototype.start = function() { + this.isStarted = !0; + var e = this.host; + this._script = new x(e.tickerid, e.period, e.currencyCode, e.unitId, + this, e.body, this.out.bind(this), e.input, e.nonseriesOut, e + .symbolInfo); + var t = this, + i = [], + s = this.symbols, + r = Object.assign({}, e.dataRange, { + countBack: e.dataRange.countBack + t._script + .maxAdditionalDepth() + }), + n = s[0]; + + function o(t, s, r) { + i.push(T.feed.subscribe(t.tickerid, t.currencyCode, t.unitId, t + .period, r, e.onErrorCallback, e.symbolInfo, e + .sessionId, s, e.forceAlignBars)) + } + + function h(i, s) { + "series" === (s.nonseries ? "nonseries" : "series") ? t.update(i, + s): s.lastBar ? (t.nonseriesUpdate = s, s.lastBar + .isLastBar = ! + 0, t.symbols[0].lastbar(s.lastBar), t.nonseriesUpdate = null + ) : e.nonseriesOut(p, s) + } + + function u() { + return r + } + o(n, u, (function(e) { + !e.nonseries && Number.isFinite(e.firstLoadedTimeMs) && + function(e) { + function i(i, s) { + var r = c(i, s)(e), + n = l(i, s); + return null !== n && (r = n + .timeToExchangeTradingDay(r)), { + to: r, + countBack: t._script + .maxAdditionalDepth() + } + } + for (var r = 1; r < s.length; r++) { + var u = s[r], + d = u.period; + a.isEqual(d, n.period) || o(u, i.bind(null, + d), h.bind(null, r)) + } + }(e.firstLoadedTimeMs), h(0, e) + })); + for (var d = 1; d < s.length; d++) { + var p = s[d]; + a.isEqual(p.period, n.period) && o(p, u, h.bind(null, d)) + } + this.subscription = i + }, T.prototype.stop = function() { + var e = this.subscription; + if (e || this._script) { + for (var t = 0; t < e.length; t++) T.feed.unsubscribe(e[t]); + this.subscription = null, this._script.stop(), this._script = null, + this.symbols = null, this.isStarted = !1 + } else console.warn("Recurring script engine stop happened.") + }, T.prototype.update = function(e, t) { + if (t) { + var i = this.symbols[e]; + if (this.isRecalculated) { + var s = t.bar(t.count() - 1); + s.isBarClosed = t.isLastBarClosed(), s.isLastBar = !0, i + .lastbar(s) + } else this.barsets[e] || (this.barsets[e] = t, i.set_symbolinfo(t + .symbolinfo()), this.recalc()) + } else console.error("Unexpected barset = null") + }, T.prototype.recalc = function() { + for (var e = this.symbols, t = 0; t < e.length; t++) + if (!this.barsets[t]) return; + try { + for (var i = e.length - 1; i >= 0; i--) + for (var s = e[i], r = this.barsets[i], n = r.count(), o = + 0; o < n; o++) { + var a = r.bar(o); + a.isLastBar = o === n - 1, a.isBarClosed = !a.isLastBar || r + .isLastBarClosed(), s.lastbar(a) + } + this.isRecalculated = !0, this.barsets[0] && this.barsets[0] + .endOfData && this.host.setNoMoreData(), this.host.recalc( + this, { + endOfData: this.barsets[0].endOfData, + firstLoadedTimeMs: this.barsets[0].firstLoadedTimeMs + }) + } catch (e) { + if (!e.studyError) throw e; + this.host.onErrorCallback(e.message) + } + }, T.feed = { + subscribe: function(e, t, i, s, r) { + console.error("must be initialized with setupFeed") + }, + unsubscribe: function(e) { + console.error("must be initialized with setupFeed") + } + }, I.prototype.stop = function() { + this.runner.stop() + }, I.prototype.isStarted = function() { + return this.runner.isStarted + }, M.prototype.symbolinfo = function() { + return this.info + }, M.prototype.isLastBarClosed = function() { + return this.isBarClosed + }, M.prototype.setLastBarClosed = function(e) { + this.isBarClosed = e + }, M.prototype.bar = function(e) { + return this.bars[e] + }, M.prototype.count = function() { + return this.bars.length + }, M.prototype.add = function(e, t) { + var i = e, + s = this.bars, + r = s.length, + n = i.time, + o = 0 === r ? NaN : s[r - 1].time; + 0 === r || o < n ? s.push(i) : o === n ? s[r - 1] = i : console.error( + "time order violation, prev: " + new Date(o).toUTCString() + + ", cur: " + new Date(n).toUTCString()), this.isBarClosed = !!t + }, O.prototype.init = function(e) { + this.bb = m.newBarBuilder(this.period, e.symbol.session), this + .bbEmptyBars = this.generateEmptyBars ? m.newBarBuilder(this.period, + e.symbol.session) : void 0, e.setMinimumAdditionalDepth(0) + }, O.prototype.extrapolate = function(e, t) { + return isNaN(e) || isNaN(t) ? void 0 : f(this.bbEmptyBars, e, t, Number + .MAX_SAFE_INTEGER, !0).times + }, O.prototype.main = function(e) { + var t = e.symbol.time, + i = this.bb.alignTime(t), + s = e.new_var(i), + r = g.na(i), + n = s.get(1), + o = g.na(n) ? 1 : g.neq(i, n), + a = e.new_var(), + l = e.new_var(), + c = e.new_var(), + h = e.new_var(), + u = a.get(1), + d = l.get(1), + p = c.get(1), + _ = h.get(1), + m = r ? NaN : o ? g.open(e) : u, + f = r ? NaN : o ? g.high(e) : g.max(g.high(e), d), + b = r ? NaN : o ? g.low(e) : g.min(g.low(e), p), + v = r ? NaN : g.close(e), + S = r ? NaN : o ? g.volume(e) : g.volume(e) + _, + y = r ? NaN : t, + w = e.symbol.isBarClosed && this.bb.isLastBar(0, t), + P = this.generateEmptyBars && o ? this.extrapolate(n, i) : void 0, + C = e.new_var(g.close(e)).get(1), + x = P instanceof Array ? C : NaN; + return a.set(m), l.set(f), c.set(b), h.set(S), [i, m, f, b, v, S, y, w, + P, x + ] + }, L.prototype.main = function(e) { + return [g.open(e), g.high(e), g.low(e), g.close(e), g.volume(e), g + .updatetime(e) + ] + }, { + Std: g, + Series: w, + Symbol: C, + SymbolInfo: function(e, t) { + this.timezone = e || "America/New_York", this.session = t || + "0000-0000" + }, + StudyEngine: I, + BarSet: M, + OHLCV: L, + BarBuilder: O, + setupFeed: function(e) { + T.feed = e + }, + getVolumeProfileResolutionForPeriod: function(t, i, s, r) { + return void 0 !== e ? e(t, i, s, r) : t + }, + overwriteVolumeProfileResolutionForPeriodGetter: function(t) { + e = t + } + } + }(); + e.exports = d + }).call(this, i("yLpj")) + }, + ocrj: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "RemoveSourcesCommand", (function() { + return u + })); + var s = i("Eyy1"), + r = i("RDU5"), + n = i("CW80"), + o = i("txPx"), + a = i("pQ+n"), + l = i("3ClC"), + c = i("jpZi"); + const h = Object(o.getLogger)("Chart.RemoveSourcesCommand"); + class u extends r.UndoCommand { + constructor(e, t, i) { + super(i), this._excludeLineToolsUndoCommands = [], this._initialPriceScaleMode = + null, this._chartModel = e, this._sourceIds = Object(a.a)(e, t).map(e => e + .id()), this._sourceStates = [], this._paneIndexes = [], this + ._priceScalePositionIds = [], this._paneStates = [], this + ._restorePanes = []; + const r = t[0]; + 1 === t.length && Object(l.isStudy)(r) && (this._initialPriceScaleMode = Object( + s.ensureNotNull)(r.priceScale()).mode()) + } + removedIds() { + return this._sourceIds + } + redo() { + this._chartModel.panes().length; + const e = this._sourceIds.map(e => Object(s.ensureNotNull)(this._chartModel + .dataSourceForId(e))); + this._sourceStates = e.map(e => Object(s.ensureNotNull)(e.state(!1))); + const t = e.map(e => Object(s.ensureNotNull)(this._chartModel.paneForSource( + e))); + this._paneIndexes = t.map(e => this._chartModel.panes().indexOf(e)); + const i = this._chartModel.lineToolsGroupModel(), + r = new Map; + e.forEach(e => { + if (Object(n.isLineTool)(e)) { + const t = i.groupForLineTool(e); + if (null !== t) { + const i = r.get(t) || []; + i.push(e), r.set(t, i) + } + } + }), r.forEach((e, t) => { + const i = new c.a(this._chartModel, t, e); + i.redo(), this._excludeLineToolsUndoCommands.push(i) + }), this._priceScalePositionIds = e.map((e, i) => { + if (Object(n.isLineTool)(e)) return null; + const s = e.priceScale(); + if (null === s) return null; + const r = t[i].priceScalePosition(s); + return { + id: s.id(), + position: r, + priceScaleIndex: t[i].priceScaleIndex(s, r) + } + }); + const o = new Set; + e.forEach((e, t) => { + Object(n.isLineTool)(e) || o.add(this._paneIndexes[t]) + }), this._paneStates = e.map((e, i) => { + const s = this._paneIndexes[i]; + return o.has(s) ? t[i].state(!1, !0) : null + }), this._restorePanes = e.map(e => this._chartModel.removeSource(e)) + } + undo() { + const e = []; + for (let t = this._sourceStates.length - 1; t >= 0; t--) { + const i = this._chartModel.restoreSource(this._restorePanes[t], this + ._paneIndexes[t], this._paneStates[t], this._sourceStates[t], this + ._priceScalePositionIds[t]); + i && e.push(i) + } + e.some((t, i) => t.id() !== this._sourceIds[e.length - i - 1]) && h.logError( + "Source was restored improperly - source ids does not match"), null !== + this._initialPriceScaleMode && Object(s.ensureNotNull)(e[0].priceScale()) + .setMode(this._initialPriceScaleMode), this._excludeLineToolsUndoCommands + .forEach(e => e.undo()) + } + } + }, + odCa: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("fgLi").DataSource, + n = i("tc+8"), + o = i("Ocx9").DefaultProperty, + a = i("jTis").CalloutConsts, + l = i("j3hX").LineToolColorsProperty; + class c extends s { + constructor(e, t) { + super(e, t || c.createProperties()), this._barOffset = 0, this._timeScale = e + .timeScale(), i.e("lt-pane-views").then(i.t.bind(null, "B4Hi", 7)).then(({ + CalloutPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Callout" + } + _correctPoints(e) { + var t = this._currentMovingPoint.logical.index - this._startMovingPoint.logical + .index, + i = this._currentMovingPoint.logical.price - this._startMovingPoint.logical + .price, + s = e[1]; + s.index += t, s.price += i, e[1] = s + } + addPoint(e) { + var t = s.prototype.addPoint.call(this, e); + return t && this._calculateBarOffset(), t + } + _calculateBarOffset() { + this.points().length > 1 && (this._barOffset = this.points()[1].index - this + .points()[0].index) + } + setLastPoint(e) { + super.setLastPoint(e), 2 === this.points().length && this._calculateBarOffset() + } + setPoint(e, t) { + switch (e) { + case 0: + super.setPoint(e, t), this._calculateBarOffset(); + break; + case 1: + var i = this.properties(); + if (!i.wordWrapWidth) return; + var s = this._points, + r = this._dragStartLeftEdgeIndex, + n = Math.round((t.index - r) / 2); + if (isFinite(r) && isFinite(n)) { + s[1] = { + index: r + n, + price: s[1].price + }, this._calculateBarOffset(), this.normalizePoints(); + var o = this._timeScale.indexToCoordinate(r + 2 * n) - this._timeScale + .indexToCoordinate(r) - a.RoundRadius - a.TextMargins; + if (!isFinite(o)) return; + i.wordWrapWidth.setValue(Math.max(a.MinWidth, o)); + break + } + s[1] = t, this._calculateBarOffset(), this.normalizePoints() + } + } + setPoints(e) { + super.setPoints(e); + var t = this.properties(); + if (t.wordWrapWidth) { + var i = this._dragStartLeftEdgeIndex, + s = Math.round((e[1].index - i) / 2); + if (this._calculateBarOffset(), this.normalizePoints(), isFinite(i) && isFinite( + s)) { + var r = this._timeScale.indexToCoordinate(i + 2 * s) - this._timeScale + .indexToCoordinate(i) - a.RoundRadius - a.TextMargins; + if (!isFinite(r)) return; + t.wordWrapWidth.setValue(Math.max(a.MinWidth, r)) + } + } + } + _onPointsetUpdated(e) { + super._onPointsetUpdated(e), 0 !== e.length && (this._dragStartLeftEdgeIndex = this + .points()[1].index) + } + move(e, t, i) { + super.move(e, t, i), this._calculateBarOffset() + } + state(e) { + var t = s.prototype.state.call(this, e); + return t.barOffset = this._barOffset, t + } + restoreData(e) { + e.barOffset ? this._barOffset = e.barOffset : this._calculateBarOffset(), this + ._calculatePoint2() + } + setPriceScale(e) { + r.prototype.setPriceScale.call(this, e), e && e.priceRange() && this + ._calculatePoint2() + } + template() { + var e = s.prototype.template.call(this); + return e.text = this.properties().childs().text.value(), e + } + _applyTemplateImpl(e) { + super._applyTemplateImpl(e), this.properties().childs().text.setValue(e.text) + } + _calculatePoint2() { + if (!(this._model.lineBeingEdited() === this || this._model.sourcesBeingMoved() + .includes(this) || this._points.length < 2)) { + var e = this.points()[0], + t = this.points()[1]; + this._points[1] = { + price: t.price, + index: e.index + this._barOffset + } + } + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "xhf0"))) + .CalloutDefinitionsViewModel + } + static createProperties(e) { + var t = new o("linetoolcallout", e); + return c._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e), e.hasChild("text") || e.addChild("text", new n(window.t( + "Text"))), + e.addExclusion("text"), e.addChild("textsColors", new l([e.childs().color])) + } + } + t.LineToolCallout = c + }, + oiZD: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("hY0g"), + r = i.n(s); + i.d(t, "watchedTheme", (function() { + return n + })), i.d(t, "setTheme", (function() { + return o + })); + const n = new r.a; + + function o(e) { + n.setValue(e) + } + n.subscribe(e => { + ! function(e, t = window) { + const i = "theme-" + e, + s = t.document.documentElement.classList; + for (const e of Array.from(s)) e.startsWith("theme-") && e !== i && s.remove(e); + s.add(i) + }(e, window) + }) + }, + okVO: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SyncModel", (function() { + return o + })); + var s = i("IiTo"), + r = i("IDnv"); + let n = 0; + class o { + constructor(e, t) { + this._extrapolatedData = [], this._cacheForFuture = !1, this._modelId = n++, this + ._builderCache = null, this._resolution = t, this._symbolInfo = e, this._valid = + Boolean(e.timezone) && Boolean(e.session), this._session = new s.SessionInfo(e + .timezone, e.session, e.session_holidays, e.corrections) + } + getSymbolInfo() { + return this._symbolInfo + } + getSession() { + return this._session + } + getResolution() { + return this._resolution + } + uniqueId() { + return this._modelId + } + distance(e, t) { + if (!this.isValid()) return { + success: !1 + }; + if (e > t) return { + success: !1 + }; + if (e === t) return { + success: !0, + result: 0 + }; + let i = this._extrapolatedData.length, + s = 0 !== i ? this._extrapolatedData[0] : null, + n = null !== s ? this._extrapolatedData[i - 1] : null; + const o = e < t; + if (1e3 * e === s && this._cacheForFuture === o || (this._extrapolatedData = [1e3 * + e + ], i = 1, s = null, n = null), null === s || null !== n && 1e3 * t > n) { + const s = Object(r.extrapolateBarsFrontToTime)(this._barBuilder(), n || 1e3 * e, + 1e3 * t, 2e3, !0); + this._extrapolatedData = this._extrapolatedData.concat(s.times), i = this + ._extrapolatedData.length, this._cacheForFuture = o + } + if (n = this._extrapolatedData[i - 1], n < 1e3 * t) return { + success: !1 + }; + const a = this._extrapolatedData.indexOf(1e3 * t); + return -1 === a ? { + success: !1 + } : { + success: !0, + result: a + } + } + projectTime(e, t) { + if (!this.isValid()) return e; + let i = this._extrapolatedData.length, + s = i > 0 ? this._extrapolatedData[0] : null, + n = null !== s ? this._extrapolatedData[i - 1] : null; + const o = t >= 0; + 1e3 * e === s && this._cacheForFuture === o || (this._extrapolatedData = [1e3 * e], + i = 1, s = null, n = null); + const a = Math.abs(t); + if (null === s || a >= i) { + const s = Object(r.extrapolateBarsFrontByCount)(this._barBuilder(), n || 1e3 * + e, Math.sign(t) * (a - i + 1), !0); + this._extrapolatedData = this._extrapolatedData.concat(s.times), i = this + ._extrapolatedData.length, this._cacheForFuture = o + } + return i < a ? e : this._extrapolatedData[a] / 1e3 + } + isValid() { + return this._valid + } + dataSize() { + return this._extrapolatedData.length + } + createNewModelWithResolution(e) { + return new o(this._symbolInfo, e) + } + _barBuilder() { + return null === this._builderCache && (this._builderCache = Object(s.newBarBuilder)( + this._resolution, this._session, this._session)), this._builderCache + } + } + }, + onDC: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("aO4+"), + n = i("vwKG"), + o = i("4O8T"), + a = i.n(o), + l = i("0YCj"), + c = i.n(l), + h = i("txPx"); + const u = window.t("Move All Scales To Left"), + d = window.t("Move All Scales To Right"), + p = Object(h.getLogger)("Chart.MergeAllScales"); + var _ = i("MY2c"), + m = i("RDU5"); + class f extends m.UndoCommand { + constructor(e, t, i, s, r, n) { + super(n), this._model = e, this._paneIndex = e.panes().indexOf(t), this + ._targetPosition = s, + this._targetIndex = r, this._scaleId = i.id(), this._sourcePosition = t + .priceScalePosition(i), "overlay" !== this._sourcePosition && (this + ._sourceIndex = t.priceScaleIndex(i, this._sourcePosition)) + } + redo() { + const e = this._model.panes()[this._paneIndex], + t = Object(s.ensureNotNull)(e.getPriceScaleById(this._scaleId)); + e.movePriceScale(t, this._targetPosition, this._targetIndex), this._model + .fullUpdate() + } + undo() { + const e = this._model.panes()[this._paneIndex], + t = Object(s.ensureNotNull)(e.getPriceScaleById(this._scaleId)); + e.movePriceScale(t, this._sourcePosition, this._sourceIndex), this._model + .fullUpdate() + } + } + var g = i("CW80"); + class b extends m.UndoCommand { + constructor(e, t, i, s) { + super(s), this._createdIds = [], this._model = e, this._withoutShift = i, this + ._origStates = t.map(e => e.state(!0)); + const r = e.lineToolsGroupModel(); + this._origGroups = t.map(e => { + const t = r.groupForLineTool(e); + return t && t.id + }) + } + redo() { + const e = this._model.lineToolsGroupModel(), + t = this._origStates.map((t, i) => { + const r = Object(s.ensureNotNull)(this._model.dataSourceForId(t + .id)), + n = 0 === this._createdIds.length ? void 0 : Object(s + .ensureDefined)(this._createdIds[i]), + o = Object(g.cloneLineTool)(this._model, r, !this._withoutShift, + n), + a = Object(s.ensureNotNull)(r.priceScale()); + Object(s.ensureNotNull)(this._model.paneForSource(r)).addDataSource( + o, a, !1); + const l = this._origGroups[i]; + if (null !== l) { + const t = e.groupForId(l); + t && t.addLineTools([o]) + } + return this._model.updateSource(o), o + }); + 0 === this._createdIds.length && (this._createdIds = t.map(e => e.id())), this + ._model.selectionMacro(e => { + e.clearSelection(), t.forEach(t => { + e.addSourceToSelection(t) + }) + }), this._model.setShouldBeSavedEvenIfHidden(!0) + } + undo() { + const e = this._model.lineToolsGroupModel(); + this._createdIds.forEach(t => { + const i = Object(s.ensureNotNull)(this._model.dataSourceForId(t)), + r = e.groupForLineTool(i); + null !== r && r.excludeLineTool(i), this._model.removeSource(i) + }) + } + newIds() { + return this._createdIds + } + } + var v = i("ocrj"), + S = i("jpZi"), + y = i("ogJP"); + class w extends m.UndoCommand { + constructor(e, t, i, s = !0) { + super(i, s), this._newStates = [], this._model = e, this._savedStates = t.map( + e => e.state(!1)) + } + redo() { + this._applyState(this._newStates) + } + undo() { + 0 === this._newStates.length && this.saveNewState(), this._applyState(this + ._savedStates) + } + saveNewState() { + const e = this._savedStates.filter(y.notNull).map(e => Object(s.ensureNotNull)( + this._model.dataSourceForId(e.id))); + this._newStates = e.map(e => e.state(!1)) + } + _applyState(e) { + for (const t of e) + if (null !== t) { + const e = this._model.dataSourceForId(t.id); + null !== e && this._model.restoreLineToolState(e, t) + } + } + } + var P = i("HGup"), + C = i("jRfx"), + x = i("s1Gx"), + T = i("0qMc"); + class I extends m.UndoCommand { + constructor(e, t, i, s, r = !0) { + super("Create " + T.lineToolsLocalizedNames[i], !1), this._lineId = null, this + ._lineState = null, this._model = e, this._paneIndex = e.panes().indexOf(t), + this._lineTool = i, this._ownerSourceId = s.id(), this + ._needCopyToOtherCharts = r + } + startCreatingLine(e, t, i) { + const s = this._model.panes()[this._paneIndex], + r = this._model.dataSourceForId(this._ownerSourceId), + n = this._model.createLineTool(s, e, this._lineTool, t, i, r); + return this._lineId = n.id(), !this._model.lineBeingCreated() + } + continueCreatingLine(e, t, i, s) { + const r = this._model.continueCreatingLine(e, t, i, s); + return r && this._model.setShouldBeSavedEvenIfHidden(!0), r + } + line() { + return null === this._lineId ? null : this._model.dataSourceForId(this._lineId) + } + undo() { + const e = this.line(); + null !== e && (this._lineState = e.state(!1), this._model.removeSource(e), this + ._lineId = null) + } + redo() { + if (null === this._lineState) return; + const e = this._model.restoreSource(!1, this._paneIndex, null, Object(s + .ensureNotNull)(this._lineState), null); + null !== e && (this._lineId = e.id(), this._lineState = null) + } + needCopyToOtherCharts() { + return this._needCopyToOtherCharts + } + } + var M = i("GVQo"); + class O extends m.UndoCommand { + constructor(e, t, i) { + super(i), this._sourcesByPanes = new Map, this._originalState = new Map, this + ._model = e, t.forEach(t => { + const i = Object(s.ensureNotNull)(e.paneForSource(t)), + r = e.panes().indexOf(i), + n = this._sourcesByPanes.get(r) || []; + n.push(t.id()), this._sourcesByPanes.set(r, n) + }), Array.from(this._sourcesByPanes.keys()).forEach(t => { + const i = e.panes()[t], + s = new Map; + i.sourcesByGroup().allIncludingHidden().forEach(e => { + s.set(e.id(), e.zorder()) + }), this._originalState.set(t, s) + }) + } + undo() { + this._originalState.forEach((e, t) => { + const i = this._model.panes()[t], + r = new Map; + e.forEach((e, t) => { + const n = Object(s.ensureNotNull)(i.dataSourceForId(t)); + r.set(n, e) + }), i.setZOrders(r) + }) + } + redo() { + this._sourcesByPanes.forEach((e, t) => { + const i = this._model.panes()[t], + r = e.map(e => Object(s.ensureNotNull)(i.dataSourceForId(e))); + this._paneOperation(i, r) + }) + } + } + class L extends O { + constructor(e, t) { + super(e, t, `Bring ${t[0].title()} to front`) + } + _paneOperation(e, t) { + e.bringToFront(t) + } + } + class A extends O { + constructor(e, t) { + super(e, t, `Send ${t[0].title()} to back`) + } + _paneOperation(e, t) { + e.sendToBack(t) + } + } + class E extends O { + constructor(e, t, i, s) { + super(e, t, s), this._targetSource = i + } + _paneOperation(e, t) { + e.insertAfter(t, this._targetSource) + } + } + class k extends E { + constructor(e, t, i) { + super(e, t, i, `Insert ${t[0].title()} after ${i.title()}`) + } + } + class D extends O { + constructor(e, t, i, s) { + super(e, t, s), this._targetSource = i + } + _paneOperation(e, t) { + e.insertBefore(t, this._targetSource) + } + } + class V extends D { + constructor(e, t, i) { + super(e, t, i, `Insert ${t[0].title()} before ${i.title()}`) + } + } + + function B(e, t) { + const i = t[0], + s = e.sourcesByGroup().all().filter(e => e.zorder() < i.zorder()); + if (0 === s.length) throw new Error("Cannot move backward source that alreadt on back"); + let r = s[s.length - 1]; + if (Object(g.isLineTool)(r)) { + const t = e.model().lineToolsGroupModel().groupForLineTool(r); + null !== t && (r = t.lineTools()[0]) + } + return r + } + class R extends D { + constructor(e, t, i) { + super(e, i, B(t, i), `Send ${i[0].title()} backward`) + } + } + + function N(e, t) { + const i = t[t.length - 1], + s = e.sourcesByGroup().allExceptSpecialSources().filter(e => e.zorder() > i.zorder()); + if (0 === s.length) throw new Error("Cannot bring forward source that alreadt on back"); + let r = s[0]; + if (Object(g.isLineTool)(r)) { + const t = e.model().lineToolsGroupModel().groupForLineTool(r); + if (null !== t) { + const e = t.lineTools(); + r = e[e.length - 1] + } + } + return r + } + class j extends E { + constructor(e, t, i) { + super(e, i, N(t, i), `Send ${i[0].title()} backward`) + } + } + + function F(e, t) { + return Object(s.ensureNotNull)(e.paneForSource(t.lineTools()[0])) + } + class W extends D { + constructor(e, t) { + super(e, t.lineTools(), B(F(e, t), t.lineTools()), + `Send Group ${t.name()} backward`) + } + } + class H extends E { + constructor(e, t) { + super(e, t.lineTools(), N(F(e, t), t.lineTools()), + `Bring Group ${t.name()} backward`) + } + } + class U extends m.UndoCommand { + constructor(e, t, i) { + super("Rearrange panes"), this._chartModel = e, this._index = t, Object(y + .isNumber)(i) ? this._dstIndex = i : this._dstIndex = "up" === i ? t - + 1 : t + 1 + } + redo() { + this._checkIndices() && this._chartModel.movePane(this._index, this._dstIndex) + } + undo() { + this._checkIndices() && this._chartModel.movePane(this._dstIndex, this._index) + } + _checkIndices() { + const e = this._chartModel.panes().length; + return this._index >= 0 && this._index < e && this._dstIndex >= 0 && this + ._dstIndex < e + } + } + var z = i("XcdR"), + G = i("Fixu"), + q = i("Ocx9"), + Y = i("n5al"), + K = i("PT1i"), + J = i("pPtI"); + class Z extends m.UndoCommand { + constructor(e, t, i, s, r, n) { + super(s), this._prevPriceAxisProps = {}, this._property = e, this._mainSeries = + i, this._value = t, this._model = r, this._chartWidget = n + } + redo() { + const e = this._mainSeries, + t = e.properties(); + t.style === this._property && e.isNeedRestart(this._value) && this._chartWidget + .screen.show(), this._prevResolution = t.interval.value(), this._prevValue = + this._property.value(), this._storePriceAxisProps(), Object(q + .saveDefaultProperties)(!0); + const i = t.interval.value(), + s = this._model.defaultResolutions(), + r = Object(J.getResolutionByChartStyle)(this._value, i, s); + K.linking.interval.setValue(r), e.setChartStyleWithIntervalIfNeeded(this._value, + r), Object(Y.setLastUsedStyle)(this._value), Object(Y + .preparePriceAxisProperties)(t), Object(q.saveDefaultProperties)(!1), + this._invalidateModel() + } + undo() { + const e = this._mainSeries; + e.properties().style === this._property && e.isNeedRestart(this._value) && this + ._chartWidget.screen.show(), Object(q.saveDefaultProperties)(!0), e + .setChartStyleWithIntervalIfNeeded(this._prevValue, this._prevResolution), + this._restorePriceAxisProps(), K.linking.interval.setValue(this + ._prevResolution), Object(q.saveDefaultProperties)(!1), this + ._invalidateModel() + } + _storePriceAxisProps() { + const e = this._mainSeries.priceScale(); + this._prevPriceAxisProps = e.mode() + } + _restorePriceAxisProps() { + this._mainSeries.priceScale().setMode(this._prevPriceAxisProps) + } + _invalidateModel() { + this._model && (this._model.recalculateAllPanes(), this._model.lightUpdate()) + } + } + var X = i("ufwo"), + $ = i("LxhU"); + class Q extends m.UndoCommand { + constructor(e, t) { + super("Change date range"), this._modelsData = [], this._rangeOptions = t, this + ._modelsData.push({ + model: e, + prevResolution: e.mainSeries().properties().interval.value(), + barSpacing: e.timeScale().barSpacing(), + rightOffset: e.timeScale().rightOffset(), + rangeOptions: e.appliedTimeFrame().value() + }) + } + redo() { + const e = []; + for (const t of this._modelsData) { + const i = t.model.mainSeries(), + s = i.properties().interval; + $.Interval.isEqual(this._rangeOptions.res, s.value()) ? i.loadDataTo(this + ._rangeOptions.val) : (e.push(s), i.setDefaultTimeframe(this + ._rangeOptions.val), s.setValueSilently(this._rangeOptions.res)) + } + for (const t of e) t.listeners().fire(t) + } + undo() { + const e = []; + for (const t of this._modelsData) { + const i = t.model.mainSeries(), + s = i.properties().interval; + t.prevResolution !== s.value() ? (e.push(s), + null !== t.rangeOptions && i.setDefaultTimeframe(t.rangeOptions + .val), s.setValueSilently(t.prevResolution)) : null !== t + .rangeOptions && i.loadDataTo(t.rangeOptions.val); + const r = t.model.timeScale(); + r.setBarSpacing(t.barSpacing), r.setRightOffset(t.rightOffset) + } + for (const t of e) t.listeners().fire(t) + } + canMerge(e) { + return e instanceof Q && Object(X.rangesAreEqual)(e._rangeOptions, this + ._rangeOptions) + } + merge(e) { + if (!(e instanceof Q)) throw new Error("Invalid command to merge"); + this._modelsData = this._modelsData.concat(e._modelsData) + } + } + var ee = i("//lZ"), + te = i("UqOQ"); + i("YFKU"), i("HbRj"); + class ie extends m.UndoCommand { + constructor(e, t, i) { + super(i), this._model = e, this._groupId = t.id, this._groupName = t.name(), + this._lineToolsIds = t.lineTools().map(e => e.id()) + } + redo() { + const e = Object(s.ensureNotNull)(this._model.lineToolsGroupModel().groupForId( + this._groupId)); + this._model.lineToolsGroupModel().removeGroup(e) + } + undo() { + const e = this._lineToolsIds.map(e => this._model.dataSourceForId(e)), + t = new te.a(e, this._groupName, this._groupId); + this._model.lineToolsGroupModel().addGroup(t) + } + } + const se = window.t("Create line tools group"); + class re extends m.UndoCommand { + constructor(e, t) { + super(se), this._groupId = null, this._model = e, this._sourcesIds = t.map(e => + e.id()) + } + redo() { + const e = this._sourcesIds.map(e => this._model.dataSourceForId(e)), + t = null === this._groupId ? void 0 : this._groupId; + this._groupId = this._model.lineToolsGroupModel().createGroup(e, this._title, t) + .id + } + undo() { + const e = Object(s.ensureNotNull)(this._model.lineToolsGroupModel().groupForId( + Object(s.ensureNotNull)(this._groupId))); + this._model.lineToolsGroupModel().removeGroup(e) + } + createdGroupId() { + return this._groupId + } + } + const ne = window.t("Add line tool(s) {lineTool} to group {group}"); + class oe extends m.UndoCommand { + constructor(e, t, i) { + super(ne.format({ + group: t.name() + })), this._model = e, this._groupId = t.id, this._lineToolsIds = i.map(e => + e.id()) + } + redo() { + const e = Object(s.ensureNotNull)(this._model.lineToolsGroupModel().groupForId( + this._groupId)), + t = this._lineToolsIds.map(e => this._model.dataSourceForId(e)); + e.addLineTools(t) + } + undo() { + const e = this._lineToolsIds.map(e => this._model.dataSourceForId(e)); + Object(s.ensureNotNull)(this._model.lineToolsGroupModel().groupForId(this + ._groupId)).excludeLineTools(e) + } + } + var ae = i("bJYc"); + class le extends m.UndoCommand { + constructor(e, t, i, s) { + super(s), this._chartModel = e, this._groupId = t.id, this._oldName = t.name(), + this._newName = i + } + redo() { + Object(s.ensureNotNull)(this._chartModel.lineToolsGroupModel().groupForId(this + ._groupId)).setName(this._newName) + } + undo() { + Object(s.ensureNotNull)(this._chartModel.lineToolsGroupModel().groupForId(this + ._groupId)).setName(this._oldName) + } + } + var ce = i("mMWL"); + const he = window.t("Create line tools group from selection"), + ue = window.t("Removing line tools group {name}"), + de = window.t("Add line tool {lineTool} to group {name}"), + pe = window.t("Make group {group} visible"), + _e = window.t("Make group {group} invisible"), + me = window.t("Lock group {group}"), + fe = window.t("Unlock group {group}"), + ge = window.t("Rename group {group} to {newName}"); + class be { + constructor(e) { + this._environment = e + } + createGroupFromSelection() { + const e = this._environment.model(); + Object(s.assert)(!e.selection().isEmpty(), + "Cannot create group from empty selection"); + const t = Object(x.sortSources)(e.selection().lineDataSources()); + Object(s.assert)(t.length === e.selection().allSources().length, + "A group could contain line tools only"); + const i = t.reduce((e, t) => e.zorder() > t.zorder() ? e : t, t[0]); + let r = i; + const n = e.lineToolsGroupModel().groupForLineTool(i); + if (null !== n) { + const e = n.lineTools(); + r = e[e.length - 1] + } + this._environment.beginUndoMacro(he); + const o = new Map, + a = new Set; + t.forEach(t => { + const i = this._groupForLineTool(t); + if (null === i) return; + const r = o.get(i) || []; + r.push(t), o.set(i, r); + const n = Object(s.ensureNotNull)(e.paneForSource(t)); + a.add(n) + }), Object(s.assert)(a.size <= 1, + "All selected sources should be on the same pane"), o.forEach((t, i) => { + const s = new S.a(e, i, t); + this._environment.pushUndoCommand(s) + }); + const l = new re(e, Object(x.sortSources)(t)); + this._environment.pushUndoCommand(l); + const c = new k(e, t, r); + this._environment.pushUndoCommand(c), this._environment.endUndoMacro(); + const h = Object(s.ensureNotNull)(l.createdGroupId()); + return Object(s.ensureNotNull)(e.lineToolsGroupModel().groupForId(h)) + } + removeGroup(e) { + const t = this._environment.model(), + i = e.lineTools(); + this._environment.beginUndoMacro(ue.format({ + name: e.name() + })); + const r = new ie(t, e, ""); + this._environment.pushUndoCommand(r); + const n = new v.RemoveSourcesCommand(t, i, ""); + this._environment.pushUndoCommand(n); + const o = t.mainSeries().symbol(); + i.forEach(e => { + null !== e.linkKey().value() && Object(ce.removeLineTool)({ + withUndo: !0, + model: t, + symbol: o, + sourceTitle: e.title(), + lineToolState: e.state(!1), + linkKey: Object(s.ensureNotNull)(e.linkKey().value()) + }) + }), this._environment.endUndoMacro() + } + groups() { + return this._environment.model().lineToolsGroupModel().groups() + } + excludeLineToolFromGroup(e, t) { + const i = this._environment.model(), + s = new S.a(i, e, [t]); + this._environment.pushUndoCommand(s) + } + addLineToolToGroup(e, t) { + const i = this._environment.model(), + s = i.lineToolsGroupModel().groupForLineTool(t); + if (s === e) return; + const r = de.format({ + lineTool: t.title(), + name: e.name() + }); + this._environment.beginUndoMacro(r), null !== s && this._environment + .pushUndoCommand(new S.a(i, s, [t])), this._environment.pushUndoCommand(new oe( + i, e, [t])), this._environment.endUndoMacro() + } + bringToFront(e) { + const t = this._environment.model(), + i = new L(t, e.lineTools()); + this._environment.pushUndoCommand(i), this._environment.emitEvent("changeZOrder", [e + .lineTools() + ]) + } + sendToBack(e) { + const t = this._environment.model(), + i = new A(t, e.lineTools()); + this._environment.pushUndoCommand(i), this._environment.emitEvent("changeZOrder", [e + .lineTools() + ]) + } + bringForward(e) { + const t = this._environment.model(), + i = new H(t, e); + this._environment.pushUndoCommand(i), this._environment.emitEvent("changeZOrder", [e + .lineTools() + ]) + } + sendBackward(e) { + const t = this._environment.model(), + i = new W(t, e); + this._environment.pushUndoCommand(i), this._environment.emitEvent("changeZOrder", [e + .lineTools() + ]) + } + insertAfter(e, t) { + const i = this._environment.model(); + let s; + if (t instanceof te.a) { + const e = t.lineTools(); + s = e[e.length - 1] + } else s = t; + const r = new k(i, e.lineTools(), s); + this._environment.pushUndoCommand(r), this._environment.emitEvent("changeZOrder", [e + .lineTools() + ]) + } + insertBefore(e, t) { + const i = this._environment.model(); + let s; + if (t instanceof te.a) { + s = t.lineTools()[0] + } else s = t; + const r = new V(i, e.lineTools(), s); + this._environment.pushUndoCommand(r), this._environment.emitEvent("changeZOrder", [e + .lineTools() + ]) + } + availableZOrderOperations(e) { + const t = this._environment.model(), + i = e.lineTools(), + r = i[0], + n = i[i.length - 1], + o = Object(s.ensureNotNull)(t.paneForSource(i[0])).sourcesByGroup() + .allExceptSpecialSources(), + a = o[0], + l = o[o.length - 1]; + return { + bringForwardEnabled: n !== l, + bringToFrontEnabled: n !== l, + sendBackwardEnabled: r !== a, + sendToBackEnabled: r !== a + } + } + setGroupVisibility(e, t) { + const i = (t ? pe : _e).format({ + group: e.name() + }), + s = this._environment.model(); + this._environment.beginUndoMacro(i), e.lineTools().forEach(e => { + const i = e.properties().visible, + r = new ae.SetPropertyUndoCommand(i, t, "", s); + this._environment.pushUndoCommand(r) + }), this._environment.endUndoMacro() + } + setGroupLock(e, t) { + const i = (t ? me : fe).format({ + group: e.name() + }), + s = this._environment.model(); + this._environment.beginUndoMacro(i), e.lineTools().forEach(e => { + const i = e.properties().frozen, + r = new ae.SetPropertyUndoCommand(i, t, "", s); + this._environment.pushUndoCommand(r) + }), this._environment.endUndoMacro() + } + setGroupName(e, t) { + const i = this._environment.model(), + s = ge.format({ + group: e.name(), + newName: t + }), + r = new le(i, e, t, s); + this._environment.pushUndoCommand(r) + } + canBeGroupped(e) { + const t = this._environment.model(); + return new Set(e.map(e => t.paneForSource(e))).size <= 1 + } + _groupForLineTool(e) { + return this._environment.model().lineToolsGroupModel().groups().find(t => t + .containsLineTool(e)) || null + } + } + var ve = i("3ClC"), + Se = i("pQ+n"), + ye = i("Vs8b"), + we = i("2jby"); + const Pe = window.t("Apply study template {template}"); + class Ce extends m.UndoCommand { + constructor(e, t, i) { + super(Pe.format({ + template: i + })), this._model = e, this._templateContent = t, this._initialState = e + .studyTemplate(!0, !0, !0), this._initialGroupsState = e + .lineToolsGroupModel().state() + } + redo() { + const e = this._merge(this._templateContent).filter(g.isLineTool); + this._model.lineToolsGroupModel().removeLineTools(e), this._model.mainSeries() + .onChartStyleChanged(); + const t = this._model.mainSeries().properties(); + Object(Y.preparePriceAxisProperties)(t), this._model.recalcVisibleRangeStudies(! + 0), this._model.setShouldBeSavedEvenIfHidden(!0) + } + undo() { + this._merge(this._initialState), this._model.mainSeries().onChartStyleChanged() + } + _merge(e) { + const t = e.version || 0, + i = this._model, + r = i.mainSeries(), + n = r.id(); + if (r.priceScale().properties().childs().lockScale.setValue(!1), this + ._initialState.symbol && e.symbol) { + const t = r.properties(); + t.currencyId.setValue(e.currency || null), t.unitId.setValue(e.unit || + null), t.symbol.setValue(e.symbol) + } + if (this._initialState.symbol && e.interval) { + const t = Object(Y.getChartStyleByResolution)(e.interval, r.properties() + .style.value()); + r.setChartStyleWithIntervalIfNeeded(t, e.interval) + } + const o = i.panes(), + a = []; + for (let e = o.length; e--;) { + const t = o[e], + i = t.containsMainSeries(), + s = t.dataSources(); + for (let e = s.length; e--;) { + const t = s[e]; + (!i || Object(ve.isStudy)(t) && t.isRemovedByStudyTemplates()) && a + .push(t) + } + } + i.resetDeferredStudies(); + const l = Object(Se.a)(i, a); + for (let e = 0; e < l.length; ++e) i.removeSource(l[e]); + const c = e.panes; + for (let e = 0; e < c.length; e++) { + let s = -1; + const r = Object(y.clone)(c[e]); + r.sources.sort((e, t) => e.zorder - t.zorder); + for (let e = 0; e < r.sources.length; e++) { + const t = r.sources[e]; + if (Object(ye.isMainSeriesState)(t)) { + delete t.state, s = e; + break + } + } + const n = s > -1, + a = n ? o[e] : i.createPane(e); + n && t < 3 && Object(we.reorderDataSourcesStateZOrder)(r.sources), a + .restoreState(r, !1, t), null !== a.mainDataSource() || i.removePane(a) + } + return Object(s.ensureNotNull)(i.paneForSource(r)).changeSourceId(r, n), i + .syncESD(), r.priceScale().setMode({ + autoScale: !0 + }), i.startNotStartedStudies(), i.recalculateAllPanes(), i.fullUpdate(), l + } + } + var xe = i("e3/o"), + Te = i("/tGj"); + const Ie = Object(h.getLogger)("Chart.ChartUndoModel"); + class Me extends m.UndoCommand { + constructor(e, t, i, r, n) { + super("Paste Drawing"), this._needCopyToOtherCharts = !1, this._sourceState = + null, this._model = e, this._clipboardData = t, this._paneIndex = this + ._model.panes().indexOf(i || Object(s.ensureNotNull)(this._model + .paneForSource(this._model.mainSeries()))), this._pasteWithData = !!r, + this._keepZIndex = !!n + } + redo() { + const e = this._model.panes()[this._paneIndex], + t = Object(s.ensureNotNull)(e.clipboardLineToolOwnerSource(this + ._clipboardData.source.id)); + null === this._sourceState && (this._sourceState = this._getSourceState(t)); + const i = e.restoreLineTool(this._sourceState, this._pasteWithData, this + ._keepZIndex); + this._clipboardData.centeredOnChart && i.centerPosition && i.centerPosition(); + const r = Object(s.ensureNotNull)(t.priceScale()); + i.setOwnerSource(t), i.setPriceScale(r), r.addDataSource(i), i + .restoreFixedPoints(), Object(g.prepareLineToolPropertiesByOwnerSource)(i + .properties(), t), i.calcIsActualSymbol(), i.createServerPoints(); + const n = Object(Te.isSymbolSource)(t) || t.metaInfo().is_price_study; + this._needCopyToOtherCharts = Boolean(n && (Object(ce.drawOnAllCharts)() + .value() || i.linkKey().value() && i.isSynchronizable())), this._model + .setShouldBeSavedEvenIfHidden(!0) + } + undo() { + if (!this._sourceState) return void Ie.logError( + "This command was never executed - nothing to undo"); + const e = this.source(); + this._clipboardData.centeredOnChart && (this._clipboardData.centeredOnChart = ! + 1, this._sourceState.points = e.normalizedPoints()), this._model + .removeSource(e) + } + source() { + return Object(s.ensureNotNull)(this._model.dataSourceForId(Object(s + .ensureNotNull)(this._sourceState).id)) + } + needCopyToOtherCharts() { + return this._needCopyToOtherCharts + } + _getSourceState(e) { + const t = Object(y.clone)(this._clipboardData.source); + delete t.state.symbol, null != t.linkKey && (t.linkKey = Object(xe.randomHash) + ()); + const i = Object(s.ensureNotNull)(e.priceScale()), + n = this._model; + let o = !1; + this._clipboardData.source.state.symbol === Object(s.ensureNotNull)(e + .symbolSource()).symbol() && (Object(Te.isSymbolSource)(e) ? o = !0 : + Object(ve.isStudy)(e) && (o = Boolean(e.metaInfo().is_price_study))); + const a = e => { + const t = e.x * n.timeScale().width(), + s = e.y * i.height() - 40; + return new r.Point(t, s) + }, + l = Object(s.ensureNotNull)(e.firstValue()); + if (this._model.id() === this._clipboardData.modelId || !o) + for (let e = 0; e < this._clipboardData.geometry.length; ++e) { + const s = a(this._clipboardData.geometry[e]), + r = n.timeScale().coordinateToIndex(s.x), + c = n.timeScale().normalizeBarIndex(r); + if (o) { + const s = i.priceToCoordinate(t.points[e].price, l) + -40; + c.price = i.coordinateToPrice(s, l) + } else c.price = i.coordinateToPrice(s.y, l); + t.points[e] = c + } + return t.id = Object(xe.guid)(), t + } + } + var Oe = i("xo8u"), + Le = i("Yt+L"), + Ae = i("/ToI"); + class Ee extends m.UndoCommand { + constructor(e, t, i) { + super("Change Symbol"), this._sourceId = e.id(), this._newSymbol = t, this + ._prevSymbol = e.symbol(), this._prevCurrency = e.currency(), this + ._prevUnit = e.unit(), this._chartWidget = i, this._showFade = e === i + .model().mainSeries() + } + redo() { + this._showFade && this._chartWidget.screen.show(), this._symbolSource() + .setSymbolCurrencyUnit(this._newSymbol, null, null) + } + undo() { + this._showFade && this._chartWidget.screen.show(), this._symbolSource() + .setSymbolCurrencyUnit(this._prevSymbol, this._prevCurrency, this._prevUnit) + } + _symbolSource() { + return Object(s.ensureNotNull)(this._chartWidget.model().model() + .dataSourceForId(this._sourceId)) + } + } + var ke = i("JWMC"), + De = i("gaBL"); + const Ve = Object(h.getLogger)("Chart.ChartUndoModel"); + class Be extends m.UndoCommand { + constructor(e, t, i) { + super("Paste Indicator"), this._sourceState = null, this._model = e, this + ._clipboardData = t, this._paneId = i + } + redo() { + if (!this._sourceState) { + const e = Object(y.clone)(this._clipboardData.source); + e.id = Object(xe.guid)(), this._sourceState = e + } + let e, t; + e = this._paneId ? Object(s.ensureNotNull)(this._model.paneForId(this + ._paneId)) : this._sourceState.metaInfo.is_price_study ? Object(s + .ensureNotNull)(this._model.paneForSource(this._model.mainSeries())) : + this._model.createPane(); + const i = !e.mainDataSource(); + this._sourceState.zorder = e.newStudyZOrder(); + const r = e.restoreStudy(this._sourceState, !1); + this._sourceState.metaInfo.linkedToSeries && r.setOwnerSource(this._model + .mainSeries()), i || (t = this._sourceState.metaInfo.is_price_study ? + t = this._model.mainSeries().priceScale() : this._paneId ? e + .findSuitableScale(r) : e.defaultPriceScale(), t !== r.priceScale() && e + .move(r, t)), Object(ve.isStudy)(r) && r.start() + } + undo() { + if (null === this._sourceState) return void Ve.logError( + "This command was never executed - nothing to undo"); + const e = Object(s.ensureNotNull)(this._model.dataSourceForId(this._sourceState + .id)); + this._model.removeSource(e) + } + state() { + return this._sourceState + } + } + class Re extends m.UndoCommand { + constructor(e, t, i, s, r) { + super("", !1), this._model = e, this._paneA = t, this._paneB = i, this + ._prevStretchA = s, this._currStretchA = r + } + redo() { + const e = this._paneA.stretchFactor() + this._paneB.stretchFactor(); + this._paneA.setStretchFactor(this._currStretchA), this._paneB.setStretchFactor( + e - this._currStretchA), this._model.fullUpdate() + } + undo() { + const e = this._paneA.stretchFactor() + this._paneB.stretchFactor(); + this._paneA.setStretchFactor(this._prevStretchA), this._paneB.setStretchFactor( + e - this._prevStretchA), this._model.fullUpdate() + } + } + var Ne = i("KnF9"); + class je extends m.UndoCommand { + constructor(e, t, i, s) { + super("Move", !1), this._endEvent = null, this._model = e, this._sourceId = t + .id(), this._itemIndex = i, + this._startEvent = s + } + move(e) { + this._endEvent = e, this._move(e) + } + hasChanges() { + return null !== this._endEvent + } + undo() { + this._move(this._startEvent) + } + redo() { + this._move(Object(s.ensureNotNull)(this._endEvent)) + } + _move(e) { + const t = Object(s.ensureNotNull)(this._model.dataSourceForId(this._sourceId)); + Object(s.assert)(void 0 !== t.moveItem, 'The method "moveItem" is not defined'), + t.moveItem && t.moveItem(new r.Point(e.localX, e.localY), this._itemIndex, + new Ne.a(e)) + } + } + class Fe extends m.UndoCommand { + constructor(e, t, i, s, r, n, o, a, l, c, h, u) { + super(u), this._studyId = null, this._paneState = null, this._chartModel = e, + this._studyMetaInfo = t, this._props = s, this._addAsOverlay = r, this + ._parentId = null == n ? null : n.id(), this._inputs = i, this + ._targetZOrder = h, this._preferredPriceScale = o, this + ._allowChangeCurrency = a, this._allowChangeUnit = l, this._paneSize = c + } + redo() { + const e = null === this._parentId ? void 0 : this._chartModel.dataSourceForId( + this._parentId), + t = this._chartModel.insertStudyWithParams(this._studyMetaInfo, this + ._inputs, this._targetZOrder, this._props, this._addAsOverlay, e, this + ._preferredPriceScale, this._allowChangeCurrency, this._allowChangeUnit, + this._paneSize, null === this._studyId ? void 0 : this._studyId); + if (this._studyId = t.id(), t.childStudyByRebind().subscribe(null, () => Object( + ke.trackEvent)("SOS", "Apply SOS", "Rebind SOS")), this._chartModel + .setShouldBeSavedEvenIfHidden(!0), null !== this._paneState) { + Object(s.ensureNotNull)(this._chartModel.paneForSource(t)).restoreState(this + ._paneState, !1, this._chartModel.version()), this._paneState = null + } + } + undo() { + const e = Object(s.ensureNotNull)(this._chartModel.dataSourceForId(Object(s + .ensureNotNull)(this._studyId))), + t = Object(s.ensureNotNull)(this._chartModel.paneForSource(e)).state(); + this._chartModel.removeSource(e) && (this._paneState = t) + } + insertedStudy() { + return this._chartModel.dataSourceForId(Object(s.ensureNotNull)(this._studyId)) + } + } + var We = i("pOzK"), + He = i("cWHH"), + Ue = i.n(He), + ze = i("SwuQ"), + Ge = i("7MWe"), + qe = i("Kxc7"); + class Ye extends m.UndoCommand { + constructor(e, t, i, s, r, n) { + super("Zoom"), this._timeScaleState = null, this._priceScaleState = null, this + ._model = e, this._startBar = t, this._endBar = i, this._startPrice = s, + this._endPrice = r, this._pane = n + } + redo() { + this._timeScaleState = this._model.timeScale().state(), this._priceScaleState = + this._pane.defaultPriceScale().state(), this._model.zoomToViewport(this + ._startBar, this._endBar, this._startPrice, this._endPrice, this._pane) + } + undo() { + this._model.timeScale().restoreState(Object(s.ensureNotNull)(this + ._timeScaleState)), this._pane.defaultPriceScale().restoreState(Object(s + .ensureNotNull)(this._priceScaleState)), this._model + .recalculateAllPanes(), this._model.lightUpdate() + } + } + const Ke = Object(h.getLogger)("Chart.ChartUndoModel"); + class Je extends m.UndoCommand { + constructor(e, t, i) { + super("Zoom"), this._baseCmd = e, this._zoomStack = t, this._inOut = i + } + undo() { + if (this._inOut) { + if (this._baseCmd !== this._zoomStack.head()) return void Ke.logDebug( + "zoom stack inconsistency"); + this._baseCmd.undo(), this._zoomStack.pop() + } else this._baseCmd.redo(), this._zoomStack.push(this._baseCmd) + } + redo() { + if (this._inOut) this._baseCmd.redo(), this._zoomStack.push(this._baseCmd); + else { + if (this._baseCmd !== this._zoomStack.head()) return void Ke.logDebug( + "zoom stack inconsistency"); + this._baseCmd.undo(), this._zoomStack.pop() + } + } + } + class Ze extends m.UndoCommand { + constructor(e, t) { + super("Stop Syncing Drawing"), this._model = e, this._sourceId = t.id(), this + ._linkKey = t.linkKey().value() + } + redo() { + Object(s.ensureNotNull)(this._model.dataSourceForId(this._sourceId)).linkKey() + .setValue(null) + } + undo() { + Object(s.ensureNotNull)(this._model.dataSourceForId(this._sourceId)).linkKey() + .setValue(this._linkKey) + } + } + class Xe extends m.UndoCommand { + constructor(e, t, i = "Restore Defaults") { + super(i), this._chartModel = e, this._defaultProperty = t, this._state = t + .state() + } + redo() { + this._chartModel.restoreFactoryDefaults(this._defaultProperty) + } + undo() { + this._defaultProperty.mergeAndFire(this._state), this._chartModel.mainSeries() + .onChartStyleChanged() + } + } + var $e = i("0C7r"); + class Qe extends Xe { + redo() { + this._defaultProperty.hasChild("intervalsVisibilities") && this._defaultProperty + .childs().intervalsVisibilities.mergeAndFire($e.intervalsVisibilitiesDefaults), + super.redo() + } + } + var et = i("eCE5"); + i.d(t, "ChartUndoModelBase", (function() { + return ot + })); + const tt = window.t("Send {title} backward"), + it = window.t("Bring {title} forward"), + st = window.t("Insert {title} after {target}"), + rt = window.t("Insert {title} before {target}"); + + function nt(e, t) { + return { + bringForwardEnabled: e.bringForwardEnabled || t.bringForwardEnabled, + bringToFrontEnabled: e.bringToFrontEnabled || t.bringToFrontEnabled, + sendBackwardEnabled: e.sendBackwardEnabled || t.sendBackwardEnabled, + sendToBackEnabled: e.sendToBackEnabled || t.sendToBackEnabled + } + } + class ot extends a.a { + constructor(e, t, i, s, r, n, o, a, l) { + super(), this._createLineCommand = null, this._initialTimeScrollState = null, + this._initialTimeScrollPos = null, this._currentSourceMoveCommand = null, + this._currentLineChangeCommand = null, this._currentCustomMoveCommand = + null, this._zoomStack = new _.a, this._chartWidget = n, this.m_model = + new Ue.a(e, t, i, s, r, this, a, l), this._undoHistory = o, this + ._lineToolsGroupController = new be({ + model: this._model.bind(this), + pushUndoCommand: this._pushUndoCommand.bind(this), + beginUndoMacro: this._undoHistory.beginUndoMacro.bind(this + ._undoHistory), + endUndoMacro: this._undoHistory.endUndoMacro.bind(this + ._undoHistory), + emitEvent: this.emitEvent.bind(this) + }) + } + undoHistory() { + return this._undoHistory + } + lineToolsGroupController() { + return this._lineToolsGroupController + } + mergeAllScales(e) { + ! function(e, t) { + e.beginUndoMacro("left" === t ? u : d), e.model().panes().forEach(i => { + const s = "left" === t ? i.rightPriceScales() : i + .leftPriceScales(), + r = ("left" === t ? i.leftPriceScales() : i + .rightPriceScales()).concat(s), + n = "overlay" === i.priceScalePosition(i + .defaultPriceScale()) ? r[0] : i.defaultPriceScale(); + e.movePriceScale(i, n, t, 0), r.forEach(t => { + if (t === n) return; + let s = t.mainSource(); + for (; null !== s;) { + e.moveToScale(s, i, n, "", !0); + const r = t.mainSource(); + if (r === s) { + p.logError( + "Loop detected while trying to merge scales" + ); + break + } + s = r + } + }) + }), e.endUndoMacro(), e.model().fullUpdate() + }(this, e) + } + movePriceScale(e, t, i, s) { + const r = new f(this._model(), e, t, i, s, window.t("Move scale")); + this._pushUndoCommand(r) + } + createLineTool(e, t, i, r, o, a, l) { + const c = "Create " + T.lineToolsLocalizedNames[i]; + if (("LineToolRegressionTrend" === i || "LineToolAnchoredVWAP" === i) && !this + .canCreateStudy()) return Object(n.showTooManyStudiesNotice)(), null; + this.beginUndoMacro(c); + const h = !l; + this._createLineCommand = new I(this._model(), e, i, a || Object(s + .ensureNotNull)(e.mainDataSource()), h); + const u = this._createLineCommand.startCreatingLine(t, r, o || null), + d = Object(s.ensureNotNull)(this._createLineCommand.line()); + let p = null; + if (u && (h && this.finishLineTool(d), this._pushUndoCommand(this + ._createLineCommand), this._createLineCommand = null, p = { + points: d.normalizedPoints(), + interval: this.mainSeries().interval() + }), h && void 0 === o && Object(ce.drawOnAllCharts)().value() && d + .isSynchronizable()) { + const e = Object(s.ensureNotNull)(this.model().externalTimeStamp(t.index)), + r = { + point: { + price: t.price, + timeStamp: e + }, + linetool: i, + properties: d.properties(), + symbol: this.mainSeries().symbol(), + model: this.model(), + linkKey: Object(s.ensureNotNull)(d.linkKey().value()), + finalState: p + }; + d.isFixed() && (r.pointPositionPercents = d.calcPositionPercents()[0]), + Object(ce.createLineTool)(r) + } + return this.endUndoMacro(), d + } + continueCreatingLine(e, t, i, r) { + const n = Object(s.ensureNotNull)(this._createLineCommand); + this.beginUndoMacro(n.text()); + const o = Object(s.ensureNotNull)(this._model().lineBeingCreated()), + a = n.continueCreatingLine(e, t, i, r); + let l = null; + if (a && (this.finishLineTool(o), this._pushUndoCommand(n), this + ._createLineCommand = null, l = { + points: o.normalizedPoints(), + interval: this.mainSeries().interval() + }), n.needCopyToOtherCharts() && Object(ce.drawOnAllCharts)().value() && + o.isSynchronizable()) { + const i = Object(s.ensureNotNull)(this._model().externalTimeStamp(e.index)); + Object(ce.continueLineTool)({ + point: { + price: e.price, + timeStamp: i + }, + envState: t, + finalState: l, + model: this._model() + }) + } + return this.endUndoMacro(), a + } + continueExternalLine(e, t, i) { + const r = Object(s.ensureNotNull)(this._createLineCommand), + n = r.continueCreatingLine(e, t, i); + return n && (this._pushUndoCommand(r), this._createLineCommand = null), n + } + finishLineTool(e) { + this._model().finishLineTool(e) + } + pasteImageAsLineTool(e, t, i) { + return null + } + loadRange(e) { + this._pushUndoCommand(new Q(this._model(), e)) + } + unlinkLines(e) { + const t = this.model(); + this.beginUndoMacro("Stop syncing line tool(s)"); + for (const i of e) null !== i.linkKey().value() && Object(ce.removeLineTool)({ + withUndo: !0, + model: this.model(), + symbol: i.symbol(), + linkKey: Object(s.ensureNotNull)(i.linkKey().value()), + sourceTitle: i.title(), + lineToolState: i.state(!1) + }), this._pushUndoCommand(new Ze(t, i)); + this.endUndoMacro() + } + zoomFromViewport() { + const e = new Je(Object(s.ensureDefined)(this._zoomStack.head()), this + ._zoomStack, !1); + this._pushUndoCommand(e) + } + zoomToViewport(e, t, i, s, r) { + const n = new Ye(this.m_model, e, t, i, s, r), + o = new Je(n, this._zoomStack, !0); + this._pushUndoCommand(o) + } + zoomStack() { + return this._zoomStack + } + withMacro(e, t) { + const i = this.beginUndoMacro(e); + try { + t() + } finally { + this.endUndoMacro() + } + return i + } + canZoomIn() { + return this.model().canZoomIn() + } + canZoomOut() { + return this.model().canZoomOut() + } + zoomOut() { + const e = this.timeScale().width(); + if (this.canZoomOut()) { + try { + this.beginUndoMacro("Zoom Out") + } catch (e) { + return + } + Object(ee.doAnimate)({ + to: e / 5, + onStep: e => { + this.startScaleTime(0), this.scaleTimeTo(e), this + .endScaleTime() + }, + onComplete: () => this.endUndoMacro() + }) + } + } + zoomIn() { + const e = this.timeScale().width(); + if (this.canZoomIn()) { + try { + this.beginUndoMacro("Zoom In") + } catch (e) { + return + } + Object(ee.doAnimate)({ + to: e / 5, + onStep: e => { + this.startScaleTime(e), this.scaleTimeTo(0), this + .endScaleTime() + }, + onComplete: () => this.endUndoMacro() + }) + } + } + startMovingSources(e, t, i, s) { + e.filter(e => e.doesMovingAffectsUndo()).length && (this + ._currentSourceMoveCommand = new w(this.model(), e, "Move Drawing(s)", ! + 1)), this.model().startMovingSources(e, t, i, new Map, s) + } + moveSources(e, t) { + this.model().moveSources(e, new Map, t) + } + endMovingSource(e) { + this.model().endMovingSources(e), null !== this._currentSourceMoveCommand && ( + this._currentSourceMoveCommand.saveNewState(), this._pushUndoCommand( + this._currentSourceMoveCommand)), this._currentSourceMoveCommand = + null + } + startChangingLinetool(e, t, i, s, r) { + this._currentLineChangeCommand = new w(this.model(), [e], "Change " + i + + " point", !1), this.model().startChangingLinetool(e, t, i, s, r) + } + changeLinePoint(e, t) { + this.model().changeLinePoint(e, t) + } + endChangingLinetool(e) { + this.model().endChangingLinetool(e), null !== this._currentLineChangeCommand && + (this._currentLineChangeCommand.saveNewState(), this._pushUndoCommand(this + ._currentLineChangeCommand)), this._currentLineChangeCommand = null + } + setChartStyleProperty(e, t, i) { + if (e.value() !== t) { + const s = new Z(e, t, this.mainSeries(), i, this.model(), this + .chartWidget()); + this._pushUndoCommand(s), this.emitEvent("setChartStyleProperty"), Object(G + .a)(e.value()) + } + } + restorePropertiesForSource(e) { + Object(g.isLineTool)(e) ? this._restoreLineToolFactoryDefaults(e) : this + ._restoreStudyFactoryDefaults(e) + } + restoreState(e, t, i) { + return this.m_model.restoreState(e, t, i) + } + async clipboardCopy(e, t = this.selection().dataSources()) { + if (!Object(qe.enabled)("datasource_copypaste")) return; + const i = t.filter(e => e.copiable()); + if (0 === i.length) return; + for (const e of i) + if (Object(ve.isStudy)(e) && e.isChildStudy()) throw new Error( + "Can not copy child study"); + const s = Object(M.a)(this._model().id(), i); + return null !== s ? e.write({ + app: JSON.stringify(s), + text: s.title + }) : void 0 + } + async clipboardCut(e, t = this.selection().dataSources()) { + if (!Object(qe.enabled)("datasource_copypaste")) return; + const i = t.filter(e => e.copiable()); + if (0 === i.length) return; + await this.clipboardCopy(e, i); + const s = i.filter(e => e.isUserDeletable()); + if (0 === s.length) return; + const r = 1 === s.length ? "Cut " + s[0].title : "Cut sources"; + this.beginUndoMacro(r), this.m_model.selectionMacro(() => { + this.removeSources(s, !1, r) + }), this.endUndoMacro() + } + async clipboardPaste(e, t) { + let i = null; + if (Object(qe.enabled)("datasource_copypaste") && (i = i || await e.read(), i + .app)) { + const e = JSON.parse(i.app); + if (null !== this.pasteSourceFromClip(t, e)) return + } + await this._processSpecialLineToolsContents(e, i, t) + } + applyStudyTemplate(e, t) { + const i = new Ce(this._model(), e, t); + this._pushUndoCommand(i) + } + startCustomMoving(e, t, i) { + this._currentCustomMoveCommand = new je(this.model(), e, t, i) + } + customMoveBeingProcessed() { + return null !== this._currentCustomMoveCommand + } + processCustomMove(e) { + Object(s.ensureNotNull)(this._currentCustomMoveCommand).move(e) + } + endCustomMoving() { + null !== this._currentCustomMoveCommand && this._currentCustomMoveCommand + .hasChanges() && (this._pushUndoCommand(this._currentCustomMoveCommand), + this._currentCustomMoveCommand = null) + } + cloneLineTools(e, t) { + for (let t = 0; t < Math.min(5, e.length); ++t) Object(G.b)(e[t]); + this.beginUndoMacro(window.t("Clone line tools")); + const i = new b(this._model(), e, t, window.t("Clone line tools")); + if (this._pushUndoCommand(i), Object(ce.drawOnAllCharts)().value()) { + const e = i.newIds().map(e => Object(s.ensureNotNull)(this.model() + .dataSourceForId(e))); + this.copyToOtherCharts(e) + } + return this.endUndoMacro(), this.emitEvent("cloneLineTools"), i.newIds() + } + removeSource(e, t, i) { + if (this.lineBeingCreated() === e) return void this.cancelCreatingLine(); + const s = "Remove " + e.title(); + this.removeSources([e], t, s, i) + } + removeSelectedSources() { + const e = this._model().selection().dataSources(); + if (!e.length) return; + const t = e.length > 1 ? "Remove drawings group" : "Remove " + e[0].title(); + this.removeSources(e, !1, t) + } + removeSources(e, t, i, r) { + r || (e = e.filter(e => e.isUserDeletable())); + const n = this._model(), + o = n.lineToolsGroupModel(); + this.beginUndoMacro(i), n.selectionMacro(r => { + const a = new Map; + e.forEach(e => { + if (Object(g.isLineTool)(e)) { + const t = o.groupForLineTool(e); + if (null !== t) { + const i = a.get(t) || []; + i.push(e), a.set(t, i) + } + null !== e.linkKey().value() && Object(ce + .removeLineTool)({ + withUndo: !0, + model: this.model(), + linkKey: Object(s.ensureNotNull)(e + .linkKey().value()), + symbol: this.model().mainSeries() + .symbol(), + lineToolState: e.state(!1), + sourceTitle: e.title() + }) + } + }), a.forEach((e, t) => { + const i = new S.a(n, t, e); + this._pushUndoCommand(i) + }); + const l = new v.RemoveSourcesCommand(n, e, i), + c = l.removedIds(); + this._pushUndoCommand(l), !t && c.length > 0 && (1 === c.length ? + this.emitEvent("removeSource", [c[0]]) : this.emitEvent( + "removeSources", [c])) + }), this.endUndoMacro() + } + removeUnloadedLineTool(e, t, i, s, r, n) {} + mergeSourceUp(e) { + const t = new C.c(this._model(), e, "Merge up"); + this._mergeUnmergeSource(e, t) + } + mergeSourceDown(e) { + const t = new C.a(this._model(), e, "Merge down"); + this._mergeUnmergeSource(e, t) + } + mergeToPane(e, t) { + const i = this._model().panes().indexOf(t), + s = new C.b(this._model(), e, i, "Merge to pane"); + this._mergeUnmergeSource(e, s) + } + unmergeSourceUp(e) { + const t = new P.c(this._model(), e, "Unmerge up"); + this._mergeUnmergeSource(e, t) + } + unmergeSourceDown(e) { + const t = new P.a(this._model(), e, "Unmerge down"); + this._mergeUnmergeSource(e, t) + } + unmergeToNewBottomPane(e) { + const t = new P.b(this._model(), e, "Unmerge to new bottom pane"); + this._mergeUnmergeSource(e, t) + } + availableZOrderOperations(e) { + const t = this._model().lineToolsGroupModel(), + i = e.filter(g.isLineTool), + r = i.map(e => t.groupForLineTool(e)); + Object(s.assert)(new Set(r).size <= 1, + "Cannot move line tools from different group"); + const n = 0 === r.length ? null : r[0]; + let o = { + bringForwardEnabled: !1, + bringToFrontEnabled: !1, + sendBackwardEnabled: !1, + sendToBackEnabled: !1 + }; + const a = new Set(i); + for (const t of Object(x.sortSources)(e)) { + if (Object(g.isLineTool)(t) && null !== n) { + const e = Object(x.sortSources)(n.lineTools().filter(e => !a.has(e) || + e === t)); + o = nt(o, { + bringForwardEnabled: t !== e[e.length - 1], + bringToFrontEnabled: t !== e[e.length - 1], + sendBackwardEnabled: t !== e[0], + sendToBackEnabled: t !== e[0] + }); + continue + } + const e = Object(s.ensureNotNull)(this._model().paneForSource(t)) + .sourcesByGroup().allExceptSpecialSources(); + if (0 === e.length) continue; + const i = t.zorder(), + r = e[0].zorder(), + l = e[e.length - 1].zorder(); + o = nt(o, { + bringForwardEnabled: i !== l, + bringToFrontEnabled: i !== l, + sendBackwardEnabled: i !== r, + sendToBackEnabled: i !== r + }) + } + return o + } + sendToBack(e) { + if (!this.availableZOrderOperations(e).sendToBackEnabled) throw new Error( + "Send to back operation is unavailable"); + let t = null; + const i = e[0]; + if (Object(g.isLineTool)(i)) { + const s = this._model().lineToolsGroupModel().groupForLineTool(i); + if (null !== s) { + const i = s.lineTools(); + t = new V(this.model(), Object(x.sortSources)(e), i[0]) + } + } + null === t && (t = new A(this.model(), Object(x.sortSources)(e))), this + ._pushUndoCommand(t), this.emitEvent("changeZOrder", [e]) + } + bringToFront(e) { + if (!this.availableZOrderOperations(e).bringToFrontEnabled) throw new Error( + "Bring to front operation is unavailable"); + let t = null; + const i = e[0]; + if (Object(g.isLineTool)(i)) { + const s = this._model().lineToolsGroupModel().groupForLineTool(i); + if (null !== s) { + const i = s.lineTools(); + t = new k(this.model(), Object(x.sortSources)(e), i[i.length - 1]) + } + } + null === t && (t = new L(this.model(), Object(x.sortSources)(e))), this + ._pushUndoCommand(t), this.emitEvent("changeZOrder", [e]) + } + sendBackward(e) { + if (!this.availableZOrderOperations(e).sendBackwardEnabled) throw new Error( + "Send backward operation is unavailable"); + const t = tt.format({ + title: e[0].title() + }); + this._sendBackOrBringForward(t, Object(x.sortSources)(e), (e, t) => new R(this + .model(), e, t)) + } + bringForward(e) { + if (!this.availableZOrderOperations(e).bringForwardEnabled) throw new Error( + "Bring forward operation is unavailable"); + const t = it.format({ + title: e[0].title() + }); + this._sendBackOrBringForward(t, Object(x.sortSources)(e), (e, t) => new j(this + .model(), e, t)) + } + insertAfter(e, t) { + e = Object(x.sortSources)(e); + const i = st.format({ + title: e[0].title(), + target: t.title() + }); + this._insertAfterOrBefore(i, e, t, () => new k(this.model(), e, t)) + } + insertBefore(e, t) { + e = Object(x.sortSources)(e); + const i = rt.format({ + title: e[0].title(), + target: t.title() + }); + this._insertAfterOrBefore(i, e, t, () => new V(this.model(), e, t)) + } + detachToRight(e, t) { + Object(ke.trackEvent)("Chart", "Move to new right scale"); + const i = window.t("Move {title} To New Price Scale").format({ + title: e.title() + }), + s = new Ae.b(this.model(), e, t, "right", i); + this._pushUndoCommand(s), this.emitEvent("moveSource", [e]) + } + detachToLeft(e, t) { + Object(ke.trackEvent)("Chart", "Move to new left scale"); + const i = window.t("Move {title} To New Left Scale").format({ + title: e.title() + }), + s = new Ae.b(this.model(), e, t, "left", i); + this._pushUndoCommand(s), this.emitEvent("moveSource", [e]) + } + detachNoScale(e, t) { + Object(ke.trackEvent)("Chart", "Make source no scale"); + const i = window.t("Make {title} No Scale (Full Screen)").format({ + title: e.title() + }), + s = new Ae.b(this.model(), e, t, "overlay", i); + this._pushUndoCommand(s), this.emitEvent("moveSource", [e]) + } + moveToScale(e, t, i, s, r) { + Object(ke.trackEvent)("Chart", "Move source to target scale"), this + .beginUndoMacro(s); + const n = new Ae.a(this.model(), e, t, i, s), + o = r ? null : Object(De.sourceNewCurrencyOnPinningToPriceScale)(e, i, this + ._model()), + a = r ? null : Object(ze.sourceNewUnitOnPinningToPriceScale)(e, i, this + ._model()); + this._pushUndoCommand(n), null !== o && this.setPriceScaleCurrency(i, o), + null !== a && this.setPriceScaleUnit(i, a), this.endUndoMacro(), this + .emitEvent("moveSource", [e]) + } + startScrollTime(e) { + const t = this.timeScale(); + this._initialTimeScrollState = { + rightOffset: t.rightOffset(), + barSpacing: t.barSpacing() + }, this._initialTimeScrollPos = e, this.model().startScrollTime(e) + } + scrollTimeTo(e) { + let t = !1; + return null !== this._initialTimeScrollPos && null !== this + ._initialTimeScrollState && Math.abs(e - this._initialTimeScrollPos) > 20 && + (this._pushUndoCommand(new z.a(this.model(), this._initialTimeScrollState, + "Scroll Time")), this._initialTimeScrollPos = null, this + ._initialTimeScrollState = null, t = !0), this.model().scrollTimeTo(e), + t + } + endScrollTime() { + this.model().endScrollTime(), this._initialTimeScrollPos = null, this + ._initialTimeScrollState = null + } + startScaleTime(e) { + const t = this.timeScale(), + i = { + rightOffset: t.rightOffset(), + barSpacing: t.barSpacing() + }; + this._pushUndoCommand(new z.a(this.model(), i, "Scale Time")), this.model() + .startScaleTime(e) + } + scaleTimeTo(e) { + this.model().scaleTimeTo(e) + } + endScaleTime() { + this.model().endScaleTime() + } + resetTimeScale() { + const e = this.timeScale(), + t = { + rightOffset: e.rightOffset(), + barSpacing: e.barSpacing() + }; + this._pushUndoCommand(new z.a(this.model(), t, "Reset Time Scale")), this + .model().resetTimeScale() + } + startScalePrice(e, t, i, s) { + this._pushUndoCommand(new Ge.PriceScaleChangeUndoCommand(this.model(), e, t, t + .state(), s)), this.model().startScalePrice(e, t, i) + } + scalePriceTo(e, t, i) { + this.model().scalePriceTo(e, t, i) + } + endScalePrice(e, t) { + this.model().endScalePrice(e, t) + } + resetPriceScale(e, t) { + this._pushUndoCommand(new Ge.PriceScaleChangeUndoCommand(this.m_model, e, t, t + .state())), this.model().resetPriceScale(e, t) + } + rearrangePanes(e, t) { + const i = new U(this._model(), e, t); + this._pushUndoCommand(i) + } + movePane(e, t) { + const i = new U(this._model(), e, t); + this._pushUndoCommand(i) + } + pasteSourceFromClip(e, t, i) { + const r = t; + if (!r || 0 === r.sources.length) return null; + const n = e || Object(s.ensureNotNull)(this.model().paneForSource(this + .mainSeries())); + if (!r.sources.some(e => "drawing" !== e.type || null !== n + .clipboardLineToolOwnerSource(e.source.id))) return null; + this.beginUndoMacro("Paste " + r.title); + let o = 0; + const a = [], + l = []; + for (const t of r.sources) + if ("drawing" === t.type && null !== n.clipboardLineToolOwnerSource(t.source + .id)) { + Object(et.b)(t.source.state.intervalsVisibilities, $.Interval.parse(this + .model().mainSeries().interval())); + const e = this.pasteLineTool(n, t); + o < 5 && (Object(G.d)(e), o += 1), l.push(e), a.push(e) + } else "study" === t.type && t.source && t.source.metaInfo && this + .checkIfFeatureAvailable(new c.a(t.source.metaInfo)) && a.push(this + .pasteStudy(t, i ? e : void 0)); + return l.length && this.selectionMacro(e => { + e.clearSelection(), l.forEach(t => { + e.addSourceToSelection(t, null) + }) + }), this.endUndoMacro(), a + } + pasteLineTool(e, t, i, s) { + const r = new Me(this.model(), t, e, i, s); + this._pushUndoCommand(r); + const n = r.source(); + return r.needCopyToOtherCharts() && this.copyToOtherCharts([n]), + this.selectionMacro(e => { + e.clearSelection(), e.addSourceToSelection(n, null) + }), n + } + pasteStudy(e, t) { + const i = new Be(this.model(), e, null == t ? void 0 : t.id()); + this._pushUndoCommand(i); + const r = Object(s.ensureNotNull)(i.state()).id; + return Object(s.ensureNotNull)(this._model().dataSourceForId(r)) + } + setPriceScaleCurrency(e, t) { + const i = new Oe.a(e, t, this.chartWidget(), "Change currency"); + this._pushUndoCommand(i) + } + setPriceScaleUnit(e, t) { + const i = new Le.a(e, t, this.chartWidget(), "Change unit"); + this._pushUndoCommand(i) + } + setSymbol(e, t) { + e.symbol() !== t && this._pushUndoCommand(new Ee(e, t, this.chartWidget())) + } + copyToOtherCharts(e) { + const t = this.mainSeries(), + i = t.syncModel(), + r = this.timeScale(); + if (i) + for (const n of e) { + if (!n.isSynchronizable()) continue; + const e = n.linkKey().value() || Object(xe.randomHash)(); + n.linkKey().setValue(e); + const o = n.state(!1), + a = n.normalizedPoints(), + l = n.properties().interval.value(), + c = t.interval(); + let h; + if ($.Interval.isEqual(l, c)) h = a.map(e => { + const t = Object(s.ensureNotNull)(r.timePointToIndex(e + .time_t)) + e.offset; + return { + price: e.price, + timeStamp: Object(s.ensureNotNull)(this.model() + .externalTimeStamp(t)) + } + }); + else { + const e = i.createNewModelWithResolution(l); + h = a.map(t => ({ + price: t.price, + timeStamp: 0 === t.offset ? t.time_t : e + .projectTime(t.time_t, t.offset) + })) + } + const u = { + ...o, + linkKey: e, + points: h, + linetool: n.getType(), + model: this.model(), + symbol: t.symbol(), + finalState: { + points: a, + interval: l + } + }; + n.isFixed() && (u.pointPositionPercents = n.calcPositionPercents()), + Object(ce.copyLineTool)(u) + } + } + addPaneStretchFactorUndoCommand(e, t, i, s) { + const r = new Re(this.model(), e, t, i, s); + this._pushUndoCommand(r) + } + moveSelectedToolsLeft() { + return this._moveSelectedTools(2) + } + moveSelectedToolsUp() { + return this._moveSelectedTools(0) + } + moveSelectedToolsRight() { + return this._moveSelectedTools(3) + } + moveSelectedToolsDown() { + return this._moveSelectedTools(1) + } + insertStudyWithoutCheck(e, t) { + return this._insertStudy(e, t, {}, !1, void 0, void 0, void 0, void 0, void 0, + null, void 0) + } + saveLineToolState(e, t) { + this._pushUndoCommand(new w(this.m_model, [e], t)) + } + resetScales() { + this.beginUndoMacro("Reset scales"), this.resetTimeScale(); + for (const e of this.m_model.panes()) { + for (const t of e.leftPriceScales()) this.resetPriceScale(e, t); + for (const t of e.rightPriceScales()) this.resetPriceScale(e, t) + } + this.endUndoMacro(), this.m_model.recalculateAllPanes() + } + _mergeUnmergeSource(e, t) { + this.beginUndoMacro(t.text()); + const i = Object(s.ensureNotNull)(this._model().paneForSource(e)), + r = new Set(i.sourcesByGroup().lineSources().filter(t => t.ownerSource() === + e)); + this._model().lineToolsGroupModel().groups().filter(e => { + const t = e.lineTools().some(e => r.has(e)), + i = e.lineTools().some(e => !r.has(e)); + return t && i + }).forEach(e => { + this._pushUndoCommand(new S.a(this._model(), e, e.lineTools())) + }), this._pushUndoCommand(t), this.endUndoMacro() + } + _insertStudy(e, t, i, r, n, o, a, l, c, h, u) { + const d = "Insert " + e.description; + this.beginUndoMacro(d); + const p = new Fe(this.model(), e, t, i, r, n, o, a, l, c, h || null, d); + this._pushUndoCommand(p); + const _ = p.insertedStudy(); + if (void 0 !== u) { + const e = new We.SetPriceScaleModeCommand(u, Object(s.ensureNotNull)(_ + .priceScale()), "", this.model()); + this._pushUndoCommand(e) + } + return this.endUndoMacro(), _ + } + async _processSpecialLineToolsContents(e, t, i) { + 0 + } + _insertAfterOrBefore(e, t, i, r) { + const n = Object(s.ensureNotNull)(this._model().paneForSource(i)); + if (t.some(e => Object(g.isLineTool)(e) && this._model().paneForSource(e) !== + n)) throw new Error( + "Cannot insert line tool after target on another pane"); + this.beginUndoMacro(e), t.forEach(e => { + Object(s.ensureNotNull)(this.model().paneForSource(e)) !== n && this + .mergeToPane(e, n) + }); + const o = r(); + this._pushUndoCommand(o), this.emitEvent("changeZOrder", [t]), this + .endUndoMacro() + } + _sendBackOrBringForward(e, t, i) { + const r = new Map; + t.forEach(e => { + const t = Object(s.ensureNotNull)(this._model().paneForSource(e)), + i = r.get(t) || []; + i.push(e), r.set(t, i) + }), this.beginUndoMacro(e), r.forEach((e, t) => { + this._pushUndoCommand(i(t, e)) + }), this.endUndoMacro(), this.emitEvent("changeZOrder", [t]) + } + _moveSelectedTools(e) { + const t = this.model().selection().lineDataSources(); + if (0 === t.length) return !1; + if (Object(ce.lockDrawings)().value()) return !0; + const i = this.timeScale().visibleBarsStrictRange(); + if (null === i) return !1; + const s = function(e) { + const t = new Map; + for (const i of e) { + const e = i.ownerSource(); + if (null === e) continue; + let s = t.get(e); + if (void 0 === s) { + const i = e.priceScale(), + r = e.priceStep(), + n = e.firstValue(); + if (null === i || null === r || null === n) continue; + const o = i.priceRange(); + if (null === o) continue; + s = { + sources: [], + priceScale: i, + priceStep: r, + startPrice: o.minValue(), + firstValue: n + }, t.set(e, s) + } + s.sources.push(i) + } + return t + }(t); + if (0 === s.size) return !1; + this.beginUndoMacro(window.t("Move Drawing(s)")); + const n = i.firstBar(), + o = this.timeScale().indexToCoordinate(n), + a = n + (3 === e ? 1 : 2 === e ? -1 : 0), + l = this.timeScale().indexToCoordinate(a); + return ce.isDirectionalMovementActive.setValue(!0), s.forEach(t => { + const { + startPrice: i, + priceStep: s, + priceScale: c, + firstValue: h + } = t, u = i + (0 === e ? s : 1 === e ? -s : 0), d = c + .priceToCoordinate(i, h), p = c.priceToCoordinate(u, h), _ = { + logical: { + index: n, + price: i + }, + screen: new r.Point(o, d) + }, m = { + logical: { + index: a, + price: u + }, + screen: new r.Point(l, p) + }; + this.startMovingSources(t.sources, _, null), this.moveSources(m), + this.endMovingSource(!1) + }), ce.isDirectionalMovementActive.setValue(!1), this.endUndoMacro(), !0 + } + _restoreStudyFactoryDefaults(e) { + const t = new Qe(this.m_model, e.properties()); + this._pushUndoCommand(t) + } + _restoreLineToolFactoryDefaults(e) { + const t = "Load default drawing template"; + this.beginUndoMacro(t), this.saveLineToolState(e, t); + const i = new Qe(this.m_model, e.properties(), t); + this._pushUndoCommand(i), this.saveLineToolState(e, t), this.endUndoMacro(), + this.model().updateSource(e) + } + } + }, + opke: function(e, t) { + e.exports = + '' + }, + p1SQ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolHorzLinePriceAxisView", (function() { + return r + })); + var s = i("KcY8"); + class r extends s.a { + constructor(e) { + super(), this._source = e + } + _updateRendererData(e, t, i) { + e.visible = !1; + const s = this._source.points(), + r = this._source.priceScale(); + if (0 === s.length || null === r || r.isEmpty()) return; + const n = s[0]; + if (!isFinite(n.price)) return; + const o = this._source.ownerSource(), + a = null !== o ? o.firstValue() : null; + if (null === a) return; + const l = this._source.properties().linecolor.value(); + i.background = l, i.textColor = this.generateTextColor(l), i.coordinate = r + .priceToCoordinate(n.price, a), e.text = r.formatPrice(n.price, a), e + .visible = !0 + } + } + }, + pJOz: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "drawCircle", (function() { + return h + })), i.d(t, "drawArrow", (function() { + return u + })), i.d(t, "TrendLineRenderer", (function() { + return d + })); + var s = i("Eyy1"), + r = i("GEp6"), + n = i("a7Ha"), + o = i("VdBB"), + a = i("jFln"), + l = i("Zp/P"), + c = i("gAom"); + + function h(e, t, i, s, r) { + t.save(), t.fillStyle = "#000000", t.beginPath(), t.arc(e.x * r, e.y * r, i * r, 0, 2 * Math + .PI, !1), t.fill(), s.strokeWidth && (t.lineWidth = s.strokeWidth, t.stroke()), t + .restore() + } + + function u(e, t, i, s, r) { + if (t.subtract(e).length() < 1) return; + const n = Object(l.getArrowPoints)(e, t, s, !1); + for (let e = 0; e < n.length; ++e) { + const t = n[e][0], + s = n[e][1]; + Object(a.drawLine)(i, t.x * r, t.y * r, s.x * r, s.y * r) + } + } + class d { + constructor() { + this._data = null, this._hittest = new o.HitTestResult(o.HitTestResult.MOVEPOINT) + } + setData(e) { + this._data = e + } + setHitTest(e) { + this._hittest = e + } + draw(e, t) { + const i = this._data; + if (null === i) return; + if ("points" in i && i.points.length < 2) return; + if ("floatPoints" in i && i.floatPoints.length < 2) return; + const s = t.pixelRatio; + e.lineCap = "butt", e.strokeStyle = i.color, e.lineWidth = Math.max(1, Math.floor(i + .linewidth * s)), Object(a.setLineStyle)(e, i.linestyle); + const r = "floatPoints" in i ? i.floatPoints : i.points, + n = r[0], + o = r[1]; + let l = []; + i.overlayLineEndings ? l = [n.clone(), o.clone()] : this._drawEnds(e, [n, o], i + .linewidth, s); + const h = this._extendAndClipLineSegment(n, o, t); + null !== h && i.linewidth > 0 && (h[0].x === h[1].x ? Object(c.drawVerticalLine)(e, + Math.round(h[0].x * s), h[0].y * s, h[1].y * s) : h[0].y === h[1].y ? + Object(c.drawHorizontalLine)(e, Math.round(h[0].y * s), h[0].x * s, h[1].x * + s) : Object(a.drawLine)(e, h[0].x * s, h[0].y * s, h[1].x * s, h[1].y * + s)), i.overlayLineEndings && this._drawEnds(e, l, i.linewidth, s) + } + hitTest(e, t) { + const i = this._data; + if (null === i) return null; + if ("points" in i && i.points.length < 2) return null; + if ("floatPoints" in i && i.floatPoints.length < 2) return null; + const s = Object(l.interactionTolerance)().line, + n = "floatPoints" in i ? i.floatPoints : i.points, + o = n[0], + a = n[1], + c = this._extendAndClipLineSegment(o, a, t); + if (null !== c) { + if (Object(r.distanceToSegment)(c[0], c[1], e).distance <= s) return this + ._hittest + } + return null + } + _extendAndClipLineSegment(e, t, i) { + const r = Object(s.ensureNotNull)(this._data); + return Object(l.extendAndClipLineSegment)(e, t, i.cssWidth, i.cssHeight, r + .extendleft, r.extendright) + } + _drawEnds(e, t, i, r) { + const o = t[0], + a = t[1], + l = Object(s.ensureNotNull)(this._data); + switch (l.leftend) { + case n.LineEnd.Arrow: + u(a, o, e, i, r); + break; + case n.LineEnd.Circle: + h(o, e, i, Object(s.ensureDefined)(l.endstyle), r) + } + switch (l.rightend) { + case n.LineEnd.Arrow: + u(o, a, e, i, r); + break; + case n.LineEnd.Circle: + h(a, e, i, Object(s.ensureDefined)(l.endstyle), r) + } + } + } + }, + pKDv: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolABCD", (function() { + return a + })); + var s = i("Eyy1"), + r = i("Ocx9"), + n = i("Ss5c"), + o = i("j3hX"); + class a extends n.LineDataSource { + constructor(e, t) { + const s = t || a.createProperties(); + super(e, s), i.e("lt-pane-views").then(i.bind(null, "bFMU")).then(t => { + this._setPaneViews([new t.ABCDPaneView(this, e)]) + }) + } + pointsCount() { + return 4 + } + name() { + return "ABCD Pattern" + } + properties() { + return super.properties() + } + static createProperties(e) { + const t = new r.DefaultProperty("linetoolabcd", e); + return a._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "aMeN")).then( + e => e.PatternWithoutBackgroundDefinitionsViewModel) + } + static _configureProperties(e) { + n.LineDataSource._configureProperties(e), e.addChild("linesColors", new o + .LineToolColorsProperty([Object(s.ensureDefined)(e.child("color"))])), e + .addChild("textsColors", new o.LineToolColorsProperty([Object(s + .ensureDefined)(e.child("textcolor"))])) + } + } + }, + pOzK: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SetPriceScaleModeCommand", (function() { + return n + })); + var s = i("Ocx9"), + r = i("RDU5"); + class n extends r.UndoCommand { + constructor(e, t, i, s) { + super(i), this._newMode = e, this._priceScaleId = t.id(), this._model = s, this + ._oldMode = t.mode() + } + redo() { + this._applyMode(this._newMode) + } + undo() { + this._applyMode(this._oldMode) + } + _applyMode(e) { + const t = this._findPriceScaleById(); + null !== t && (Object(s.saveDefaultProperties)(!0), t.setMode(e), Object(s + .saveDefaultProperties)(!1), this._model && (this._model + .recalculateAllPanes(), this._model.lightUpdate())) + } + _findPriceScaleById() { + const e = this._model.panes(); + for (let t = 0; t < e.length; t++) { + const i = e[t].getPriceScaleById(this._priceScaleId); + if (null !== i) return i + } + return null + } + } + }, + pPtI: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "normalizeIntervalString", (function() { + return _ + })), i.d(t, "isAvailable", (function() { + return m + })), i.d(t, "setLastUsedResolution", (function() { + return f + })), i.d(t, "getRangeResolution", (function() { + return g + })), i.d(t, "getTimeBasedResolution", (function() { + return b + })), i.d(t, "getDefaultResolution", (function() { + return v + })), i.d(t, "getResolutionByChartStyle", (function() { + return S + })), i.d(t, "getServerInterval", (function() { + return y + })), i.d(t, "isResolutionMultiplierValid", (function() { + return w + })), i.d(t, "getMaxResolutionValue", (function() { + return C + })), i.d(t, "getResolutionsFromSettings", (function() { + return x + })), i.d(t, "convertResolutionsFromSettings", (function() { + return T + })), i.d(t, "mergeResolutions", (function() { + return I + })), i.d(t, "sortResolutions", (function() { + return M + })), i.d(t, "getCustomResolutions", (function() { + return A + })), i.d(t, "getTranslatedResolution", (function() { + return E + })), i.d(t, "getTranslatedResolutionModel", (function() { + return k + })), i.d(t, "isSecondsEnabled", (function() { + return V + })), i.d(t, "isTicksEnabled", (function() { + return B + })); + i("bSeV"), i("YFKU"); + var s = i("LxhU"), + r = i("n5al"), + n = i("Vdly"), + o = i("PT1i"), + a = i("L6rT"), + l = i("ogJP"), + c = i("Kxc7"), + h = i.n(c); + const u = { + [s.ResolutionKind.Ticks]: 1, + [s.ResolutionKind.Seconds]: 60, + [s.ResolutionKind.Minutes]: 1440, + [s.SpecialResolutionKind.Hours]: 24, + [s.ResolutionKind.Days]: 365, + [s.ResolutionKind.Weeks]: 52, + [s.ResolutionKind.Months]: 12, + [s.ResolutionKind.Range]: 1e6, + [s.ResolutionKind.Invalid]: NaN + }, + d = { + [s.ResolutionKind.Ticks]: 0, + [s.ResolutionKind.Seconds]: 1, + [s.ResolutionKind.Minutes]: 2, + [s.SpecialResolutionKind.Hours]: 3, + [s.ResolutionKind.Days]: 4, + [s.ResolutionKind.Weeks]: 5, + [s.ResolutionKind.Months]: 6, + [s.ResolutionKind.Range]: 7, + [s.ResolutionKind.Invalid]: 8 + }, + p = { + [s.ResolutionKind.Invalid]: "", + [s.ResolutionKind.Ticks]: window.t("T", { + context: "interval_short" + }), + [s.ResolutionKind.Seconds]: window.t("s", { + context: "interval_short" + }), + [s.ResolutionKind.Minutes]: window.t("m", { + context: "interval_short" + }), + [s.SpecialResolutionKind.Hours]: window.t("h", { + context: "interval_short" + }), + [s.ResolutionKind.Days]: window.t("D", { + context: "interval_short" + }), + [s.ResolutionKind.Weeks]: window.t("W", { + context: "interval_short" + }), + [s.ResolutionKind.Months]: window.t("M", { + context: "interval_short" + }), + [s.ResolutionKind.Range]: window.t("R", { + context: "interval_short" + }) + }; + + function _(e) { + return s.Interval.parse(e).value() + } + + function m(e) { + const t = s.Interval.parse(e); + if (!V() && t.isSeconds()) return !1; + if (!B() && t.isTicks()) return !1; + const i = t.value(), + r = o.linking.supportedResolutions.value(); + return void 0 !== r ? void 0 !== r.find(e => _(e) === i) : t.isSeconds() ? Boolean(o.linking + .seconds.value()) : t.isTicks() ? Boolean(o.linking.ticks.value()) : t + .isIntraday() ? Boolean(o.linking.intraday.value()) : t.isDWM() + } + + function f(e) { + s.Interval.isValid(e) && (s.Interval.isRange(e) ? n.setValue( + "chart.lastUsedRangeResolution", e) : n.setValue( + "chart.lastUsedTimeBasedResolution", e)) + } + + function g(e) { + const t = n.getValue("chart.lastUsedRangeResolution"); + if (void 0 !== t && s.Interval.isRange(t)) return t; + let i = "100R"; + for (const t of e) { + const e = s.Interval.parse(t); + if (e.isRange()) { + const t = e.value(); + if ("100R" === t) return t; + i = t + } + } + return i + } + + function b(e) { + const t = n.getValue("chart.lastUsedTimeBasedResolution"); + if (void 0 !== t && s.Interval.isTimeBased(t)) return t; + let i = "1D"; + for (const t of e) { + const e = s.Interval.parse(t); + if (e.isTimeBased()) { + const t = e.value(); + if ("1D" === t) return t; + i = t + } + } + return i + } + + function v(e) { + return e ? "100R" : "1D" + } + + function S(e, t, i) { + const n = r.isRangeStyle(e), + o = s.Interval.isRange(t); + return !n && o ? b(i) : n && !o ? g(i) : t + } + + function y(e) { + return s.Interval.isRange(e) ? "1" : e + } + + function w(e) { + const t = s.Interval.parse(e), + i = P(t.kind()), + r = t.multiplier(); + return t.isValid() && r <= i + } + + function P(e) { + const t = u[e]; + return Number.isNaN(t) ? 1 : t + } + + function C(e) { + return P(s.Interval.kind(e)) + } + + function x(e) { + const t = T(n.getJSON(e, [])); + return Object(a.uniq)(t.filter(w).map(_)) + } + + function T(e) { + return Array.isArray(e) ? e : Object.keys(e).map(s.Interval.normalize).filter(l.notNull) + } + + function I(...e) { + let t = [].concat(...e); + return t = Object(a.uniq)(t.filter(w).map(_)), M(t) + } + + function M(e) { + return e.sort(L) + } + + function O(e) { + const t = s.Interval.parse(e), + i = t.multiplier() || 1; + return t.isMinuteHours() ? [s.SpecialResolutionKind.Hours, i / 60] : [t.kind(), i] + } + + function L(e, t) { + const [i, s] = O(e), [r, n] = O(t); + return i !== r ? d[i] - d[r] : s - n + } + + function A() { + return [] + } + + function E(e) { + const { + multiplier: t, + shortKind: i + } = k(e); + return `${t}${i}` + } + + function k(e, t) { + const i = s.Interval.parse(e); + let r = i.multiplier(), + n = i.kind(); + if (!i.isValid()) { + if (t) return null; + throw new TypeError("Can't translate invalid interval") + } + return i.isMinuteHours() && (r = Math.floor(r / 60), + n = s.SpecialResolutionKind.Hours), { + multiplier: r.toString(), + shortKind: D(n), + hint: `${r} ${D(n, r)}`, + mayOmitMultiplier: i.isDWM() && 1 === r, + mayOmitShortKind: i.isMinutes() && !i.isMinuteHours() + } + } + + function D(e, t) { + if (!t) return p[e]; + switch (e) { + case s.ResolutionKind.Ticks: + return window.t("tick", { + plural: "ticks", + count: t + }); + case s.ResolutionKind.Days: + return window.t("day", { + plural: "days", + count: t + }); + case s.ResolutionKind.Weeks: + return window.t("week", { + plural: "weeks", + count: t + }); + case s.ResolutionKind.Months: + return window.t("month", { + plural: "months", + count: t + }); + case s.ResolutionKind.Seconds: + return window.t("second", { + plural: "seconds", + count: t + }); + case s.ResolutionKind.Minutes: + return window.t("minute", { + plural: "minutes", + count: t + }); + case s.SpecialResolutionKind.Hours: + return window.t("hour", { + plural: "hours", + count: t + }); + case s.ResolutionKind.Range: + return window.t("range", { + plural: "ranges", + count: t + }); + default: + return e + } + } + + function V() { + return h.a.enabled("seconds_resolution") + } + + function B() { + return h.a.enabled("tick_resolution") + } + }, + "pQ+n": function(e, t, i) { + "use strict"; + + function s(e, t) { + const i = new Set, + s = t => { + e.children(t, !1).forEach(e => { + i.has(e) || (i.add(e), s(e)) + }) + }; + return t.forEach(s), t.filter(e => !i.has(e)).map(t => function e(t, i) { + let s = []; + const r = t.children(i, !1); + for (let i = 0; i < r.length; i++) s = s.concat(e(t, r[i])); + return s.push(i), s + }(e, t)).reduce((e, t) => e.concat(t), []) + } + i.d(t, "a", (function() { + return s + })) + }, + pZDF: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "getStudyInputsInfo", (function() { + return r + })); + var s = i("YFKU"); + + function r(e) { + return void 0 === e.inputs ? [] : e.inputs.map(e => ({ + ...e, + id: e.id, + localizedName: void 0 !== e.name ? Object(s.t)(e.name, { + context: "input" + }) : "" + })) + } + }, + pvsv: function(e, t, i) { + "use strict"; + + function s(e, t) { + Promise.all([i.e("react"), i.e(1), i.e(3), i.e("moment"), i.e(81), i.e(0), i.e(2), i.e( + "symbol-info-dialog-impl")]).then(i.t.bind(null, "1Z/g", 7)).then(i => { + i.showSymbolInfoDialog(e, t) + }) + } + i.r(t), i.d(t, "showSymbolInfoDialog", (function() { + return s + })) + }, + qE4g: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("hbEN"), + r = i("aO4+"), + n = i("f6yo"), + o = i("HGP3"), + a = i("Eyy1"), + l = i("YFKU"), + c = i("Kxc7"), + h = i("oV8k"), + u = i("VdBB"), + d = i("9uLv"), + p = i("Tmoa"), + _ = i("//lZ"), + m = i("gAom"), + f = i("ikwP"), + g = i("l7y7"), + b = i("zDbI"), + v = i("u+0B"); + i("Oy0l"); + const S = c.enabled("adaptive_logo"), + y = c.enabled("small_no_display"), + w = c.enabled("38914"), + P = "Ch{0}ar{1}t{2}by{3}{4}".format("", "", " ", " ", "TradingView"), + C = "po{0}wer{1}ed{2}by{3}{4}".format("", "", " ", " ", "TradingView"), + x = "by{3}{4}".format("", "", " ", " ", "TradingView"), + T = w ? x : C, + I = navigator.userAgent.toLowerCase().indexOf("chrome") > -1 && -1 === navigator.userAgent + .toLowerCase().indexOf("edge"), + M = window.urlParams || {}; + window.initData; + M.no_referral_id && enable(M.referral_id || "", "aggressive"); + Object(l.t)("By TradingView"), Object(l.t)("{symbol} financials by TradingView"), Object(l.t)( + "More features on tradingview.com"), Object(l.t)("powered by"); + const O = Object(l.t)(P), + L = Object(l.t)(T); + + function A(e) { + return "px EuclidCircular" === e ? .1 : 0 + } + class E extends h.a { + constructor(e, t, i, r) { + super(e, t), this._canvasWidth = 0, this._paneHeight = 0, this._left = 13, this + ._bottom = 16, this._layout = "site_branding", this._needToShow = !0, + this._showBranding = !1, this._customLogoSrc = "", this._customLogoLink = + "", this._cubicBezier = new d.a(.4, .01, .22, 1), this._openAnimation = + null, this._closeAnimation = null, this._powBy = null, this._custom = null, + this._mainSeries = this._model.mainSeries(), this._showAllowance = i, this + ._showForPro = Boolean(r), this._checkLayout(), "widget_custom_branding" !== + this._layout && "fundamental_custom_branding" !== this._layout || (this + ._left = 8, this._bottom = 5); + const n = () => { + this._needToShow ? this._showBranding = !0 : this._showBranding = !1 + }; + this._resizeHandlerDelayed = Object(s.default)(n, 200), n(), window + .addEventListener("resize", this._resizeHandlerDelayed), this + ._monitorCanvas = Object(f.createDisconnectedBoundCanvas)(document, new f + .Size(0, 0)), this._monitorCanvas.subscribeCanvasConfigured(() => { + this._init() + }), this._model.isSnapshot() ? this._init() : (this._mainSeries.dataEvents() + .symbolResolved().subscribe(this, this._init), null !== this._mainSeries + .symbolInfo() && this._init()), this._renderer = { + draw: this.draw.bind(this), + hitTest: this.hitTest.bind(this) + } + } + destroy() { + window.removeEventListener("resize", this._resizeHandlerDelayed), this + ._mainSeries.dataEvents().symbolResolved().unsubscribeAll(this), this + ._powBy && this._powBy.destroy() + } + paneViews(e) { + if (window.TradingView.printing) return []; + if (!this._showAllowance()) return []; + if ("site_branding" === this._layout && !this._showForPro && window.user && + window.user.is_pro) return []; + const t = c.enabled("move_logo_to_main_pane"); + return t && e.isMainPane() || !t && e.isLast() || e.isMaximized() ? [{ + renderer: this.renderer.bind(this) + }] : [] + } + labelPaneViews(e) { + return [] + } + priceAxisViews(e, t) { + return [] + } + updateAllViews() {} + updateViewsForPane(e) {} + priceScale() { + return null + } + renderer(e, t) { + return this._paneHeight = e, this._canvasWidth = t, this._renderer + } + hasContextMenu() { + return !1 + } + onClickOutside() { + this._hasAnimation() && this._startCloseAnimation() + } + hitTest(e) { + return !this._showBranding || c.enabled("logo_without_link") ? null : this + ._powBy && "widget_custom_no_powered_branding" !== this._layout && + "fundamental_custom_no_powered_branding" !== this._layout && (this._powBy + .hitTest(e) || this._custom && this._custom.hitTest(e)) ? new u + .HitTestResult(u.HitTestResult.CUSTOM, { + hideCrosshairLinesOnHover: !0, + clickHandler: () => { + this._openLink() + }, + tapHandler: () => { + this._hasAnimation() ? this + ._toggleOpenAnimatedOrOpenLink() : this._openLink() + }, + mouseEnterHandler: () => { + this._hasAnimation() && this._startOpenAnimation() + }, + mouseLeaveHandler: () => { + this._hasAnimation() && this._startCloseAnimation() + } + }) : null + } + tvUrl() { + let e = new URL("https://www.tradingview.com/"); + if (this._customLogoLink) return this._customLogoLink; + if ("library_branding" === this._layout || "library_custom_branding" === this + ._layout) { + let t; + switch (!0) { + case c.enabled("charting_library"): + t = "library"; + break; + case c.enabled("trading_terminal"): + t = "trading-terminal" + } + return e.searchParams.append("utm_source", window.location.origin), e + .searchParams.append("utm_medium", "library"), t && e.searchParams + .append("utm_campaign", t), e.toString() + } + return e.toString() + } + draw(e, t) { + if (!this._showBranding) return; + let i = 0; + M.utm = !0, Object(f.drawScaled)(e, t.pixelRatio, () => { + this._powBy && this._powBy.show && (i = this._powBy.height, + e.save(), e.translate(this._left, this._paneHeight - this + ._bottom - i), this._powBy.draw(e, t, this + ._canvasWidth), e.restore()), this._custom && this + ._custom + .show && (e.save(), e.translate(this._left, this._paneHeight - + this._bottom - i - this._custom.height), this._custom + .draw(e, t), e.restore()) + }) + } + _init() { + const e = this._mainSeries.symbolInfo(); + this._powBy && this._powBy.destroy(), this._powBy = new F(this._layout, (null == + e ? void 0 : e.name) || "", this._model, () => this._model + .fullUpdate()), this._custom = new W(this._layout, this._customLogoSrc, + () => this._model.fullUpdate()), this._openAnimation = null, this + ._closeAnimation = null + } + _checkLayout() { + if (c.enabled("widget")) 0; + else if (c.enabled("charting_library") || c.enabled("trading_terminal")) { + const e = JSON.parse(M.logo) || {}; + e.image ? (this._customLogoSrc = e.image, this._customLogoLink = e.link, + this._needToShow = c.enabled("widget_logo"), c.enabled( + "link_to_tradingview") ? this._layout = + "library_custom_branding" : this._layout = + "library_custom_no_powered_branding") : (this._layout = + "library_branding", this._needToShow = c.enabled("widget_logo")) + } else this._layout = "site_branding" + } + _startOpenAnimation() { + null === this._openAnimation && (null !== this._closeAnimation && (this + ._closeAnimation.stop(), this._closeAnimation = null), this + ._openAnimation = Object(_.doAnimate)({ + from: this._currentStateForAnimation(), + to: this._openedStateForAnimation(), + duration: 200, + easing: this._cubicBezier.easingFunc, + onStep: this._animatedDrawStep.bind(this) + })) + } + _startCloseAnimation() { + null === this._closeAnimation && (null !== this._openAnimation && (this + ._openAnimation.stop(), this._openAnimation = null), this + ._closeAnimation = Object(_.doAnimate)({ + from: this._currentStateForAnimation(), + to: this._closedStateForAnimation(), + duration: 200, + easing: this._cubicBezier.easingFunc, + onStep: this._animatedDrawStep.bind(this) + })) + } + _currentStateForAnimation() { + return Object(a.ensureNotNull)(this._powBy).width + } + _closedStateForAnimation() { + return Object(a.ensureNotNull)(this._powBy).minimizedAnimationWidth() + } + _openedStateForAnimation() { + return Object(a.ensureNotNull)(this._powBy).maximizedAnimationWidth() + } + _animatedDrawStep(e, t) { + Object(a.ensureNotNull)(this._powBy).animatedDrawStep(e, t), this._model + .lightUpdate() + } + _hasAnimation() { + return null !== this._powBy && this._powBy.hasAnimation() + } + _openLink() { + if ("site_branding" === this._layout) return !1; + c.enabled("widget"); + return Object(a.ensureNotNull)(window.open(this.tvUrl(), "_blank")).opener = + null, !0 + } + _toggleOpenAnimatedOrOpenLink() { + null !== this._openAnimation && this._openAnimation.completed() ? this + ._openLink() || this._startCloseAnimation() : this._startOpenAnimation() + } + } + + function k(e) { + return !S || e > 500 + } + const D = { + customBrandingTradingViewText: o.colorsPalette["color-brand"], + customBrandingText: o.colorsPalette["color-cold-gray-850"], + background: o.colorsPalette["color-cold-gray-900"], + shadow: Object(p.generateColor)(o.colorsPalette["color-white"], 91), + text: o.colorsPalette["color-white"], + staticTextBackground: Object(p.generateColor)(o.colorsPalette["color-cold-gray-800"], + 20), + logo: o.colorsPalette["color-white"] + }, + V = { + customBrandingTradingViewText: o.colorsPalette["color-brand"], + customBrandingText: o.colorsPalette["color-cold-gray-850"], + background: o.colorsPalette["color-white"], + shadow: Object(p.generateColor)(o.colorsPalette["color-black"], 91), + text: o.colorsPalette["color-cold-gray-900"], + staticTextBackground: Object(p.generateColor)(o.colorsPalette["color-white"], 20), + logo: o.colorsPalette["color-cold-gray-900"] + }; + const B = {}; + + function R(e, t) { + const i = B[e]; + if (void 0 !== i) return i.image || null; + const s = {}; + return B[e] = s, + function(e) { + return new Promise(t => { + const i = g.replace(/fill="#[\da-f]{6}"/i, `fill="${e}"`), + s = new Image; + s.onload = () => { + s.onload = null, t(s) + }, s.src = URL.createObjectURL(new Blob([i], { + type: "image/svg+xml" + })) + }) + }(e).then(e => { + s.image = e, t() + }), null + } + + function N(e) { + const { + a: t, + d: i, + e: s, + f: n + } = e; + return new r.Point(s / t, n / i) + } + class j { + constructor() { + this._originPoint = null + } + hitTest(e) { + const t = this._getHitTestBox(); + if (t) return Object(n.pointInBox)(e, t) + } + _getHitTestBox() { + const e = this._originPoint; + if (e) { + const { + x: t, + y: i + } = e; + return Object(r.box)(e, new r.Point(t + this.width, i + this.height)) + } + } + } + class F extends j { + constructor(e, t, i, s) { + if (super(), this.show = !0, this.borderRadius = 0, this._needDisplayImage = !1, + this._imageWidth = 22, this._imageHeight = 11, this._animatedWidth = 32, this + ._font = "px " + b.CHART_FONT_FAMILY, this._txt = "TradingView", this + ._textWidth = 0, this._maximizedAnimationTextWidth = 0, this._textWidthCache = + new v.TextWidthCache, this._pixelRatio = 1, this._model = i, this._layout = e, + this._symbol = t, this.showAnimatedBranding = c.enabled("show_animated_logo") || + "widget_branding" === this._layout, this._fontSize = this.showAnimatedBranding ? + 11 : 14, this.showAnimatedBranding || "widget_custom_branding" !== this + ._layout && "fundamental_custom_branding" !== this._layout || (this._fontSize = + 12), this.width = 32, this.height = this._fontSize + 2, this + ._onReadyCallback = s, this._init(), document.fonts && document.fonts.check && + document.fonts.load) { + document.fonts.check(this._fontSize + "px EuclidCircular") ? this._font = + "px EuclidCircular" : document.fonts.load(this._fontSize + + "px EuclidCircular", this._txt).then(() => { + this._font = "px EuclidCircular", this._recalculateMetrics() + }) + } + this._recalculateMetrics() + } + destroy() { + this._model.properties().paneProperties.background.unsubscribeAll(this), this._model + .onChartThemeLoaded().unsubscribeAll(this) + } + hasAnimation() { + return this.showAnimatedBranding + } + minimizedAnimationWidth() { + return 32 + } + maximizedAnimationWidth() { + return this._maximizedAnimationTextWidth + 32 - 3 + } + animatedDrawStep(e, t) { + this._animatedWidth = t + } + draw(e, t, i) { + t.pixelRatio !== this._pixelRatio && (this._textWidthCache.reset(), this + ._pixelRatio = t.pixelRatio); + const s = this._colors; + if (this.showAnimatedBranding) this._needDisplayImage && null !== this + ._getLogoImage(s.logo) && (e.save(), e.translate(-Math.ceil((32 - this + ._imageWidth) / 2), Math.floor((32 - this._imageHeight) / 2)), this + ._originPoint = N(e.getTransform()), this.borderRadius = 16, this + ._drawFillRectWithRoundedCorner(e, -.5, 0, this._animatedWidth, 32, this + .borderRadius), this._drawLogoImage(e, Math.round((32 - this + ._imageWidth) / 2), Math.round((32 - this._imageHeight) / 2) + 0), this + ._animatedWidth > 32 && (e.translate(Math.round(32), Math.round(this + ._fontSize * A(this._font))), + this._drawFillTextCropWidth(e, this._animatedWidth - 32)), e.restore(), + this.width = this._animatedWidth); + else if ("widget_custom_branding" === this._layout || + "fundamental_custom_branding" === this._layout) { + e.font = this._fontSize + this._font; + const t = e.measureText(this._txt).width + 2; + this.width = t + e.measureText("TradingView").width + 2, this._originPoint = N(e + .getTransform()), e.save(), e.globalAlpha = .7, e.fillStyle = this + ._colors.customBrandingText, e.fillText(this._txt, 0, 12), e.fillStyle = + this._colors.customBrandingTradingViewText, e.fillText("TradingView", t, + 12), e.restore() + } else if (function(e) { + return !y || e > 480 + }(i)) + if (this._needDisplayImage && null !== this._getLogoImage(s.logo)) { + e.save(), e.translate(-Math.ceil((32 - this._imageWidth) / 2), Math.floor(( + 32 - this._imageHeight) / 2)), this._originPoint = N(e + .getTransform()), this.borderRadius = 16, this._drawBgCircle(e), e + .drawImage(Object(a.ensureNotNull)(this._getLogoImage(s.logo)), Math + .round((32 - this._imageWidth) / 2), Math.round((32 - this + ._imageHeight) / 2) + 0); + const t = k(i); + t && (e.translate(37, Math.round(this._fontSize * A(this._font))), this + ._drawTextStroke(e), this._drawTextFill(e)), e.restore(), this + .width = 32, t && (this.width += this._maximizedAnimationTextWidth) + } else { + const t = k(i); + t && (e.save(), e.translate(I ? -.5 : 0, -.5), this._drawTextStroke(e), this + ._drawTextFill(e), e.restore()), t && (this.width = this + ._maximizedAnimationTextWidth) + } + else this.width = 0 + } + _init() { + this._checkLayout(), this.show && (this.height = this._needDisplayImage ? 32 : this + ._fontSize + 2, this._updateColors(), this._model.properties() + .paneProperties.background.subscribe(this, this._updateColors), this._model + .onChartThemeLoaded().subscribe(this, this._updateColors)) + } + _recalculateMetrics() { + const e = Object(f.createDisconnectedBoundCanvas)(document, new f.Size(0, 0)), + t = Object(f.getPretransformedContext2D)(e, !0); + t.font = this._fontSize + this._font, this._textWidth = Math.ceil(t.measureText(this + ._txt).width) + 2; + let i = this._textWidth + 8; + i % 2 == 0 && (i += 1), this._maximizedAnimationTextWidth = i, this._textWidthCache + .reset() + } + _updateColors() { + this._colors = this._model.isDark() ? D : V + } + _getLogoImage(e) { + return R(e, this._onReadyCallback) + } + _checkLayout() { + switch (this._layout) { + case "widget_branding": + case "widget_referral_branding": + case "widget_custom_branding": + case "fundamental_branding": + case "fundamental_custom_branding": + case "library_custom_branding": + case "library_branding": + case "site_branding": + this.show = !0; + break; + case "widget_custom_no_powered_branding": + case "fundamental_custom_no_powered_branding": + case "library_custom_no_powered_branding": + this.show = !1 + } + switch (this._layout) { + case "library_branding": + this._needDisplayImage = !0, this._txt = O; + break; + case "library_custom_branding": + this._txt = L + } + } + _drawTextStroke(e) { + e.save(), e.textBaseline = "middle", e.textAlign = "start", e.font = this + ._fontSize + this._font, e.strokeStyle = this._colors.staticTextBackground, e + .lineWidth = 4, e.lineJoin = "round", e.strokeText(this._txt, 0, 16 + this + ._textWidthCache.yMidCorrection(e, this._txt)), e.restore() + } + _drawTextFill(e) { + e.save(), e.textBaseline = "middle", e.textAlign = "start", e.font = this + ._fontSize + this._font, e.fillStyle = this._colors.text, + e.fillText(this._txt, 0, 16 + this._textWidthCache.yMidCorrection(e, this + ._txt)), e.restore() + } + _drawFillTextCropWidth(e, t) { + e.save(), e.beginPath(), e.rect(0, 0, t, this.height), e.clip(), this._drawTextFill( + e), e.restore() + } + _drawBgCircle(e) { + const t = this.borderRadius, + i = 2 * Math.PI; + e.save(), e.beginPath(), e.fillStyle = this._colors.shadow, e.arc(t, t, t + 1, 0, + i), e.fill(), e.closePath(), e.restore(), e.save(), e.beginPath(), e + .fillStyle = + this._colors.background, e.arc(t, t, t, 0, i, !1), e.fill(), e.closePath(), e + .restore() + } + _drawFillRectWithRoundedCorner(e, t, i, s, r, n) { + e.save(), Object(m.drawRoundRect)(e, t - 1, i - 1, s + 2, r + 2, n), e.fillStyle = + this._colors.shadow, e.fill(), e.closePath(), e.restore(), e.save(), Object(m + .drawRoundRect)(e, t, i, s, r, n), e.fillStyle = this._colors.background, e + .fill(), e.closePath(), e.restore() + } + _drawLogoImage(e, t, i) { + e.drawImage(Object(a.ensureNotNull)(this._getLogoImage(this._colors.logo)), t, i) + } + } + class W extends j { + constructor(e, t, i) { + super(), this.show = !1, this.width = 0, this.height = 0, this._ready = !1, this + ._layout = e, this._src = t, this._onReadyCallback = i, this._checkLayout(); + const s = new Image; + this._img = s, this.show && (s.addEventListener("load", () => { + this.width = Math.round(s.width), this.height = Math.round(s + .height), this._ready = !0, this._onReadyCallback && this + ._onReadyCallback() + }), s.crossOrigin = "anonymous", s.src = this._src) + } + draw(e, t) { + this._ready && (e.drawImage(this._img, -.5, -.5, this.width, this.height), this + ._originPoint = N(e.getTransform())) + } + _checkLayout() { + switch (this._layout) { + case "widget_custom_branding": + case "widget_custom_no_powered_branding": + case "fundamental_custom_branding": + case "fundamental_custom_no_powered_branding": + case "library_custom_branding": + case "library_custom_no_powered_branding": + this.show = !0; + break; + case "site_branding": + case "widget_branding": + case "widget_referral_branding": + case "fundamental_branding": + case "library_branding": + this.show = !1 + } + } + } + + function H(e, t) { + function i(t) { + const i = e.getAll(); + if (1 === i.length) return !0; + const s = i[0].hasModel() && i[0].model(); + return s && s.model() === t + } + e.addCustomSource("branding", (e, s) => new E(e, s, i.bind(null, s), t)) + } + i.d(t, "addBrandingSource", (function() { + return H + })) + }, + qHEz: function(e, t, i) { + "use strict"; + + function s(e, t) { + const i = e.files && e.files.length > 0; + if (!i && t && t.eventPhase > 0) return r(t, e), Promise.resolve(); + if (!i) { + let t = !1; + const i = i => { + i.stopImmediatePropagation(), r(i, e), t = !0 + }; + try { + document.addEventListener("copy", i, !0), document.execCommand("copy") + } finally { + document.removeEventListener("copy", i, !0) + } + if (t) return Promise.resolve() + } + return async function(e) { + if (!navigator.clipboard || !navigator.clipboard.write || !window.ClipboardItem) + throw new DOMException("ClipboardApi is not supported", + "NotSupportedError"); + const t = {}; + for (const i of e.files || []) t[i.type] = i; + e.text && (t["text/plain"] = e.text); + e.html && (t["text/html"] = e.html); + return navigator.clipboard.write([new window.ClipboardItem(t)]) + }(e) + } + + function r(e, t) { + e.preventDefault(); + const i = e.clipboardData; + t.text && i.setData("text/plain", t.text), t.html && i.setData("text/html", t.html) + } + async function n(e, t) { + if ("text/plain" === t && !navigator.clipboard.write) { + const t = await e; + return navigator.clipboard.writeText(await t.text()) + } + if (!navigator.clipboard || !navigator.clipboard.write || !window.ClipboardItem) + throw new DOMException("ClipboardApi is not supported", "NotSupportedError"); + let i = null; + try { + i = new window.ClipboardItem({ + [t]: e + }) + } catch (s) { + i = new window.ClipboardItem({ + [t]: await e + }) + } + if (i) return navigator.clipboard.write([i]); + throw new Error("ClipboardApi is not supported") + } + i.d(t, "a", (function() { + return s + })), i.d(t, "b", (function() { + return n + })) + }, + qJq3: function(e, t, i) { + "use strict"; + (function(e, s, r) { + TradingView.DEFAULT_BAR_COUNT = 300, TradingView.TIME_PLOT = 0, TradingView.OPEN_PLOT = + 1, TradingView.HIGH_PLOT = 2, TradingView.LOW_PLOT = 3, TradingView.CLOSE_PLOT = 4, + TradingView.ADT_PLOT = 6, TradingView.STYLE_PLOT = 7; + var n = i("Eyy1").assert, + o = i("Eyy1").ensureNotNull, + a = i("lUQk").SeriesBase, + l = i("x0JF"), + c = l.SeriesAreaPaneView, + h = l.SeriesLinePaneView, + u = l.SeriesHollowCandlesPaneView, + d = l.SeriesCandlesPaneView, + p = l.SeriesBarsPaneView, + _ = l.SeriesHeikenAshiPaneView, + m = l.SeriesBaselinePaneView, + f = i("9Jkk").SeriesHiLoPaneView, + g = i("biIa").SeriesWaterlinePaneView, + b = i("Kxc7"), + v = i("ZJKN").BarsRange, + S = i("38az").SeriesBarColorer, + y = i("XPit").SeriesData, + w = i("k9/m"), + P = w.PlotRowSearchMode, + C = w.mergeMinMax, + x = i("okVO").SyncModel, + T = i("JWMC").trackEvent, + I = i("txPx").getLogger("Chart.Series"), + M = i("dfhE"), + O = i("n5al"), + L = i("pPtI"), + A = L.getServerInterval, + E = L.getResolutionByChartStyle, + k = i("LxhU").Interval, + D = i("z+Sa").SeriesHorizontalBaseLinePaneView, + V = i("Z8aO").SeriesPriceLinePaneView, + B = i("FIi8").deepExtend, + R = i("5fI3").encodeExtendedSymbolOrGetSimpleSymbolString, + N = i("FQhm"), + j = i("YWnQ").permissionDenied, + F = !b.enabled("hide_series_legend_item"), + W = i("uDHo").TIMEFRAMETYPE, + H = i("H0vP").InvalidationMask, + U = i("n5al").isSingleValueBasedStyle; + class z extends a { + constructor(t, s, r, n) { + var o = i("OK+B"); + s.removeProperty("currencyId"), super(t, s, r, n), this + ._symbolIntervalChanged = new e, this._intervalChanged = new e, this + .requestingIntradayWhenNotSupported = new e, this + .requestingResolutionWhenNotSupported = new e, this + ._onInReplayStateChanged = new e, this + ._replayExitedDueUnsupportedInterval = new e, this + ._replayExitedDueUnavailableForUserInterval = new e, this + ._onTimeFrameApplied = new e, this.m_model = t, this._chartApi = t + ._chartApi, this.m_data = null, this.createPaneView(), this._syncModel = + null, this._replaySubscriber = null, this + ._isReplayResolutionAvailableForUser = null, this._haStyle = { + studyId: O.chartStyleStudyId(z.STYLE_HEIKEN_ASHI, !0) + }, this._renkoStyle = { + studyId: O.chartStyleStudyId(z.STYLE_RENKO, !0) + }, this._pbStyle = { + studyId: O.chartStyleStudyId(z.STYLE_PB, !0) + }, this._kagiStyle = { + studyId: O.chartStyleStudyId(z.STYLE_KAGI, !0) + }, this._pnfStyle = { + studyId: O.chartStyleStudyId(z.STYLE_PNF, !0) + }, this._rangeStyle = { + studyId: O.chartStyleStudyId(z.STYLE_RANGE, !0) + }, this._properties.addExclusion && (this._properties.addExclusion( + "visible"), this._properties.addExclusion("currencyId")), this + ._predictBars = 0, this._futureBarsPaneView = null, this._properties + .showInDataWindow.listeners().subscribe(t, o.prototype.fullUpdate), this + .properties().minTick.listeners().subscribe(this, z.prototype + ._recreateFormatter); + var a = this; + this.properties().minTick.listeners().subscribe(null, (function() { + a.m_model.fullUpdate() + })), this._priceLineView = null, this._baseHorizontalLineView = new D( + this), this._gotoDateResultCleared = !1, this._gotoDateView = null, + this.bindStyleChange(), this.bindJapChartsInputs(), this + ._createIsDWMProperty(), this._symbolIntervalChanged.subscribe(this, + this.checkInterval), this.properties().showCountdown.listeners() + .subscribe(this, z.prototype._onChangeShowCountdown), this + ._onChangeShowCountdown(this.properties().showCountdown), this + ._recreatePriceFormattingDependencies(), this.properties().lineStyle + .priceSource.listeners().subscribe(this, this._updateBarFunction), this + .properties().areaStyle.priceSource.listeners().subscribe(this, this + ._updateBarFunction), this.properties().baselineStyle.priceSource + .listeners().subscribe(this, this._updateBarFunction), this + ._updateBarFunction() + } + isLoading() { + return this._loading + } + isSymbolInvalid() { + return this._status === z.STATUS_INVALID_SYMBOL + } + styleStudyInfos() { + return { + haStyle: this._haStyle, + renkoStyle: this._renkoStyle, + pbStyle: this._pbStyle, + kagiStyle: this._kagiStyle, + pnfStyle: this._pnfStyle, + rangeStyle: this._rangeStyle + } + } + styleStudyInfo(e) { + return this.styleStudyInfos()[e] + } + priceLineColor(e) { + return this.properties().priceLineColor.value() || e + } + serverTimeOffset() { + return this._chartApi.serverTimeOffset() + } + _onChangeShowCountdown(e) { + var t = this; + e.value() ? this._countdownUpdateTimer = this.m_model.setInterval(( + function() { + t._priceAxisView.updateCountdown() + }), 500) : (this.m_model.clearInterval(this._countdownUpdateTimer), + delete this._countdownUpdateTimer) + } + lastValueData(e, t, i) { + var s = { + noData: !0 + }; + if (this.m_model.timeScale().isEmpty() || this.priceScale().isEmpty() || + this.data().isEmpty()) return s; + var r, n, o = this.m_model.timeScale().visibleBarsStrictRange(); + if (null === o) return s; + if (t) { + var a = this.data().bars().last(); + if (null === a) return s; + r = a.value, n = a.index + } else { + var l = this.data().bars().search(o.lastBar(), P.NearestLeft); + if (null === l) return s; + r = this.data().bars().valueAt(l.index), n = l.index + } + var c = { + noData: !1 + }, + h = void 0 !== e ? r[e] : this._barFunction(r); + i && (c.price = h); + var u = this.firstValue(); + c.text = this.priceScale().formatPrice(h, u), c.formattedPriceAbsolute = + this.priceScale().formatPriceAbsolute(h), c.formattedPricePercentage = + this.priceScale().formatPricePercentage(h, u, !0); + var d = this.barColorer().barStyle(n, !1); + return c.color = d.barColor, c.floatCoordinate = this.priceScale() + .priceToCoordinate(h, u), c.coordinate = c.floatCoordinate, c.index = n, + c + } + _createIsDWMProperty() { + this._isDWMProperty = new s(this.isDWM()), this._onRestarted.subscribe(this, + (function() { + this._isDWMProperty.setValue(this.isDWM()) + })) + } + isDWMProperty() { + return this._isDWMProperty + } + model() { + return this.m_model + } + fixLastBar(e) { + 0 + } + clearData() { + n(null === this.m_data, "Cannot clear loaded data"), this._seriesSource + .clearData() + } + data() { + return this.m_data || this._seriesSource.data() + } + isPulse() { + return this._symbolInfo && this._symbolInfo.resolutions.length > 0 + } + onSymbolIntervalChanged() { + return this._symbolIntervalChanged + } + onIntervalChanged() { + return this._intervalChanged + } + status() { + return this._status + } + createPaneView() { + this._paneView = null, this._projectionBarsPaneView = null, this + ._waterlineView = null, + this._priceLineView = this.hasClosePrice() ? new V(this) : null; + var e = this._properties.style.value(); + switch (e) { + case z.STYLE_BARS: + this._paneView = new p(this, this.m_model); + break; + case z.STYLE_CANDLES: + this._paneView = new d(this, this.m_model); + break; + case z.STYLE_LINE: + this._paneView = new h(this, this.m_model); + break; + case z.STYLE_AREA: + this._paneView = new c(this, this.m_model); + break; + case z.STYLE_HEIKEN_ASHI: + this._paneView = new _(this, this.m_model); + break; + case z.STYLE_HOLLOW_CANDLES: + this._paneView = new u(this, this.m_model); + break; + case z.STYLE_BASELINE: + this._paneView = new m(this, this.m_model), this._waterlineView = + new g(this); + break; + case z.STYLE_HILO: + this._paneView = new f(this, this.m_model) + } + if (null === this._paneView) throw Error("Unknown chart style assigned: " + + e) + } + _clearStylePlot(e, t) { + if (0 !== e.size()) { + var i = t || o(e.firstIndex()), + s = o(e.lastIndex()) + 1; + e.range(i, s).each((function(e, t) { + t[TradingView.STYLE_PLOT] = null + })) + } + } + invalidateBarStylesCache(e) { + I.logDebug("Invalidate style cache starting from " + e), this + ._clearStylePlot(this.bars(), e), this._clearStylePlot(this.nsBars()) + } + invalidateBarColorerCache() { + delete this._barColorerCache, this.invalidateBarStylesCache() + } + barColorer() { + if (this._barColorerCache) return this._barColorerCache; + for (var e = null, t = this.m_model.dataSources().length - 1; t >= 0; t--) { + var i = this.m_model.dataSources()[t]; + if (i.metaInfo && TradingView.isInherited(i.constructor, TradingView + .Study) && i.hasBarColorer() && i.properties().visible + .value()) { + var s = i.barColorer(); + null === e ? e = s : e.pushBackBarColorer(s) + } + } + return null === e ? e = new S(this) : e.pushBackBarColorer(new S(this)), + this._barColorerCache = e, this._barColorerCache + } + properties() { + return this._properties + } + _barsState(e) { + var t = e.state(); + return t.data.forEach((function(e) { + e.value.splice(7, 1) + })), t + } + state(e) { + var t = this === this.m_model.mainSeries() ? "MainSeries" : TradingView + .className(this.constructor); + const i = this.obsoleteZOrder(); + var s = { + type: t, + id: this.id(), + state: this.properties().state(), + zorder: i, + haStyle: this._haStyle, + renkoStyle: this._renkoStyle, + pbStyle: this._pbStyle, + kagiStyle: this._kagiStyle, + pnfStyle: this._pnfStyle, + rangeStyle: this._rangeStyle + }; + return this._symbolInfo && this._symbolInfo.ticker && (s.state.symbol = this + ._symbolInfo.ticker), e && (s.bars = this._barsState(this.bars()), s + .nsBars = this._barsState(this.nsBars()), s.symbolInfo = this + ._symbolInfo, s.rtPrice = this.data().lastProjectionPrice), s + .boxSize = this.data().boxSize, s.reversalAmount = this.data() + .reversalAmount, s + } + restoreState(e, t) { + t && this._setStatus(z.STATUS_SNAPSHOT), this._properties.mergeAndFire(e + .state), this._properties.hasChild("esdBreaksStyle") && this + ._properties.removeProperty("esdBreaksStyle"), this._prevChartStyle = + this.properties().style.value(), this.createPaneView(), t && this + .restoreData(e.bars, e.nsBars, e.symbolInfo, e.rtPrice, e.boxSize, e + .reversalAmount) + } + hasStateForAlert() { + return !1 + } + stateForAlert() { + throw new Error("Not implemented") + } + idForAlert() { + return a.prototype.idForAlert.call(this) + } + restoreData(e, t, i, s, r, n) { + this._status = z.STATUS_SNAPSHOT, this.m_data = new y, this.m_data.m_bars + .restoreState(e), this.m_data.m_nsBars.restoreState(t), this + .updateSymbolInfo(i, !1), + this.m_data.lastProjectionPrice = s, this.m_data.boxSize = r, r || (this + .properties().style.value() === z.STYLE_PNF ? this.m_data.boxSize = + this.properties().pnfStyle.inputs.boxSize.value() : this + .properties().style.value() === z.STYLE_RENKO && (this.m_data + .boxSize = this.properties().renkoStyle.inputs.boxSize.value()) + ), this.m_data.reversalAmount = n, n || this.properties().style + .value() === z.STYLE_KAGI && (this.m_data.reversalAmount = this + .properties().kagiStyle.inputs.reversalAmount.value()), this + ._loading = !1 + } + seriesSource() { + return this._seriesSource + } + _onSymbolResolved(e) { + this._seriesErrorMessage = null, this.updateSymbolInfo(e, !1), this.m_model + .updateSource(this), this.m_model.realignLineTools(), TradingView + .onWidget() || (T("Symbol", e.listed_exchange, e.name), T("Symbol Type", + e.type, e.listed_exchange)); + var t = this.symbolInfo().minmov / this.symbolInfo().pricescale, + i = this.properties(); + i.style.value() === z.STYLE_RENKO && i.renkoStyle.inputs.boxSize.value() < + t ? i.renkoStyle.inputs.merge({ + boxSize: t + }) : i.style.value() === z.STYLE_PNF && i.pnfStyle.inputs.boxSize + .value() < t ? i.pnfStyle.inputs.merge({ + boxSize: t + }) : i.style.value() === z.STYLE_KAGI && i.kagiStyle.inputs + .reversalAmount.value() < t && i.kagiStyle.inputs.merge({ + reversalAmount: t + }) + } + _onSymbolError(e) { + this._setStatus(z.STATUS_INVALID_SYMBOL), this._loading = !1, this + ._properties.shortName.setValue(this._properties.symbol.value()), this + .m_model.clearAllStudies(), this.updateAllViews(), this.m_model + .updateSource(this), e !== j && this.m_model.resetTimeScale(), this + .m_model.realignLineTools() + } + _onSeriesTimeFrame(e, t, i, s, r) { + var n = this.m_model.timeScale(), + o = U(this.style()) ? e + .5 : e, + a = t; + if (void 0 === r) null !== i && i.type !== W.PeriodBack || (a += n + .defaultRightOffsetProperty().value()); + else if (r.applyDefaultRightMargin) a += n.defaultRightOffsetProperty() + .value(); + else if (r.percentRightMargin) { + var l = t - o + 1, + c = Math.max(0, Math.min(.99, r.percentRightMargin / 100)); + a += c * l / (1 - c) + } + this.m_model.setTimeViewport(o, a) + } + _onSeriesError(e) { + this._loading = !1; + var t = e.error; + if (e.ctx) { + var i = {}; + Object.entries(e.ctx).forEach((function(e, t) { + i[e] = t.toString() + })), t = t.format(i) + } + b.enabled("charting_library_debug_mode") && I.logNormal("Error reason: " + + t), this._seriesErrorMessage = t; + const s = "unknown_symbol" !== t ? z.STATUS_ERROR : b.enabled( + "no_bars_status") && this._symbolInfo ? z.STATUS_NO_BARS : z + .STATUS_INVALID_SYMBOL; + this._setStatus(s), this._seriesLoaded = !0, this._enablePriceRangeReady() + } + _onSeriesCompleted(e, t) { + if (this._setSymbolIntervalDelay) { + if (this._willSymbolIntervalCurrencyChanged()) return void I.logNormal( + "command comes during symbol/interval changing"); + I.logNormal( + "series_completed comes when symbol interval delay present but symbol/interval should not be changed" + ) + } + this._loading = !1, this._seriesErrorMessage = null; + var i = e; + switch ("pulsed" === i && (i = "delayed"), i) { + case "streaming": + this._setStatus(z.STATUS_READY); + break; + case "endofday": + this._setStatus(z.STATUS_EOD); + break; + case "delayed": + this._setStatus(z.STATUS_DELAYED); + break; + case "pulsed": + this._setStatus(z.STATUS_PULSE); + break; + case "replay": + this._setStatus(z.STATUS_REPLAY) + } + i.match(/delayed_streaming/) && this._setStatus(z.STATUS_DELAYED_STREAMING); + var s = this.m_model.paneForSource(this); + s.recalculatePriceScale(this.priceScale()); + var r = H.full(); + null !== this.m_model.appliedTimeFrame().value() && r + .lockVisibleTimeRangeOnResize(), this.m_model.invalidate(r), this + .model().recalcVisibleRangeStudies(!0), this.model() + .recalcStudyBasedLineTools(), !this.m_priceScale.isLockScale() || this + .model().timeScale().isEmpty() || this._seriesLoaded || (this.model() + .timeScale()._correctOffset(), this.model().timeScale() + .correctBarSpacing(), this.model().resetPriceScale(s, this + .priceScale())), this._seriesLoaded = !0, this + ._enablePriceRangeReady() + } + _onBarReceived(e) { + this.model().recalcVisibleRangeStudies(!0) + } + disconnect() { + this._seriesSource.stop(), this.m_symbol = void 0, this._predictBars = 0, + this._status = z.STATUS_OFFLINE + } + isStarted() { + return this._seriesSource.isStarted() + } + restart() { + if (this._status !== z.STATUS_SNAPSHOT) { + this._loading = !0, this._onRestarted.fire(), this._setStatus(z + .STATUS_RESOLVING), this.updateSymbolInfo(null, !0); + var e = this._properties.interval.value(); + this._checkIntervalWillChanged(e) && this._notifyIntervalChanged(e); + var t = null; + this._pendingTimeRange && (t = this._pendingTimeRange, delete this + ._pendingTimeRange), this._onBeforeModifySeries(this + .getSymbolString(), e), this._onTimeFrameApplied.fire(t), e = A( + e), this.m_data = null, this._seriesSource.modifySeries(this + ._getResolvingSymbolObject(), e, t), this._seriesSource + .isStarted() || this._seriesSource.start(), this.m_symbol = this + ._properties.symbol.value(), this._currency = this._properties + .currencyId.value(), this._unit = this._properties.unitId.value(), + this.m_interval = this._properties.interval.value() + } + } + hasDelayedSymbolIntervalChange() { + return !!this._setSymbolIntervalDelay + } + setSymbolIntervalCurrencyDelayed() { + this._willSymbolIntervalCurrencyChanged() && (this + ._setSymbolIntervalDelay && (I.logNormal( + "Clear timeout to change symbol/interval #" + this + ._setSymbolIntervalDelay), clearTimeout(this + ._setSymbolIntervalDelay)), this._setSymbolIntervalDelay = + setTimeout(function() { + const e = this._properties; + I.logNormal("Timeout #" + this._setSymbolIntervalDelay + + ' fired, new symbol will be "' + e.symbol.value() + + '"'), delete this._setSymbolIntervalDelay, this + ._setSymbolInterval(e.symbol.value(), e.interval + .value(), e.currencyId.value(), e.unitId.value()) + }.bind(this), 30), I.logNormal("Started timeout #" + this + ._setSymbolIntervalDelay + ' to change symbol/interval from "' + + this.m_symbol + '" to "' + this._properties.symbol.value() + '"' + )) + } + rerequestData() { + this._setSymbolInterval(this.m_symbol, this.m_interval, this._currency, this + ._unit, !0) + } + _notifyIntervalChanged(e) { + var t = { + timeframe: this._pendingTimeRange + }; + this._intervalChanged.fire(e, t), this._pendingTimeRange = t.timeframe + } + _setSymbolInterval(e, t, i, s, r) { + this.clearGotoDateResult(), k.isRange(t) && this._properties.rangeStyle + .inputs.range.setValue(k.parse(t).multiplier()); + var n = this._checkSymbolWillChanged(e), + o = this._checkIntervalWillChanged(t), + a = this._checkCurrencyWillChanged(i), + l = this._checkUnitWillChanged(s); + if (!(n || o || a || l || r)) return this.m_model.realignLineTools(), + void this.m_model.updateLineTools(); + if (this._syncModel = null, this.m_symbol = e, this.m_interval = t, this + ._currency = i, + this._unit = s, this._status !== z.STATUS_SNAPSHOT && (!this + ._seriesSource.isStarted() || n || a || l) && this.updateSymbolInfo( + null, !n && (a || l)), this.m_model.realignLineTools(), this + ._status !== z.STATUS_SNAPSHOT) { + this._loading = !0, this._setStatus(z.STATUS_RESOLVING), this + ._symbolIntervalChanged.fire(), o && this._notifyIntervalChanged( + this.m_interval), this._onRestarted.fire(), this + ._seriesLoaded = !1, this._lineStyleLastPriceCirclePaneView + .stopAnimation(); + var c = null; + this._pendingTimeRange && (c = this._pendingTimeRange, delete this + ._pendingTimeRange), this._onTimeFrameApplied.fire(c), this + ._onBeforeModifySeries(this.getSymbolString(), t), this.m_data = + null, this._seriesSource.modifySeries(this + ._getResolvingSymbolObject(), A(t), c, r), this._seriesSource + .isStarted() || (this._predictBars = 0, this._seriesSource.start()), + (n || a || l) && this.disablePriceRangeReady() + } + } + setDefaultTimeframe(e) { + this._pendingTimeRange = e + } + symbol() { + return this.properties().symbol.value() + } + bars() { + return this.data().m_bars + } + nsBars() { + return this.data().m_nsBars + } + hl2(e) { + return (this.high(e) + this.low(e)) / 2 + } + hlc3(e) { + return (this.high(e) + this.low(e) + this.close(e)) / 3 + } + ohlc4(e) { + return (this.open(e) + this.high(e) + this.low(e) + this.close(e)) / 4 + } + priceRange(e, t) { + if (!TradingView.isInteger(e)) return I.logDebug( + "Series.priceRange: incorrect startBar"), null; + if (!TradingView.isInteger(t)) return I.logDebug( + "Series.priceRange: incorrect endBar"), null; + if (this.data().isEmpty()) return null; + if (this.m_priceScale.isLockScale()) { + var i = this._model.mainSeriesScaleRatio(); + if (null !== i) { + var s = this.priceScale().internalHeight() / (this.model() + .timeScale().barSpacing() / i), + n = this.data().search(t, P.NearestLeft), + o = (n.value[TradingView.HIGH_PLOT] + n.value[TradingView + .LOW_PLOT]) / 2; + return new r(o - .5 * s, o + .5 * s) + } + } + var a = this.priceSource(); + if (null !== a) var l = this.data().bars().minMaxOnRangeCached(e, t, [{ + name: a, + offset: 0 + }]), + c = this.data().nsBars().minMaxOnRangeCached(e, t, [{ + name: a, + offset: 0 + }]); + else l = this.data().bars().minMaxOnRangeCached(e, t, [{ + name: "low", + offset: 0 + }, { + name: "high", + offset: 0 + }]), c = this.data().nsBars().minMaxOnRange(e, t, [{ + name: "low", + offset: 0 + }, { + name: "high", + offset: 0 + }]); + var h = null !== (l = C(l, c)) ? l.min === l.max ? new r(l.min - .5, l.max + + .5) : new r(l.min, l.max) : new r(-.5, .5); + return this.priceScale().isLog() ? new r(this.priceScale().priceToLogical(h + .minValue()), this.priceScale().priceToLogical(h.maxValue())) : h + } + nearestData(e, t) { + if (TradingView.isInteger(e)) { + var i = this.data().search(e, t); + return null !== i ? i : void 0 + } + I.logDebug("Series.nearestData: incorrect logicalPoint") + } + nearestIndex(e, t) { + var i = this.nearestData(e, t); + return i ? i.index : void 0 + } + paneViews() { + if (!this.properties().visible.value()) return null; + var e = [this._baseHorizontalLineView, this._paneView]; + return this._futureBarsPaneView && e.push(this._futureBarsPaneView), this + ._projectionBarsPaneView && e.push(this._projectionBarsPaneView), + null !== this._waterlineView && e.push(this._waterlineView), null !== + this._priceLineView && e.push(this._priceLineView), null !== this + ._gotoDateView && e.push(this._gotoDateView), e.push(...this + ._highLowAvgPaneViews), e + } + dataWindowView() { + return this._dataWindowView + } + legendView() { + return this._legendView + } + statusView() { + return F ? this._statusView : null + } + marketStatusModel() { + return this._marketStatusModel + } + dataUpdatedModeModel() { + return this._dataUpdatedModeModel + } + dataProblemModel() { + return this._dataProblemModel + } + purgeSymbolInfo() { + this._symbolInfo = null + } + updateSymbolInfo(e, t) { + if (this._prevSymbolInfo = t ? this._symbolInfo : null, this._symbolInfo = + e, e) { + this._properties.shortName.setValue(e.name); + var i = O.extractSymbolNameFromSymbolInfo(e, this.m_symbol); + i && this._properties.symbol.setValue(i), this._currency = O + .symbolCurrency(e), this._properties.currencyId.setValue(this + ._currency), this._unit = O.symbolUnit(e), this._properties + .unitId.setValue(this._unit), this._updateSessionIdProxyProperty(!0) + } + this._base = e ? e.pricescale / e.minmov : 100, this._pointValue = e && e + .pointvalue || 1, this._recreatePriceFormattingDependencies(), this + ._statusView.update(), this.priceScale().updateFormatter(); + var s = this._getSymbolForApi(); + this._quotesProvider.setQuotesSessionSymbol(s), this.checkInterval() + } + updateAllViews() { + this._paneView.update(), this._dataWindowView.update(), this._legendView + .update(), this._statusView.update(), this._highLowAvgPaneViews.forEach( + e => e.update()), this._labelPaneViews.forEach(e => e.update()), + this._priceAxisViews.forEach(e => e.update()), this._priceLineAxisViews + .forEach(e => e.update()), this._futureBarsPaneView && this + ._futureBarsPaneView.update(), this._projectionBarsPaneView && this + ._projectionBarsPaneView.update(), null !== this._waterlineView && this + ._waterlineView.update(), null !== this._priceLineView && this + ._priceLineView.update(), null !== this._gotoDateView && this + ._gotoDateView.update(), this._baseHorizontalLineView.update(); + var e = this._model.activeStrategySource().value(); + null !== e && e.updateAllViews(), this._lineStyleLastPriceCirclePaneView + .update() + } + requestMoreData(e) { + if ((this._status === z.STATUS_READY || this._status === z.STATUS_PULSE || + this._status === z.STATUS_DELAYED || this._status === z + .STATUS_DELAYED_STREAMING || this._status === z.STATUS_EOD || this + ._status === z.STATUS_REPLAY) && !this.m_model.timeScale() + .isEmpty()) { + var t = this.m_model.timeScale().visibleBarsStrictRange(); + if (null !== t && 0 !== this.bars().size()) { + var i = t.lastBar() - o(this.data().last()).index; + if (this._predictBars < i && (this._predictBars = i, this + ._seriesSource.requestMoreTickmarks(i)), !this._endOfData) { + var s = o(this.bars().firstIndex()), + r = e || s - t.firstBar(); + r <= 0 || (Number.isFinite(r) ? (this._endOfData = !0, this + ._loading = !0, this._seriesSource.requestMoreData( + r), this._setStatus(z.STATUS_LOADING)) : I + .logWarn("requestMoreData: invalid bar count: " + r + + ", visible bars: [" + t.firstBar() + ", " + t + .lastBar() + "], last index: " + o(this.data() + .last()).index + ", predicted bars: " + this + ._predictBars + ", required bars:" + e)) + } + } + } + } + bindStyleChange() { + var e = this; + Object.keys(z.STYLE_SHORT_NAMES).map((function(e) { + return z.STYLE_SHORT_NAMES[e] + "Style" + })).forEach((function(t) { + e._properties[t].listeners().subscribe(e, z.prototype + .invalidateBarStylesCache) + })) + } + bindJapChartsInputs() { + this._properties.style.listeners().subscribe(this, this + .onChartStyleChanged), this._properties.renkoStyle.inputs.boxSize + .listeners().subscribe(this, this.onInputChanged), + this._properties.renkoStyle.inputs.style.listeners().subscribe(this, + this.onInputChanged), this._properties.renkoStyle.inputs.atrLength + .listeners().subscribe(this, this.onInputChanged), this._properties + .renkoStyle.inputs.wicks.listeners().subscribe(this, this + .onInputChanged), this._properties.renkoStyle.inputs.sources + .listeners().subscribe(this, this.onInputChanged), this._properties + .pbStyle.inputs.lb.listeners().subscribe(this, this.onInputChanged), + this._properties.kagiStyle.inputs.reversalAmount.listeners().subscribe( + this, this.onInputChanged), this._properties.kagiStyle.inputs.style + .listeners().subscribe(this, this.onInputChanged), this._properties + .kagiStyle.inputs.atrLength.listeners().subscribe(this, this + .onInputChanged), this._properties.pnfStyle.inputs.boxSize + .listeners().subscribe(this, this.onInputChanged), this._properties + .pnfStyle.inputs.reversalAmount.listeners().subscribe(this, this + .onInputChanged), this._properties.pnfStyle.inputs.sources + .listeners().subscribe(this, this.onInputChanged), this._properties + .pnfStyle.inputs.style.listeners().subscribe(this, this.onInputChanged), + this._properties.pnfStyle.inputs.atrLength.listeners().subscribe(this, + this.onInputChanged), this._properties.pnfStyle.inputs + .oneStepBackBuilding.listeners().subscribe(this, this.onInputChanged), + this._properties.rangeStyle.inputs.phantomBars.listeners().subscribe( + this, this.onInputChanged) + } + createDividendsAdjustmentProperty() { + throw new Error("Not implemented") + } + dividendsAdjustmentProperty() { + return null + } + setChartStyleWithIntervalIfNeeded(e, t) { + var i = t; + void 0 === t && (i = E(e, this._properties.interval.value(), this._model + .defaultResolutions())), k.isEqual(i, this._properties.interval + .value()) || this._properties.interval.setValue(i), this._properties + .style.setValue(e) + } + isNeedRestart(e) { + return this._status !== z.STATUS_SNAPSHOT && (void 0 === e && (e = this + .properties().style.value()), !O.isRangeStyle(this + ._prevChartStyle) && !O.isRangeStyle(e) && !(this + ._prevChartStyle === e || !O.isRequiringRestartSeriesStyles(this + ._prevChartStyle) && !O.isRequiringRestartSeriesStyles(e))) + } + applyPreferences(e) { + var t = B({}, e); + this.m_priceScale.setMode({ + autoScale: t.priceAxisProperties.autoScale, + percentage: t.priceAxisProperties.percentage, + log: t.priceAxisProperties.log, + lockScale: t.priceAxisProperties.lockScale + }), this.setChartStyleWithIntervalIfNeeded(t.style), delete t.style, + delete t.interval, this._properties.mergePreferences(t), this + ._properties.saveDefaults(), this.createPaneView(), this + .invalidateBarStylesCache() + } + priceSource() { + var e = null; + switch (this._properties.style.value()) { + case z.STYLE_LINE: + e = this._properties.lineStyle.priceSource.value(); + break; + case z.STYLE_AREA: + e = this._properties.areaStyle.priceSource.value(); + break; + case z.STYLE_BASELINE: + e = this._properties.baselineStyle.priceSource.value() + } + return e + } + isRangeBasedStyle() { + return O.isRangeBasedStyle(this.style()) + } + onInputChanged() { + this.restart() + } + getSymbolString() { + return R(this._getSymbolObject()) + } + _getResolvingSymbolObject() { + return this._getSymbolObject() + } + getStyleShortName() { + var e = this._properties.style.value(); + if (z.STYLE_SHORT_NAMES.hasOwnProperty(e)) return z.STYLE_SHORT_NAMES[e]; + throw new Error("Missed short name for style " + e) + } + getStyleProperties() { + return this._properties[this.getStyleShortName() + "Style"] + } + getInputsProperties() { + return this.getStyleProperties().inputs || new s + } + getInputsInfoProperties() { + return this.getStyleProperties().inputInfo || new s + } + getRealVisibleRange() { + var e = this.model().timeScale().visibleBarsStrictRange(); + if (null === e) return null; + var t = this.data().search(e.firstBar(), P.NearestRight), + i = this.data().search(e.lastBar(), P.NearestLeft); + return null === t || null === i ? null : new v(t.index, i.index) + } + firstValue() { + var e = this.firstBar(); + return null === e ? null : this._barFunction(e) + } + firstBar() { + var e = this.model().timeScale().visibleBarsStrictRange(); + if (null === e) return null; + var t = e.firstBar(), + i = this.data().search(t, P.NearestRight); + return null !== i ? i.value : null + } + isSpread() { + return null !== this._symbolInfo && "spread" === this._symbolInfo.type + } + getSymbolName() { + return this._symbolInfo ? this._symbolInfo.name : "" + } + loadDataTo(e) { + var t = this._properties.interval.value(); + this._onTimeFrameApplied.fire(e), this._seriesSource.modifySeries(this + ._getResolvingSymbolObject(), A(t), e) + } + checkInterval() { + if (this._symbolInfo && (k.isIntraday(this.interval()) && !this._symbolInfo + .has_intraday && this.requestingIntradayWhenNotSupported.fire(), + this._symbolInfo.hasOwnProperty("supported_resolutions"))) { + var e = k.normalize(this._properties.interval.value()); - 1 === this + ._symbolInfo.supported_resolutions.indexOf(e) && this + .requestingResolutionWhenNotSupported.fire(this._symbolInfo + .supported_resolutions[0]) + } + } + priceScale() { + return this.m_priceScale + } + setPriceScale(e) { + this.m_priceScale !== e && (this._priceScaleAboutToBeChanged.fire(), this + .m_priceScale = e, this._properties.removeProperty( + "priceAxisProperties"), this._properties.addChild( + "priceAxisProperties", e.properties()), this._properties + .priceAxisProperties.childChanged(), N.emit("series_event", + "price_scale_changed"), this._priceScaleChanged.fire(e)) + } + setGotoDateResult(e) { + this._gotoDateResultCleared = !1, i.e("series-pane-views").then(i.t.bind( + null, "+weX", 7)).then(({ + GotoDateView: t + }) => { + this._gotoDateResultCleared || (this._gotoDateView = new t(this, + e), this.m_model.updateSource(this)) + }) + } + clearGotoDateResult(e) { + this._gotoDateView = null, this._gotoDateResultCleared = !0 + } + syncModel() { + if (!this._syncModel) { + var e = this.symbolInfo(), + t = this.interval(); + if (!e || !t) return null; + this._syncModel = new x(e, t) + } + return this._syncModel + } + getSourceIcon() { + return { + type: "loadSvg", + svgId: "series." + this.properties().style.value() + } + } + isStyleSupported(e) { + return !0 + } + isIntervalSupported(e) { + return !0 + } + isStyleSupportedForReplay(e) { + return O.isTimeBasedStyle(e) + } + isInReplay() { + return null !== this._replaySubscriber + } + onTimeFrameApplied() { + return this._onTimeFrameApplied + } + onInReplayStateChanged() { + throw new Error("Not implemented") + } + replayExitedDueUnsupportedInterval() { + throw new Error("Not implemented") + } + replayExitedDueUnavailableForUserInterval() { + throw new Error("Not implemented") + } + switchToReplay(e, t) { + throw new Error("Not implemented") + } + switchToRealtime() { + throw new Error("Not implemented") + } + _removeReplaySubscriber() { + throw new Error("Not implemented") + } + _onBeforeModifySeries(e, t) { + 0 + } + _getTelemetryAdditionalData(e, t) { + t = void 0 === t || t; + var i = { + symbol: this.actualSymbol() + }; + return t && (i.resolution = this.interval()), void 0 !== e && (i.reason = + e), i + } + _sendTelemetryReport(e, t, i) { + void 0 === i && (i = this._getTelemetryAdditionalData()); + var s = Object.assign(t, { + additional: i + }); + (void 0).sendChartReport(e, s) + } + _sendTelemetryCounter(e, t) { + this._sendTelemetryReport(e, { + count: 1 + }, t) + } + destroy() { + this._replayExitedDueUnsupportedInterval.destroy(), this + ._replayExitedDueUnavailableForUserInterval.destroy(), this + ._quotesProvider.quotesUpdate().unsubscribeAll(this), this + ._quotesProvider.destroy(), this.clearGotoDateResult(), this._legendView + .destroy(), this._marketStatusModel.destroy(), null !== this + ._dataUpdatedModeModel && this._dataUpdatedModeModel.destroy(), this + ._dataProblemModel.destroy(), this._paneView && this._paneView + .destroy && this._paneView.destroy(), this._onTimeFrameApplied + .destroy(), this._seriesSource.destroy(), super.destroy() + } + dataEvents() { + return this._seriesSource.dataEvents() + } + moveData(e) { + return this._seriesSource.moveData(e) + } + } + Object.assign(z, M), TradingView.Series = z, t.Series = z + }).call(this, i("aIyQ"), i("tc+8"), i("Qb4w").PriceRange) + }, + qXYw: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("n5al"), + r = i("ivNn"), + n = i("YFKU"), + o = i("qFKp"), + a = i("Tmoa"), + l = i("Ialn"), + c = i("GH0z"), + h = i("6I19"), + u = i("k9/m"), + d = i("CW80"), + p = i("mMWL"), + _ = i("7qT/"), + m = i("38az"), + f = i("xCUR"); + const g = o.CheckMobile.any(), + b = g && !0, + v = new c.PercentageFormatter, + S = Object(n.t)("n/a"), + y = `${S} (${S}%)`; + i.d(t, "OverlayLegendValuesProvider", (function() { + return w + })); + class w extends class { + constructor(e, t) { + this._study = e, this._model = t, this._emptyValues = [{ + title: Object(n.t)("Open"), + visible: !1, + value: "", + index: 0, + id: "" + }, { + title: Object(n.t)("High"), + visible: !1, + value: "", + index: 1, + id: "" + }, { + title: Object(n.t)("Low"), + visible: !1, + value: "", + index: 2, + id: "" + }, { + title: Object(n.t)("Close"), + visible: !1, + value: "", + index: 3, + id: "" + }, { + title: "", + visible: !1, + value: "", + index: 4, + id: "" + }, { + title: "", + visible: !1, + value: "", + index: 5, + id: "" + }, { + title: Object(n.t)("Change"), + visible: !1, + value: "", + index: 6, + id: "" + }] + } + getItems() { + return this._emptyValues + } + getValues(e) { + const t = this._emptyValues.map(e => ({ + ...e + })); + if (this._model.timeScale().isEmpty()) return t; + if (0 === this._study.data().size()) return t; + const i = this._showLastPriceAndChangeOnly(); + if (Object(r.isNumber)(e) || (i ? e = this._study.data().lastIndex() : (e = this + ._model.crossHairSource().appliedIndex(), Object(r.isNumber)(e) || (e = + this._study.data().lastIndex()))), null === e || !Object(r.isNumber)(e)) + return t; + const s = this._study.data().search(e, u.PlotRowSearchMode.NearestLeft, 1), + n = Object(h.c)(this._model.paneForSource(this._study)); + if (null === s || null === n) return t; + const o = s.index, + c = s.value, + d = c[1], + p = c[2], + _ = c[3], + g = c[4]; + if (null == d || null == p || null == _ || null == g) return t; + t[0].value = S, t[1].value = S, t[2].value = S, t[3].value = S, t[6].value = y; + for (const e of t) e.visible = !i; + const w = t[4]; + w.visible = !1; + const { + values: P + } = this._changesData(g, d, o, i), C = Object(f.a)(this._study); + if (Object(f.b)(this._study)) t[6].value = ""; + else if (void 0 !== P) { + const e = this._study.formatter(); + t[6].value = Object(l.forceLTRStr)( + `${e.format(P.change, !0)} (${v.format(P.percentChange, !0)})`) + } + i ? (t[5].value = C(g), t[5].visible = !0, t[6].visible = !0) : (t[0].value = C(d), + t[1].value = C(p), t[2].value = C(_), t[3].value = C(g), w.value = C(this + ._study.barFunction()(c)), t[5].visible = !1); + let x = null; + if (i && !b) x = void 0 === P || P.change >= 0 ? m.SeriesBarColorer.upColor(this + ._study.properties()) : m.SeriesBarColorer.downColor(this._study + .properties()); + else { + const e = this._study.barColorer().barStyle(o, !1), + t = null != e.barBorderColor ? e.barBorderColor : e.barColor; + x = Object(h.b)(n, t) + } + x = Object(a.resetTransparency)(Object(h.b)(n, x)); + for (const e of t) e.color = x; + return t + } + _showLastPriceAndChangeOnly() { + return g && (null === this._model.crossHairSource().pane || Object(d.isLineToolName) + (p.tool.value()) || null !== this._model.lineBeingEdited()) + } + _changesData(e, t, i, s) { + var r; + if (s && !b) { + const e = this._study.quotes(); + if (null !== e) return { + values: { + change: e.change, + percentChange: e.change_percent + }, + priceDirection: { + basedOnCurrentBar: e.change >= 0 ? 0 : 1, + basedOnPrevClose: e.change >= 0 ? 0 : 1 + } + } + } else { + const s = this._study.data().search(i - 1, u.PlotRowSearchMode.NearestLeft, 1), + n = null !== (r = null == s ? void 0 : s.value[4]) && void 0 !== r ? r : + null; + if (null !== n) return { + values: { + change: e - n, + percentChange: Object(_.a)(n, e) + }, + priceDirection: { + basedOnCurrentBar: e >= t ? 0 : 1, + basedOnPrevClose: e >= n ? 0 : 1 + } + } + } + return { + priceDirection: { + basedOnCurrentBar: e >= t ? 0 : 1, + basedOnPrevClose: e >= t ? 0 : 1 + } + } + } + } { + constructor(e, t) { + super(e, t), this._showBarChange = t.properties().paneProperties.legendProperties + .showBarChange, this._showSeriesOHLC = t.properties().paneProperties + .legendProperties.showSeriesOHLC, this._seriesStyle = e.properties().childs() + .style + } + getValues(e) { + const t = super.getValues(e); + if (!this._showLastPriceAndChangeOnly()) { + const e = Object(s.isPriceSourceStyle)(this._seriesStyle.value()), + i = this._showSeriesOHLC.value(), + r = i && !e, + n = i && e; + t[0].visible = r, t[1].visible = r, t[2].visible = r, t[3].visible = r, t[6] + .visible = this._showBarChange.value(), t[4].visible = n + } + return t + } + } + }, + qcGP: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty, + n = i("mMWL"); + class o extends s { + constructor(e, t) { + super(e, t || o.createProperties()), this._priceAxisViews.push(this + .createPriceAxisView(3)), i.e("lt-pane-views").then(i.t.bind(null, "9FRF", + 7)).then(({ + ParallelChannelPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + calculatePriceDiff() { + var e = this.points(); + if (3 === e.length) { + var t = e[0], + i = e[1], + s = e[2], + r = this._findPriceOffset(t, i, s); + null !== r && isFinite(r) && (this._priceOffset = r) + } + } + _findPriceOffset(e, t, i) { + var s = this.priceScale(); + if (null === s || e.index === t.index) return null; + if (s.isLog()) { + var r = this._model.timeScale(); + if (r.isEmpty()) return null; + var n = this.ownerSource().firstValue(), + o = r.indexToCoordinate(e.index), + a = r.indexToCoordinate(t.index), + l = s.priceToCoordinate(e.price, n), + c = s.priceToCoordinate(t.price, n), + h = l + (m = (c - l) / (a - o)) * (r.indexToCoordinate(i.index) - o), + u = s.priceToCoordinate(i.price, n) - h, + d = (n = this.ownerSource().firstValue(), .5 * (l + c)), + p = s.coordinateToPrice(d, n), + _ = d + u; + return s.coordinateToPrice(_, n) - p + } + var m = (t.price - e.price) / (t.index - e.index), + f = e.price + m * (i.index - e.index); + return i.price - f + } + setLastPoint(e, t) { + t && t.shift() && 2 === this.points().length && this._snapPoint45Degree(e, this + .points()[0]), super.setLastPoint(e), this.calculatePriceDiff() + } + restorePoints(e, t, i) { + super.restorePoints(e, t, i), e && e.length >= 3 && (this._priceOffset = e[2] + .price - e[0].price) + } + setPoint(e, t, i) { + if (i && i.shift()) switch (e) { + case 0: + case 1: + this._snapPoint45Degree(t, this._points[1 - e]); + break; + case 2: + case 3: + this._snapPoint45Degree(t, { + index: this._points[3 - e].index, + price: this._points[3 - e].price + this._priceOffset + }) + } + var s = !1; + switch (e) { + case 0: + case 1: + super.setPoint(e, t, i); + break; + case 2: + case 3: + this._points[e - 2].index = t.index, this._points[e - 2].price = t.price - + this._priceOffset; + break; + case 4: + this._points[2] = t, this.calculatePriceDiff(), s = !0; + break; + case 5: + var r = this._findPriceOffset(this._points[0], this._points[1], t); + null !== r && isFinite(r) && (this._points[0].price += r, this._points[1] + .price += r, this._priceOffset -= r, s = !0) + } + if (e % 2 == 0 && this._correctThirdPoint(), s && this.linkKey().value()) { + for (var o = [], a = 0; a < this._points.length; a++) o.push(this._points[a] + .price); + n.changeLineStyle({ + model: this._model, + linkKey: this.linkKey().value(), + state: { + prices: o + } + }) + } + } + restoreExternalState(e) { + if ((e = Object.assign({}, e)).prices) + if (this.isActualSymbol()) { + for (var t = 0; t < e.prices.length; t++) this._points[t].price = e.prices[ + t]; + this._priceOffset = this._points[2].price - this._points[0].price + } else this._priceOffset = void 0; + delete e.prices, super.restoreExternalState(e) + } + onData(e) { + super.onData(e), this._updateThirdPointAndPriceOffset() + } + setPoints(e) { + super.setPoints(e), this.calculatePriceDiff() + } + getPoint(e) { + if (e < 2) return s.prototype.getPoint.call(this, e); + var t = null; + switch (e) { + case 2: + case 3: + var i = this.points(); + i.length === this.pointsCount() && (t = { + index: i[e - 2].index, + price: i[e - 2].price + this._priceOffset + }) + } + return t + } + pointsCount() { + return 3 + } + name() { + return "Parallel Channel" + } + hasEditableCoordinates() { + return !1 + } + addPoint(e, t) { + var i = this.points().length; + t && t.shift() && 2 === i && this._snapPoint45Degree(e, this.points()[0]); + var r = s.prototype.addPoint.call(this, e, t); + return this._updateThirdPointAndPriceOffset(), r + } + cloneData(e) { + this._priceOffset = e._priceOffset + } + restoreData(e) { + e.priceOffset && (this._priceOffset = e.priceOffset) + } + state(e) { + var t = s.prototype.state.call(this, e); + return t.priceOffset = this._priceOffset, t + } + canHasAlert() { + return !0 + } + axisPoints() { + var e = this.points(); + return e.length < 2 ? [] : (e[2] = { + index: e[0].index, + price: e[0].price + this._priceOffset + }, e.push({ + index: e[1].index, + price: e[1].price + this._priceOffset + }), e) + } + _getAlertPlots() { + var e = [].concat(this._points).splice(0, 2); + + function t(e, t) { + return e.index <= t.index ? [e, t] : [t, e] + } + var i, s, r, n, o = t((e = e.concat([{ + price: e[0].price + this._priceOffset, + time: e[0].time, + index: e[0].index + }, { + price: e[1].price + this._priceOffset, + time: e[1].time, + index: e[1].index + }]))[0], e[1]), + a = t(e[2], e[3]); + this._priceOffset < 0 ? (s = a, i = o) : (s = o, i = a); + var l = this.properties().extendLeft.value(), + c = this.properties().extendRight.value(); + return e[0].index <= e[1].index ? (r = l, n = c) : (r = c, n = l), [this + ._linePointsToAlertPlot(i, "Upper", r, n), this._linePointsToAlertPlot(s, + "Lower", r, n) + ] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "VkdP"))) + .ParallelChannelDefinitionsViewModel + } + _updateThirdPointAndPriceOffset() { + this._points.length === this.pointsCount() && (void 0 === this._priceOffset && this + .calculatePriceDiff(), this._correctThirdPoint()) + } + _correctThirdPoint() { + var e = this._points[0]; + this._points[2].index = e.index, this._points[2].price = e.price + this._priceOffset + } + static createProperties(e) { + var t = new r("linetoolparallelchannel", e); + return o._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolParallelChannel = o + }, + qckB: function(e, t) { + e.exports = + '' + }, + qgcf: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "calculateLabelPosition", (function() { + return p + })), i.d(t, "wordWrap", (function() { + return f + })), i.d(t, "TextRenderer", (function() { + return M + })); + var s = i("aO4+"), + r = i("Eyy1"), + n = i("f6yo"), + o = i("Ialn"), + a = i("VdBB"), + l = i("gAom"), + c = i("jFln"), + h = i("ogJP"), + u = i("ikwP"), + d = i("8Uy/"); + + function p(e, t, i, r, n) { + const o = .5 * (t.x + i.x); + let a = i.y; + return t.y > i.y ? (a -= e.height / 2 + r.y, a = Math.max(e.height / 2, a)) : (a += e + .height / 2 + r.y, a = Math.min(n - e.height / 2, a)), new s.Point(o, a) + } + let _; + + function m() { + const e = document.createElement("canvas"); + e.width = 0, e.height = 0, _ = Object(r.ensureNotNull)(e.getContext("2d")) + } + + function f(e, t, i) { + _ || m(), i = Object(h.isString)(i) ? parseInt(i) : i, e += ""; + const s = !Object(h.isNumber)(i) || !isFinite(i) || i <= 0 ? e.split( + /[^\S' '\r\n]*(?:\r\n|\r|\n|$)/) : e.split(/[^\S\r\n]*(?:\r\n|\r|\n|$)/); + if (s[s.length - 1] || s.pop(), !Object(h.isNumber)(i) || !isFinite(i) || i <= 0) return s; + _.font = t; + const r = []; + for (let e = 0; e < s.length; e++) { + const t = s[e], + n = _.measureText(t).width; + if (n <= i) { + r.push(t); + continue + } + const o = t.split(/([-)\]},.!?:;])|(\s+)/); + let a = 0; + for (; o.length;) { + let e = ~~(i / n * (o.length + 2) / 3); + if (e <= 0 || _.measureText(o.slice(0, 3 * e - 1).join("")).width <= i) + for (; _.measureText(o.slice(0, 3 * (e + 1) - 1).join("")).width <= i;) e++; + else + for (; e > 0 && _.measureText(o.slice(0, 3 * --e - 1).join("")).width > i;); + if (e > 0) r.push(o.slice(0, 3 * e - 1).join("")), o.splice(0, 3 * e); + else { + const e = o[0] + (o[1] || ""); + if (a = 1 === a ? 1 : ~~(i / _.measureText(e).width * e.length), _.measureText(e + .substr(0, a)).width <= i) + for (; _.measureText(e.substr(0, a + 1)).width <= i;) a++; + else + for (; a > 1 && _.measureText(e.substr(0, --a)).width > i;); + a < 1 && (a = 1), r.push(e.substr(0, a)), o[0] = e.substr(a), o[1] = "" + } + if (_.measureText(o.join("")).width <= i) { + r.push(o.join("")); + break + } + } + } + return r + } + + function g(e, t, i) { + if (0 === i) return e.clone(); + const r = (e.x - t.x) * Math.cos(i) - (e.y - t.y) * Math.sin(i) + t.x, + n = (e.x - t.x) * Math.sin(i) + (e.y - t.y) * Math.cos(i) + t.y; + return new s.Point(r, n) + } + + function b(e, t) { + return t + 2 * P(e) + 2 * y(e) + } + + function v(e, t) { + return x(e) * t + C(e) * (t - 1) + 2 * w(e) + 2 * S(e) + } + + function S(e) { + return void 0 !== e.boxPaddingVert ? e.boxPaddingVert * I(e) : void 0 !== e.boxPadding ? e + .boxPadding * I(e) : x(e) / 3 + } + + function y(e) { + return void 0 !== e.boxPaddingHorz ? e.boxPaddingHorz * I(e) : void 0 !== e.boxPadding ? e + .boxPadding * I(e) : x(e) / 3 + } + + function w(e) { + return (e.backgroundVertInflate || 0) * I(e) + } + + function P(e) { + return (e.backgroundHorzInflate || 0) * I(e) + } + + function C(e) { + return (e.padding || 0) * I(e) + } + + function x(e) { + return Math.ceil(T(e) * I(e)) + } + + function T(e) { + return e.fontsize || e.fontSize || 30 + } + + function I(e) { + const t = Math.min(1, Math.max(.2, Math.min(e.scaleX || 1, e.scaleY || 1))); + if (1 === t) return t; + const i = T(e); + return Math.ceil(t * i) / i + } + class M { + constructor(e, t) { + this._data = null, this._internalData = null, this._boxSize = null, this + ._linesInfo = null, this._fontInfo = null, this._hittest = t || new a + .HitTestResult(a.HitTestResult.MOVEPOINT, { + areaName: a.AreaName.Text + }), void 0 !== e && this.setData(e) + } + setData(e) { + e.horzTextAlign || (e.horzTextAlign = e.horzAlign), + function(e, t) { + if (null === e || null === t) return null === e == (null === t); + if (void 0 === e.points != (void 0 === t.points)) return !1; + if (void 0 !== e.points && void 0 !== t.points) { + if (e.points.length !== t.points.length) return !1; + for (let r = 0; r < e.points.length; ++r) + if (i = e.points[r], s = t.points[r], i.x !== s.x || i.y !== s.y) + return !1 + } + var i, s; + return e.text === t.text && e.vertAlign === t.vertAlign && e.horzAlign === t + .horzAlign && e.horzTextAlign === t.horzTextAlign && e.font === t + .font && e.offsetX === t.offsetX && e.offsetY === t.offsetY && e + .bold === t.bold && e.italic === t.italic && e.fontsize === t + .fontsize && e.fontSize === t.fontSize && e.backgroundRoundRect === t + .backgroundRoundRect && e.forceTextAlign === t.forceTextAlign && e + .wordWrapWidth === t.wordWrapWidth && e.forceCalculateMaxLineWidth === t + .forceCalculateMaxLineWidth && e.padding === t.padding && e.scaleY === t + .scaleY && e.scaleX === t.scaleX && e.highlightBorder === t + .highlightBorder && e.backgroundHorzInflate === t + .backgroundHorzInflate && e.backgroundVertInflate === t + .backgroundVertInflate && e.boxPadding === t.boxPadding && e + .boxPaddingVert === t.boxPaddingVert && e.boxPaddingHorz === t + .boxPaddingHorz && e.angle === t.angle && e.maxHeight === t.maxHeight + }(this._data, e) ? this._data = e : (this._data = e, this._internalData = null, + this._boxSize = null, this._linesInfo = null, this._fontInfo = null) + } + hitTest(e) { + if (null === this._data || void 0 === this._data.points || 0 === this._data.points + .length) return null; + const t = this._data.angle || 0, + { + boxLeft: i, + boxTop: r, + boxWidth: o, + boxHeight: a + } = this._getInternalData(), + l = this._getRotationPoint(), + c = [g(new s.Point(i, r), l, t), g(new s.Point(i + o, r), l, t), g(new s.Point( + i + o, r + a), l, t), g(new s.Point(i, r + a), l, t)]; + return Object(n.pointInPolygon)(e, c) ? this._hittest : null + } + doesIntersectWithBox(e) { + return null !== this._data && void 0 !== this._data.points && 0 !== this._data + .points.length && Object(n.pointInBox)(this._data.points[0], e) + } + measure() { + if (null === this._data) return { + width: 0, + height: 0 + }; + const e = this._getBoxSize(); + return { + width: e.boxWidth, + height: e.boxHeight + } + } + rect() { + if (null === this._data) return { + x: 0, + y: 0, + width: 0, + height: 0 + }; + const e = this._getInternalData(); + return { + x: e.boxLeft, + y: e.boxTop, + width: e.boxWidth, + height: e.boxHeight + } + } + setPoints(e, t) { + Object(r.ensureNotNull)(this._data).points = e, this._hittest = t || new a + .HitTestResult(a.HitTestResult.MOVEPOINT) + } + fontStyle(e) { + return null === this._data ? "" : this._getFontInfo().fontStyle + } + wordWrap(e, t, i) { + return f(e, i || this.fontStyle(), t) + } + draw(e, t) { + if (null === this._data || void 0 === this._data.points || 0 === this._data.points + .length) return; + const i = t.pixelRatio, + s = this._getInternalData(), + r = this._getRotationPoint().scaled(i); + e.save(), e.translate(r.x, r.y), e.rotate(this._data.angle || 0), e.translate(-r.x, + -r.y); + const n = this._getFontInfo().fontSize; + e.textBaseline = s.textBaseLine, e.textAlign = s.textAlign, e.font = this + .fontStyle(); + const { + scaledLeft: o, + scaledRight: a, + scaledTop: h, + scaledBottom: p + } = function(e, t) { + const i = Math.round(e.boxLeft * t), + s = Math.round(e.boxTop * t); + return { + scaledLeft: i, + scaledRight: i + Math.round(e.boxWidth * t), + scaledTop: s, + scaledBottom: s + Math.round(e.boxHeight * t) + } + }(s, i); + if (this._data.backgroundColor || this._data.borderColor || this._data + .highlightBorder && this._data.wordWrapWidth) { + const t = this._data.borderWidth || Math.max(n / 12, 1), + s = Math.round(t * i), + r = s / 2; + if (this._data.backgroundRoundRect) this._data.backgroundColor && (Object(l + .drawRoundRect)(e, o, h, a - o, p - h, this._data + .backgroundRoundRect * i), e.fillStyle = this._data.backgroundColor, + e.fill()), this._data.borderColor && (Object(l.drawRoundRect)(e, o - r, + h - r, a - o + s, p - h + s, this._data.backgroundRoundRect * i + s + ), e.strokeStyle = this._data.borderColor, e.lineWidth = s, e + .stroke()); + else if (this._data.backgroundColor && (e.fillStyle = this._data + .backgroundColor, e.fillRect(o, h, a - o, p - h)), this._data + .borderColor || this._data.highlightBorder) { + let t; + this._data.borderColor ? (e.strokeStyle = this._data.borderColor, t = s) : ( + e.strokeStyle = this._data.color, Object(c.setLineStyle)(e, d + .LINESTYLE_DASHED), t = Math.max(1, Math.floor(i))), e + .lineWidth = t, e.beginPath(), e.moveTo(o - t / 2, h - t / 2), e.lineTo( + o - t / 2, p + t / 2), e.lineTo(a + t / 2, p + t / 2), e.lineTo(a + + t / 2, h - t / 2), e.lineTo(o - t / 2, h - t / 2), e.stroke() + } + } + e.fillStyle = this._data.color; + const _ = (o + Math.round(s.textStart * i)) / i, + m = .05 * n; + let f = (h + Math.round((s.textTop + m) * i)) / i; + const g = C(this._data), + b = this._getLinesInfo(); + for (const t of b.lines) Object(u.drawScaled)(e, i, () => e.fillText(t, _, f)), f += + n + g; + e.restore() + } + _getLinesMaxWidth(e) { + if (_ || m(), _.textBaseline = "alphabetic", _.font = this.fontStyle(), null !== + this._data && this._data.wordWrapWidth && !this._data.forceCalculateMaxLineWidth + ) return this._data.wordWrapWidth * I(this._data); + let t = 0; + for (const i of e) t = Math.max(t, _.measureText(i).width); + return t + } + _getInternalData() { + if (null !== this._internalData) return this._internalData; + const e = Object(r.ensureNotNull)(this._data), + t = this._getBoxSize(), + i = t.boxWidth, + s = t.boxHeight, + n = Object(r.ensureDefined)(e.points)[0]; + let a = n.y; + switch (e.vertAlign) { + case "bottom": + a -= s + e.offsetY; + break; + case "middle": + a -= s / 2; + break; + case "top": + a += e.offsetY + } + let l = n.x; + const c = y(e), + h = S(e), + u = P(e) + c; + let d; + const p = a + (w(e) + h) + x(e) / 2; + let _; + switch (e.horzAlign) { + case "left": + l += e.offsetX; + break; + case "center": + l -= i / 2; + break; + case "right": + l -= i + e.offsetX + } + switch (Object(r.ensureDefined)(e.horzTextAlign)) { + case "left": + _ = "start", d = l + u, Object(o.isRtl)() && (e.forceTextAlign ? _ = + "left" : (d = l + i - u, _ = "right")); + break; + case "center": + _ = "center", d = l + i / 2; + break; + case "right": + _ = "end", d = l + i - u, Object(o.isRtl)() && e.forceTextAlign && (_ = + "right") + } + return this._internalData = { + boxLeft: l, + boxTop: a, + boxWidth: i, + boxHeight: s, + textStart: d - l, + textTop: p - a, + textAlign: _, + textBaseLine: "middle" + }, this._internalData + } + _getLinesInfo() { + if (null === this._linesInfo) { + const e = Object(r.ensureNotNull)(this._data); + let t = this.wordWrap(e.text, e.wordWrapWidth); + if (void 0 !== e.maxHeight) { + const i = function(e) { + const t = Object(r.ensureDefined)(e.maxHeight), + i = x(e), + s = C(e); + return Math.floor((t + s) / (i + s)) + }(e); + t.length > i && (t = t.slice(0, i)) + } + this._linesInfo = { + linesMaxWidth: this._getLinesMaxWidth(t), + lines: t + } + } + return this._linesInfo + } + _getFontInfo() { + if (null === this._fontInfo) { + const e = Object(r.ensureNotNull)(this._data), + t = x(e), + i = (e.bold ? "bold " : "") + (e.italic ? "italic " : "") + t + "px " + e + .font; + this._fontInfo = { + fontStyle: i, + fontSize: t + } + } + return this._fontInfo + } + _getBoxSize() { + if (null === this._boxSize) { + const e = this._getLinesInfo(), + t = Object(r.ensureNotNull)(this._data); + this._boxSize = { + boxWidth: b(t, e.linesMaxWidth), + boxHeight: v(t, e.lines.length) + } + } + return this._boxSize + } + _getRotationPoint() { + const { + boxLeft: e, + boxTop: t, + boxWidth: i, + boxHeight: n + } = this._getInternalData(), { + horzAlign: o, + vertAlign: a + } = Object(r.ensureNotNull)(this._data); + let l, c; + switch (o) { + case "center": + l = e + i / 2; + break; + case "left": + l = e; + break; + case "right": + l = e + i + } + switch (a) { + case "middle": + c = t + n / 2; + break; + case "top": + c = t; + break; + case "bottom": + c = t + n + } + return new s.Point(l, c) + } + } + }, + qySK: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return u + })), i.d(t, "a", (function() { + return d + })); + var s = i("Eyy1"), + r = i("JmuD"), + n = i("KG+6"), + o = i("fFKx"), + a = i("SqfW"), + l = i("5vwb"), + c = i("7Fue"), + h = i("xWfy"); + + function u(e) { + if (!Object(r.isObject)(e)) throw new Error( + "Graphics commands should be wrapped in an object"); + if (Object(r.hasProperty)(e, "create"), Object(r.hasProperty)(e, "erase")) { + const t = e.erase; + Object(s.assert)(Array.isArray(t), "Collection of erase commands should be array"); + for (const e of t) { + if (!Object(r.isObject)(e) || !Object(r.hasProperty)(e, "action")) throw new Error( + "Command should be an object with 'action' property"); + Object(s.assert)("all" === e.action || "one" === e.action, + "Erase command action should be 'all' or 'one'") + } + } + return e + } + class d { + constructor() { + this._indexes = [], this._horizlines = new Map, this._vertlines = new Map, this + ._lines = new Map, this._hlines = new Map, this._textmarks = new Map, this + ._shapemarks = new Map, this._backgrounds = new Map, this._polygons = new Map, + this._trendchannels = new Map, this._hhists = new Map, this._dwglabels = + new Map, this._dwgboxes = new Map, this._dwglines = new Map, this._dwgtables = + new Map, this._dwgtablecells = new Map, this._hhistsByTimePointIndex = new Map + } + horizlines() { + return this._horizlines + } + vertlines() { + return this._vertlines + } + lines() { + return this._lines + } + hlines() { + return this._hlines + } + textmarks() { + return this._textmarks + } + shapemarks() { + return this._shapemarks + } + backgrounds() { + return this._backgrounds + } + polygons() { + return this._polygons + } + trendchannels() { + return this._trendchannels + } + hhists() { + return this._hhists + } + dwglabels() { + return this._dwglabels + } + dwglines() { + return this._dwglines + } + dwgboxes() { + return this._dwgboxes + } + dwgtables() { + return this._dwgtables + } + dwgtablecells() { + return this._dwgtablecells + } + hhistsByTimePointIndex() { + return this._hhistsByTimePointIndex + } + clear() { + this._indexes = [], this._clearPrimitives() + } + extract() { + const e = e => e.extract(), + t = { + indexes: this._indexes, + horizlines: _(this._horizlines, e), + vertlines: _(this._vertlines, e), + lines: _(this._lines, e), + hlines: _(this._hlines, e), + textmarks: _(this._textmarks, e), + shapemarks: _(this._shapemarks, e), + backgrounds: _(this._backgrounds, e), + polygons: _(this._polygons, e), + trendchannels: _(this._trendchannels, e), + hhists: _(this._hhists, e), + dwglabels: _(this._dwglabels, e), + dwglines: _(this._dwglines, e), + dwgboxes: _(this._dwgboxes, e), + dwgtables: _(this._dwgtables, e), + dwgtablecells: _(this._dwgtablecells, e) + }; + return this._hhistsByTimePointIndex = new Map, new h.a("data", t) + } + replaceIndexesTo(e) { + this._indexes = e; + const t = e => e.replaceIndexesTo(this._indexes); + this._horizlines.forEach(t), this._vertlines.forEach(t), this._lines.forEach(t), + this._hlines.forEach(t), this._textmarks.forEach(t), this._shapemarks.forEach( + t), this._backgrounds.forEach(t), this._polygons.forEach(t), this + ._trendchannels + .forEach(t), this._hhists.forEach(t), this._dwglabels.forEach(t), this._dwgboxes + .forEach(t), this._dwglines.forEach(t), this._dwgtables.forEach(t), this + ._dwgtablecells.forEach(t), this._hhistsByTimePointIndex = Object(c.b)(this + ._hhists) + } + processCommands(e, t) { + void 0 !== e.erase && this._processEraseCommands(e.erase), void 0 !== e.create && + this._processCreateCommands(e.create, t) + } + _processCreateCommands(e, t) { + for (const i in e) { + if (!e.hasOwnProperty(i)) continue; + const r = i; + switch (Object(s.assert)(r in t, + `There is a '${r}' in study response, but it doesn't present in graphics info!` + ), r) { + case "hhists": + m(this._hhists, e[r], t[r], this._indexes, n.d); + break; + case "horizlines": + m(this._horizlines, e[r], t[r], this._indexes, o.b); + break; + case "vertlines": + m(this._vertlines, e[r], t[r], this._indexes, a.b); + break; + case "polygons": + m(this._polygons, e[r], t[r], this._indexes, l.b) + } + } + this._hhistsByTimePointIndex = Object(c.b)(this._hhists) + } + _processEraseCommands(e) { + for (const t of e) + if ("all" === t.action) this._clearPrimitives(); + else { + const e = e => e.deleteById(t.id); + switch (t.type) { + case "horizlines": + this._horizlines.forEach(e); + break; + case "vertlines": + this._vertlines.forEach(e); + break; + case "lines": + this._lines.forEach(e); + break; + case "hlines": + this._hlines.forEach(e); + break; + case "textmarks": + this._textmarks.forEach(e); + break; + case "shapemarks": + this._shapemarks.forEach(e); + break; + case "backgrounds": + this._backgrounds.forEach(e); + break; + case "polygons": + this._polygons.forEach(e); + break; + case "trendchannels": + this._trendchannels.forEach(e); + break; + case "hhists": + this._hhists.forEach(e); + break; + case "dwglabels": + this._dwglabels.forEach(e); + break; + case "dwglines": + this._dwglines.forEach(e); + break; + case "dwgboxes": + this._dwgboxes.forEach(e); + break; + case "dwgtables": + this._dwgtables.forEach(e); + break; + case "dwgtablecells": + this._dwgtablecells.forEach(e) + } + } this._hhistsByTimePointIndex = Object(c.b)(this._hhists) + } + _clearPrimitives() { + this._horizlines.clear(), this._vertlines.clear(), this._lines.clear(), this._hlines + .clear(), this._textmarks.clear(), this._shapemarks.clear(), this._backgrounds + .clear(), this._polygons.clear(), this._trendchannels.clear(), this._hhists + .clear(), this._dwglabels.clear(), this._dwgboxes.clear(), this._dwglines + .clear(), this._dwgtables.clear(), this._dwgtablecells.clear(), + this._hhistsByTimePointIndex = new Map + } + } + class p { + constructor(e, t) { + this._primitivesDataById = new Map, this._primitiveById = new Map, this + ._materializePrimitive = e, this._indexes = t + } + forEach(e, t) { + this._primitiveById.forEach(i => { + e.call(t, i, i, this) + }) + } + has(e) { + let t = !1; + return this._primitiveById.forEach(i => { + t = t || i === e + }), t + } + get size() { + return this._primitiveById.size + } [Symbol.iterator]() { + throw new Error("Not implemented") + } + entries() { + throw new Error("Not implemented") + } + keys() { + throw new Error("Not implemented") + } + values() { + throw new Error("Not implemented") + } + hasId(e) { + return this._primitiveById.has(e) + } + addData(e) { + this._primitivesDataById.set(e.id, e), this._tryMaterialize(e) + } + deleteById(e) { + this._primitiveById.delete(e), this._primitivesDataById.delete(e) + } + clear() { + this._primitivesDataById.clear(), this._primitiveById.clear() + } + replaceIndexesTo(e) { + this._indexes = e, this._primitiveById.clear(), this._primitivesDataById.forEach( + this._tryMaterialize, this) + } + extract() { + const e = new Set(this._primitivesDataById.values()); + return this._primitivesDataById = new Map, this._primitiveById.clear(), e + } + _tryMaterialize(e) { + const t = this._materializePrimitive(e, this._indexes); + null !== t && (Object(s.assert)(!this._primitiveById.has(e.id), + "primitive with specified id should not exist"), this._primitiveById + .set(e.id, t)) + } + } + + function _(e, t) { + const i = new Map; + return e.forEach((e, s) => i.set(s, t(e))), i + } + + function m(e, t, i, r, n) { + if (void 0 !== t) + for (const o of t) { + const t = o.styleId; + void 0 !== i && Object(s.assert)(t in i, + "Every style used by graphics primitive should be declared in study metainfo" + ); + let a = e.get(t); + void 0 === a && (a = new p(n, r), e.set(t, a)), o.data.forEach(a.addData.bind(a)) + } + } + }, + rCHB: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "LineToolPitchforkStyle", (function() { + return s + })), + function(e) { + e[e.Original = 0] = "Original", e[e.Schiff = 1] = "Schiff", e[e.Inside = 2] = "Inside", + e[e.Schiff2 = 3] = "Schiff2" + }(s || (s = {})) + }, + rL76: function(e, t, i) { + e.exports = { + labelwidth: "19px", + labelheight: "19px", + bordersize: "2px", + bottommargin: "5px", + gearheight: "15px", + gearwidth: "15px", + "price-axis-stub": "price-axis-stub-1DJMiIgd", + wrapper: "wrapper-1DJMiIgd", + label: "label-1DJMiIgd", + symbol: "symbol-1DJMiIgd", + gear: "gear-1DJMiIgd", + "fixed-gear": "fixed-gear-1DJMiIgd", + "fixed-symbol": "fixed-symbol-1DJMiIgd" + } + }, + rQHv: function(e, t, i) { + "use strict"; + var s = i("IiTo"), + r = {}; + e.exports = function(e, t, i) { + var n, o, a = {}, + l = r[i] || "out_of_session", + c = !1, + h = i, + u = t, + d = null; + + function p() { + var e = {}; + e.symbolname = h, e.status = "ok", e.values = {}, e.values.current_session = l, r[ + h] = l, TradingView.ChartapiMessagerInstances[u].onQuotesData([u].concat([ + e])) + } + + function _() { + if (n) + if (o) l = "out_of_session"; + else { + var e = s.isTradingNow((new Date).getTime(), n) ? "market" : + "out_of_session"; + e !== l && (l = e, p()) + } + } + return e(i, null, (function(e) { + c || function(e) { + n = new s.SessionInfo(e.timezone, e.session, e.session_holidays, + e.corrections), o = e.expired, d = setInterval(_, 6e4), + _(), p() + }(e) + }), (function() {})), a.stop = function() { + c = !0, d && clearInterval(d) + }, a.marketStatus = function() { + return l + }, a + } + }, + rWtV: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("Eyy1"), + r = i("Y7w9"); + class n { + constructor() { + this._histPos = -1, + this._hist = new Float64Array(2e3), this._times = new Float64Array(2e3) + } + addHist(e) { + if (this._histPos >= 0) { + const t = this._times[this._histPos]; + Object(s.assert)(t <= e, "History order violation"), this._histPos += t === e ? + 0 : 1 + } else this._histPos += 1; + if (this._histPos === this._hist.length) { + const e = new Float64Array(2 * this._hist.length); + e.set(this._hist), this._hist = e; + const t = new Float64Array(this._hist.length); + t.set(this._times), this._times = t + } + this._hist[this._histPos] = NaN, this._times[this._histPos] = e + } + removeLastIfNaN() { + Number.isNaN(this.get(0)) && (this._histPos -= 1) + } + get(e) { + Object(s.assert)(0 === e); + const t = this._histPos - e; + return this._hist[t] + } + getLeftOrEqual(e) { + const t = Object(r.upperbound)(this._times, e, (e, t) => e < t, 0, this._histPos + + 1); + return 0 === t ? NaN : this._hist[t - 1] + } + set(e) { + this._hist[this._histPos] = e + } + indexOf(e) { + throw new Error("Not implemented") + } + } + }, + rY0k: function(e, t, i) { + "use strict"; + var s = i("xDuj").translatedIntervalString, + r = i("hOqT").getTranslatedSymbolDescription, + n = i("zDbI").CHART_FONT_FAMILY, + o = i("di4O"), + a = o.watermarkProperty, + l = o.restoreWatermarkPropertyDefaults, + c = i("ikwP").drawScaled, + h = i("wZIs").applyDefaultsOverrides, + u = i("wZIs").applyPropertiesOverrides; + t.Watermark = function(e, t) { + var i = {}, + o = a(); + + function d(e, t) { + var s = e.font; + return i.hasOwnProperty(s) || (i[s] = {}), i[s].hasOwnProperty(t) || (i[s][t] = e + .measureText(t).width), i[s][t] + } + h(o, void 0, !1, "symbolWatermarkProperties"), o.listeners().subscribe(this, ( + function() { + e.updateSource(this) + })), this.destroy = function() { + o.listeners().unsubscribeAll(this) + }, this.properties = function() { + return o + }, this.restorePropertiesDefaults = function() { + l() + }, this.applyOverrides = function(e) { + u(o, void 0, !1, e, "symbolWatermarkProperties") + }; + var p = { + renderer: function(e, i) { + return { + draw: function(a, l) { + c(a, l.pixelRatio, (function() { + var l = t.symbolInfo(); + a.fillStyle = o.color.value(); + var c, h = l.name; + /QUANDL/.test(l.exchange) && ((c = h.split( + /\//)).length && (h = c[c + .length - 1])); + for (var u = { + description: l.description, + short_description: l + .short_description, + pro_name: l.pro_name, + short_name: l.name, + local_description: l + .local_description, + language: l.language + }, p = [{ + text: h ? h + ", " + s(t + .interval()) : "", + font: "96px " + n, + lineHeight: 117, + vertOffset: 0 + }, { + text: r(u) || "", + font: "48px " + n, + lineHeight: 58, + vertOffset: 5 + }], _ = 0, m = 0; m < p.length; m++) { + if ((b = p[m]).text) { + a.font = b.font; + var f = d(a, b.text); + b.zoom = f > i ? i / f : 1, _ += b + .lineHeight * b.zoom + } + } + var g = Math.max((e - _) / 2, 0); + for (m = 0; m < p.length; m++) { + var b; + (b = p[m]).text && (a.save(), a + .translate(i / 2, g), a + .textBaseline = "top", a + .textAlign = "center", a.font = + b.font, a.scale(b.zoom, b.zoom), + a.fillText(b.text, 0, b + .vertOffset), a.restore(), + g += b.lineHeight * b.zoom) + } + })) + } + } + }, + update: function() {} + }; + this.paneViews = function() { + return t.symbolInfo() && o.visibility.value() ? [p] : [] + } + } + }, + ri5u: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ChartLoadThemeUndoCommand", (function() { + return d + })); + var s = i("FIi8"), + r = i("Ocx9"), + n = i("wZIs"), + o = i("RDU5"); + + function a(e) { + const { + visible: t, + ...i + } = e; + return i + } + + function l(e) { + const { + visible: t, + ...i + } = e; + return i + } + + function c(e) { + const { + visible: t, + style: i, + symbol: s, + interval: r, + sessionId: n, + highLowAvgPrice: o, + showCountdown: c, + bidAsk: h, + prePostMarket: u, + ...d + } = e; + return { + bidAsk: a(h), + prePostMarket: l(u), + ...d + } + } + + function h(e) { + const { + scaleSeriesOnly: t, + showSeriesLastValue: i, + showStudyLastValue: s, + showSymbolLabels: r, + showBidAskLabels: n, + showPrePostMarketPriceLabel: o, + showStudyPlotLabels: a, + showFundamentalNameLabel: l, + showFundamentalLastValue: c, + seriesLastValueMode: h, + ...u + } = e; + return u + } + + function u(e) { + const { + topMargin: t, + bottomMargin: i, + ...s + } = e; + return s + } + class d extends o.UndoCommand { + constructor(e, t, i) { + var r, o, a; + super("Apply Chart Theme"), this._model = e, this._newSessionProps = t + .sessions || Object(n.factoryDefaults)("sessions"), ["candleStyle", + "hollowCandleStyle", "haStyle" + ].forEach(e => { + t.mainSourceProperties[e].wickUpColor = t.mainSourceProperties[e] + .wickUpColor || t.mainSourceProperties[e].wickColor, t + .mainSourceProperties[e].wickDownColor = t.mainSourceProperties[ + e].wickDownColor || t.mainSourceProperties[e].wickColor + }), t.chartProperties = null !== (r = t.chartProperties) && void 0 !== r ? + r : { + paneProperties: void 0, + scalesProperties: void 0 + }, t.chartProperties.paneProperties.vertGridProperties = null !== (o = t + .chartProperties.paneProperties.vertGridProperties) && void 0 !== o ? + o : t.chartProperties.paneProperties.gridProperties, t.chartProperties + .paneProperties.horzGridProperties = null !== (a = t.chartProperties + .paneProperties.horzGridProperties) && void 0 !== a ? a : t + .chartProperties.paneProperties.gridProperties, t.chartProperties + .paneProperties.legendProperties = this._model.properties().state() + .paneProperties.legendProperties; + const l = Object(n.factoryDefaults)("chartproperties"), + d = Object(s.deepExtend)({}, l, t.chartProperties); + this._newChartProps = { + paneProperties: u(d.paneProperties), + scalesProperties: h(d.scalesProperties) + }, e.timeScale().preserveBarSpacing() && delete this._newChartProps + .scalesProperties.barSpacing; + const p = Object(n.factoryDefaults)("chartproperties.mainSeriesProperties"), + _ = Object(s.deepExtend)({}, p, t.mainSourceProperties); + this._newSeriesProps = i ? _ : c(_); + const m = e.properties().state(); + this._oldChartProps = { + paneProperties: u(m.paneProperties), + scalesProperties: h(m.scalesProperties) + }, this._oldSeriesProps = c(e.mainSeries().properties().state()), this + ._oldSessionProps = this._model.sessions().properties().state() + } + undo() { + this._merge(this._oldChartProps, this._oldSeriesProps, this._oldSessionProps), + this._model.mainSeries().onChartStyleChanged(), this._model.updateScales(), + this._model.chartThemeLoaded() + } + redo() { + this._merge(this._newChartProps, this._newSeriesProps, this._newSessionProps), + this._model.mainSeries().onChartStyleChanged(), this._model.updateScales(), + this._model.chartThemeLoaded() + } + _merge(e, t, i) { + var s, n, o, a; + const l = this._model; + Object(r.saveDefaultProperties)(!0), e && (l.properties().paneProperties + .mergeAndFire(e.paneProperties), l.properties().scalesProperties + .mergeAndFire(e.scalesProperties)), l.mainSeries().priceScale() + .setMode({ + autoScale: null === (s = t.priceAxisProperties) || void 0 === s ? + void 0 : s.autoScale, + percentage: null === (n = t.priceAxisProperties) || void 0 === n ? + void 0 : n.percentage, + log: null === (o = t.priceAxisProperties) || void 0 === o ? void 0 : + o.log, + lockScale: null === (a = t.priceAxisProperties) || void 0 === a ? + void 0 : a.lockScale + }), l.mainSeries().properties().mergeAndFire(t), l.mainSeries().properties() + .saveDefaults(), + l.mainSeries().createPaneView(), l.mainSeries().invalidateBarStylesCache(), + l.recalculateAllPanes(), l.fullUpdate(), l.properties().saveDefaults(), l + .sessions().restoreState({ + properties: i + }, !1), Object(r.saveDefaultProperties)(!1) + } + } + }, + s1Gx: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "specialZOrderBase", (function() { + return s + })), i.d(t, "sortSourcesPreOrdered", (function() { + return r + })), i.d(t, "sortSources", (function() { + return n + })); + const s = 1e7, + r = { + ChartEventsSource: s + 1, + Dividends: s + 2, + Splits: s + 3, + Earnings: s + 4, + LineToolOrder: s + 5, + LineToolPosition: s + 6, + LineToolExecution: s + 7, + AlertLabel: s + 8 + }; + + function n(e) { + return [...e].sort((e, t) => e.zorder() - t.zorder()) + } + }, + s9sR: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SetResolutionUndoCommand", (function() { + return o + })); + var s = i("RDU5"), + r = i("LxhU"), + n = i("n5al"); + class o extends s.UndoCommand { + constructor(e, t, i, s) { + super(s), this._property = e, this._value = t, this._prevValue = e.value(), this + ._chartWidget = i + } + redo() { + this._chartWidget.screen.show(), this._property.setValue(this._value), this + ._handleResolution(this._value) + } + undo() { + this._chartWidget.screen.show(), this._property.setValue(this._prevValue), this + ._handleResolution(this._prevValue) + } + _handleResolution(e) { + const t = this._chartWidget.model().mainSeries().properties(), + i = t.style.value(), + s = Object(n.isRangeStyle)(i), + o = r.Interval.isRange(e); + !s && o ? t.style.setValue(11) : s && !o && t.style.setValue(Object(n + .getLastUsedStyle)()) + } + } + }, + sDZI: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "sessionsPreferencesDefault", (function() { + return r + })); + var s = i("HGP3"); + const r = { + graphics: { + backgrounds: { + outOfSession: { + color: s.colorsPalette["color-tv-blue-500"], + transparency: 92, + visible: !1 + }, + preMarket: { + color: "#FF9800", + transparency: 92, + visible: !1 + }, + postMarket: { + color: s.colorsPalette["color-tv-blue-500"], + transparency: 92, + visible: !1 + } + }, + vertlines: { + sessBreaks: { + color: "#4985e7", + style: 2, + visible: !1, + width: 1 + } + } + } + } + }, + sEk5: function(e, t, i) { + "use strict"; + var s = i("fTGZ").BarsMarksContainer, + r = i("mMWL"), + n = i("CCPt").UserDefinedBarsMarksTooltip; + e.exports = class extends s { + constructor(e) { + super(e), this.toolname = "UserDefinedBarsMarks"; + var t = this; + r.hideMarksOnBars().subscribe(this, (function() { + t._properties.visible.setValue(!r.hideMarksOnBars().value()) + })) + } + _initialize(e) { + this._properties.visible.setValue(!0) + } + userEditEnabled() { + return !1 + } + _plateViewData(e) { + var t = { + text: e.text + }; + return "object" == typeof e.color && (t.theme = "user_defined_theme", t + .overridedTheme = {}, t.overridedTheme.border = e.color.border, t + .overridedTheme.background = e.color.background), t + } + onClicked(e) { + var t = e.id; + this._marks[t].onClicked() + } + clearMarks() { + super.clearMarks(), this.onNeedRepaint.fire() + } + _getData(e) { + var t = this._model.mainSeries().symbolInfo(); + if (t) { + var i = this.roundRange(this._rangeDifference(e)), + s = this, + r = this._model.mainSeries().properties().interval.value(); + ChartApiInstance.getMarks(t, i.start, i.end, (function(t) { + t.forEach((function(e) { + s._marks[e.id] = e + }), s), s._loadedRange = s._rangeUnion(e, s + ._loadedRange), s.onNeedRepaint.fire() + }), r) + } + } + _createTooltip() { + return new n + } + updatePlateData(e, t) { + return t.barWidth = this.barWidth(), t.text = e.text, t.tooltipMargin = -1 * + Math.max(e.minSize / 2, .4 * this.barWidth()), t + } + hasContextMenu() { + return !1 + } + calcIsActualCurrency() { + this._isActualCurrency = !0 + } + calcIsActualUnit() { + this._isActualUnit = !0 + } + } + }, + sJA2: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ThemesApi", (function() { + return n + })); + var s = i("EsvI"), + r = i("oiZD"); + class n { + constructor(e) { + this._opts = e + } + isStdTheme() { + const e = this._opts.chartWidgetCollection.getAll().every(e => Object(s.isStdTheme)( + Object(s.extractThemeFromModel)(e.model()))); + return Promise.resolve(e) + } + async setStdTheme(e, t = !0, i) { + await Object(s.loadTheme)(e, !0, !1, this._opts.chartWidgetCollection, t, i) + } + setStdThemeForLayout(e, t = !0) { + Object(r.setTheme)(e), t && Object(s.syncTheme)() + } + getCurrentThemeName() { + return Object(s.getCurrentTheme)().name + } + } + }, + sQaR: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })); + var s = i("hY0g"), + r = i.n(s); + class n { + constructor() { + this._container = document.createElement("div"), this._visibility = new r.a(!1) + } + visible() { + return this._visibility.readonly() + } + _setVisibility(e) { + this._visibility.setValue(e) + } + } + }, + t2ex: function(e, t, i) { + "use strict"; + var s = i("5rJj"), + r = i("Ss5c").LineDataSource, + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends r { + constructor(e, t) { + super(e, t || l.createProperties()), this.version = l.version, this._properties + ._stateVersion = 1, i.e("lt-pane-views").then(i.t.bind(null, "R7Bt", 7)).then(({ + FibRetracementPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 2 + } + name() { + return "Fib Retracement" + } + migrateVersion(e, t, i) { + 1 === e && this.properties().extendLines.setValue(!0) + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "17v9"))) + .FibDrawingsWith24LevelsDefinitionsViewModel + } + static createProperties(e) { + var t = new s("linetoolfibretracement", e, !1, { + range: [1, 24], + names: ["coeff", "color", "visible"] + }); + return l._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e); + for (var t = [e.child("trendline").child("linewidth"), e.child("levelsStyle").child( + "linewidth")], i = [e.child("trendline").child("color")], s = 1; s <= l + .LevelsCount; s++) i.push(e.child("level" + s).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + fibLevelsBasedOnLogScale() { + return this.properties().fibLevelsBasedOnLogScale.value() && this.priceScale() + .isLog() + } + } + l.version = 2, l.LevelsCount = 24, t.LineToolFibRetracement = l + }, + tDUI: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("Eyy1").ensureNotNull, + r = i("Ss5c").LineDataSource, + n = i("gMtF").LineToolRiskRewardPriceAxisView, + o = i("mMWL"), + a = i("Ocx9").DefaultProperty, + l = i("zXvd").NumericFormatter, + c = i("wGNx").RiskRewardPointIndex, + h = i("H007"), + u = h.RiskRewordEntryPriceProperty, + d = h.RiskRewordStopPriceProperty, + p = h.RiskRewardTargetPriceProperty, + _ = i("ogJP").isNumber, + m = i("k9/m").PlotRowSearchMode; + class f extends r { + constructor(t, s) { + var r = s; + if (super(t, r), !s.stopLevel && !s.profitLevel) { + var o = t.timeScale().visibleBarsStrictRange(), + a = o.firstBar(), + h = o.lastBar(), + _ = t.mainSeries().priceRange(a, h), + m = t.mainSeries().priceScale(); + if (m.isLog()) { + var g = m.logicalToPrice(_.minValue()), + b = m.logicalToPrice(_.maxValue()); + _ = new e(g, b) + } + if (_ && !_.isEmpty()) { + var v = Math.round(.2 * _.length() * t.mainSeries().base()); + r.merge({ + stopLevel: v, + profitLevel: v + }) + } + } + var S = this; + r.stopLevel.listeners().subscribe(this, this.recalculate), r.stopLevel + .listeners().subscribe(null, (function() { + S.properties().stopPrice._listeners.fire(S.properties() + .stopPrice) + })), r.profitLevel.listeners().subscribe(this, this.recalculate), r + .profitLevel.listeners().subscribe(null, (function() { + S.properties().targetPrice._listeners.fire(S.properties() + .targetPrice) + })), r.addChild("entryPrice", new u(this)), r.addChild("stopPrice", + new d(this)), r.addChild("targetPrice", new p(this)), r.addProperty( + "riskSize", 0), r.addProperty("qty", 0), r.addProperty( + "amountTarget", r.accountSize.value()), r.addProperty("amountStop", + r.accountSize.value()), this._riskInPercentsFormatter = new l(2), + this._riskInMoneyFormatter = new l, r.risk.subscribe(this, this + ._recalculateRiskSize), r.accountSize.subscribe(this, this + ._recalculateRiskSize), r.riskDisplayMode.subscribe(this, this + ._recalculateRisk), r.riskDisplayMode.subscribe(this, this + ._recalculateRiskSize), r.entryPrice.subscribe(this, this + ._recalculateRiskSize), r.stopPrice.subscribe(this, this + ._recalculateRiskSize), r.profitLevel.subscribe(this, this + ._recalculateRiskSize), r.profitLevel.subscribe(this, this + .syncPriceLevels.bind(this)), r.stopLevel.subscribe(this, this + ._recalculateRiskSize), r.stopLevel.subscribe(this, this + .syncPriceLevels.bind(this)), r.qty.subscribe(this, this + ._recalculateRiskSize), this.pointAdded().subscribe(this, e => { + switch (e) { + case c.Entry: + case c.Close: + this._recalculateRiskSize() + } + }), this.pointChanged().subscribe(this, e => { + switch (e) { + case c.Entry: + case c.Close: + this._recalculateRiskSize() + } + }), "percents" === r.riskDisplayMode.value() && r.risk.value() > 100 && + r.riskDisplayMode.setValueSilently("money"), this + ._syncStateExclusions = ["points", "entryPrice", "stopPrice", + "targetPrice", "stopLevel", "profitLevel", "riskSize", "qty", + "amountTarget", "amountStop", "risk", "accountSize" + ], this.version = f.version, this._entryPriceAxisView = new n(this, { + colorProperty: r.linecolor, + priceProperty: r.entryPrice + }), this._stopPriceAxisView = new n(this, { + colorProperty: r.stopBackground, + priceProperty: r.stopPrice + }), this._profitPriceAxisView = new n(this, { + colorProperty: r.profitBackground, + priceProperty: r.targetPrice + }), i.e("lt-pane-views").then(i.t.bind(null, "u+oH", 7)).then(({ + RiskRewardPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + riskFormatter(e) { + return "percents" === e ? this._riskInPercentsFormatter : this + ._riskInMoneyFormatter + } + getRiskStep(e) { + return "percents" === e ? .01 : 1 + } + _roundValue(e) { + return parseFloat(e.toFixed(2)) + } + hasEditableCoordinates() { + return !1 + } + _recalculateRisk() { + var e = this.properties(), + t = e.riskDisplayMode.value(), + i = e.riskSize.value(), + s = e.accountSize.value(), + r = e.risk.value(); + r = "percents" === t ? this._roundValue(i / s * 100) : this._roundValue(s / + 100 * r), this._riskInChange = !0, + e.risk.setValue(this.riskFormatter(t).format(r)), this._riskInChange = ! + 1 + } + _recalculateRiskSize() { + if (!this._riskInChange) { + var e = this.properties(), + t = e.risk.value(), + i = e.riskDisplayMode.value(), + s = e.accountSize.value(); + "percents" === i ? e.riskSize.setValue(t / 100 * s) : t > s ? (e.risk + .setValue(s), e.riskSize.setValue(s)) : e.riskSize.setValue(t) + } + } + lastBarData() { + var e = this._model.mainSeries().bars().firstIndex(), + t = this._model.mainSeries().bars().lastIndex(); + if (null === e || null === t || isNaN(e) || isNaN(t)) return null; + var i = this.points(); + if (4 === i.length) { + var s = i[c.ActualClose]; + return s.index < e ? null : { + closePrice: s.price, + index: Math.min(t, s.index) + } + } + var r = i[c.Close]; + if (r.index < e) return null; + var n = Math.min(t, r.index), + o = this._model.mainSeries().bars().search(n, m.NearestLeft); + return null === o ? null : { + closePrice: o.value[TradingView.CLOSE_PLOT], + index: o.index + } + } + migrateVersion(e, t, i) { + if (1 === e && this._points.length >= 1) { + var s = []; + if (s.push(this._points[0]), n = { + price: (n = this._points[0]).price, + index: this._getClosePointIndex(n.index) + }, s.push(n), this._points[1] && s.push(this._points[1]), this + ._points[2] && s.push(this._points[2]), this._points = s, this + ._timePoint.length >= 1) { + var r = [], + n = this._timePoint[0]; + r.push(n); + var o = { + price: n.price, + time_t: n.time_t, + offset: this._getClosePointIndex(n.offset) + }; + r.push(o), this._timePoint[1] && s.push(this._points[1]), this + ._timePoint[2] && s.push(this._points[2]), this._timePoint = r + } + } + } + checkAlert() { + this.recalculate() + } + priceAxisViews(e, t) { + return this.isSourceHidden() || t !== this.priceScale() || this._model + .paneForSource(this) !== e ? null : [this._entryPriceAxisView, this + ._stopPriceAxisView, this._profitPriceAxisView + ] + } + updateAllViews() { + this.isActualSymbol() && this._properties.visible.value() && (o + .hideAllDrawings().value() && this.userEditEnabled() || (super + .updateAllViews(), this._entryPriceAxisView.update(), this + ._stopPriceAxisView.update(), this._profitPriceAxisView.update() + )) + } + restoreExternalState(e) { + (e = Object.assign({}, e), this.isActualSymbol()) || _(e.entryPrice) && ( + this._timePoint[0].price = e.entryPrice, delete e.entryPrice); + this.properties().merge(e) + } + _changeEntryPoint(e) { + var t = this.properties().stopPrice.value(), + i = this.properties().targetPrice.value(), + s = 1 / this._model.mainSeries().base(), + r = Math.min(t, i) + s, + n = Math.max(t, i) - s; + e.price = Math.max(r, Math.min(n, this._roundPrice(e.price))), super + .setPoint(0, e), this.properties().stopPrice.setValue(t), this + .properties().targetPrice.setValue(i) + } + setPoint(e, t, i) { + if (this.isActualSymbol()) { + switch (this._muteSyncLineStyle(), e) { + case 0: + this._changeEntryPoint(t); + break; + case 2: + this.properties().stopPrice.setValue(this.preparseStopPrice(t + .price)); + break; + case 3: + this.properties().targetPrice.setValue(this.preparseProfitPrice( + t.price)); + break; + case 1: + t.price = this._roundPrice(t.price), super.setPoint(1, t), this + .recalculate() + } + this._unmuteSyncLineStyleWithoutApplyingChanges(), this + .syncPriceLevels() + } + } + getPoint(e) { + switch (e) { + case 0: + return this._points[0]; + case 1: + return { + index: this._points[1].index, price: this._points[0].price + }; + case 2: + return { + index: this._points[0].index, price: this.stopPrice() + }; + case 3: + return { + index: this._points[0].index, price: this.profitPrice() + } + } + return null + } + setPoints(e) { + this._muteSyncLineStyle(), super.setPoints(e), this.recalculate(), this + ._unmuteSyncLineStyleWithoutApplyingChanges(), this.syncPriceLevels() + } + syncPriceLevels() { + if (this.linkKey().value()) { + var e = this.properties(), + t = { + entryPrice: e.entryPrice.value(), + stopLevel: e.stopLevel.value(), + profitLevel: e.profitLevel.value() + }; + o.changeLineStyle({ + linkKey: this.linkKey().value(), + state: t, + model: this._model + }) + } + } + pointsCount() { + return 1 + } + name() { + return "Risk/Reward" + } + addPoint(e) { + e.price = this._roundPrice(e.price), super.addPoint(e, null, !0); + var t = { + price: e.price, + index: this._getClosePointIndex(e.index) + }; + super._addPointIntenal(t, null, !0); + var i = this.calculateActualEntry(e, t); + i && (super._addPointIntenal(i, null, !0), (t = this.findClosePoint(i, + t)) && super._addPointIntenal(t, null, !0)); + return this._lastPoint = null, this.normalizePoints(), this + .createServerPoints(), !0 + } + setOwnerSource(e) { + super.setOwnerSource(e), this._model.mainSeries().symbolInfo() && (this + ._recalculateAmount(), this._recalculateQty()) + } + _roundPrice(e) { + var t = this._model.mainSeries().base(); + return Math.round(e * t) / t + } + recalculate() { + if (0 !== this.points().length) { + var e = this.properties().targetPrice.value(), + t = this.properties().stopPrice.value(), + i = [this._points[0], this._points[1]], + s = this.calculateActualEntry(this.points()[0], this.points()[1]); + if (s) { + i.push(s); + var r = this.findClosePoint(s, this.points()[1]); + r && i.push(r) + } + this._points = i, e !== this.properties().targetPrice.value() && this + .properties().targetPrice._listeners.fire(this.properties() + .targetPrice), t !== this.properties().stopPrice.value() && this + .properties().stopPrice._listeners.fire(this.properties().stopPrice) + } + } + start() { + super.start(), this.recalculate() + } + startMoving(e, t, i) { + e.logical.price = this._roundPrice(e.logical.price), super.startMoving(e, t, + i) + } + move(e, t, i) { + e.logical.price = this._roundPrice(e.logical.price), super.move(e, t, i), + this.recalculate(), this._entryPriceAxisView.update() + } + _correctPoints(e) { + return !!this.isActualSymbol() && r.prototype._correctPoints.call(this, [e[ + 0], e[1]]) + } + entryPrice() { + return this.points()[0].price + } + findClosePoint(e, t) { + for (var i = this._model.mainSeries().bars(), r = s(i.firstIndex()), n = + Math.max(e.index, r), o = s(i.lastIndex()), a = Math.min(o, t + .index), l = n; l <= a; l++) { + var c = i.valueAt(l); + if (null !== c) { + var h = this.checkStopPrice(c); + if (null != h) return { + index: l, + price: h + } + } + } + return null + } + calculateActualEntry(e, t) { + var i = this._model.mainSeries().bars(); + if (i.isEmpty()) return null; + for (var r = s(i.firstIndex()), n = Math.max(e.index, r), o = e.price, a = + s(i.lastIndex()), l = Math.min(a, t.index), c = n; c <= l; c++) { + var h = i.valueAt(c); + if (null !== h && h[TradingView.HIGH_PLOT] >= o && h[TradingView + .LOW_PLOT] <= o) return { + index: c, + price: o + } + } + return null + } + axisPoints() { + if (!this._points[c.ActualEntry]) return []; + var e = this._points[c.ActualEntry], + t = null; + if (4 === this._points.length) t = this._points[c.ActualClose]; + else { + var i = this.lastBarData(); + if (!i) return []; + t = { + index: i.index, + price: i.closePrice + } + } + return [e, t] + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, + "RYNR"))).RiskRewardDefinitionsViewModel + } + template() { + var e = this.properties(), + t = r.prototype.template.call(this); + return t.stopLevel = e.stopLevel.value(), t.profitLevel = e.profitLevel + .value(), t + } + _applyTemplateImpl(e) { + delete e.targetPrice, delete e.stopPrice, delete e.entryPrice, super + ._applyTemplateImpl(e); + var t = this.properties(); + void 0 !== e.stopLevel && t.stopLevel.setValue(e.stopLevel), void 0 !== e + .profitLevel && t.profitLevel.setValue(e.profitLevel) + } + getOrderTemplate() { + return null + } + _propertiesStateExclusions() { + return ["entryPrice", "stopPrice", "targetPrice"] + } + static _configureProperties(e) { + r._configureProperties(e), e.addExclusion("stopLevel"), e.addExclusion( + "profitLevel"), e.addExclusion("stopPrice"), e.addExclusion( + "targetPrice"), e.addExclusion("entryPrice") + } + _getClosePointIndex(e) { + var t = this._model.timeScale(), + i = Math.round(t.width() / t.barSpacing()); + return e + Math.max(3, Math.round(.15 * i)) + } + } + f.version = 2; + class g extends f { + constructor(e, t) { + super(e, t || g.createProperties()); + var i = this.properties(); + i.entryPrice.subscribe(this, this._recalculateQty), i.stopPrice.subscribe( + this, this._recalculateQty), i.riskSize.subscribe(this, this + ._recalculateQty), i.entryPrice.subscribe(this, this + ._recalculateAmount), i.profitLevel.subscribe(this, this + ._recalculateAmount), i.stopLevel.subscribe(this, this + ._recalculateAmount), i.accountSize.subscribe(this, this + ._recalculateAmount), i.riskSize.subscribe(this, this + ._recalculateAmount), i.qty.subscribe(this, this._recalculateAmount) + } + _recalculateQty() { + if (0 !== this.points().length) { + var e = this.properties(), + t = e.entryPrice.value(), + i = e.stopPrice.value(), + s = e.riskSize.value(), + r = this._model.mainSeries().pointValue(), + n = s / (Math.abs(i - t) * r); + e.qty.setValue(n) + } + } + _recalculateAmount() { + if (0 !== this.points().length) { + var e = this.properties(), + t = e.accountSize.value(), + i = e.entryPrice.value(), + s = e.qty.value(), + r = e.stopPrice.value(), + n = e.targetPrice.value(), + o = this._model.mainSeries().pointValue(), + a = this._roundValue(t + (i - n) * s * o), + l = this._roundValue(t - (r - i) * s * o); + e.amountTarget.setValue(a), e.amountStop.setValue(l) + } + } + name() { + return "Risk/Reward short" + } + stopPrice() { + return this.entryPrice() + this.properties().stopLevel.value() / this._model + .mainSeries().base() + } + profitPrice() { + return this.entryPrice() - this.properties().profitLevel.value() / this + ._model.mainSeries().base() + } + calculatePL(e) { + return this.entryPrice() - e + } + preparseStopPrice(e) { + e = this._roundPrice(e); + var t = this.entryPrice() + 1 / this._model.mainSeries().base(); + return Math.max(e, t) + } + preparseProfitPrice(e) { + e = this._roundPrice(e); + var t = this.entryPrice() - 1 / this._model.mainSeries().base(); + return Math.min(e, t) + } + checkStopPrice(e) { + var t = this.stopPrice(), + i = this.profitPrice(); + return e[TradingView.HIGH_PLOT] >= t ? this.stopPrice() : e[TradingView + .LOW_PLOT] <= i ? this.profitPrice() : null + } + _orderSide() { + throw new Error("not supported") + } + static createProperties(e) { + var t = new a("linetoolriskrewardshort", e); + return g._configureProperties(t), t + } + static _configureProperties(e) { + f._configureProperties(e) + } + } + class b extends f { + constructor(e, t) { + super(e, t || b.createProperties()); + var i = this.properties(); + i.entryPrice.subscribe(this, this._recalculateQty), i.stopPrice.subscribe( + this, this._recalculateQty), + i.riskSize.subscribe(this, this._recalculateQty), i.entryPrice + .subscribe(this, this._recalculateAmount), i.profitLevel.subscribe(this, + this._recalculateAmount), i.stopLevel.subscribe(this, this + ._recalculateAmount), i.accountSize.subscribe(this, this + ._recalculateAmount), i.riskSize.subscribe(this, this + ._recalculateAmount), i.qty.subscribe(this, this._recalculateAmount) + } + _recalculateQty() { + if (0 !== this.points().length) { + var e = this.properties(), + t = e.entryPrice.value(), + i = e.stopPrice.value(), + s = e.riskSize.value(), + r = this._model.mainSeries().pointValue(), + n = s / (Math.abs(t - i) * r); + e.qty.setValue(n) + } + } + _recalculateAmount() { + if (0 !== this.points().length) { + var e = this.properties(), + t = e.accountSize.value(), + i = e.entryPrice.value(), + s = e.qty.value(), + r = e.stopPrice.value(), + n = e.targetPrice.value(), + o = this._model.mainSeries().pointValue(), + a = this._roundValue(t + (n - i) * s * o), + l = this._roundValue(t - (i - r) * s * o); + e.amountTarget.setValue(a), e.amountStop.setValue(l) + } + } + stopPrice() { + return this.entryPrice() - this.properties().stopLevel.value() / this._model + .mainSeries().base() + } + profitPrice() { + return this.entryPrice() + this.properties().profitLevel.value() / this + ._model.mainSeries().base() + } + calculatePL(e) { + return e - this.entryPrice() + } + preparseStopPrice(e) { + e = this._roundPrice(e); + var t = this.entryPrice() - 1 / this._model.mainSeries().base(); + return Math.min(e, t) + } + preparseProfitPrice(e) { + e = this._roundPrice(e); + var t = this.entryPrice() + 1 / this._model.mainSeries().base(); + return Math.max(e, t) + } + checkStopPrice(e) { + var t = this.stopPrice(), + i = this.profitPrice(); + return e[TradingView.LOW_PLOT] <= t ? this.stopPrice() : e[TradingView + .HIGH_PLOT] >= i ? this.profitPrice() : null + } + name() { + return "Risk/Reward long" + } + _orderSide() { + throw new Error("not supported") + } + static createProperties(e) { + var t = new a("linetoolriskrewardlong", e); + return b._configureProperties(t), t + } + static _configureProperties(e) { + f._configureProperties(e) + } + } + t.LineToolRiskRewardLong = b, t.LineToolRiskRewardShort = g + }).call(this, i("Qb4w").PriceRange) + }, + tG6Q: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty; + class n extends s { + constructor(e, t) { + super(e, t || n.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "GS+0", 7)).then(({ + LineToolCircleLinesPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Cyclic Lines" + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "LX4V"))) + .CyclicAndSineLinesPatternDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolcirclelines", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolCircleLines = n + }, + tWVy: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return r + })), i.d(t, "b", (function() { + return n + })); + var s = i("aIyQ"); + const r = new(i.n(s).a); + + function n() { + r.fire() + } + }, + "tc+8": function(e, t, i) { + "use strict"; + (function(t) { + var s = i("ogJP").isFunction; + + function r(e) { + if (this._listeners = new t, this._childs = [], this._muteChildChanges = !1, + void 0 !== e) + if (this.isPrimitiveType(e)) this._value = e; + else + for (var i in e) this.addProperty(i, e[i]) + } + r.prototype.merge = function(e, t) { + var i = null; + if (t) var s = (i = []).length; + if (void 0 === e) return i; + if (this.isPrimitiveType(e)) return t && this._value !== e && i.push(this), this + ._value = e, i; + if (Array.isArray(e)) + for (var r = 0; r < e.length; r++) + if (this[r]) { + var n = this[r].merge(e[r], t); + t && (i = i.concat(n)) + } else this.addProperty(r, e[r]), t && i.push(this[r]); + else + for (var o in e) + if (this[o]) { + n = this[o].merge(e[o], t); + t && void 0 !== n && (i = i.concat(n)) + } else this.addProperty(o, e[o]), t && i.push(this[o]); + return t && i.length > s && i.push(this), i + }, r.prototype.mergeAndFire = function(e) { + var t = this.merge(e, !0); + this._muteChildChanges = !0, t.forEach((function(e) { + e._muteChildChanges = !0 + })), t.forEach((function(e) { + e._muteChildChanges = !1, e.listeners().fire(e) + })), this._muteChildChanges = !1, t.length > 0 && this.listeners().fire( + this) + }, r.prototype.state = function(e) { + var t = s(this.value) ? this.value() : void 0; + void 0 === t && (t = {}); + for (var i = 0; i < this._childs.length; i++) { + var r = this._childs[i]; + if (!e || -1 === e.indexOf(r)) + if (e) { + for (var n = [], o = 0; o < e.length; o++) { + var a = e[o]; + a.startsWith(r + ".") && n.push(a.substr(r.length + 1)) + } + t[r] = this[r].state(n) + } else t[r] = this[r].state() + } + return t + }, r.prototype.clone = function(e) { + return new r(this.state()) + }, r.prototype.isPrimitiveType = function(e) { + return null === e || (!!isNumber(e) || (!!new TradingView.TypeValidator(String) + .check(e) || TradingView.isBoolean(e))) + }, r.prototype.value = function() { + return this._value + }, r.prototype.listeners = function() { + return this._listeners + }, r.prototype.childCount = function() { + return this._childs.length + }, r.prototype.childNames = function() { + return this._childs + }, r.prototype.child = function(e) { + return this[e] + }, r.prototype.setValue = function(e, t) { + (this._value !== e || t) && (this._value = e, this._listeners.fire(this)) + }, r.prototype.setValueSilently = function(e) { + this._value = e + }, r.prototype.addProperty = function(e, t) { + var i = new r(t); + this[e] = i, this._childs.push(e), i.subscribe(this, this.childChanged) + }, r.prototype.removeProperty = function(e) { + this[e].unsubscribe(this, this.childChanged), delete this[e], this._childs = + this._childs.filter((function(t) { + return t !== e + })) + }, r.prototype.hasChild = function(e) { + return this._childs.indexOf(e) >= 0 + }, r.prototype.addChild = function(e, t) { + this[e] && this[e].unsubscribe(this, this.childChanged), this[e] = t, -1 === + this._childs.indexOf(e) && this._childs.push(e), t.subscribe(this, this + .childChanged) + }, r.prototype.childChanged = function(e, t) { + this._muteChildChanges || this.listeners().fire(this) + }, r.prototype.subscribe = function(e, t) { + this.listeners().subscribe(e, t, !1) + }, r.prototype.unsubscribe = function(e, t) { + this.listeners().unsubscribe(e, t) + }, r.prototype.unsubscribeAll = function(e) { + this.listeners().unsubscribeAll(e) + }, r.prototype.childs = function() { + return this + }, e.exports = r + }).call(this, i("aIyQ")) + }, + teHb: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ratioStudyItem", (function() { + return n + })); + var s = i("7dm8"); + class r extends s.a { + _doCalculation(e, t, i, s) { + return e * t / (i * s) + } + } + const n = { + name: "Ratio", + metainfo: { + _metainfoVersion: 15, + defaults: s.b, + plots: s.d, + styles: s.e, + description: "Ratio", + shortDescription: "Ratio", + is_price_study: !1, + inputs: s.c, + id: "Ratio@tv-basicstudies-1" + }, + constructor: r + } + }, + tqok: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "INVALID_TIME_POINT_INDEX", (function() { + return s + })); + const s = -2e6 + }, + txPx: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LOGLEVEL", (function() { + return n + })), i.d(t, "getLogLevel", (function() { + return _ + })), i.d(t, "isHighRateEnabled", (function() { + return m + })), i.d(t, "setLogLevel", (function() { + return f + })), i.d(t, "getRawLogHistory", (function() { + return g + })), i.d(t, "serializeLogHistoryEntry", (function() { + return b + })), i.d(t, "getLogHistory", (function() { + return v + })), i.d(t, "getLogger", (function() { + return y + })), i.d(t, "loggingOn", (function() { + return P + })), i.d(t, "loggingOff", (function() { + return C + })); + const s = "undefined" != typeof window ? window : {}; + let r = !1; + try { + localStorage.getItem(""), r = !0 + } catch (e) {} + var n; + ! function(e) { + e[e.ERROR = 1] = "ERROR", e[e.WARNING = 2] = "WARNING", e[e.INFO = 3] = "INFO", e[e.NORMAL = + 4] = "NORMAL", e[e.DEBUG = 5] = "DEBUG" + }(n || (n = {})); + let o = 0; + const a = []; + let l = null, + c = null, + h = null, + u = NaN, + d = n.WARNING, + p = !1; + + function _() { + return d + } + + function m() { + return p + } + + function f(e) { + e = Math.max(n.ERROR, Math.min(n.DEBUG, e)), d = e, x() + } + + function g(e, t) { + let i = a.reduce((e, t) => e.concat(t), []); + return i.sort((e, t) => e.id - t.id), void 0 !== t && (i = i.filter(e => e.subSystemId === + t)), "number" == typeof e && (i = i.slice(-e)), i + } + + function b(e) { + return new Date(e.timestamp).toISOString() + ":" + e.subSystemId + ":" + e.message.replace( + /"/g, "'") + } + + function v(e, t) { + return function(e, t) { + let i, s = 0, + r = 0; + for (i = e.length - 1; i >= 1 && (s += 8 * (1 + encodeURIComponent(e[i]).length), !( + i - 1 > 0 && (r = 8 * (1 + encodeURIComponent(e[i - 1]).length), s + r > + t))); i--); + return e.slice(i) + }(g(e, t).map(b), 75497472) + } + + function S(e, t, i, s) { + if (t === c && s.id === h) return; + const r = new Date; + if (e <= n.NORMAL && function(e, t, i, s, r) { + const n = { + id: o, + message: String(t), + subSystemId: s, + timestamp: Number(e) + }; + o += 1, i.push(n), void 0 !== r && i.length > r && i.splice(0, 1) + }(r, t, i, s.id, s.maxCount), e <= d && (!s.highRate || m()) && (!l || s.id.match(l))) { + const i = r.toISOString() + ":" + s.id + ":" + t; + switch (e) { + case n.DEBUG: + console.debug(i); + break; + case n.INFO: + case n.NORMAL: + s.color ? console.log("%c" + i, "color: " + s.color) : console.log(i); + break; + case n.WARNING: + console.warn(i); + break; + case n.ERROR: + console.error(i) + } + c = t, h = s.id, u && clearTimeout(u), u = setTimeout(() => { + c = null, h = null, u = NaN + }, 1e3) + } + } + + function y(e, t = {}) { + const i = []; + a.push(i); + const s = Object.assign(t, { + id: e + }); + + function r(e) { + return t => S(e, t, i, s) + } + return { + logDebug: r(n.DEBUG), + logError: r(n.ERROR), + logInfo: r(n.INFO), + logNormal: r(n.NORMAL), + logWarn: r(n.WARNING) + } + } + const w = y("logger"), + P = s.lon = (e, t) => { + f(n.DEBUG), w.logNormal("Debug logging enabled"), p = Boolean(e), l = t || null, x() + }, + C = s.loff = () => { + f(n.INFO), w.logInfo("Debug logging disabled") + }; + + function x() { + try { + r && (localStorage.setItem("tv.logger.logHighRate", String(p)), localStorage.setItem( + "tv.logger.loglevel", String(d))) + } catch (e) { + w.logWarn( + `Cannot save logger state (level: ${d}, high-rate: ${p}) to localStorage: ${e.message}` + ) + } + }! function() { + p = !!r && "true" === localStorage.getItem("tv.logger.logHighRate"); + let e = parseInt(r && localStorage.getItem("tv.logger.loglevel") || ""); + Number.isNaN(e) && (e = n.WARNING), f(e), w.logNormal( + `Init with settings - level: ${d}, high-rate: ${p}`) + }(), + s.performance && s.performance.now ? w.logNormal("Sync logger and perf times, now is " + s + .performance.now()) : w.logWarn("Perf time is not available") + }, + "u+0B": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TextWidthCache", (function() { + return r + })); + const s = /[2-9]/g; + class r { + constructor(e = 50) { + this._actualSize = 0, this._usageTick = 1, this._oldestTick = 1, this + ._tick2Labels = {}, this._cache = {}, this._maxSize = e + } + reset() { + this._actualSize = 0, this._cache = {}, this._usageTick = 1, this._oldestTick = 1, + this._tick2Labels = {} + } + measureText(e, t, i) { + return this._getMetrics(e, t, i).width + } + yMidCorrection(e, t, i) { + const s = this._getMetrics(e, t, i); + return ((s.actualBoundingBoxAscent || 0) - (s.actualBoundingBoxDescent || 0)) / 2 + } + _getMetrics(e, t, i) { + const r = i || s, + n = String(t).replace(r, "0"); + if (this._cache[n]) return this._cache[n].metrics; + if (this._actualSize === this._maxSize) { + const e = this._tick2Labels[this._oldestTick]; + delete this._tick2Labels[this._oldestTick], delete this._cache[e], this + ._oldestTick++, this._actualSize-- + } + e.save(), e.textBaseline = "middle"; + const o = e.measureText(n); + return e.restore(), 0 === o.width && t.length || (this._cache[n] = { + metrics: o, + tick: this._usageTick + }, this._tick2Labels[this._usageTick] = n, this._actualSize++, this + ._usageTick++), o + } + } + }, + u0yd: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "PaneRendererArea", (function() { + return a + })); + var s = i("Eyy1"), + r = i("gyZD"), + n = i("jFln"), + o = i("Zp/P"); + class a extends r.PaneRendererLine { + constructor(e) { + e.forceLineColor = !1, super(e) + } + draw(e, t) { + var i; + e.save(), e.scale(t.pixelRatio, t.pixelRatio); + const r = this._data; + if (0 === r.items.length) return; + e.lineCap = "butt", e.strokeStyle = r.lineColor, e.lineWidth = r.lineWidth, + Object(n.setLineStyle)(e, r.lineStyle), e.lineWidth = 1; + let a = 0; + for (; a < r.items.length && !Object(o.coordinateIsValid)(r.items[a].y);) a++; + let l = r.items.length - 1; + for (; l >= 0 && !Object(o.coordinateIsValid)(r.items[l].y);) l--; + if (a > l) return; + const c = {}, + h = r.items; + for (let e = a; e <= l; e++) { + const t = h[e]; + let i; + if (i = t.style ? t.style.color : r.lineColor, e < l && h[e + 1].style) { + const r = Object(s.ensureDefined)(h[e + 1].style).color; + if (i !== r) { + const e = c[r] || []; + e.push(t), c[r] = e + } + } + const n = c[i] || []; + n.push(t), c[i] = n + } + for (const t of Object.keys(c)) { + const s = c[t]; + e.beginPath(); + let n = 0; + for (let o = 0; o < s.length; o++) s[o].style && (null === (i = s[o] + .style) || void 0 === i ? void 0 : i.color) !== t && (e.moveTo(Math + .round(s[n].x), r.bottom), this._walkLine(e, s.slice(n, o), !0, + r.bottom), n = o); + if (e.moveTo(Math.round(s[n].x), r.bottom), this._walkLine(e, s.slice(n, s + .length), !0, r.bottom), e.closePath(), r.isSeries) { + const t = e.createLinearGradient(0, 0, 0, r.bottom); + t.addColorStop(0, r.color1), t.addColorStop(1, r.color2), e.fillStyle = + t, r.simpleMode = !0 + } else e.fillStyle = t; + e.fill() + } + e.lineWidth = r.lineWidth, e.restore(), super.draw(e, t) + } + } + }, + uDHo: function(e, t, i) { + "use strict"; + var s, r; + + function n(e, t) { + return "period-back" === e.type && "period-back" === t.type ? e.value === t.value : + "time-range" === e.type && "time-range" === t.type && (e.from === t.from && e.to === t + .to) + } + i.r(t), i.d(t, "Helpers", (function() { + return s + })), i.d(t, "TIMEFRAMETYPE", (function() { + return r + })), i.d(t, "areEqualTimeFrames", (function() { + return n + })), + function(e) { + e.extractErrorReason = function(e) { + return e.params[1] + } + }(s || (s = {})), + function(e) { + e.PeriodBack = "period-back", e.TimeRange = "time-range" + }(r || (r = {})) + }, + ufwo: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "rangesAreEqual", (function() { + return n + })); + var s = i("uDHo"), + r = i("LxhU"); + + function n(e, t) { + return !!r.Interval.isEqual(e.res, t.res) && Object(s.areEqualTimeFrames)(e.val, t.val) + } + }, + ulZB: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return n + })), i.d(t, "b", (function() { + return o + })); + var s = i("aIyQ"), + r = i.n(s); + class n { + constructor(e, t, i, s, n) { + this._onChange = new r.a, this._handleChange = () => { + this._onChange.fire(this.get()) + }, this._crossTabEvents = e, this._jsonKeyValueStore = t, this + .CROSSTAB_EVENT_NAME = i, this.JSON_STORE_KEY = s, this.defaultStoreValue = this + ._serialize(n), this._subscribe() + } + get() { + const e = this._jsonKeyValueStore.getJSON(this.JSON_STORE_KEY, this + .defaultStoreValue); + return this._deserialize(e) + } + set(e, t) { + const i = this._serialize(e); + this._jsonKeyValueStore.setJSON(this.JSON_STORE_KEY, i, t), this._crossTabEvents + .emit(this.CROSSTAB_EVENT_NAME), this._onChange.fire(e) + } + getOnChange() { + return this._onChange + } + destroy() { + this._unsubscribe(), this._onChange.destroy(), delete this._onChange + } + _subscribe() { + this._crossTabEvents.on(this.CROSSTAB_EVENT_NAME, this._handleChange), this + ._jsonKeyValueStore.onSync.subscribe(this, this._handleChange) + } + _unsubscribe() { + this._crossTabEvents.off(this.CROSSTAB_EVENT_NAME, this._handleChange), this + ._jsonKeyValueStore.onSync.unsubscribe(this, this._handleChange) + } + } + class o extends n { + _serialize(e) { + return e + } + _deserialize(e) { + return e + } + } + }, + v5F8: function(e, t, i) { + "use strict"; + var s = i("5rJj"), + r = i("aDyP").LineToolPitchfork; + class n extends r { + constructor(e, t) { + super(e, t || n.createProperties()) + } + name() { + return "Modified Schiff Pitchfork" + } + static createProperties(e) { + var t = new s("linetoolschiffpitchfork", e, !1, { + range: [0, 8] + }); + return n._configureProperties(t), t + } + static _configureProperties(e) { + r._configureProperties(e) + } + } + t.LineToolSchiffPitchfork = n + }, + vAx0: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("VdBB").HitTestResult, + n = i("Zy3/").CompositeRenderer, + o = (i("LxhU").Interval, i("jCNj").utc_to_cal), + a = i("jCNj").get_timezone, + l = i("3t3b").dateFormatProperty, + c = i("gQ5K").DateFormatter, + h = i("z+cS").VerticalLineRenderer, + u = i("Khfk").LollipopRenderer, + d = i("u+0B").TextWidthCache; + i("zDbI").CHART_FONT_FAMILY, window.t("Earnings"), window.t("Standardized"), window.t( + "As reported"), window.t("Estimate"), window.t("Surprise"), window.t("Split"), window.t( + "Dividends"), window.t("Net"), window.t("Gross"), window.t("Date"), window.t( + "Period Ending"), window.t("Payment Date"); + t.ESDPaneView = class { + constructor(e, t, i) { + this._lastClickedId = null, this._model = e, this._study = t, this + ._lollipops = {}, this._lollipopsCounter = 0, this._invalidated = !0, this + ._hideLollipops = !1, this.defaultStyle = null, this.hoveredStyle = null, + this.activeStyle = null, this._hitTestHandler = i, this._renderer = new n, + this._textWidthCache = new d, this._recreateStyles(e), this + ._onPaneBgChangeBound = this.onPaneBgChange.bind(this), e.backgroundColor() + .subscribe(this._onPaneBgChangeBound), e.mainSeries() + .onSymbolIntervalChanged().subscribe(this, this._onSymbolOrIntervalChanged) + } + destroy() { + this._model.backgroundColor().unsubscribe(this._onPaneBgChangeBound), this + ._model.mainSeries().onSymbolIntervalChanged().unsubscribeAll(this) + } + onPaneBgChange() { + this._recreateStyles(this._model) + } + onClickOutside(e) { + if (null !== this._lastClickedId && e) { + var t = null; + if (e.touches && 1 === e.touches.length) { + var i = e.target.getBoundingClientRect(), + r = e.touches[0]; + t = new s(r.clientX - i.left, r.clientY - i.top) + } else t = new s(e.offsetX, e.offsetY); + var n = this._renderer.hitTest(t); + null !== n && n.data().activeItem === this._lollipops[this._lastClickedId] + .itemIndex || this.clearLastClicked() + } else this.clearLastClicked() + } + clearLastClicked() { + void 0 !== this._lollipops[this._lastClickedId] && (this._lollipops[this + ._lastClickedId].active = !1), this._lastClickedId = null + } + getLastClickedLollipopId() { + return this._lastClickedId + } + _recreateStyles(e) { + this._stylesCache = null + } + _setStackStudies() { + this._stackStudies = [] + } + _getY() { + for (var e = 0, t = this._model.panes(), i = t.length; i--;) { + var s = t[i]; + s.containsMainSeries() && (e += s.height()) + } + return e + } + update() { + this._invalidated = !0 + } + updateImpl(e, t) { + this._setStackStudies(); + var i = this, + s = this._study.data(), + r = this._model.timeScale(), + n = r.visibleBarsStrictRange(), + o = this._model.mainSeries().bars(), + a = this._study.priceScale(), + l = this._model.mainSeries().firstBar(); + if (a && !a.isEmpty() && !r.isEmpty() && l && s) { + for (var c in this._hideLollipops = !1, this._lollipops) this._lollipops + .hasOwnProperty(c) && (this._lollipops[c].visible = !1); + var h = this._getY(), + u = n.firstBar(), + d = n.lastBar(); + s.range(u, d).each((function(e, t) { + for (var s = 0, n = 0; n < i._stackStudies.length; ++n) i + ._stackStudies[n].data().contains(e) && ++s; + e > u && e < d && i.addLollipop(h, o, r, a, e, t, s) + })), this.afterUpdate(h, o, r, a), this._createRenderers(e, t) + } + } + addLollipop(e, t, i, r, n, o, a) { + var l = o[0], + c = this._model.mainSeries().symbolInfo(); + if (c) { + var h = c.name, + u = null, + d = this._study.metaInfo().id + "_" + l + "_" + h, + p = void 0 !== this._lollipops[d] ? this._lollipops[d].itemIndex : this + ._lollipopsCounter++, + _ = this._model.lastHittestData(), + m = d === this.getLastClickedLollipopId(), + f = this._model.hoveredSource() === this._study && null !== _ && _ + .activeItem === p; + if (f || m) { + var g = t.valueAt(n); + if (null !== g) { + var b = g[TradingView.LOW_PLOT], + v = this._model.mainSeries().firstValue(); + u = r.priceToCoordinate(b, v) + } + } + this._lollipops[d] = Object.assign({ + id: d, + itemIndex: p, + visible: !0, + basePoint: new s(i.indexToCoordinate(n), e), + hovered: f, + active: m, + barY: u, + stack: a + }, this.extraData(o)) + } + } + afterUpdate(e, t, i) {} + extraData(e) { + throw new Error("Not Implemented") + } + createTooltipContent(e, t) { + throw new Error("Not Implemented") + } + showBarLine() { + return !0 + } + getStyle(e) { + var t = e.active ? "active" : e.hovered ? "hovered" : "default", + i = t; + if (e.stack && (i += "_stack:" + e.stack), "active" === i) return this + .activeStyle; + if ("hovered" === i) return this.hoveredStyle; + if ("default" === i) return this.defaultStyle; + if (this._stylesCache || (this._stylesCache = {}), !this._stylesCache[i]) { + var s = TradingView.clone("active" === t ? this.activeStyle : "hovered" === + t ? this.hoveredStyle : this.defaultStyle); + e.stack && (s.lollipop.incHeight = 25 * e.stack), this._stylesCache[i] = s + } + return this._stylesCache[i] + } + hasTooltip(e) { + return !0 + } + renderer(e, t) { + return this._invalidated && (this.updateImpl(t, e), + this._invalidated = !1), this._hideLollipops ? null : this._renderer + } + _createRenderers(e, t) { + for (var i in this._renderer.clear(), this._lollipops) + if (this._lollipops.hasOwnProperty(i)) { + var r = this._lollipops[i]; + if (r.visible) { + var n = this.getStyle(r), + o = { + id: r.id, + centerPoint: new s(r.basePoint.x, r.basePoint.y - n.lollipop + .bottom - n.lollipop.height / 2 - (n.lollipop + .incHeight || 0)), + style: n.lollipop + }, + a = { + activeItem: r.itemIndex, + clickHandler: this._lollipopMouseClickHandler.bind(this, o), + tapHandler: this._lollipopMouseClickHandler.bind(this, o) + }; + if (this._renderer.append(this._createRendererForLollipop(o, a)), (r + .hovered || r.active) && this.hasTooltip(r) && r.barY && + this.showBarLine()) { + var l = { + width: e, + height: t, + color: n.strokeStyle, + linestyle: n.barLine.lineStyle, + linewidth: n.lineWidth, + x: r.basePoint.x, + top: 0, + bottom: r.basePoint.y - n.lollipop.bottom - n.lollipop + .height + }, + c = new h; + c.setData(l), this._renderer.insert(c) + } + } + } + } + _createRendererForLollipop(e, t) { + return new u(e, new r(r.CUSTOM, t), this._textWidthCache) + } + _lollipopMouseClickHandler(e, t) { + t.preventDefault(); + var i = e.id; + if (this._lastClickedId = this._lastClickedId === i ? null : i, null !== this + ._lastClickedId) { + var r = e.style.width / 2, + n = e.style.height / 2, + o = new s(t.clientX - t.localX + e.centerPoint.x, t.clientY - t.localY + + e.centerPoint.y), + a = { + target: t.target, + left: o.x - r, + top: o.y - n, + right: o.x + r, + bottom: o.x + n + }; + this._hitTestHandler(a, () => { + var e = this._lollipops[i], + t = this.createTooltipContent(e); + return t ? [t] : null + }) + } + } + _formatDate(e) { + let t = "Etc/UTC"; + const i = this._model.mainSeries(); + if (!i.isDWM() && (t = this._model.properties().timezone.value(), "exchange" === + t)) { + const e = i.symbolInfo(); + t = e && e.timezone || "" + } + var s = a(t), + r = o(s, e); + return new c(l.value()).format(r) + } + _onSymbolOrIntervalChanged() { + this._lollipops = {}, this._lollipopsCounter = 0, this._renderer.clear(), this + .clearLastClicked() + } + } + }, + vIQA: function(e, t, i) { + "use strict"; + var s = i("ocLq"); + i("2cgs"); + var r = i("hyq/").pivotPointsStandardStudyItem, + n = i("krs7").volumeProfileVisibleRangeStudyItem, + o = i("+Qfv").volumeProfileFixedRangeVbPStudyItem, + a = i("+Qfv").volumeProfileFixedRangeBSStudyItem, + l = i("QCyK").spreadStudyItem, + c = i("teHb").ratioStudyItem, + h = i("+PIq").regressionTrendStudyItem; + JSServer.studyLibrary = JSServer.studyLibrary.concat([{ + name: "Compare", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !0, + defaults: { + styles: { + compare: { + linestyle: 0, + linewidth: 2, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#9C27B0" + } + }, + inputs: { + source: "close", + symbol: "" + } + }, + plots: [{ + id: "compare", + type: "line" + }], + styles: { + compare: { + title: "Plot", + histogramBase: 0 + } + }, + description: "Compare", + shortDescription: "Compare", + is_price_study: !0, + inputs: [{ + defval: "close", + id: "source", + name: "Source", + options: ["open", "high", "low", "close", "hl2", "hlc3", + "ohlc4" + ], + type: "text" + }, { + id: "symbol", + name: "Symbol", + type: "symbol", + isHidden: !0 + }], + id: "Compare@tv-basicstudies-1", + format: { + type: "inherit" + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._context.new_sym(t(1), s.Std.period(this + ._context)) + }, this.main = function(e, t) { + this._context = e; + var i = this._context.new_unlimited_var(this._context.symbol + .time); + this._context.select_sym(1); + var r = this._context.new_unlimited_var(this._context.symbol + .time), + n = s.Std[t(0)](this._context), + o = this._context.new_unlimited_var(n); + return this._context.select_sym(0), [o.adopt(r, i, 0)] + } + } + }, { + name: "Overlay", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !0, + defaults: { + styles: {}, + inputs: { + symbol: "" + } + }, + plots: [{ + id: "open", + type: "line" + }, { + id: "high", + type: "line" + }, { + id: "low", + type: "line" + }, { + id: "close", + type: "line" + }], + styles: { + open: { + title: "Open" + }, + high: { + title: "High" + }, + low: { + title: "Low" + }, + close: { + title: "Close" + } + }, + description: "Overlay", + shortDescription: "Overlay", + is_price_study: !1, + inputs: [{ + id: "symbol", + name: "symbol", + defval: "", + type: "symbol", + isHidden: !0 + }], + id: "Overlay@tv-basicstudies-1", + format: { + type: "price", + precision: 4 + } + }, + constructor: function() { + this.init = function(e, t) { + this._context = e, this._context.new_sym(t(0), s.Std.period(this + ._context)) + }, this.main = function(e, t) { + this._context = e; + var i = this._context.new_unlimited_var(this._context.symbol + .time); + this._context.select_sym(1); + var r = this._context.new_unlimited_var(this._context.symbol + .time), + n = this._context.new_unlimited_var(s.Std.open(this + ._context)), + o = this._context.new_unlimited_var(s.Std.high(this + ._context)), + a = this._context.new_unlimited_var(s.Std.low(this + ._context)), + l = this._context.new_unlimited_var(s.Std.close(this + ._context)); + return this._context.select_sym(0), [n.adopt(r, i, 1), o.adopt( + r, i, 1), a.adopt(r, i, 1), l.adopt(r, i, 1)] + } + } + }, { + name: "Volume", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + vol: { + linestyle: 0, + linewidth: 1, + plottype: 5, + trackPrice: !1, + transparency: 50, + visible: !0, + color: "#000080" + }, + vol_ma: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !1, + color: "#2196F3" + } + }, + palettes: { + volumePalette: { + colors: { + 0: { + color: "#EF5350", + width: 1, + style: 0 + }, + 1: { + color: "#26A69A", + width: 1, + style: 0 + } + } + } + }, + inputs: { + showMA: !1, + length: 20, + col_prev_close: !1 + } + }, + plots: [{ + id: "vol", + type: "line" + }, { + id: "volumePalette", + palette: "volumePalette", + target: "vol", + type: "colorer" + }, { + id: "vol_ma", + type: "line" + }], + styles: { + vol: { + title: "Volume", + histogramBase: 0 + }, + vol_ma: { + title: "Volume MA", + histogramBase: 0 + } + }, + description: "Volume", + shortDescription: "Volume", + is_price_study: !1, + palettes: { + volumePalette: { + colors: { + 0: { + name: "Falling" + }, + 1: { + name: "Growing" + } + } + } + }, + inputs: [{ + id: "showMA", + name: "show MA", + defval: !1, + type: "bool", + isHidden: !0 + }, { + id: "length", + name: "MA Length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + defval: !1, + id: "col_prev_close", + name: "Color based on previous close", + type: "bool" + }], + id: "Volume@tv-basicstudies-1", + format: { + type: "volume" + } + }, + constructor: function() { + this.f_0 = function(e, t) { + return s.Std.gt(e, t) ? 0 : 1 + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = s.Std.volume(this._context), + r = s.Std.volume(this._context), + n = this._context.new_var(r), + o = s.Std.sma(n, this._input(1), this._context), + a = this._context.new_var(s.Std.close(this._context)); + return [i, a.get(1) && this._input(2) ? this.f_0(a.get(1), s.Std + .close(this._context)) : this.f_0(s.Std.open(this + ._context), s.Std.close(this._context)), o] + } + } + }, { + name: "ZigZag", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 2, + plottype: 0, + trackPrice: !1, + transparency: 0, + visible: !0, + color: "#2196F3" + } + }, + inputs: { + in_0: 5, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + target: "plot_0", + type: "dataoffset" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Zig Zag", + shortDescription: "ZigZag", + is_price_study: !0, + classId: "ScriptWithDataOffset", + inputs: [{ + id: "in_0", + name: "deviation", + defval: 5, + type: "float", + min: .001, + max: 100 + }, { + id: "in_1", + name: "depth", + defval: 10, + type: "integer", + min: 2, + max: 1e3 + }], + id: "ZigZag@tv-basicstudies-1", + format: { + type: "inherit" + } + }, + constructor: function() { + this.main = function(e, t) { + this._context = e, this._input = t; + var i = this._input(0), + r = this._input(1), + n = i / 100, + o = Math.ceil(r / 2); + return [s.Std.zigzag(n, o, this._context), s.Std.zigzagbars(n, + o, this._context)] + } + } + }, { + name: "Sessions", + metainfo: { + _metainfoVersion: 52, + defaults: { + graphics: { + vertlines: { + sessBreaks: { + color: "#4985e7", + style: 2, + visible: !1, + width: 1 + } + } + }, + linkedToSeries: !0 + }, + description: "Sessions", + graphics: { + vertlines: { + sessBreaks: { + name: "Session Break", + halign: "left" + } + } + }, + id: "Sessions@tv-basicstudies-1", + inputs: [], + is_hidden_study: !0, + is_price_study: !0, + name: "Sessions@tv-basicstudies", + palettes: {}, + plots: [], + shortDescription: "Sessions", + format: { + type: "inherit" + } + }, + constructor: function() { + function e(e, t) { + return { + id: e, + index: e, + extendBottom: !0, + extendTop: !0 + } + } + this.init = function() { + this._times = [] + }, this._getVerticalLineData = function(t) { + return s.Std.selectSessionBreaks(t, this._times).map(e) + }, this.main = function(e, t) { + if (s.Std.isdwm(e)) return null; + var i = s.Std.time(e); + if (isNaN(i)) return null; + var r = this._times.length; + if (0 !== r && this._times[r - 1] === i || this._times.push(i), + !e.symbol.isLastBar || !e.symbol.isNewBar) return null; + var n = this._getVerticalLineData(e); + return 0 === n.length ? null : { + nonseries: !0, + type: "study_graphics", + data: { + graphicsCmds: { + create: { + vertlines: [{ + styleId: "sessBreaks", + data: n + }] + }, + erase: [{ + action: "all" + }] + } + } + } + } + } + }, { + name: "SuperTrend", + metainfo: { + _metainfoVersion: 52, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 3, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + }, + plot_2: { + linestyle: 0, + linewidth: 3, + plottype: "shape_arrow_up", + trackPrice: !1, + location: "BelowBar", + transparency: 35, + visible: !0, + color: "#00FF00" + }, + plot_3: { + linestyle: 0, + linewidth: 3, + plottype: "shape_arrow_down", + trackPrice: !1, + location: "AboveBar", + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + palettes: { + palette_0: { + colors: { + 0: { + color: "#008000", + width: 3, + style: 0 + }, + 1: { + color: "#800000", + width: 3, + style: 0 + } + } + } + }, + inputs: { + in_0: 10, + in_1: 3 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + palette: "palette_0", + target: "plot_0", + type: "colorer" + }, { + id: "plot_2", + type: "shapes" + }, { + id: "plot_3", + type: "shapes" + }], + styles: { + plot_0: { + title: "SuperTrend", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_2: { + title: "Up Arrow", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_3: { + title: "Down Arrow", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "SuperTrend", + shortDescription: "SuperTrend", + is_price_study: !0, + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + } + }, + valToIndex: { + 0: 0, + 1: 1 + } + } + }, + inputs: [{ + id: "in_0", + name: "Length", + defval: 10, + type: "integer", + min: 1, + max: 100 + }, { + id: "in_1", + name: "Factor", + defval: 3, + type: "float", + min: 1, + max: 100 + }], + id: "SuperTrend@tv-basicstudies-1", + scriptIdPart: "", + name: "SuperTrend", + isCustomIndicator: !0, + format: { + type: "inherit" + } + }, + constructor: function() { + this.f_0 = function() { + var e = this._input(0), + t = this._input(1), + i = s.Std.atr(e, this._context), + r = (e = s.Std.hl2(this._context) + i * t, i = s.Std.hl2( + this._context) - i * t, this._context.new_var(s.Std + .close(this._context))), + n = (t = this._context.new_var(), s.Std.max(i, t.get(1))); + return t.set(s.Std.gt(r.get(1), t.get(1)) ? n : i), i = this + ._context.new_var(), n = s.Std.min(e, i.get(1)), i.set(s.Std + .lt(r.get(1), i.get(1)) ? n : e), e = this._context + .new_var(), r = s.Std.nz(e.get(1), 1), r = s.Std.lt(s.Std + .close(this._context), t.get(1)) ? -1 : r, e.set(s.Std + .gt(s.Std.close(this._context), i.get(1)) ? 1 : r), [t = + s.Std.eq(e.get(0), 1) ? t.get(0) : i.get(0), s.Std.eq(e + .get(0), 1) ? 0 : 1, 1 === e.get(0) && -1 === e.get( + 1) ? 1 : NaN, -1 === e.get(0) && 1 === e.get(1) ? + 1 : NaN + ] + }, this.main = function(e, t) { + this._context = e, this._input = t; + var i = this.f_0(); + return [i[0], i[1], i[2], i[3]] + } + } + }, r, n, o, a, l, c, h]) + }, + vPbs: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "CHART_WIDGET_COLLECTION_SERVICE", (function() { + return r + })), i.d(t, "chartWidgetCollectionService", (function() { + return n + })), i.d(t, "CollectionViewMode", (function() { + return o + })); + var s = i("eqEH"); + const r = { + id: "ChartWidgetCollectionService" + }; + + function n() { + return Object(s.hasService)(r) ? Object(s.service)(r) : null + } + var o; + ! function(e) { + e.Multichart = "multichart", e.ForceFullscreen = "force-fullscreen" + }(o || (o = {})) + }, + vTIA: function(e, t, i) { + "use strict"; + var s, r; + i.r(t), i.d(t, "PositionPLDisplay", (function() { + return s + })), i.d(t, "TradingSourcesHorizontalAlignment", (function() { + return r + })), i.d(t, "tradingPreferencesDefault", (function() { + return n + })), i.d(t, "CustomSourceLayer", (function() { + return o + })), + function(e) { + e[e.Money = 0] = "Money", e[e.Pips = 1] = "Pips", e[e.Percentage = 2] = "Percentage" + }(s || (s = {})), + function(e) { + e[e.Left = 0] = "Left", e[e.Center = 1] = "Center", e[e.Right = 2] = "Right" + }(r || (r = {})); + const n = { + showPositions: !1, + positionPL: { + visibility: !1, + display: s.Money + }, + showOrders: !1, + showExecutions: !1, + extendLeft: !1, + lineLength: 0, + horizontalAlignment: r.Left, + lineWidth: 0, + lineStyle: 0 + }; + var o; + ! function(e) { + e[e.Background = 0] = "Background", e[e.Foreground = 1] = "Foreground", e[e.Topmost = 2] = + "Topmost" + }(o || (o = {})) + }, + vaqD: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LoadingScreen", (function() { + return o + })); + var s = i("Kxc7"), + r = i("4vW/"), + n = i("YWnQ"); + class o { + constructor(e, t) { + this._showed = !1, this._cw = e, this._element = document.createElement("div"), this + ._element.classList.add("chart-loading-screen"), this._shield = document + .createElement("div"), this._shield.classList.add( + "chart-loading-screen-shield"), this._element.appendChild(this._shield), t + .appendChild(this._element), this._cw.withModel(this, this._connectToModel) + } + show() { + this._cw.setInLoadingState(!0), this._showed || (this._showed = !0, this._show()) + } + hide() { + this._cw.setInLoadingState(!1), this._showed && this._hide() + } + isShown() { + return this._showed + } + _connectToModel() { + const e = this._cw.model().mainSeries().dataEvents(); + e.symbolError().subscribe(this, e => { + e !== n.permissionDenied && this.hide() + }), + e.seriesError().subscribe(this, () => { + Object(s.enabled)("hide_loading_screen_on_series_error") && this.hide() + }), e.completed().subscribe(this, this.hide) + } + _show() { + const e = this._cw.properties().childs().paneProperties.childs(); + let t; + if (e.backgroundType.value() === r.ColorType.Solid) t = e.background.value(); + else { + t = `linear-gradient(${e.backgroundGradientStartColor.value()},${e.backgroundGradientEndColor.value()})` + } + this._shield.style.background = t, this._element.classList.add("fade") + } + _hide() { + this._showed = !1, this._element.classList.remove("fade") + } + } + }, + vq8G: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "SelectionRenderer", (function() { + return o + })); + var s = i("VdBB"), + r = i("//lt"), + n = i("f6yo"); + class o { + constructor(e) { + this._data = e || null + } + setData(e) { + this._data = e + } + draw(e, t) { + if (null === this._data || !this._data.visible) return; + const i = t.pixelRatio; + e.strokeStyle = void 0 !== this._data.color ? this._data.color : "#1E53E5", e + .lineCap = "butt"; + const s = Math.max(1, Math.floor(i)); + e.lineWidth = s; + const r = this._data.vertOffset || 0; + for (let t = 0; t < this._data.points.length; ++t) { + const o = this._data.points[t]; + (n = o, Number.isFinite(n.x) && Number.isFinite(n.y)) && (e.fillStyle = this + ._data.bgColors[t], this._drawMarker(e, o, r, s, i)) + } + var n + } + hitTest(e) { + if (!this._data || !this._data.visible) return null; + for (let t = 0; t < this._data.points.length; t++) { + const i = this._data.points[t]; + if (i.subtract(e).length() <= 5.5) { + const e = void 0 !== this._data.pointsCursorType ? this._data + .pointsCursorType[t] : r.PaneCursorType.Default; + return new s.HitTestResult(this._data.hittestResult, { + pointIndex: i.data, + cursorType: e + }) + } + } + return null + } + doesIntersectWithBox(e) { + return !!this._data && this._data.points.some(t => Object(n.pointInBox)(t, e)) + } + _drawMarker(e, t, i, s, r) { + let n = Math.round(3.5 * r * 2); + n % 2 != s % 2 && (n += 1); + let o = Math.round(n + 2 * (.5 * s + .75 * r)); + o % 2 != s % 2 && (o += 1); + const a = Math.round(t.x * r), + l = Math.round((t.y + i) * r), + c = s % 2 / 2; + e.beginPath(), e.arc(a + c, l + c, o / 2, 0, 2 * Math.PI, !0), e.closePath(), e + .fill(), e.beginPath(), e.arc(a + c, l + c, n / 2, 0, 2 * Math.PI, !0), e + .closePath(), e.stroke() + } + } + }, + vwKG: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "showTooManyStudiesNotice", (function() { + return n + })); + var s = i("YFKU"), + r = i("fZEr"); + + function n(e) { + "number" != typeof e && (e = TradingView.STUDY_COUNT_LIMIT), Object(r.showWarning)({ + title: Object(s.t)("Warning"), + text: Object(s.t)( + "Studies limit exceeded: {number} studies per layout.\nPlease, remove some studies." + ).format({ + number: e + }) + }) + } + }, + w4Ji: function(e, t, i) { + "use strict"; + + function s(e) { + const t = new Map; + return e.plots.forEach((e, i) => { + t.set(e.id, e => e[i + 1]) + }), t + } + + function r(e, t) { + return null == e[t] + } + i.r(t), i.d(t, "studyPlotFunctionMap", (function() { + return s + })), i.d(t, "studyEmptyPlotValuePredicate", (function() { + return r + })) + }, + w9cH: function(e, t, i) { + "use strict"; + + function s(e) { + if (e instanceof Error) return e.stack || e.message; + try { + return e.outerHTML.slice(0, 1024) + } catch (e) {} + try { + if (void 0 !== e) return JSON.stringify(e).slice(0, 1024) + } catch (e) {} + return String(e) + } + + function r() { + window.__tv_js_errors || (window.__tv_js_errors = []), window.addEventListener("error", + e => { + const t = (new Date).toISOString(); + window.__tv_js_errors.push( + `${t} ${e.message || "JS error"}. ${e.filename || ""}, line ${e.lineno}, col ${e.colno}.\nError: ` + + s(e.error)) + }, !1), window.addEventListener("unhandledrejection", e => { + const t = (new Date).toISOString(); + window.__tv_js_errors.push(t + " Unhandled rejection.\nReason: " + s(e.reason)) + }, !1), document.addEventListener("securitypolicyviolation", e => { + var t, i; + const r = (new Date).toISOString(), + n = "report" === e.disposition ? "CSP report-only" : "CSP violation"; + window.__tv_js_errors.push( + `${r} ${n}: ${e.violatedDirective || e.effectiveDirective}. ${e.sourceFile || ""}, line ${null !== (t = e.lineno) && void 0 !== t ? t : e.lineNumber}, col ${null !== (i = e.colno) && void 0 !== i ? i : e.columnNumber}.\nBlocked URI: ${e.blockedURL || e.blockedURI}\nSample: ${e.sample}\nTarget: ` + + s(e.target)) + }, !1) + } + i.r(t), i.d(t, "install", (function() { + return r + })) + }, + wGNx: function(e, t, i) { + "use strict"; + var s; + i.r(t), i.d(t, "RiskRewardPointIndex", (function() { + return s + })), + function(e) { + e[e.Entry = 0] = "Entry", e[e.Close = 1] = "Close", e[e.ActualEntry = 2] = + "ActualEntry", e[e.ActualClose = 3] = "ActualClose" + }(s || (s = {})) + }, + wOSo: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return a + })); + var s = i("IWXC"), + r = i("aIyQ"), + n = i.n(r), + o = i("e3/o"); + class a { + constructor() { + this._quotes = null, this._quoteSessionSymbol = null, this._quoteSessionClientId = + "", this._quotesUpdate = new n.a, this._quoteSymbolChanged = new n.a + } + setQuotesSessionSymbol(e) { + this._quoteSessionSymbol !== e && (this._quoteSessionClientId || (this + ._quoteSessionClientId = "series-" + Object(o.guid)()), this + ._unsubscribeQuoteSession(), this._quotes = null, e && (this + ._quoteSessionSymbol = e, Object(s.getQuoteSessionInstance)("full") + .subscribe(this._quoteSessionClientId, this._quoteSessionSymbol, this + ._onUpdate.bind(this))), this._quoteSymbolChanged.fire()) + } + quotesUpdate() { + return this._quotesUpdate + } + quoteSymbolChanged() { + return this._quoteSymbolChanged + } + quotes() { + return this._quotes + } + destroy() { + this._unsubscribeQuoteSession() + } + _onUpdate(e, t) { + this._quotes = e && e.values || null, t && t.values && this._quotesUpdate.fire(e, t) + } + _unsubscribeQuoteSession() { + this._quoteSessionSymbol && (Object(s.getQuoteSessionInstance)("full").unsubscribe( + this._quoteSessionClientId, this._quoteSessionSymbol), this + ._quoteSessionSymbol = null, this._quotes = null) + } + } + }, + wVAQ: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "fetch", (function() { + return r + })); + var s = i("txPx"); + Object(s.getLogger)("Fetch"); + + function r(e, t, i = {}) { + return window.fetch(e, t) + } + }, + wYrq: function(e, t, i) { + "use strict"; + var s = i("Eyy1"), + r = i("aO4+"), + n = i("eJTA"), + o = i("Kxc7"), + a = i("Hr11"), + l = i("ogJP"), + c = i("Tmoa"), + h = i("dOnf"); + + function u(e, t) { + const i = new Map; + return function(...s) { + const r = "" + (t ? t.apply(null, s) : s[0]); + if (!i.has(r)) { + const t = e.apply(this, s); + return i.set(r, t), t + } + return i.get(r) + } + } + var d = i("VdBB"), + p = i("u0yd"), + _ = i("Zy3/"), + m = i("gyZD"), + f = i("Zp8I"), + g = i("k9/m"), + b = i("o2pV"), + v = i("vq8G"), + S = i("i6cO"), + y = i("Zp/P"); + class w { + constructor(e) { + this._data = e + } + draw(e, t) { + const i = this._data, + s = t.pixelRatio, + r = Math.max(1, Math.floor(s)) % 2 ? .5 : 0, + n = i.vertOffset || 0, + o = i.lineColor || i.color, + a = i.lineWidth || i.height / 2; + let c = "", + h = !1; + for (const t of i.items) { + const i = t.x, + u = t.y + n; + if (Object(l.isNaN)(i) || Object(l.isNaN)(u)) continue; + let d, p; + null != t.style ? (d = t.style.color, p = t.style.width) : (d = o, p = a), d !== + c && (c = d, h && e.fill(), e.beginPath(), e.fillStyle = d); + const _ = Math.round(i * s) + r, + m = Math.round(u * s) + r, + f = Math.round(p * s) + r; + e.moveTo(_ + f, m), e.arc(_, m, f, 0, 2 * Math.PI, !1), h = !0 + } + h && e.fill() + } + hitTest(e) { + const t = this._data, + i = t.lineWidth || t.height / 2, + s = t.vertOffset || 0, + n = Object(y.interactionTolerance)().series + i; + for (const o of t.items) { + if (!o) continue; + if (new r.Point(o.x, o.y + s).subtract(e).length() + i <= n) return new d + .HitTestResult(d.HitTestResult.REGULAR) + } + return null + } + } + class P { + constructor(e) { + this._data = null, this._precalculatedCache = [], this.setData(e) + } + setData(e) { + this._data = e, this._precalculatedCache = [] + } + draw(e, t) { + if (null === this._data || 0 === this._data.items.length) return; + const i = t.pixelRatio; + this._precalculatedCache.length || this._fillPrecalculatedCache(i); + const s = Math.max(1, Math.floor(i)), + r = Math.round(this._data.histogramBase * i) - Math.floor(s / 2), + n = r + s, + o = this._data.lineColor; + for (let t = 0; t < this._data.items.length; t++) { + const a = this._data.items[t], + l = this._precalculatedCache[t], + c = Math.round(a.y * i), + h = a.style ? a.style.color : o; + let u, d; + e.fillStyle = h, c <= r ? (u = c, d = n) : (u = r, d = c - Math.floor(s / 2) + + s), e.fillRect(l.left, u, l.right - l.left + 1, d - u) + } + } + hitTest(e) { + if (null === this._data) return null; + const t = .5 * this._data.barSpacing, + i = e.x - t, + s = e.x + t; + for (const t of this._data.items) { + const r = t.x; + if (r >= i && r <= s) { + const i = t.y; + if (e.y >= Math.min(i, this._data.histogramBase) && e.y <= Math.max(i, this + ._data.histogramBase)) return new d.HitTestResult(d.HitTestResult + .REGULAR) + } + } + return null + } + _fillPrecalculatedCache(e) { + if (null === this._data || 0 === this._data.items.length) return void(this + ._precalculatedCache = []); + const t = Math.ceil(this._data.barSpacing * e) <= 1 ? 0 : Math.max(1, Math.floor( + e)), + i = Math.round(this._data.barSpacing * e) - t; + this._precalculatedCache = new Array(this._data.items.length); + for (let t = 0; t < this._data.items.length; t++) { + const s = this._data.items[t], + r = Math.round(s.x * e); + let n, o; + if (i % 2) { + const e = (i - 1) / 2; + n = r - e, o = r + e + } else { + const e = i / 2; + n = r - e, o = r + e - 1 + } + this._precalculatedCache[t] = { + left: n, + right: o, + roundedCenter: r, + center: s.x * e, + time: s.timePointIndex + } + } + for (let e = 1; e < this._data.items.length; e++) { + const i = this._precalculatedCache[e], + s = this._precalculatedCache[e - 1]; + i.time === s.time + 1 && (i.left - s.right !== t + 1 && (s.roundedCenter > s + .center ? s.right = i.left - t - 1 : i.left = s.right + t + 1)) + } + let s = Math.ceil(this._data.barSpacing * e); + for (let e = 0; e < this._data.items.length; e++) { + const t = this._precalculatedCache[e]; + t.right < t.left && (t.right = t.left); + const i = t.right - t.left + 1; + s = Math.min(i, s) + } + if (t > 0 && s < 4) + for (let e = 0; e < this._data.items.length; e++) { + const t = this._precalculatedCache[e]; + t.right - t.left + 1 > s && (t.roundedCenter > t.center ? t.right -= 1 : t + .left += 1) + } + } + } + var C = i("GEp6"); + class x { + constructor(e) { + this._data = e + } + draw(e, t) { + var i, s, r, n; + const o = t.pixelRatio; + let a = "", + c = !1; + for (const t of this._data.items) { + if (Object(l.isNaN)(t.x) || Object(l.isNaN)(t.y)) continue; + const h = null !== (s = null === (i = t.style) || void 0 === i ? void 0 : i + .color) && void 0 !== s ? s : this._data.lineColor, + u = Math.max(1, Math.floor((null !== (n = null === (r = t.style) || + void 0 === r ? void 0 : r.width) && void 0 !== n ? n : this + ._data.lineWidth) * o)); + h !== a && (a = h, c && e.fill(), e.beginPath(), e.fillStyle = h); + let d = 3 * u; + d % 2 != u % 2 && (d += 1); + const p = Math.round(Math.round(t.x * o) - d / 2), + _ = Math.round(Math.round(t.y * o) - d / 2), + m = p + Math.floor(d / 2 - u / 2), + f = _ + Math.floor(d / 2 - u / 2); + e.rect(p, f, d, u), e.rect(m, _, u, d), c = !0 + } + c && e.fill() + } + hitTest(e) { + const t = Object(y.interactionTolerance)().series + this._data.lineWidth / 2; + let i, s, n, o; + for (let a = 1; a < this._data.items.length; ++a) { + i = this._data.items[a - 1], s = this._data.items[a], n = i.x, o = s.x; + if (Object(C.distanceToSegment)(new r.Point(n, i.y), new r.Point(o, s.y), new r + .Point(e.x, e.y)).distance <= t) return new d.HitTestResult(d + .HitTestResult.REGULAR) + } + return null + } + } + class T { + constructor(e) { + this._data = e + } + draw(e, t) { + if (0 === this._data.items.length) return; + const i = t.pixelRatio; + e.fillStyle = this._data.lineColor; + const s = Math.max(1, Math.floor(this._data.lineWidth * i)), + r = s / 2, + n = Math.max(1, Math.floor(i)), + o = Math.round(this._data.histogramBase * i) - Math.floor(n / 2), + a = o + n; + for (const t of this._data.items) { + let l = s, + c = r; + t.style ? (e.fillStyle = t.style.color, l = Math.max(1, Math.floor(t.style + .width * i)), c = l / 2) : e.fillStyle = this._data.lineColor; + const h = l % 2 ? .5 : 0, + u = Math.round(t.x * i) + h, + d = Math.round(t.y * i); + let p, _; + d <= o ? (p = d, _ = a) : (p = o, _ = d - Math.floor(n / 2) + n), e.fillRect( + Math.floor(u - c), p, l, _ - p) + } + } + hitTest(e) { + const t = Object(y.interactionTolerance)().series + this._data.lineWidth / 2, + i = new Map; + for (const n of this._data.items) { + const o = n.x, + a = n.y; + let l = t; + n.style && (i.has(n.style.width) ? l = Object(s.ensureDefined)(i.get(n.style + .width)) : i.set(this._data.lineWidth, l)); + if (Object(C.distanceToSegment)(new r.Point(o, a), new r.Point(o, this._data + .histogramBase), new r.Point(e.x, e.y)).distance <= l) return new d + .HitTestResult(d.HitTestResult.REGULAR) + } + return null + } + } + var I = i("23IT"), + M = i("UAFa"); + i.d(t, "a", (function() { + return A + })); + const O = e => { + const t = Object(n.rgbToHsl)(Object(n.parseRgb)(e)), + i = t[0] + .05; + return t[0] = i - Math.floor(i), Object(n.rgbToHexString)(Object(n.hslToRgb)(t)) + }, + L = u(O); + class A { + constructor(e, t, i, s) { + this._histogramBase = null, this._items = [], this._selectionData = null, this + ._lineColor = "", this._lineWidth = 1, this._color1 = "", this._color2 = "", + this._invalidated = !1, this._isMarkersEnabled = o.enabled( + "source_selection_markers"), this._study = e, this._series = t, this + ._model = i, this._plotName = s, this._plotIndex = e.metaInfo().plots.findIndex( + e => e.id === s), this._colorProvider = Object(M + .createStudyPlotColorProvider)(e.metaInfo(), e.properties(), s), this + ._selectionIndexer = new b.SelectionIndexes(i.timeScale()) + } + items() { + return this._items + } + update() { + this._invalidated = !0 + } + renderer() { + const e = this._study.properties().styles[this._plotName]; + if (!e.visible.value()) return null; + if (!this._study.priceScale()) return null; + this._invalidated && (this._updateImpl(), this._invalidated = !1); + const t = {}; + t.barSpacing = this._model.timeScale().barSpacing(), t.items = this._items, + t.histogramBase = this._histogramBase ? this._histogramBase : Object(s + .ensureNotNull)(this._study.priceScale()).height(), t.lineIndex = 0, t + .lineStyle = e.linestyle.value(), t.lineColor = this._lineColor, t.lineWidth = + this._lineWidth, t.lineWidth = Object(l.isNumber)(t.lineWidth) ? t.lineWidth : + 1, t.color1 = this._color1, t.color2 = this._color2, t.bottom = t.histogramBase, + t.simpleMode = this._colorProvider.singleColor(); + const i = new _.CompositeRenderer, + r = !!e.joinPoints && e.joinPoints.value(); + switch (e.plottype.value()) { + case I.LineStudyPlotStyle.Line: + case I.LineStudyPlotStyle.LineWithBreaks: + i.append(new m.PaneRendererLine(t)); + break; + case I.LineStudyPlotStyle.Area: + case I.LineStudyPlotStyle.AreaWithBreaks: + i.append(new p.PaneRendererArea(t)); + break; + case I.LineStudyPlotStyle.Histogram: + i.append(new T(t)); + break; + case I.LineStudyPlotStyle.Columns: + i.append(new P(t)); + break; + case I.LineStudyPlotStyle.Cross: + if (i.append(new x(t)), r) { + const e = Object(h.deepCopy)(t); + e.lineWidth = 1, e.forceLineWidth = !0, i.append(new m.PaneRendererLine( + e)) + } + break; + case I.LineStudyPlotStyle.Circles: + if (i.append(new w(t)), r) { + const e = Object(h.deepCopy)(t); + e.lineWidth = 1, e.ignorePaletteLineWidth = !0, i.append(new m + .PaneRendererLine(e)) + } + break; + case I.LineStudyPlotStyle.StepLine: + case I.LineStudyPlotStyle.StepLineWithDiamonds: { + t.decoration = e.plottype.value() === I.LineStudyPlotStyle + .StepLineWithDiamonds ? f.StepLineDecoration.Diamonds : f + .StepLineDecoration.None; + const s = new f.PaneRendererStepLine; + s.setData(t), i.append(s); + break + } + default: + i.append(new m.PaneRendererLine(t)) + } + return this._model.selection().isSelected(this._study) && this._isMarkersEnabled && + this._selectionData && i.append(new v.SelectionRenderer(this._selectionData)), i + } + _getTranspValue() { + const e = this._study.properties(), + t = e.styles[this._plotName]; + let i = 0; + const s = this._study.metaInfo(); + return "Volume@tv-basicstudies" === s.id && s.version <= 46 && "transparency" in e ? + (i = e.transparency.value(), i = Object(l.isNumber)(i) ? i : 0, i) : (t + .transparency && (i = t.transparency.value(), i = Object(l.isNumber)(i) ? + i : 0), i) + } + _updateImpl() { + var e, t, i, n, o; + this._histogramBase = null, this._items = []; + const l = this._study.priceScale(); + if (this._model.timeScale().isEmpty() || null === l || l.isEmpty()) return; + const h = this._model.timeScale().visibleBarsStrictRange(); + if (null === h) return; + let u = null !== (e = this._series.nearestIndex(h.firstBar() - 1, g + .PlotRowSearchMode.NearestLeft)) && void 0 !== e ? e : this._series.bars() + .firstIndex(), + p = null !== (t = this._series.nearestIndex(h.lastBar() + 1, g.PlotRowSearchMode + .NearestRight)) && void 0 !== t ? t : this._series.bars().lastIndex(); + if (null === u || null === p) return; + const _ = this._study.offset(this._plotName); + _ > 0 ? (u -= _, p += _) : (u += _, p -= _); + const m = this._study.getMinFirstBarIndexForPlot(this._plotName); + if (m > p) return; + u = Math.max(m, u); + const f = this._study.properties().styles[this._plotName], + b = f.plottype.value(), + v = [I.LineStudyPlotStyle.Line, I.LineStudyPlotStyle.Area, I.LineStudyPlotStyle + .Circles, I.LineStudyPlotStyle.Cross + ].indexOf(b) >= 0, + y = this._study.data(), + w = this._study.firstValue(); + if (null === w) return; + const P = y.rangeIterator(u, p), + C = this._study.priceScale(); + if (null === C) return; + const x = Object(a.clamp)(this._getTranspValue(), 0, 100), + T = new Map, + M = (e, t) => { + let i = T.get(e); + void 0 === i && (i = new Map, T.set(e, i)); + let s = i.get(t); + if (void 0 === s) { + const r = !this._plotName || "vol" !== this._plotName; + s = Object(c.generateColor)(e, t, r), i.set(t, s) + } + return s + }; + let A = NaN, + E = NaN; + const k = Object(S.createEmptyStyle)(); + for (; P.hasNext();) { + const e = P.next(); + let t = e.index; + const o = e.value; + t += _, t = Math.floor(t); + let a = o[this._plotIndex + 1]; + const l = null == a; + if (a = l ? NaN : a, v && l) { + E = a; + continue + } + const h = new r.Point(t, Object(s.ensure)(a)); + h.timePointIndex = t, h.valIsNotSameAsPrev = a !== E; + if (this._colorProvider.isColorDefined() && (h.style = { + color: M(f.color.value(), 100), + width: f.linewidth.value(), + style: f.linestyle.value() + }, null != a)) { + const e = this._colorProvider.getPlotPointStyle(o, k), + t = e.colors[S.ColorerType.Main]; + void 0 !== t && (h.style.color = Object(c.isHexColor)(t) ? M(t, x) : t), h + .style.width = null !== (i = e.lineWidth) && void 0 !== i ? i : h.style + .width, h.style.style = null !== (n = e.lineStyle) && void 0 !== n ? n : + h.style.style + } + v || isNaN(A) || A === t - 1 || this._items.push(new r.Point(t - 1, NaN)), A = + t, E = a, this._items.push(h) + } + if (C.pointsArrayToCoordinates(this._items, w), this._model.timeScale() + .timedValuesToCoordinates(this._items), f.histogramBase && (this + ._histogramBase = C.priceToCoordinate(f.histogramBase.value(), w)), this + ._model.selection().isSelected(this._study)) { + const e = this._selectionIndexer.indexes(); + this._selectionData = { + points: [], + bgColors: [], + visible: !0, + hittestResult: d.HitTestResult.REGULAR, + barSpacing: this._model.timeScale().barSpacing() + }; + const t = Object(s.ensureNotNull)(this._model.paneForSource(this._study)) + .height(); + for (let i = 0; i < e.length; i++) { + let s = e[i]; + const n = this._study.data().valueAt(s); + if (s += _, null === n) continue; + const o = n[this._plotIndex + 1]; + if (null == o) continue; + const a = this._model.timeScale().indexToCoordinate(Math.floor(s)), + l = C.priceToCoordinate(o, w); + this._selectionData.points.push(new r.Point(a, l)), this._selectionData + .bgColors.push(this._model.backgroundColorAtYPercentFromTop(l / t)) + } + } else this._selectionIndexer.clear(); + const D = f; + this._lineColor = Object(c.generateColor)(D.color.value(), x), this._lineWidth = D + .linewidth.value(); + let V = D.color.value(); + const B = this._colorProvider.getDefaultPlotPointStyle(); + B && (V = B.colors[S.ColorerType.Main], this._lineWidth = null !== (o = B + .lineWidth) && void 0 !== o ? o : this._lineWidth, this._lineColor = V ? + Object(c.generateColor)(V, x) : this._lineColor), this._color2 = Object(c + .generateColor)(V, x); + const R = this._study.metaInfo().isRGB ? O(V) : L(V); + this._color1 = Object(c.generateColor)(R, x) + } + } + }, + wZIs: function(e, t, i) { + "use strict"; + var s = i("vTIA").PositionPLDisplay; + const { + getHexColorByName: r + } = i("HGP3"), { + generateColor: n + } = i("Tmoa"); + var o = i("vTIA").TradingSourcesHorizontalAlignment, + a = i("dfhE"), + l = i("rCHB").LineToolPitchforkStyle, + c = i("Ye2/").LineToolBarsPatternMode, + h = i("23IT").LineStudyPlotStyle, + u = i("8OdW"), + d = i("oXaB").PriceAxisLastValueMode, + p = i("XXdw").StoriesTimeLineItemType, + _ = i("4o++").MagnetMode, + m = i("a7Ha").LineEnd, + f = i("4vW/").ColorType, + g = i("bKFv").StatsPosition, + b = i("sDZI").sessionsPreferencesDefault, + v = i("txPx").getLogger("Chart.Defaults"), + S = i("zDbI").CHART_FONT_FAMILY; + const y = r("color-tv-blue-500"); + var w = function(e) { + var t = function(e, t) { + return { + color: e, + visible: t + } + }, + i = function(e, t, i) { + return { + coeff: e, + color: t, + visible: i + } + }, + r = function(e, t, i, s, r) { + return { + coeff: e, + color: t, + visible: i, + linestyle: void 0 === s ? CanvasEx.LINESTYLE_SOLID : s, + linewidth: void 0 === r ? 1 : r + } + }, + v = function(e, t, i) { + return { + color: e, + width: i, + visible: t + } + }, + w = function(e, t, i, s, r) { + return { + color: e, + visible: t, + width: i, + x: s, + y: r + } + }, + P = function(e, t, i, s, r, n) { + return { + coeff1: e, + coeff2: t, + color: i, + visible: s, + linestyle: void 0 === r ? CanvasEx.LINESTYLE_SOLID : r, + linewidth: void 0 === n ? 1 : n + } + }; + if (void 0 === TradingView.defaultProperties) { + var T; + switch (window.locale) { + case "ar_AE": + T = "Asia/Dubai"; + break; + case "au": + T = "Australia/Sydney"; + break; + case "br": + T = "America/Sao_Paulo"; + break; + case "ca": + T = "America/Toronto"; + break; + case "de_DE": + case "it": + T = "Europe/Berlin"; + break; + case "es": + T = "Europe/Madrid"; + break; + case "fa_IR": + T = "Asia/Tehran"; + break; + case "fr": + case "sv_SE": + T = "Europe/Paris"; + break; + case "he_IL": + case "tr": + T = "Europe/Athens"; + break; + case "hu_HU": + case "pl": + T = "Europe/Warsaw"; + break; + case "id": + case "th_TH": + case "vi_VN": + T = "Asia/Bangkok"; + break; + case "in": + T = "Asia/Kolkata"; + break; + case "ja": + case "kr": + T = "Asia/Tokyo"; + break; + case "ms_MY": + T = "Asia/Singapore"; + break; + case "ru": + T = "Europe/Moscow"; + break; + case "uk": + T = "Europe/London"; + break; + case "zh_CN": + case "zh_TW": + T = "Asia/Shanghai"; + break; + default: + T = "Etc/UTC" + } + TradingView.defaultProperties = { + chartproperties: { + timezone: T, + priceScaleSelectionStrategyName: "auto", + dataWindowProperties: { + background: "rgba( 255, 254, 206, 0.2)", + border: "rgba( 96, 96, 144, 1)", + font: "Verdana", + fontBold: !1, + fontItalic: !1, + fontSize: 10, + transparency: 80, + visible: !0 + }, + paneProperties: { + backgroundType: f.Solid, + background: "#ffffff", + backgroundGradientStartColor: "#ffffff", + backgroundGradientEndColor: "#ffffff", + vertGridProperties: { + color: "rgba(42, 46, 57, 0.06)", + style: CanvasEx.LINESTYLE_SOLID + }, + horzGridProperties: { + color: "rgba(42, 46, 57, 0.06)", + style: CanvasEx.LINESTYLE_SOLID + }, + crossHairProperties: { + color: "#9598A1", + style: CanvasEx.LINESTYLE_DASHED, + transparency: 0, + width: 1 + }, + topMargin: 10, + bottomMargin: 8, + axisProperties: { + autoScale: !0, + autoScaleDisabled: !1, + lockScale: !1, + percentage: !1, + percentageDisabled: !1, + indexedTo100: !1, + log: !1, + logDisabled: !1, + alignLabels: !0, + isInverted: !1 + }, + legendProperties: { + showStudyArguments: !0, + showStudyTitles: !0, + showStudyValues: !0, + showSeriesTitle: !0, + showSeriesOHLC: !0, + showLegend: !0, + showBarChange: !0, + showBackground: !0, + backgroundTransparency: 50, + wrapText: !1 + } + }, + scalesProperties: { + backgroundColor: "#ffffff", + lineColor: "rgba(42, 46, 57, 0.14)", + textColor: "#131722", + fontSize: 12, + scaleSeriesOnly: !1, + showSeriesLastValue: !0, + seriesLastValueMode: d.LastValueAccordingToScale, + showSeriesPrevCloseValue: !1, + showStudyLastValue: !1, + showSymbolLabels: !1, + showStudyPlotLabels: !1, + showBidAskLabels: !1, + showPrePostMarketPriceLabel: !0, + showFundamentalNameLabel: !1, + showFundamentalLastValue: !1, + barSpacing: u.DEFAULT_BAR_SPACING, + showCurrency: !0, + showUnit: !0 + }, + mainSeriesProperties: { + style: a.STYLE_CANDLES, + esdShowDividends: !0, + esdShowSplits: !0, + esdShowEarnings: !0, + esdShowBreaks: !1, + esdFlagSize: 2, + showCountdown: !0, + bidAsk: { + visible: !1, + lineStyle: CanvasEx.LINESTYLE_DOTTED, + lineWidth: 1, + bidLineColor: y, + askLineColor: "#EF5350" + }, + prePostMarket: { + visible: !0, + lineStyle: CanvasEx.LINESTYLE_DOTTED, + lineWidth: 1, + preMarketColor: "#fb8c00", + postMarketColor: y + }, + highLowAvgPrice: { + highLowPriceLinesVisible: !1, + highLowPriceLabelsVisible: !1, + averageClosePriceLineVisible: !1, + averageClosePriceLabelVisible: !1 + }, + showInDataWindow: !0, + visible: !0, + showPriceLine: !0, + priceLineWidth: 1, + priceLineColor: "", + baseLineColor: "#B2B5BE", + showPrevClosePriceLine: !1, + prevClosePriceLineWidth: 1, + prevClosePriceLineColor: "rgba( 85, 85, 85, 1)", + minTick: "default", + dividendsAdjustment: void 0, + sessionId: "regular", + sessVis: !1, + statusViewStyle: { + fontSize: 16, + showExchange: !0, + showInterval: !0, + symbolTextSource: "description" + }, + candleStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + drawWick: !0, + drawBorder: !0, + borderColor: "#378658", + borderUpColor: "#26a69a", + borderDownColor: "#ef5350", + wickColor: "#737375", + wickUpColor: "#26a69a", + wickDownColor: "#ef5350", + barColorsOnPrevClose: !1, + drawBody: !0 + }, + hollowCandleStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + drawWick: !0, + drawBorder: !0, + borderColor: "rgba( 55, 134, 88, 1)", + borderUpColor: "#26a69a", + borderDownColor: "#ef5350", + wickColor: "rgba( 115, 115, 117, 1)", + wickUpColor: "#26a69a", + wickDownColor: "#ef5350", + drawBody: !0 + }, + haStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + drawWick: !0, + drawBorder: !0, + borderColor: "rgba( 55, 134, 88, 1)", + borderUpColor: "#26a69a", + borderDownColor: "#ef5350", + wickColor: "rgba( 115, 115, 117, 1)", + wickUpColor: "#26a69a", + wickDownColor: "#ef5350", + showRealLastPrice: !1, + barColorsOnPrevClose: !1, + inputs: {}, + inputInfo: {}, + drawBody: !0 + }, + barStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + barColorsOnPrevClose: !1, + dontDrawOpen: !1, + thinBars: !0 + }, + hiloStyle: { + color: y, + showBorders: !0, + borderColor: y, + showLabels: !0, + labelColor: y, + fontSize: 7, + drawBody: !0 + }, + lineStyle: { + color: y, + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 2, + priceSource: "close", + styleType: a.STYLE_LINE_TYPE_SIMPLE + }, + areaStyle: { + color1: n(y, 72), + color2: y, + linecolor: y, + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 2, + priceSource: "close", + transparency: 100 + }, + priceAxisProperties: { + autoScale: !0, + autoScaleDisabled: !1, + lockScale: !1, + percentage: !1, + percentageDisabled: !1, + indexedTo100: !1, + log: !1, + logDisabled: !1, + isInverted: !1, + alignLabels: !0 + }, + renkoStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + borderUpColor: "#26a69a", + borderDownColor: "#ef5350", + upColorProjection: "rgba( 169, 220, 195, 1)", + downColorProjection: "rgba( 245, 166, 174, 1)", + borderUpColorProjection: "rgba( 169, 220, 195, 1)", + borderDownColorProjection: "rgba( 245, 166, 174, 1)", + wickUpColor: "#26a69a", + wickDownColor: "#ef5350", + inputs: { + source: "close", + sources: "Close", + boxSize: 3, + style: "ATR", + atrLength: 14, + wicks: !0 + }, + inputInfo: { + source: { + name: "source" + }, + sources: { + name: "Source" + }, + boxSize: { + name: "Box size" + }, + style: { + name: "Style" + }, + atrLength: { + name: "ATR length" + }, + wicks: { + name: "Wicks" + } + } + }, + pbStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + borderUpColor: "#26a69a", + borderDownColor: "#ef5350", + upColorProjection: "rgba( 169, 220, 195, 1)", + downColorProjection: "rgba( 245, 166, 174, 1)", + borderUpColorProjection: "rgba( 169, 220, 195, 1)", + borderDownColorProjection: "rgba( 245, 166, 174, 1)", + inputs: { + source: "close", + lb: 3 + }, + inputInfo: { + source: { + name: "Source" + }, + lb: { + name: "Number of line" + } + } + }, + kagiStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + upColorProjection: "rgba( 169, 220, 195, 1)", + downColorProjection: "rgba( 245, 166, 174, 1)", + inputs: { + source: "close", + style: "ATR", + atrLength: 14, + reversalAmount: 1 + }, + inputInfo: { + source: { + name: "Source" + }, + style: { + name: "Style" + }, + atrLength: { + name: "ATR length" + }, + reversalAmount: { + name: "Reversal amount" + } + } + }, + pnfStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + upColorProjection: "rgba( 169, 220, 195, 1)", + downColorProjection: "rgba( 245, 166, 174, 1)", + inputs: { + sources: "Close", + reversalAmount: 3, + boxSize: 1, + style: "ATR", + atrLength: 14, + oneStepBackBuilding: !1 + }, + inputInfo: { + sources: { + name: "Source" + }, + boxSize: { + name: "Box size" + }, + reversalAmount: { + name: "Reversal amount" + }, + style: { + name: "Style" + }, + atrLength: { + name: "ATR length" + }, + oneStepBackBuilding: { + name: "One step back building" + } + } + }, + baselineStyle: { + baselineColor: "rgba( 117, 134, 150, 1)", + topFillColor1: "rgba( 38, 166, 154, 0.28)", + topFillColor2: "rgba( 38, 166, 154, 0.05)", + bottomFillColor1: "rgba( 239, 83, 80, 0.05)", + bottomFillColor2: "rgba( 239, 83, 80, 0.28)", + topLineColor: "rgba( 38, 166, 154, 1)", + bottomLineColor: "rgba( 239, 83, 80, 1)", + topLineWidth: 2, + bottomLineWidth: 2, + priceSource: "close", + transparency: 50, + baseLevelPercentage: 50 + }, + rangeStyle: { + upColor: "#26a69a", + downColor: "#ef5350", + thinBars: !0, + upColorProjection: "rgba( 169, 220, 195, 1)", + downColorProjection: "rgba( 245, 166, 174, 1)", + inputs: { + range: 10, + phantomBars: !1 + }, + inputInfo: { + range: { + name: "Range" + }, + phantomBars: { + name: "Phantom bars" + } + } + } + }, + chartEventsSourceProperties: { + visible: !0, + futureOnly: !0, + breaks: { + color: "rgba(85, 85, 85, 1)", + visible: !1, + style: CanvasEx.LINESTYLE_DASHED, + width: 1 + } + }, + tradingProperties: { + showPositions: !0, + positionPL: { + visibility: !0, + display: s.Money + }, + showOrders: !0, + showExecutions: !0, + horizontalAlignment: o.Left, + extendLeft: !0, + lineLength: 5, + lineWidth: 1, + lineStyle: CanvasEx.LINESTYLE_SOLID + }, + editorFontsList: ["Verdana", "Courier New", "Times New Roman", "Arial"], + volumePaneSize: "large" + }, + sessions: b, + drawings: { + magnet: !1, + magnetMode: _.WeakMagnet, + stayInDrawingMode: !1, + drawOnAllCharts: !0 + }, + linetoolorder: { + extendLeft: "inherit", + lineLength: "inherit", + lineColor: "rgba( 255, 0, 0, 1)", + lineActiveBuyColor: "rgb(64,148,232)", + lineInactiveBuyColor: "rgba(64,148,232,.5)", + lineActiveSellColor: "rgb(231,86,86)", + lineInactiveSellColor: "rgba(231,86,86,.5)", + lineStyle: "inherit", + lineWidth: "inherit", + bodyBorderActiveBuyColor: "rgb(64,148,232)", + bodyBorderInactiveBuyColor: "rgba(64,148,232,.5)", + bodyBorderActiveSellColor: "rgb(231,86,86)", + bodyBorderInactiveSellColor: "rgba(231,86,86,.5)", + bodyBackgroundColor: "rgba( 255, 255, 255, 0.75)", + bodyBackgroundTransparency: 25, + bodyTextInactiveLimitColor: "rgba(38,140,2,.5)", + bodyTextActiveLimitColor: "rgb(38,140,2)", + bodyTextInactiveStopColor: "rgba(231,86,86,.5)", + bodyTextActiveStopColor: "rgb(231,86,86)", + bodyTextInactiveBuyColor: "rgba(64,148,232,.5)", + bodyTextActiveBuyColor: "rgb(64,148,232)", + bodyTextInactiveSellColor: "rgba(231,86,86,.5)", + bodyTextActiveSellColor: "rgb(231,86,86)", + bodyFontFamily: "Verdana", + bodyFontSize: 9, + bodyFontBold: !0, + bodyFontItalic: !1, + quantityBorderActiveBuyColor: "rgb(64,148,232)", + quantityBorderInactiveBuyColor: "rgba(64,148,232,.5)", + quantityBorderActiveSellColor: "rgb(231,86,86)", + quantityBorderInactiveSellColor: "rgba(231,86,86,.5)", + quantityBackgroundInactiveBuyColor: "rgba(64,148,232,.5)", + quantityBackgroundActiveBuyColor: "rgb(64,148,232)", + quantityBackgroundInactiveSellColor: "rgba(231,86,86,.5)", + quantityBackgroundActiveSellColor: "rgb(231,86,86)", + quantityTextColor: "rgba( 255, 255, 255, 1)", + quantityTextTransparency: 0, + quantityFontFamily: "Verdana", + quantityFontSize: 9, + quantityFontBold: !0, + quantityFontItalic: !1, + cancelButtonBorderActiveBuyColor: "rgb(64,148,232)", + cancelButtonBorderInactiveBuyColor: "rgba(64,148,232,.5)", + cancelButtonBorderActiveSellColor: "rgb(231,86,86)", + cancelButtonBorderInactiveSellColor: "rgba(231,86,86,.5)", + cancelButtonBackgroundColor: "rgba( 255, 255, 255, 0.75)", + cancelButtonBackgroundTransparency: 25, + cancelButtonIconActiveBuyColor: "rgb(64,148,232)", + cancelButtonIconInactiveBuyColor: "rgba(64,148,232,.5)", + cancelButtonIconActiveSellColor: "rgb(231,86,86)", + cancelButtonIconInactiveSellColor: "rgba(231,86,86,.5)", + tooltip: "", + modifyTooltip: "", + cancelTooltip: "" + }, + linetoolposition: { + extendLeft: "inherit", + lineLength: "inherit", + lineBuyColor: "rgb(64,148,232)", + lineSellColor: "rgb(231,86,86)", + lineStyle: "inherit", + lineWidth: "inherit", + bodyBorderBuyColor: "rgb(64,148,232)", + bodyBorderSellColor: "rgb(231,86,86)", + bodyBackgroundColor: "rgba( 255, 255, 255, 0.75)", + bodyBackgroundTransparency: 25, + bodyTextPositiveColor: "rgb(38,140,2)", + bodyTextNeutralColor: "rgb(100,100,100)", + bodyTextNegativeColor: "rgb(231,86,86)", + bodyFontFamily: "Verdana", + bodyFontSize: 9, + bodyFontBold: !0, + bodyFontItalic: !1, + quantityBorderBuyColor: "rgb(64,148,232)", + quantityBorderSellColor: "rgb(231,86,86)", + quantityBackgroundBuyColor: "rgb(64,148,232)", + quantityBackgroundSellColor: "rgb(231,86,86)", + quantityTextColor: "rgba( 255, 255, 255, 1)", + quantityTextTransparency: 0, + quantityFontFamily: "Verdana", + quantityFontSize: 9, + quantityFontBold: !0, + quantityFontItalic: !1, + reverseButtonBorderBuyColor: "rgb(64,148,232)", + reverseButtonBorderSellColor: "rgb(231,86,86)", + reverseButtonBackgroundColor: "rgba( 255, 255, 255, 0.75)", + reverseButtonBackgroundTransparency: 25, + reverseButtonIconBuyColor: "rgb(64,148,232)", + reverseButtonIconSellColor: "rgb(231,86,86)", + closeButtonBorderBuyColor: "rgb(64,148,232)", + closeButtonBorderSellColor: "rgb(231,86,86)", + closeButtonBackgroundColor: "rgba( 255, 255, 255, 0.75)", + closeButtonBackgroundTransparency: 25, + closeButtonIconBuyColor: "rgb(64,148,232)", + closeButtonIconSellColor: "rgb(231,86,86)", + tooltip: "", + protectTooltip: "", + closeTooltip: "", + reverseTooltip: "" + }, + linetoolexecution: { + direction: "buy", + arrowHeight: 8, + arrowSpacing: 1, + arrowBuyColor: "#4094e8", + arrowSellColor: "#e75656", + text: "", + textColor: "rgba( 0, 0, 0, 1)", + textTransparency: 0, + fontFamily: "Verdana", + fontSize: 10, + fontBold: !1, + fontItalic: !1, + tooltip: "" + }, + linetoolicon: { + color: y, + size: 40, + icon: 61720, + angle: .5 * Math.PI, + scale: 1 + }, + linetoolimage: { + transparency: 0, + cssWidth: 0, + cssHeight: 0, + angle: 0 + }, + linetoolbezierquadro: { + linecolor: y, + linewidth: 1, + fillBackground: !1, + backgroundColor: n(y, 80), + transparency: 50, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Normal + }, + linetoolbeziercubic: { + linecolor: "#00bcd4", + linewidth: 1, + fillBackground: !1, + backgroundColor: "rgba(0, 188, 212, 0.2)", + transparency: 50, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Normal + }, + linetooltrendline: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Normal, + showLabel: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "bottom", + font: "Verdana", + textcolor: y, + fontsize: 14, + bold: !1, + italic: !1, + alwaysShowStats: !1, + showMiddlePoint: !1, + showPriceRange: !1, + showBarsRange: !1, + showDateTimeRange: !1, + showDistance: !1, + showAngle: !1, + statsPosition: g.Right + }, + linetoolinfoline: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Normal, + font: "Verdana", + showLabel: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "bottom", + textcolor: y, + fontsize: 14, + bold: !1, + italic: !1, + alwaysShowStats: !0, + showMiddlePoint: !1, + showPriceRange: !0, + showBarsRange: !0, + showDateTimeRange: !0, + showDistance: !0, + showAngle: !0, + statsPosition: g.Center + }, + linetooltimecycles: { + linecolor: "rgba(21, 153, 128, 1)", + linewidth: 1, + fillBackground: !0, + backgroundColor: "rgba(106, 168, 79, 0.5)", + transparency: 50, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + linetoolsineline: { + linecolor: "rgba( 21, 153, 128, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + linetooltrendangle: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + font: "Verdana", + textcolor: y, + fontsize: 12, + bold: !1, + italic: !1, + alwaysShowStats: !1, + showMiddlePoint: !1, + showPriceRange: !1, + showBarsRange: !1, + extendRight: !1, + extendLeft: !1, + statsPosition: g.Right + }, + linetooldisjointangle: { + linecolor: "rgba(0, 150, 136, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + fillBackground: !0, + backgroundColor: "rgba(0, 150, 136, 0.2)", + transparency: 20, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Normal, + font: "Verdana", + textcolor: "rgba(0, 150, 136, 1)", + fontsize: 12, + bold: !1, + italic: !1, + showPrices: !1, + showPriceRange: !1, + showDateTimeRange: !1, + showBarsRange: !1 + }, + linetoolflatbottom: { + linecolor: "rgba(171, 71, 188, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + fillBackground: !0, + backgroundColor: "rgba(171, 71, 188, 0.2)", + transparency: 20, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Normal, + font: "Verdana", + textcolor: "rgba(171, 71, 188, 1)", + fontsize: 12, + bold: !1, + italic: !1, + showPrices: !1, + showPriceRange: !1, + showDateTimeRange: !1, + showBarsRange: !1 + }, + linetoolfibspiral: { + counterclockwise: !1, + linecolor: "rgba(0, 150, 136, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + linetooldaterange: { + linecolor: y, + linewidth: 1, + font: S, + textcolor: "rgba( 255, 255, 255, 1)", + fontsize: 12, + fillLabelBackground: !0, + labelBackgroundColor: n(y, 10), + fillBackground: !0, + backgroundColor: n(y, 80), + backgroundTransparency: 60, + drawBorder: !1, + borderColor: n(y, 10), + extendTop: !1, + extendBottom: !1 + }, + linetoolpricerange: { + linecolor: y, + linewidth: 1, + font: S, + textcolor: "rgba( 255, 255, 255, 1)", + fontsize: 12, + fillLabelBackground: !0, + labelBackgroundColor: n(y, 10), + fillBackground: !0, + backgroundColor: n(y, 80), + backgroundTransparency: 60, + drawBorder: !1, + borderColor: n(y, 10), + extendLeft: !1, + extendRight: !1 + }, + linetooldateandpricerange: { + linecolor: y, + linewidth: 1, + font: S, + textcolor: "rgba( 255, 255, 255, 1)", + fontsize: 12, + fillLabelBackground: !0, + labelBackgroundColor: n(y, 10), + fillBackground: !0, + backgroundColor: n(y, 80), + backgroundTransparency: 60, + borderWidth: 1, + drawBorder: !1, + borderColor: y + }, + linetoolriskrewardshort: { + linecolor: "rgba(120, 123, 134, 1)", + linewidth: 1, + font: "Verdana", + textcolor: "rgba(255, 255, 255, 1)", + fontsize: 12, + fillLabelBackground: !0, + labelBackgroundColor: "rgba( 88, 88, 88, 1)", + fillBackground: !0, + stopBackground: "rgba(244, 67, 54, 0.2)", + profitBackground: "rgba(0, 150, 136, 0.2)", + stopBackgroundTransparency: 80, + profitBackgroundTransparency: 80, + drawBorder: !1, + borderColor: "rgba( 102, 123, 139, 1)", + compact: !1, + riskDisplayMode: "percents", + accountSize: 1e3, + lotSize: 1, + risk: 25, + alwaysShowStats: !1, + showPriceLabels: !0 + }, + linetoolriskrewardlong: { + linecolor: "rgba(120, 123, 134, 1)", + linewidth: 1, + font: "Verdana", + textcolor: "rgba(255, 255, 255, 1)", + fontsize: 12, + fillLabelBackground: !0, + labelBackgroundColor: "rgba( 88, 88, 88, 1)", + fillBackground: !0, + stopBackground: "rgba(244, 67, 54, 0.2)", + profitBackground: "rgba(0, 150, 136, 0.2)", + stopBackgroundTransparency: 80, + profitBackgroundTransparency: 80, + drawBorder: !1, + borderColor: "rgba( 102, 123, 139, 1)", + compact: !1, + riskDisplayMode: "percents", + accountSize: 1e3, + lotSize: 1, + risk: 25, + alwaysShowStats: !1, + showPriceLabels: !0 + }, + linetoolarrow: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !1, + leftEnd: m.Normal, + rightEnd: m.Arrow, + font: "Verdana", + showLabel: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "bottom", + textcolor: y, + fontsize: 14, + bold: !1, + italic: !1, + alwaysShowStats: !1, + showMiddlePoint: !1, + showPriceRange: !1, + showBarsRange: !1, + showDateTimeRange: !1, + showDistance: !1, + showAngle: !1, + statsPosition: g.Right + }, + linetoolray: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !0, + leftEnd: m.Normal, + rightEnd: m.Normal, + font: "Verdana", + showLabel: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "bottom", + textcolor: y, + fontsize: 14, + bold: !1, + italic: !1, + alwaysShowStats: !1, + showMiddlePoint: !1, + showPriceRange: !1, + showBarsRange: !1, + showDateTimeRange: !1, + showDistance: !1, + showAngle: !1, + statsPosition: g.Right + }, + linetoolextended: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !0, + extendRight: !0, + leftEnd: m.Normal, + rightEnd: m.Normal, + font: "Verdana", + showLabel: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "bottom", + textcolor: y, + fontsize: 14, + bold: !1, + italic: !1, + alwaysShowStats: !1, + showMiddlePoint: !1, + showPriceRange: !1, + showBarsRange: !1, + showDateTimeRange: !1, + showDistance: !1, + showAngle: !1, + statsPosition: g.Right + }, + linetoolhorzline: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + showPrice: !0, + showLabel: !1, + font: "Verdana", + textcolor: y, + fontsize: 12, + bold: !1, + italic: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "top" + }, + linetoolhorzray: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + showPrice: !0, + showLabel: !1, + font: "Verdana", + textcolor: y, + fontsize: 12, + bold: !1, + italic: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "top" + }, + linetoolvertline: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLine: !0, + showTime: !0, + showLabel: !1, + horzLabelsAlign: "right", + vertLabelsAlign: "top", + font: "Verdana", + textcolor: y, + textOrientation: "vertical", + fontsize: 14, + bold: !1, + italic: !1 + }, + linetoolcrossline: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + showPrice: !0, + showTime: !0 + }, + linetoolcirclelines: { + trendline: { + visible: !0, + color: "rgba( 128, 128, 128, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + linecolor: "rgba( 128, 204, 219, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + linetoolfibtimezone: { + horzLabelsAlign: "right", + vertLabelsAlign: "bottom", + baselinecolor: "rgba( 128, 128, 128, 1)", + linecolor: "rgba( 0, 85, 219, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + showLabels: !0, + font: S, + fillBackground: !1, + transparency: 80, + trendline: { + visible: !0, + color: "rgba( 128, 128, 128, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + level1: r(0, "rgba(120, 123, 134, 1)", !0), + level2: r(1, y, !0), + level3: r(2, y, !0), + level4: r(3, y, !0), + level5: r(5, y, !0), + level6: r(8, y, !0), + level7: r(13, y, !0), + level8: r(21, y, !0), + level9: r(34, y, !0), + level10: r(55, y, !0), + level11: r(89, y, !0) + }, + linetooltext: { + color: y, + font: "Verdana", + fontsize: 14, + fillBackground: !1, + backgroundColor: "rgba( 91, 133, 191, 0.3)", + backgroundTransparency: 70, + drawBorder: !1, + borderColor: "rgba( 102, 123, 139, 1)", + bold: !1, + italic: !1, + fixedSize: !0, + wordWrap: !1, + wordWrapWidth: 200 + }, + linetooltextabsolute: { + color: y, + font: "Verdana", + fontsize: 14, + fillBackground: !1, + backgroundColor: "rgba( 155, 190, 213, 0.3)", + backgroundTransparency: 70, + drawBorder: !1, + borderColor: "rgba( 102, 123, 139, 1)", + bold: !1, + italic: !1, + fixedSize: !1, + wordWrap: !1, + wordWrapWidth: 200 + }, + linetoolballoon: { + color: "#ffffff", + backgroundColor: "rgba(156, 39, 176, 0.7)", + borderColor: "rgba(156, 39, 176, 0.0)", + fontsize: 14, + transparency: 30 + }, + linetoolbrush: { + linecolor: "#00bcd4", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + smooth: 5, + fillBackground: !1, + backgroundColor: "rgba(0, 188, 212, 0.5)", + transparency: 50, + leftEnd: m.Normal, + rightEnd: m.Normal + }, + linetoolhighlighter: { + linecolor: "rgba(236, 64, 122, 0.15)", + smooth: 5, + transparency: 85 + }, + linetoolpolyline: { + linecolor: "#7e57c2", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + fillBackground: !0, + backgroundColor: "rgba(126, 87, 194, 0.2)", + transparency: 50, + filled: !1 + }, + linetoolsignpost: { + itemType: p.Emoji, + emoji: "🙂", + showImage: !1, + plateColor: y, + fontSize: 12, + bold: !1, + italic: !1 + }, + linetoolpath: { + lineColor: y, + lineWidth: 2, + lineStyle: CanvasEx.LINESTYLE_SOLID, + leftEnd: m.Normal, + rightEnd: m.Arrow + }, + linetoolarrowmarkleft: { + color: y, + arrowColor: y, + fontsize: 14, + font: S, + bold: !1, + italic: !1, + showLabel: !0 + }, + linetoolarrowmarkup: { + color: "#009688", + arrowColor: "#009688", + fontsize: 14, + font: S, + bold: !1, + italic: !1, + showLabel: !0 + }, + linetoolarrowmarkright: { + color: y, + arrowColor: y, + fontsize: 14, + font: S, + bold: !1, + italic: !1, + showLabel: !0 + }, + linetoolarrowmarkdown: { + color: "#E53935", + arrowColor: "#E53935", + fontsize: 14, + font: S, + bold: !1, + italic: !1, + showLabel: !0 + }, + linetoolflagmark: { + flagColor: y + }, + linetoolnote: { + markerColor: y, + textColor: "#ffffff", + backgroundColor: n(y, 30), + backgroundTransparency: 0, + borderColor: y, + font: "Verdana", + fontSize: 14, + bold: !1, + italic: !1, + fixedSize: !0 + }, + linetoolnoteabsolute: { + markerColor: y, + textColor: "#ffffff", + backgroundColor: n(y, 30), + backgroundTransparency: 0, + borderColor: y, + font: "Verdana", + fontSize: 14, + bold: !1, + italic: !1, + fixedSize: !0 + }, + linetoolpricelabel: { + color: "#ffffff", + backgroundColor: y, + borderColor: y, + fontWeight: "bold", + fontsize: 14, + font: S, + transparency: 0 + }, + linetoolpricenote: { + showLabel: !1, + horzLabelsAlign: "center", + vertLabelsAlign: "bottom", + textColor: y, + fontSize: 14, + bold: !1, + italic: !1, + lineColor: y, + priceLabelBackgroundColor: y, + priceLabelBorderColor: y, + priceLabelTextColor: "#ffffff", + priceLabelFontSize: 12, + priceLabelBold: !1, + priceLabelItalic: !1 + }, + linetoolarrowmarker: { + backgroundColor: "#1E53E5", + textColor: "#1E53E5", + font: S, + bold: !0, + italic: !1, + fontsize: 16, + showLabel: !0 + }, + linetoolrectangle: { + color: "#9c27b0", + fillBackground: !0, + backgroundColor: "rgba(156, 39, 176, 0.2)", + linewidth: 1, + transparency: 50, + showLabel: !1, + horzLabelsAlign: "left", + vertLabelsAlign: "bottom", + textColor: "#9c27b0", + fontSize: 14, + bold: !1, + italic: !1, + extendLeft: !1, + extendRight: !1 + }, + linetoolrotatedrectangle: { + color: "#4caf50", + fillBackground: !0, + backgroundColor: "rgba(76, 175, 80, 0.2)", + transparency: 50, + linewidth: 1 + }, + linetoolellipse: { + color: "#e91e63", + fillBackground: !0, + backgroundColor: "rgba(233, 30, 99, 0.2)", + transparency: 50, + linewidth: 1 + }, + linetoolarc: { + color: "#ab47bc", + fillBackground: !0, + backgroundColor: "rgba(171, 71, 188, 0.2)", + transparency: 50, + linewidth: 1 + }, + linetoolprediction: { + linecolor: y, + linewidth: 1, + sourceBackColor: y, + sourceTextColor: "rgba(255, 255, 255, 1)", + sourceStrokeColor: y, + targetStrokeColor: y, + targetBackColor: y, + targetTextColor: "rgba(255, 255, 255, 1)", + successBackground: "rgba(76, 175, 80, 1)", + successTextColor: "rgba(255, 255, 255, 1)", + failureBackground: "rgba(244, 67, 54, 1)", + failureTextColor: "rgba(255, 255, 255, 1)", + intermediateBackColor: "rgba(234, 210, 137, 1)", + intermediateTextColor: "rgba(109, 77, 34, 1)", + transparency: 10, + centersColor: "rgba( 32, 32, 32, 1)" + }, + linetooltriangle: { + color: "#f57c00", + fillBackground: !0, + backgroundColor: "rgba(245, 124, 0, 0.2)", + transparency: 50, + linewidth: 1 + }, + linetoolcallout: { + color: "#ffffff", + backgroundColor: "rgba(0, 151, 167, 0.7)", + transparency: 50, + linewidth: 1, + fontsize: 14, + font: "Verdana", + bordercolor: "rgba(0, 151, 167, 1)", + bold: !1, + italic: !1, + wordWrap: !1, + wordWrapWidth: 200 + }, + linetoolparallelchannel: { + linecolor: y, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + extendLeft: !1, + extendRight: !1, + fillBackground: !0, + backgroundColor: n(y, 80), + transparency: 20, + showMidline: !0, + midlinecolor: y, + midlinewidth: 1, + midlinestyle: CanvasEx.LINESTYLE_DASHED + }, + linetoolelliottimpulse: { + degree: 7, + showWave: !0, + color: "rgba( 61, 133, 198, 1)", + linewidth: 1 + }, + linetoolelliotttriangle: { + degree: 7, + showWave: !0, + color: "rgba( 255, 152, 0, 1)", + linewidth: 1 + }, + linetoolelliotttriplecombo: { + degree: 7, + showWave: !0, + color: "rgba( 106, 168, 79, 1)", + linewidth: 1 + }, + linetoolelliottcorrection: { + degree: 7, + showWave: !0, + color: "rgba( 61, 133, 198, 1)", + linewidth: 1 + }, + linetoolelliottdoublecombo: { + degree: 7, + showWave: !0, + color: "rgba( 106, 168, 79, 1)", + linewidth: 1 + }, + linetoolbarspattern: { + color: y, + mode: c.Bars, + mirrored: !1, + flipped: !1 + }, + linetoolghostfeed: { + averageHL: 20, + variance: 50, + candleStyle: { + upColor: "rgba(178, 223, 219, 1)", + downColor: "rgba(239, 154, 154, 1)", + drawWick: !0, + drawBorder: !0, + borderColor: "#378658", + borderUpColor: "rgba(0, 150, 136, 1)", + borderDownColor: "rgba(244, 67, 54, 1)", + wickColor: "rgba(120, 123, 134, 1)" + }, + transparency: 50 + }, + study: { + inputs: {}, + styles: {}, + palettes: {}, + bands: {}, + area: {}, + graphics: {}, + showInDataWindow: !0, + visible: !0, + showStudyArguments: !0, + precision: "default" + }, + linetoolpitchfork: { + fillBackground: !0, + transparency: 80, + style: l.Original, + median: { + visible: !0, + color: "rgba(244, 67, 54, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + extendLines: !1, + level0: r(.25, "rgba(255, 183, 77, 1)", !1), + level1: r(.382, "rgba(129, 199, 132, 1)", !1), + level2: r(.5, "rgba(76, 175, 80, 1)", !0), + level3: r(.618, "rgba(0, 150, 136, 1)", !1), + level4: r(.75, "rgba(100, 181, 246, 1)", !1), + level5: r(1, y, !0), + level6: r(1.5, "rgba(156, 39, 176, 1)", !1), + level7: r(1.75, "rgba(233, 30, 99, 1)", !1), + level8: r(2, "rgba(229, 115, 115, 1)", !1) + }, + linetoolpitchfan: { + fillBackground: !0, + transparency: 80, + median: { + visible: !0, + color: "rgba(244, 67, 54, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + level0: r(.25, "rgba(255, 183, 77, 1)", !1), + level1: r(.382, "rgba(129, 199, 132, 1)", !1), + level2: r(.5, "rgba(76, 175, 80, 1)", !0), + level3: r(.618, "rgba(0, 150, 136, 1)", !1), + level4: r(.75, "rgba(100, 181, 246, 1)", !1), + level5: r(1, y, !0), + level6: r(1.5, "rgba(156, 39, 176, 1)", !1), + level7: r(1.75, "rgba(233, 30, 99, 1)", !1), + level8: r(2, "rgba(229, 115, 115, 1)", !1) + }, + linetoolgannfan: { + showLabels: !0, + font: "Verdana", + fillBackground: !0, + transparency: 80, + level1: P(1, 8, "rgba(255, 183, 77, 1)", !0), + level2: P(1, 4, "rgba(129, 199, 132, 1)", !0), + level3: P(1, 3, "rgba(76, 175, 80, 1)", !0), + level4: P(1, 2, "rgba(0, 150, 136, 1)", !0), + level5: P(1, 1, "rgba(100, 181, 246, 1)", !0), + level6: P(2, 1, y, !0), + level7: P(3, 1, "rgba(156, 39, 176, 1)", !0), + level8: P(4, 1, "rgba(233, 30, 99, 1)", !0), + level9: P(8, 1, "rgba(229, 115, 115, 1)", !0) + }, + linetoolganncomplex: { + fillBackground: !1, + arcsBackground: { + fillBackground: !0, + transparency: 80 + }, + reverse: !1, + scaleRatio: "", + showLabels: !0, + labelsStyle: { + font: S, + fontSize: 12, + bold: !1, + italic: !1 + }, + levels: [v("rgba(120, 123, 134, 1)", !0, 1), v("rgba(255, 152, 0, 1)", ! + 0, 1), v("rgba(129, 199, 132, 1)", !0, 1), v( + "rgba(76, 175, 80, 1)", !0, 1), v("rgba(0, 150, 136, 1)", ! + 0, 1), v("rgba(120, 123, 134, 1)", !0, 1)], + fanlines: [w("rgba(179, 157, 219, 1)", !1, 1, 8, 1), w( + "rgba(244, 67, 54, 1)", !1, 1, 5, 1), w( + "rgba(120, 123, 134, 1)", !1, 1, 4, 1), w( + "rgba(255, 152, 0, 1)", !1, 1, 3, 1), w( + "rgba(129, 199, 132, 1)", !0, 1, 2, 1), w( + "rgba(76, 175, 80, 1)", !0, 1, 1, 1), w( + "rgba(0, 150, 136, 1)", !0, 1, 1, 2), w( + "rgba(0, 150, 136, 1)", !1, 1, 1, 3), w(y, !1, 1, 1, 4), w( + "rgba(149, 117, 205, 1)", !1, 1, 1, 5), w( + "rgba(179, 157, 219, 1)", !1, 1, 1, 8)], + arcs: [w("rgba(255, 152, 0, 1)", !0, 1, 1, 0), w("rgba(255, 152, 0, 1)", + !0, 1, 1, 1), w("rgba(255, 152, 0, 1)", !0, 1, 1.5, 0), w( + "rgba(129, 199, 132, 1)", !0, 1, 2, 0), w( + "rgba(129, 199, 132, 1)", !0, 1, 2, 1), w( + "rgba(76, 175, 80, 1)", !0, 1, 3, 0), w( + "rgba(76, 175, 80, 1)", !0, 1, 3, 1), w( + "rgba(0, 150, 136, 1)", !0, 1, 4, 0), w( + "rgba(0, 150, 136, 1)", !0, 1, 4, 1), w(y, !0, 1, 5, 0), w( + y, !0, 1, 5, 1)] + }, + linetoolgannfixed: { + fillBackground: !1, + arcsBackground: { + fillBackground: !0, + transparency: 80 + }, + reverse: !1, + levels: [v("rgba(120, 123, 134, 1)", !0, 1), v("rgba(255, 152, 0, 1)", ! + 0, 1), v("rgba(129, 199, 132, 1)", !0, 1), v( + "rgba(76, 175, 80, 1)", !0, 1), v("rgba(0, 150, 136, 1)", ! + 0, 1), v("rgba(120, 123, 134, 1)", !0, 1)], + fanlines: [w("rgba(179, 157, 219, 1)", !1, 1, 8, 1), w( + "rgba(244, 67, 54, 1)", !1, 1, 5, 1), w( + "rgba(120, 123, 134, 1)", !1, 1, 4, 1), w( + "rgba(255, 152, 0, 1)", !1, 1, 3, 1), w( + "rgba(129, 199, 132, 1)", !0, 1, 2, 1), w( + "rgba(76, 175, 80, 1)", !0, 1, 1, 1), w( + "rgba(0, 150, 136, 1)", !0, 1, 1, 2), w( + "rgba(0, 150, 136, 1)", !1, 1, 1, 3), w(y, !1, 1, 1, 4), w( + "rgba(149, 117, 205, 1)", !1, 1, 1, 5), w( + "rgba(179, 157, 219, 1)", !1, 1, 1, 8)], + arcs: [w("rgba(255, 152, 0, 1)", !0, 1, 1, 0), w("rgba(255, 152, 0, 1)", + !0, 1, 1, 1), w("rgba(255, 152, 0, 1)", !0, 1, 1.5, 0), w( + "rgba(129, 199, 132, 1)", !0, 1, 2, 0), w( + "rgba(129, 199, 132, 1)", !0, 1, 2, 1), w( + "rgba(76, 175, 80, 1)", !0, 1, 3, 0), w( + "rgba(76, 175, 80, 1)", !0, 1, 3, 1), w( + "rgba(0, 150, 136, 1)", !0, 1, 4, 0), w( + "rgba(0, 150, 136, 1)", !0, 1, 4, 1), w(y, !0, 1, 5, 0), w( + y, !0, 1, 5, 1)] + }, + linetoolgannsquare: { + color: "rgba( 21, 56, 153, 0.8)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + font: S, + showTopLabels: !0, + showBottomLabels: !0, + showLeftLabels: !0, + showRightLabels: !0, + fillHorzBackground: !0, + horzTransparency: 80, + fillVertBackground: !0, + vertTransparency: 80, + reverse: !1, + fans: t("rgba(149, 152, 161, 1)", !1), + hlevel1: i(0, "rgba(120, 123, 134, 1)", !0), + hlevel2: i(.25, "rgba(245, 124, 0, 1)", !0), + hlevel3: i(.382, "rgba(129, 199, 132, 1)", !0), + hlevel4: i(.5, "rgba(76, 175, 80, 1)", !0), + hlevel5: i(.618, "rgba(0, 150, 136, 1)", !0), + hlevel6: i(.75, y, !0), + hlevel7: i(1, "rgba(120, 123, 134, 1)", !0), + vlevel1: i(0, "rgba(120, 123, 134, 1)", !0), + vlevel2: i(.25, "rgba(245, 124, 0, 1)", !0), + vlevel3: i(.382, "rgba(129, 199, 132, 1)", !0), + vlevel4: i(.5, "rgba(76, 175, 80, 1)", !0), + vlevel5: i(.618, "rgba(0, 150, 136, 1)", !0), + vlevel6: i(.75, y, !0), + vlevel7: i(1, "rgba(120, 123, 134, 1)", !0) + }, + linetoolfibspeedresistancefan: { + fillBackground: !0, + transparency: 80, + grid: { + color: "rgba( 21, 56, 153, 0.8)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + visible: !0 + }, + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + font: S, + showTopLabels: !0, + showBottomLabels: !0, + showLeftLabels: !0, + showRightLabels: !0, + reverse: !1, + hlevel1: i(0, "rgba(120, 123, 134, 1)", !0), + hlevel2: i(.25, "rgba(245, 124, 0, 1)", !0), + hlevel3: i(.382, "rgba(129, 199, 132, 1)", !0), + hlevel4: i(.5, "rgba(76, 175, 80, 1)", !0), + hlevel5: i(.618, "rgba(0, 150, 136, 1)", !0), + hlevel6: i(.75, y, !0), + hlevel7: i(1, "rgba(120, 123, 134, 1)", !0), + vlevel1: i(0, "rgba(120, 123, 134, 1)", !0), + vlevel2: i(.25, "rgba(245, 124, 0, 1)", !0), + vlevel3: i(.382, "rgba(129, 199, 132, 1)", !0), + vlevel4: i(.5, "rgba(76, 175, 80, 1)", !0), + vlevel5: i(.618, "rgba(0, 150, 136, 1)", !0), + vlevel6: i(.75, y, !0), + vlevel7: i(1, "rgba(120, 123, 134, 1)", !0) + }, + linetoolfibretracement: { + showCoeffs: !0, + showPrices: !0, + font: S, + fillBackground: !0, + transparency: 80, + extendLines: !1, + extendLinesLeft: !1, + horzLabelsAlign: "left", + vertLabelsAlign: "bottom", + reverse: !1, + coeffsAsPercents: !1, + fibLevelsBasedOnLogScale: !1, + trendline: { + visible: !0, + color: "rgba(120, 123, 134, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + levelsStyle: { + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + level1: i(0, "rgba(120, 123, 134, 1)", !0), + level2: i(.236, "rgba(244, 67, 54, 1)", !0), + level3: i(.382, "rgba(129, 199, 132, 1)", !0), + level4: i(.5, "rgba(76, 175, 80, 1)", !0), + level5: i(.618, "rgba(0, 150, 136, 1)", !0), + level6: i(.786, "rgba(100, 181, 246, 1)", !0), + level7: i(1, "rgba(120, 123, 134, 1)", !0), + level8: i(1.618, y, !0), + level9: i(2.618, "rgba(244, 67, 54, 1)", !0), + level10: i(3.618, "rgba(156, 39, 176, 1)", !0), + level11: i(4.236, "rgba(233, 30, 99, 1)", !0), + level12: i(1.272, "rgba(129, 199, 132, 1)", !1), + level13: i(1.414, "rgba(244, 67, 54, 1)", !1), + level16: i(2, "rgba(0, 150, 136, 1)", !1), + level14: i(2.272, "rgba(129, 199, 132, 1)", !1), + level15: i(2.414, "rgba(76, 175, 80, 1)", !1), + level17: i(3, "rgba(100, 181, 246, 1)", !1), + level18: i(3.272, "rgba(120, 123, 134, 1)", !1), + level19: i(3.414, y, !1), + level20: i(4, "rgba( 204, 40, 40, 1)", !1), + level21: i(4.272, "rgba(156, 39, 176, 1)", !1), + level22: i(4.414, "rgba(233, 30, 99, 1)", !1), + level23: i(4.618, "rgba(129, 199, 132, 1)", !1), + level24: i(4.764, "rgba(0, 150, 136, 1)", !1) + }, + linetoolfibchannel: { + showCoeffs: !0, + showPrices: !0, + font: S, + fillBackground: !0, + transparency: 80, + extendLeft: !1, + extendRight: !1, + horzLabelsAlign: "left", + vertLabelsAlign: "middle", + coeffsAsPercents: !1, + levelsStyle: { + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + level1: i(0, "rgba(120, 123, 134, 1)", !0), + level2: i(.236, "rgba(244, 67, 54, 1)", !0), + level3: i(.382, "rgba(129, 199, 132, 1)", !0), + level4: i(.5, "rgba(76, 175, 80, 1)", !0), + level5: i(.618, "rgba(0, 150, 136, 1)", !0), + level6: i(.786, "rgba(100, 181, 246, 1)", !0), + level7: i(1, "rgba(120, 123, 134, 1)", !0), + level8: i(1.618, y, !0), + level9: i(2.618, "rgba(244, 67, 54, 1)", !0), + level10: i(3.618, "rgba(156, 39, 176, 1)", !0), + level11: i(4.236, "rgba(233, 30, 99, 1)", !0), + level12: i(1.272, "rgba(129, 199, 132, 1)", !1), + level13: i(1.414, "rgba(244, 67, 54, 1)", !1), + level16: i(2, "rgba(0, 150, 136, 1)", !1), + level14: i(2.272, "rgba(129, 199, 132, 1)", !1), + level15: i(2.414, "rgba(76, 175, 80, 1)", !1), + level17: i(3, "rgba(100, 181, 246, 1)", !1), + level18: i(3.272, "rgba(120, 123, 134, 1)", !1), + level19: i(3.414, y, !1), + level20: i(4, "rgba( 204, 40, 40, 1)", !1), + level21: i(4.272, "rgba(156, 39, 176, 1)", !1), + level22: i(4.414, "rgba(233, 30, 99, 1)", !1), + level23: i(4.618, "rgba(129, 199, 132, 1)", !1), + level24: i(4.764, "rgba(0, 150, 136, 1)", !1) + }, + linetoolprojection: { + showCoeffs: !0, + font: "Verdana", + fillBackground: !0, + transparency: 80, + color1: n(y, 80), + color2: "rgba(156, 39, 176, 0.2)", + linewidth: 1, + trendline: { + visible: !0, + color: "rgba(149, 152, 161, 1)", + linestyle: CanvasEx.LINESTYLE_SOLID + }, + level1: r(1, "rgba( 128, 128, 128, 1)", !0) + }, + linetool5pointspattern: { + color: y, + textcolor: "rgba( 255, 255, 255, 1)", + fillBackground: !0, + backgroundColor: y, + font: "Verdana", + fontsize: 12, + bold: !1, + italic: !1, + transparency: 85, + linewidth: 1 + }, + linetoolcypherpattern: { + color: y, + textcolor: "#FFFFFF", + fillBackground: !0, + backgroundColor: y, + font: "Verdana", + fontsize: 12, + bold: !1, + italic: !1, + transparency: 85, + linewidth: 1 + }, + linetooltrianglepattern: { + color: "#673AB7", + textcolor: "#FFFFFF", + fillBackground: !0, + backgroundColor: "#673AB7", + font: "Verdana", + fontsize: 12, + bold: !1, + italic: !1, + transparency: 85, + linewidth: 1 + }, + linetoolabcd: { + color: "#009688", + textcolor: "rgba( 255, 255, 255, 1)", + font: "Verdana", + fontsize: 12, + bold: !1, + italic: !1, + linewidth: 1 + }, + linetoolthreedrivers: { + color: "#673AB7", + textcolor: "rgba( 255, 255, 255, 1)", + fillBackground: !0, + backgroundColor: "rgba( 149, 40, 204, 0.5)", + font: "Verdana", + fontsize: 12, + bold: !1, + italic: !1, + transparency: 50, + linewidth: 1 + }, + linetoolheadandshoulders: { + color: "#009688", + textcolor: "rgba( 255, 255, 255, 1)", + fillBackground: !0, + backgroundColor: "#009688", + font: "Verdana", + fontsize: 12, + bold: !1, + italic: !1, + transparency: 85, + linewidth: 1 + }, + linetoolfibwedge: { + showCoeffs: !0, + font: S, + fillBackground: !0, + transparency: 80, + trendline: { + visible: !0, + color: "rgba( 128, 128, 128, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + level1: r(.236, "rgba(244, 67, 54, 1)", !0), + level2: r(.382, "rgba(129, 199, 132, 1)", !0), + level3: r(.5, "rgba(76, 175, 80, 1)", !0), + level4: r(.618, "rgba(0, 150, 136, 1)", !0), + level5: r(.786, "rgba(100, 181, 246, 1)", !0), + level6: r(1, "rgba(120, 123, 134, 1)", !0), + level7: r(1.618, y, !1), + level8: r(2.618, "rgba(244, 67, 54, 1)", !1), + level9: r(3.618, "rgba(103, 58, 183, 1)", !1), + level10: r(4.236, "rgba(233, 30, 99, 1)", !1), + level11: r(4.618, "rgba(233, 30, 99, 1)", !1) + }, + linetoolfibcircles: { + showCoeffs: !0, + font: S, + fillBackground: !0, + transparency: 80, + coeffsAsPercents: !1, + trendline: { + visible: !0, + color: "rgba(120, 123, 134, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + level1: r(.236, "rgba(244, 67, 54, 1)", !0), + level2: r(.382, "rgba(129, 199, 132, 1)", !0), + level3: r(.5, "rgba(76, 175, 80, 1)", !0), + level4: r(.618, "rgba(0, 150, 136, 1)", !0), + level5: r(.786, "rgba(100, 181, 246, 1)", !0), + level6: r(1, "rgba(120, 123, 134, 1)", !0), + level7: r(1.618, y, !0), + level8: r(2.618, "rgba(244, 67, 54, 1)", !0), + level9: r(3.618, "rgba(103, 58, 183, 1)", !0), + level10: r(4.236, "rgba(233, 30, 99, 1)", !0), + level11: r(4.618, "rgba(233, 30, 99, 1)", !0) + }, + linetoolfibspeedresistancearcs: { + showCoeffs: !0, + font: S, + fillBackground: !0, + transparency: 80, + fullCircles: !1, + trendline: { + visible: !0, + color: "rgba(120, 123, 134, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + level1: r(.236, "rgba(244, 67, 54, 1)", !0), + level2: r(.382, "rgba(129, 199, 132, 1)", !0), + level3: r(.5, "rgba(76, 175, 80, 1)", !0), + level4: r(.618, "rgba(0, 150, 136, 1)", !0), + level5: r(.786, "rgba(100, 181, 246, 1)", !0), + level6: r(1, "rgba(120, 123, 134, 1)", !0), + level7: r(1.618, y, !0), + level8: r(2.618, "rgba(244, 67, 54, 1)", !0), + level9: r(3.618, "rgba(103, 58, 183, 1)", !0), + level10: r(4.236, "rgba(233, 30, 99, 1)", !0), + level11: r(4.618, "rgba(233, 30, 99, 1)", !0) + }, + linetooltrendbasedfibextension: { + showCoeffs: !0, + showPrices: !0, + font: S, + fillBackground: !0, + transparency: 80, + extendLines: !1, + extendLinesLeft: !1, + horzLabelsAlign: "left", + vertLabelsAlign: "bottom", + reverse: !1, + coeffsAsPercents: !1, + fibLevelsBasedOnLogScale: !1, + trendline: { + visible: !0, + color: "rgba(120, 123, 134, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + levelsStyle: { + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + level1: i(0, "rgba(120, 123, 134, 1)", !0), + level2: i(.236, "rgba(244, 67, 54, 1)", !0), + level3: i(.382, "rgba(129, 199, 132, 1)", !0), + level4: i(.5, "rgba(76, 175, 80, 1)", !0), + level5: i(.618, "rgba(0, 150, 136, 1)", !0), + level6: i(.786, "rgba(100, 181, 246, 1)", !0), + level7: i(1, "rgba(120, 123, 134, 1)", !0), + level8: i(1.618, y, !0), + level9: i(2.618, "rgba(244, 67, 54, 1)", !0), + level10: i(3.618, "rgba(156, 39, 176, 1)", !0), + level11: i(4.236, "rgba(233, 30, 99, 1)", !0), + level12: i(1.272, "rgba(129, 199, 132, 1)", !1), + level13: i(1.414, "rgba(244, 67, 54, 1)", !1), + level16: i(2, "rgba(0, 150, 136, 1)", !1), + level14: i(2.272, "rgba(129, 199, 132, 1)", !1), + level15: i(2.414, "rgba(76, 175, 80, 1)", !1), + level17: i(3, "rgba(100, 181, 246, 1)", !1), + level18: i(3.272, "rgba(120, 123, 134, 1)", !1), + level19: i(3.414, y, !1), + level20: i(4, "rgba( 204, 40, 40, 1)", !1), + level21: i(4.272, "rgba(156, 39, 176, 1)", !1), + level22: i(4.414, "rgba(233, 30, 99, 1)", !1), + level23: i(4.618, "rgba(129, 199, 132, 1)", !1), + level24: i(4.764, "rgba(0, 150, 136, 1)", !1) + }, + linetooltrendbasedfibtime: { + showCoeffs: !0, + font: "Verdana", + fillBackground: !0, + transparency: 80, + horzLabelsAlign: "right", + vertLabelsAlign: "bottom", + trendline: { + visible: !0, + color: "rgba(120, 123, 134, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_DASHED + }, + level1: r(0, "rgba(120, 123, 134, 1)", !0), + level2: r(.382, "rgba(244, 67, 54, 1)", !0), + level3: r(.5, "rgba(129, 199, 132, 1)", !1), + level4: r(.618, "rgba(76, 175, 80, 1)", !0), + level5: r(1, "rgba(0, 150, 136, 1)", !0), + level6: r(1.382, "rgba(100, 181, 246, 1)", !0), + level7: r(1.618, "rgba(120, 123, 134, 1)", !0), + level8: r(2, y, !0), + level9: r(2.382, "rgba(244, 67, 54, 1)", !0), + level10: r(2.618, "rgba(156, 39, 176, 1)", !0), + level11: r(3, "rgba(233, 30, 99, 1)", !0) + }, + linetoolschiffpitchfork: { + fillBackground: !0, + transparency: 80, + style: l.Schiff, + median: { + visible: !0, + color: "rgba(244, 67, 54, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + extendLines: !1, + level0: r(.25, "rgba(255, 183, 77, 1)", !1), + level1: r(.382, "rgba(129, 199, 132, 1)", !1), + level2: r(.5, "rgba(76, 175, 80, 1)", !0), + level3: r(.618, "rgba(0, 150, 136, 1)", !1), + level4: r(.75, "rgba(100, 181, 246, 1)", !1), + level5: r(1, y, !0), + level6: r(1.5, "rgba(156, 39, 176, 1)", !1), + level7: r(1.75, "rgba(233, 30, 99, 1)", !1), + level8: r(2, "rgba(229, 115, 115, 1)", !1) + }, + linetoolschiffpitchfork2: { + fillBackground: !0, + transparency: 80, + style: l.Schiff2, + median: { + visible: !0, + color: "rgba(244, 67, 54, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + extendLines: !1, + level0: r(.25, "rgba(255, 183, 77, 1)", !1), + level1: r(.382, "rgba(129, 199, 132, 1)", !1), + level2: r(.5, "rgba(76, 175, 80, 1)", !0), + level3: r(.618, "rgba(0, 150, 136, 1)", !1), + level4: r(.75, "rgba(100, 181, 246, 1)", !1), + level5: r(1, y, !0), + level6: r(1.5, "rgba(156, 39, 176, 1)", !1), + level7: r(1.75, "rgba(233, 30, 99, 1)", !1), + level8: r(2, "rgba(229, 115, 115, 1)", !1) + }, + linetoolinsidepitchfork: { + fillBackground: !0, + transparency: 80, + style: l.Inside, + median: { + visible: !0, + color: "rgba(244, 67, 54, 1)", + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID + }, + extendLines: !1, + level0: r(.25, "rgba(255, 183, 77, 1)", !1), + level1: r(.382, "rgba(129, 199, 132, 1)", !1), + level2: r(.5, "rgba(76, 175, 80, 1)", !0), + level3: r(.618, "rgba(0, 150, 136, 1)", !1), + level4: r(.75, "rgba(100, 181, 246, 1)", !1), + level5: r(1, y, !0), + level6: r(1.5, "rgba(156, 39, 176, 1)", !1), + level7: r(1.75, "rgba(233, 30, 99, 1)", !1), + level8: r(2, "rgba(229, 115, 115, 1)", !1) + }, + linetoolregressiontrend: { + linewidth: 1, + linestyle: CanvasEx.LINESTYLE_SOLID, + styles: { + upLine: { + visible: !0, + color: n(y, 70), + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1 + }, + downLine: { + visible: !0, + color: n(y, 70), + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1 + }, + baseLine: { + visible: !0, + color: "rgba(244, 67, 54, 0.3)", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1 + }, + extendLines: !1, + showPearsons: !0, + transparency: 70 + } + } + }, C(TradingView.defaultProperties.chartproperties), x() + } + if (void 0 === TradingView.defaultProperties["study_MA@tv-basicstudies"] && (TradingView + .defaultProperties["study_MA@tv-basicstudies"] = { + description: "Moving Average", + shortDescription: "MA", + inputs: { + length: 9, + source: "close" + }, + styles: { + MovAvg: { + visible: !0, + color: y, + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1, + plottype: h.Line, + histogramBase: 0, + title: "MA" + } + } + }), void 0 === TradingView.defaultProperties[ + "study_PivotPointsHighLow@tv-basicstudies"] && (TradingView.defaultProperties[ + "study_PivotPointsHighLow@tv-basicstudies"] = { + font: "Arial", + fontsize: 10, + borderColor: y, + backColor: "#E3EFFD", + textColor: "#131722" + }), void 0 === TradingView.defaultProperties[ + "study_PivotPointsStandard@tv-basicstudies"]) { + TradingView.defaultProperties["study_PivotPointsStandard@tv-basicstudies"] = { + _hardCodedDefaultsVersion: 1, + font: "Arial", + fontsize: 11, + levelsStyle: { + showLabels: !0, + visibility: { + P: !0, + "S1/R1": !0, + "S2/R2": !0, + "S3/R3": !0, + "S4/R4": !0, + "S5/R5": !0 + }, + colors: { + P: "#FB8C00", + "S1/R1": "#FB8C00", + "S2/R2": "#FB8C00", + "S3/R3": "#FB8C00", + "S4/R4": "#FB8C00", + "S5/R5": "#FB8C00" + }, + widths: { + P: 1, + "S1/R1": 1, + "S2/R2": 1, + "S3/R3": 1, + "S4/R4": 1, + "S5/R5": 1 + } + } + } + } + if (void 0 === TradingView.defaultProperties["study_ZigZag@tv-basicstudies"] && ( + TradingView.defaultProperties["study_ZigZag@tv-basicstudies"] = { + color: y, + linewidth: 2 + }), void 0 === TradingView.defaultProperties[ + "study_ElliottWave@tv-basicstudies"] && (TradingView.defaultProperties[ + "study_ElliottWave@tv-basicstudies"] = { + inputs: {}, + level0: t("rgba( 255, 0, 0, 1)", !1), + level1: t("rgba( 0, 128, 0, 1)", !1), + level2: t("rgba( 0, 0, 255, 1)", !1), + level3: t("rgba( 255, 0, 255, 1)", !1), + level4: t("rgba( 0, 128, 255, 1)", !0), + level5: t("rgba( 255, 0, 0, 1)", !0), + level6: t("rgba( 0, 128, 0, 1)", !0), + level7: t("rgba( 0, 0, 255, 1)", !0), + level8: t("rgba( 255, 0, 255, 1)", !0) + }), void 0 === TradingView.defaultProperties[ + "study_LinearRegression@tv-basicstudies"] && (TradingView.defaultProperties[ + "study_LinearRegression@tv-basicstudies"] = { + styles: { + upLine: { + visible: !0, + color: n(y, 70), + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1 + }, + downLine: { + visible: !0, + color: n(y, 70), + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1 + }, + baseLine: { + visible: !0, + color: "rgba(244, 67, 54, 0.3)", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1 + }, + extendLines: !0, + showPearsons: !0, + backgroundColor: "rgba( 153, 21, 21, 0.3)", + transparency: 70 + } + }), void 0 === TradingView.defaultProperties["study_Compare@tv-basicstudies"] && ( + TradingView.defaultProperties["study_Compare@tv-basicstudies"] = { + minTick: "default" + }), void 0 === TradingView.defaultProperties["study_Overlay@tv-basicstudies"]) { + TradingView.defaultProperties["study_Overlay@tv-basicstudies"] = { + style: a.STYLE_LINE, + allowExtendTimeScale: !1, + showPriceLine: !1, + minTick: "default", + candleStyle: { + upColor: "rgba( 107, 165, 131, 1)", + downColor: "rgba( 215, 84, 66, 1)", + drawWick: !0, + drawBorder: !0, + drawBody: !0, + borderColor: "rgba( 55, 134, 88, 1)", + borderUpColor: "rgba( 34, 84, 55, 1)", + borderDownColor: "rgba( 91, 26, 19, 1)", + wickColor: "rgba( 115, 115, 117, 1)", + wickUpColor: "rgba( 115, 115, 117, 1)", + wickDownColor: "rgba( 115, 115, 117, 1)", + barColorsOnPrevClose: !1 + }, + hollowCandleStyle: { + upColor: "rgba( 107, 165, 131, 1)", + downColor: "rgba( 215, 84, 66, 1)", + drawWick: !0, + drawBorder: !0, + drawBody: !0, + borderColor: "rgba( 55, 134, 88, 1)", + borderUpColor: "rgba( 34, 84, 55, 1)", + borderDownColor: "rgba( 91, 26, 19, 1)", + wickColor: "rgba( 115, 115, 117, 1)", + wickUpColor: "rgba( 115, 115, 117, 1)", + wickDownColor: "rgba( 115, 115, 117, 1)", + barColorsOnPrevClose: !1 + }, + barStyle: { + upColor: "rgba( 107, 165, 131, 1)", + downColor: "rgba( 215, 84, 66, 1)", + barColorsOnPrevClose: !1, + dontDrawOpen: !1, + thinBars: !0 + }, + lineStyle: { + color: "#FF6D00", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 2, + priceSource: "close", + styleType: a.STYLE_LINE_TYPE_SIMPLE + }, + areaStyle: { + color1: y, + color2: y, + linecolor: y, + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 2, + priceSource: "close", + transparency: 95 + }, + baselineStyle: { + baselineColor: "rgba( 117, 134, 150, 1)", + topFillColor1: "rgba( 83, 185, 135, 0.05)", + topFillColor2: "rgba( 83, 185, 135, 0.05)", + bottomFillColor1: "rgba( 235, 77, 92, 0.05)", + bottomFillColor2: "rgba( 235, 77, 92, 0.05)", + topLineColor: "rgba( 83, 185, 135, 1)", + bottomLineColor: "rgba( 235, 77, 92, 1)", + topLineWidth: 2, + bottomLineWidth: 2, + priceSource: "close", + transparency: 50, + baseLevelPercentage: 50 + }, + styles: { + open: { + visible: !0, + color: "rgba( 255, 0, 0, 1)", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1, + plottype: h.Line, + histogramBase: 0 + }, + high: { + visible: !0, + color: "rgba( 255, 0, 0, 1)", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1, + plottype: h.Line, + histogramBase: 0 + }, + low: { + visible: !0, + color: "rgba( 255, 0, 0, 1)", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1, + plottype: h.Line, + histogramBase: 0 + }, + close: { + visible: !0, + color: "rgba( 255, 0, 0, 1)", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 1, + plottype: h.Line, + histogramBase: 0 + } + } + } + } + for (var I = e.split("."), M = TradingView.defaultProperties, O = 0; O < I.length; O++) + M && (M = M[I[O]]); + return null != M ? TradingView.clone(M) : {} + }; + + function P(e, t, i, s, r) { + if (s) + for (var n in s) { + var o = n.split("."), + a = c(o[0]), + l = void 0 !== r && r === o[0]; + 0 !== o.length && l && (a = c((o = o.slice(1))[0])), 0 !== o.length && e + .hasOwnProperty(a) ? h(e, o, s[n]) || u(n) : l && u(n) + } + + function c(e) { + return t && t[e] ? t[e] : e + } + + function h(e, t, i, s) { + var r = c(t[0]); + return !!e.hasOwnProperty(r) && (t.length > 1 ? h(e[r], t.slice(1), i) : (e[r] && e[r] + .setValue ? e[r].setValue(i) : e[r] = i, !0)) + } + + function u(e) { + i || v.logWarn("Path `" + e + "` does not exist.") + } + } + + function C(e, t, i, s) { + window.__defaultsOverrides && P(e, t, i, window.__defaultsOverrides, s) + } + + function x() { + var e = /^linetool.+/; + Object.keys(TradingView.defaultProperties).forEach((function(t) { + e.test(t) && C(TradingView.defaultProperties[t], null, !1, t) + })) + } + + function T(e, t) { + return t ? function(e, t) { + var i = w(e); + if (!window._UNIT_TESTS) { + var s = TradingView.clone(TVSettings.getJSON(e, null)); + if (function(e) { + var t = new Set(["linetoolregressiontrend"]); + return e.startsWith("study_") || t.has(e) + }(e) && s && function(e) { + if (!e) return !1; + e = e.toString(); + var t = new RegExp("\\d+").exec(e); + return null !== t && t[0] === e + }(s.version)) { + var r = s.inputs, + n = t.updateStudyInputs(s.id, s.version, "last", r, null); + s.inputs = n; + var o = t.updateStudyState(s, s); + s = o + } + TradingView.merge(i, s) + } + return i + }(e, t) : function(e) { + var t = w(e); + if (!window._UNIT_TESTS) { + var i = TradingView.clone(TVSettings.getJSON(e, null)); + i && TradingView.merge(t, i) + } + return t + }(e) + } + T.create = function(e, t) { + if (t) { + var i = w(e); + TradingView.defaultProperties[e] = Object.assign(t, i) + } + }, T.remove = function(e) { + TradingView.defaultProperties[e] = void 0 + }, TradingView.saveDefaults = function(e, t) { + TVSettings.setJSON(e, t) + }, TradingView.factoryDefaults = w, window.applyDefaultOverridesToLinetools = x, window + .applyDefaultsOverrides = C, window.applyPropertiesOverrides = P, window.defaults = T, t + .applyDefaultOverridesToLinetools = x, t.applyDefaultsOverrides = C, t + .applyPropertiesOverrides = P, t.defaults = T, t.factoryDefaults = w, t.saveDefaults = + TradingView.saveDefaults + }, + wamh: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "ChangeToolBarsThemeUndoCommand", (function() { + return o + })); + var s = i("EsvI"), + r = i("oiZD"), + n = i("RDU5"); + class o extends n.UndoCommand { + constructor(e, t, i = !0) { + super("Apply Toolbars Theme"), this._prevThemeName = e, this._themeName = t, + this._syncState = i + } + undo() { + Object(s.isStdThemeName)(this._prevThemeName) && (Object(r.setTheme)(this + ._prevThemeName), this._syncState && Object(s.syncTheme)()) + } + redo() { + Object(s.isStdThemeName)(this._themeName.toLowerCase()) && (Object(r.setTheme)( + this._themeName.toLowerCase()), this._syncState && Object(s + .syncTheme)()) + } + } + }, + wi9r: function(e, t, i) { + "use strict"; + (function(e) { + var t = i("e3/o").randomHash; + + function s(e) { + this._chartApi = e, this._sessionid = "qs_" + t(), this._sessionstarted = !1 + } + s.prototype.destroy = function() { + this._sessionstarted && (this._chartApi.quoteDeleteSession(this._sessionid), + this._sessionid = null, this._sessionstarted = !1) + }, s.prototype.connected = function() { + return this._chartApi.connected() + }, s.prototype.connect = function(e) { + this._globalHandler = e, this._chartApi.createSession(this._sessionid, this), + this._chartApi.connect() + }, s.prototype.disconnect = function() { + this._chartApi.disconnect() + }, s.prototype.quoteAddSymbols = function(e, t) { + e = [].concat(e), t && t.forcePermission && (e = e.concat({ + flags: ["force_permission"] + })), this._chartApi.quoteAddSymbols(this._sessionid, e) + }, s.prototype.quoteRemoveSymbols = function(e) { + this._chartApi.quoteRemoveSymbols(this._sessionid, e) + }, s.prototype.quoteFastSymbols = function(e) { + this._chartApi.quoteFastSymbols(this._sessionid, e) + }, s.prototype.quoteSetFields = function(e) { + this._chartApi.quoteSetFields(this._sessionid, e) + }, s.prototype.onMessage = function(e) { + switch (e.method) { + case "connected": + this._sessionstarted || (this._chartApi.quoteCreateSession(this + ._sessionid), this._sessionstarted = !0); + break; + case "disconnected": + this._sessionstarted = !1 + } + this._globalHandler(e) + }, s.prototype.quoteHibernateAll = function(e) { + this._chartApi.quoteHibernateAll(this._sessionid) + }, TradingView.QuoteSession = s, e && e.exports && (e.exports = s) + }).call(this, i("YuTi")(e)) + }, + wiuq: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolArrowMarker", (function() { + return a + })); + var s = i("Ss5c"), + r = i("Ocx9"), + n = i("tc+8"), + o = i.n(n); + class a extends s.LineDataSource { + constructor(e, t) { + super(e, t || a.createProperties()), + i.e("lt-pane-views").then(i.bind(null, "Qa6j")).then(({ + ArrowMarkerPaneView: e + }) => { + this._setPaneViews([new e(this, this.model())]) + }) + } + pointsCount() { + return 2 + } + name() { + return "Trend Line" + } + static createProperties(e) { + const t = new r.DefaultProperty("linetoolarrowmarker", e); + return a._configureProperties(t), t + } + _getPropertyDefinitionsViewModelClass() { + return Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "FxV7")).then( + e => e.ArrowMarkerDefinitionsViewModel) + } + static _configureProperties(e) { + s.LineDataSource._configureProperties(e), e.hasChild("text") || e.addChild( + "text", new o.a("")), e.addExclusion("text") + } + } + }, + wjVR: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("txPx"); + + function n(e, t) { + const i = Object.create(Object.getPrototypeOf(e)); + for (const s of t) Object.prototype.hasOwnProperty.call(e, s) && (i[s] = e[s]); + return i + } + var o = i("qFKp"), + a = i("jofe"), + l = i("FQhm"), + c = i("sQaR"); + let h; + class u extends c.a { + constructor() { + super(), this._dialog = null, this._subscribe = e => { + this._setVisibility(e) + } + } + show() { + this._load().then(e => e.show()) + } + hide() { + var e; + null === (e = this._dialog) || void 0 === e || e.hide() + } + static getInstance() { + return h || (h = new u), h + } + _load() { + return Promise.all([i.e("redux"), i.e("react"), i.e(1), i.e(3), i.e(4), i.e(6), + i.e(8), i.e(9), i.e(11), i.e(12), i.e(13), i.e(14), i.e(16), i.e( + 22), i.e(24), i.e(41), i.e(51), i.e(63), i.e(74), i.e(0), i.e( + 2), i + .e(5), i.e(7), i.e(10), i.e(15), i.e(20), i.e(38), i.e(47), i.e(56), + i.e("object-tree-dialog") + ]).then(i.bind(null, "xNz2")).then(e => { + var t, i; + return null === (t = this._dialog) || void 0 === t || t.hide(), + null === (i = this._dialog) || void 0 === i || i.visible() + .unsubscribe(this._subscribe), this._dialog = new e + .ObjectTreeDialogRenderer, this._dialog.visible().subscribe(this + ._subscribe), this._dialog + }) + } + } + var d = i("ogJP"), + p = i("dDSx"); + var _ = i("CW80"), + m = i("3ClC"), + f = i("H0vP"), + g = i("mkn5"), + b = i("eJTA"), + v = i("Hr11"), + S = i("S8xo"), + y = i("ikwP"); + i("bc0y"); + class w { + constructor(e, t, i) { + this._handleEl = null, this._startY = 0, this._deltaY = 0, this._totalHeight = 0, + this._totalStretch = 0, this._prevStretchA = 0, this._minPaneHeight = 0, this + ._maxPaneHeight = 0, this._pixelStretchFactor = 0, this._colorCache = { + lineColor: "", + backgroundColor: "", + color: "" + }, this._chart = e, this._paneA = e.paneWidgets()[t], this._paneB = e + .paneWidgets()[i], this._row = document.createElement("tr"), this._cell = + document.createElement("td"), this._row.appendChild(this._cell), this._cell + .classList.add("pane-separator"), this._cell.setAttribute("colspan", "3"), this + ._cell.style.background = this._color(), this.adjustSize(), this._cell + .addEventListener("click", () => {}); + const s = document.createElement("div"); + s.classList.add("handle"), this._cell.appendChild(s), this._mouseEventHandler = + new S.MouseEventHandler(s, this, { + treatVertTouchDragAsPageScroll: !1, + treatHorzTouchDragAsPageScroll: !0 + }), this._handleEl = s + } + destroy() { + this._mouseEventHandler.destroy(), this._row.parentElement && this._row + .parentElement.removeChild(this._row) + } + getElement() { + return this._row + } + hide() { + this._row.classList.add("js-hidden") + } + show() { + this._row.classList.remove("js-hidden") + } + adjustSize() { + this._row.style.height = w.height() + "px" + } + mouseDownEvent(e) { + this._mouseDownOrTouchStartEvent(e) + } + touchStartEvent(e) { + this._mouseDownOrTouchStartEvent(e) + } + pressedMouseMoveEvent(e) { + this._pressedMouseOrTouchMoveEvent(e) + } + touchMoveEvent(e) { + this._pressedMouseOrTouchMoveEvent(e) + } + mouseUpEvent(e) { + this._mouseUpOrTouchEndEvent(e) + } + touchEndEvent(e) { + this._mouseUpOrTouchEndEvent(e) + } + update() { + this._cell.style.background = this._color().toString() + } + paint() {} + image() { + const e = this._paneA.leftPriceAxisesContainer().getWidth(), + t = this._paneA.width(), + i = this._paneA.rightPriceAxisesContainer().getWidth(), + s = this._color(), + r = Object(y.createDisconnectedCanvas)(document, new y.Size(e, 1)), + n = Object(y.getPrescaledContext2D)(r); + n.fillStyle = s, n.fillRect(0, 0, e, 1); + const o = Object(y.createDisconnectedCanvas)(document, new y.Size(t, 1)), + a = Object(y.getPrescaledContext2D)(o); + a.fillStyle = s, a.fillRect(0, 0, t, 1); + const l = Object(y.createDisconnectedCanvas)(document, new y.Size(i, 1)), + c = Object(y.getPrescaledContext2D)(l); + return c.fillStyle = s, c.fillRect(0, 0, i, 1), { + type: "separator", + leftAxis: { + content: r.toDataURL(), + canvas: r, + contentWidth: e, + contentHeight: 1 + }, + rightAxis: { + content: l.toDataURL(), + canvas: l, + contentWidth: i, + contentHeight: 1 + }, + content: o.toDataURL(), + canvas: o, + contentWidth: t, + contentHeight: 1 + } + } + static height() { + const e = window.devicePixelRatio || 1; + return e >= 1 ? 1 : 1 / e + } + _mouseDownOrTouchStartEvent(e) { + this._startY = e.pageY, this._deltaY = 0, this._totalHeight = this._paneA.height() + + this._paneB.height(), this._totalStretch = this._paneA.state().stretchFactor() + + this._paneB.state().stretchFactor(), this._prevStretchA = this._paneA.state() + .stretchFactor(), this._minPaneHeight = 30, this._maxPaneHeight = this + ._totalHeight - this._minPaneHeight, this._pixelStretchFactor = this + ._totalStretch / this._totalHeight, Object(s.ensureNotNull)(this._handleEl) + .classList.add("i-active") + } + _pressedMouseOrTouchMoveEvent(e) { + this._deltaY = e.pageY - this._startY; + const t = this._paneA.height(), + i = Object(v.clamp)(t + this._deltaY, this._minPaneHeight, this + ._maxPaneHeight) * this._pixelStretchFactor, + s = this._totalStretch - i; + this._paneA.state().setStretchFactor(i), this._paneB.state().setStretchFactor(s), + this._chart.adjustSize(), this._paneA.height() !== t && (this._startY = e + .pageY), this._chart.model().model().fullUpdate() + } + _mouseUpOrTouchEndEvent(e) { + this._chart.model().addPaneStretchFactorUndoCommand(this._paneA.state(), this._paneB + .state(), this._prevStretchA, this._paneA.state().stretchFactor()), this + ._startY = 0, this._deltaY = 0, this._totalHeight = 0, this._totalStretch = 0, + this._minPaneHeight = 0, this._maxPaneHeight = 0, this._pixelStretchFactor = 0, + Object(s.ensureNotNull)(this._handleEl).classList.remove("i-active") + } + _color() { + const e = this._chart.properties().childs().scalesProperties.childs().lineColor + .value(), + t = this._chart.model().model().backgroundColor().value(); + if (this._colorCache.lineColor !== e || this._colorCache.backgroundColor !== t) { + const i = Object(b.parseRgba)(t), + s = Object(b.parseRgba)(e), + r = 0 === i[3] && 0 === s[3] ? "rgba(0,0,0,0)" : Object(b.rgbaToString)( + Object(b.blendRgba)(i, s)); + this._colorCache = { + lineColor: e, + backgroundColor: t, + color: r + } + } + return this._colorCache.color + } + } + var P = i("mMWL"), + C = i("KnF9"), + x = i("VaSN"), + T = i("aIyQ"), + I = i.n(T), + M = i("hY0g"), + O = i.n(M), + L = i("Tmoa"), + A = i("EsvI"); + const E = { + moving: "wait_finishing", + wait_finishing: "stop", + stop: "moving" + }; + class k { + constructor(e) { + this._chartModel = null, this._currentDistance = 0, this._deferredFinishTimeout = 0, + this._finishingTimeout = 0, this._moveType = "", this._startTime = 0, this + ._state = "stop", this._movingTimeout = 0, this._chart = e, this._chart + .withModel(this, () => { + this._chartModel = this._chart.model() + }) + } + destroy() { + clearTimeout(this._movingTimeout) + } + move(e) { + if (null !== this._chartModel && "stop" === this._state && this._chartModel + .beginUndoMacro(1 === e ? "Move Left" : "Move Right"), this._state = E.stop, + this._moveType = "animated", this._deferredFinishTimeout && (clearTimeout(this + ._deferredFinishTimeout), this._deferredFinishTimeout = 0), this + ._finishingTimeout && (clearTimeout(this._finishingTimeout), this + ._finishingTimeout = 0), this._startTime = Date.now(), 0 === this + ._movingTimeout) { + const t = this._startTime, + i = 10, + s = () => { + this.moveStep(t, 0, 50 * e, 1e3), this._movingTimeout = setTimeout(s, i) + }; + this._movingTimeout = setTimeout(s, i) + } + } + moveStep(e, t, i, s) { + if (null !== this._chartModel && !this._chartModel.timeScale().isEmpty()) { + const r = Date.now(); + r < e && (e = r); + let n = (r - e) / s; + (n > 1 || !isFinite(n)) && (n = 1); + const o = 1 - Math.pow(1 - n, 3); + return this._currentDistance = (i - t) * o + t, this._chartModel.scrollChart( + this._currentDistance), n + } + } + moveByBar(e) { + if (null !== this._chartModel) { + const t = this._chartModel.timeScale(); + if (t.isEmpty()) return; + if ("stop" === this._state && this._chartModel.beginUndoMacro(1 === e ? + "Move Left" : "Move Right"), null !== t.visibleBarsStrictRange()) { + const e = t.indexToCoordinate(t.visibleBarsStrictRange().lastBar()) + t + .barSpacing() / 2; + Math.abs(t.width() - e) > t.barSpacing() / 6 && this._chartModel + .scrollChart(t.width() - e) + } + if (this._state = E.stop, this._moveType = "by_bar", this._startTime = Date + .now(), !this._movingTimeout) { + let t = 0, + i = 150; + const s = 400, + r = () => { + this._moveByBarStep(e), t++, i > 100 && (i -= t / 5 * 20), this + ._movingTimeout = setTimeout(r, i) + }; + this._movingTimeout = setTimeout(r, s), this._moveByBarStep(e) + } + } + } + stopMove() { + "by_bar" === this._moveType ? this.stopMoveByBar() : this._stopMove() + } + stopMoveByBar() { + "moving" === this._state && (clearTimeout(this._movingTimeout), this + ._movingTimeout = 0, this._state = E.wait_finishing, this._moveType = "", + this._movingTimeout = 0, this._currentDistance = 0, null !== this + ._chartModel && this._chartModel.endUndoMacro()) + } + _finishMove() { + clearTimeout(this._movingTimeout), this._movingTimeout = 0, this + ._deferredFinishTimeout = 0; + const e = this._currentDistance, + t = Date.now(), + i = () => { + const s = this.moveStep(t, e, 0, 700); + s && s < 1 ? this._finishingTimeout = setTimeout(i, 10) : null !== this + ._chartModel && (this._state = E.wait_finishing, this._moveType = "", + this._movingTimeout = 0, this._currentDistance = 0, this._chartModel + .endUndoMacro()) + }; + this._finishingTimeout = setTimeout(i, 10) + } + _stopMove() { + "moving" === this._state && (this._state = E.moving, Date.now() - this._startTime < + 200 ? this._deferredFinishTimeout = setTimeout(this._finishMove.bind(this), + 200 - (Date.now() - this._startTime)) : this._finishMove()) + } + _moveByBarStep(e) { + if (null !== this._chartModel) { + if (this._chartModel.timeScale().isEmpty()) return; + this._chartModel.scrollChartByBar(e) + } + } + } + var D = i("m/3z"), + V = i("Kxc7"), + B = i("nqXy"), + R = i("n5al"), + N = i("pPtI"); + class j { + constructor() { + this._draggingSource = null, this._activeTouchPanes = new Set, this._scrollingPane = + null, this._pinchingPane = null + } + onPaneDestroyed(e) { + this._activeTouchPanes.delete(e), this._scrollingPane === e && (this + ._scrollingPane = null), this._pinchingPane === e && (this._pinchingPane = + null) + } + startTouch(e) { + this._activeTouchPanes.add(e) + } + endTouch(e) { + this._activeTouchPanes.delete(e) + } + hasTouchesOnOtherPanes(e) { + return this._activeTouchPanes.size > 1 || 1 === this._activeTouchPanes.size && !this + ._activeTouchPanes.has(e) + } + trySetDraggingSource(e, t) { + return !this.hasTouchesOnOtherPanes(t) && (Object(s.assert)(null === this + ._draggingSource || this._draggingSource === e), this._draggingSource = + e, !0) + } + clearDraggingSource() { + null !== this._draggingSource && (this._draggingSource = null) + } + draggingSource() { + return this._draggingSource + } + setScrollingPane(e) { + Object(s.assert)(null === e || null === this._scrollingPane), this._scrollingPane = + e + } + scrollingPane() { + return this._scrollingPane + } + setPinchingPane(e) { + Object(s.assert)(null === e || null === this._pinchingPane), this._pinchingPane = e + } + pinchingPane() { + return this._pinchingPane + } + } + var F = i("JWMC"); + i.d(t, "ChartWidgetBase", (function() { + return G + })); + const W = Object(V.enabled)("chart_content_overrides_by_defaults"), + H = Object(r.getLogger)("ChartWidget", { + color: "#606" + }), + U = { + addToWatchlistEnabled: !0, + showFinancialsEnabled: !1, + sourceSelectionEnabled: !0, + propertyPagesEnabled: !0, + paneContextMenuEnabled: !0, + priceScaleContextMenuEnabled: !0, + currencyConversionEnabled: !1, + unitConversionEnabled: !1, + goToDateEnabled: !1, + marketStatusWidgetEnabled: !0, + chartWarningWidgetEnabled: !0, + dataProblemWidgetEnabled: !0, + paneControlsEnabled: !0, + isSymbolAvailable: e => Promise.resolve(!0), + legendWidgetEnabled: !0, + chartEventsEnabled: !0, + esdEnabled: !1, + croppedTickMarks: !0, + countdownEnabled: !0, + lastPriceAnimationEnabled: !0, + useKineticScroll: o.CheckMobile.any(), + indicatorsDialogShortcutEnabled: !0, + handleScale: { + mouseWheel: !0, + pinch: !0, + axisPressedMouseMove: { + time: !0, + price: !0 + } + }, + handleScroll: { + mouseWheel: !0, + pressedMouseMove: !0, + horzTouchDrag: !0, + vertTouchDrag: !0 + } + }; + + function z(e, t, i, s = 0) { + const r = t.mainSeries().syncModel(), + n = e.mainSeries().syncModel(); + let o = i; + if (null !== r && null !== n) { + const t = e.createSyncPoint(r, n); + 0 !== s && (i = r.projectTime(i, s)), o = t.sourceTimeToTargetTime(i) + } + return e.timeScale().points().roughIndex(o, n && n.distance.bind(n)) + } + class G { + constructor(e, t, i) { + this.activePaneWidget = null, this._model = null, this._paneWidgets = [], this + ._maximizedPaneWidget = null, this._timeAxisWidget = null, this + ._paneSeparators = [], this._controlBarNavigation = null, this + ._lineToolsSynchronizer = null, this._modelCreated = new I.a, this + ._isDestroyed = !1, this._customLegendWidgetsFactoryMap = new Map, this + ._backgroundTopTheme = new O.a("light"), this._backgroundBasedTheme = new O.a( + "light"), this._backgroundBottomTheme = new O.a("light"), this + ._lhsAxesWidth = 0, this._rhsAxesWidth = 0, this._lhsPriceAxisWidthChanged = + new I.a, this._rhsPriceAxisWidthChanged = new I.a, this._mainDiv = null, this + ._parent = null, this._elTooltipDiv = null, this._hotkeysListener = null, this + ._mouseWheelHelper = null, + this._onWheelBound = null, this._justActivated = !1, this._inited = !1, this + ._containsData = !1, this._initialLoading = !1, this._defTimeframe = void 0, + this._removeMaximizeHotkey = null, this._metaInfoRepository = null, this + ._invalidationMask = null, this._drawPlanned = !1, this._drawRafId = 0, this + ._inLoadingState = !1, this._timingsMeter = null, this._tagsChanged = new I.a, + this._redraw = new I.a, this._isVisible = new O.a(!0), this._dataWindowWidget = + null, this._updateThemedColorBound = this._updateThemedColor.bind(this), this + ._saveChartService = null, this._objectTreeDialogController = null, this + ._chartPaintedPromise = null, this._noExchangeSubscrptionWarning = null, this + ._paneWidgetsSharedState = new j, this._brokerName = "", this._onZoom = new I.a, + this._id = t, this._layoutId = i, this._options = Object(d.merge)(Object(d + .clone)(U), e), this._options.customLegendWidgetFactories && (this + ._customLegendWidgetsFactoryMap = this._options.customLegendWidgetFactories + ), this._subscribeToDrawingState(), this.withModel(this, () => { + const e = this.model().model(); + e.backgroundTopColor().subscribe(this._updateThemedColorBound), e + .backgroundColor().subscribe(this._updateThemedColorBound) + }), this._scrollHelper = new k(this), this._objectTreeDialogController = u + .getInstance() + } + destroy() { + var e, t; + null === (e = this._lineToolsSynchronizer) || void 0 === e || e.destroy(), null === + (t = this._noExchangeSubscrptionWarning) || void 0 === t || t.destroy(), window + .loginStateChange.unsubscribe(this, this._handleLoginStateChanged), null !== + this._model && (this._model.model().backgroundTopColor().unsubscribe(this + ._updateThemedColorBound), this._model.model().backgroundColor() + .unsubscribe(this._updateThemedColorBound), this._model.destroy()), this + ._customLegendWidgetsFactoryMap.clear(), this._scrollHelper.destroy(), this + ._isDestroyed = !0 + } + model() { + return Object(s.ensureNotNull)(this._model) + } + id() { + return this._id + } + layoutId() { + return this._layoutId + } + isVisible() { + return this._isVisible.value() + } + setVisible(e) { + this._isVisible.setValue(e) + } + getPriceAxisWidthChangedByName(e) { + return "left" === e ? this._lhsPriceAxisWidthChanged : this + ._rhsPriceAxisWidthChanged + } + getPriceAxisMaxWidthByName(e) { + return "left" === e ? this._lhsAxesWidth : this._rhsAxesWidth + } + timeAxisHeight() { + return null !== this._timeAxisWidget ? this._timeAxisWidget.size.h : 0 + } + withModel(e, t) { + null !== this._model ? t.call(e) : this.modelCreated().subscribe(e, t, !0) + } + hasModel() { + return null !== this._model + } + onZoom() { + return this._onZoom + } + images(e) { + window.TradingView.printing = !0; + const t = this.model().selection().allSources(); + this.model().selectionMacro(e => e.clearSelection()); + const i = (t, i) => { + t.paint(i, this.onWidget()); + const s = { + showCollapsedStudies: Boolean(null == e ? void 0 : e + .showCollapsedStudies), + status: null == e ? void 0 : e.status + }; + return t.getScreenshotData(s) + }, + s = []; + if (null !== this._maximizedPaneWidget) { + const e = this._paneWidgets.indexOf(this._maximizedPaneWidget); + s.push(i(this._maximizedPaneWidget, f.InvalidationMask.light() + .invalidateForPane(e))) + } else + for (let e = 0; e < this._paneWidgets.length; ++e) { + const t = this._paneWidgets[e]; + s.push(i(t, f.InvalidationMask.light().invalidateForPane(e))), e < this + ._paneWidgets.length - 1 && s.push(this._paneSeparators[e].image()) + } + let r; + this._timeAxisWidget && (this._timeAxisWidget.paint(f.InvalidationLevel.Light), r = + this._timeAxisWidget.getScreenshotData()), window.TradingView.printing = !1, + this.model().selectionMacro(e => { + t.forEach(t => { + e.addSourceToSelection(t) + }) + }), this.model().model().lightUpdate(); + const n = this.mainSeriesQuotesAndMetainfo(); + return { + panes: s, + timeAxis: r, + colors: { + text: this.properties().childs().scalesProperties.childs().textColor + .value(), + bg: this.properties().childs().paneProperties.childs().background.value(), + scales: this.properties().childs().scalesProperties.childs().lineColor + .value() + }, + meta: n.meta, + ohlc: n.ohlc, + quotes: n.quotes + } + } + setSaveChartService(e) { + this._saveChartService = e, null !== this._lineToolsSynchronizer && this + ._lineToolsSynchronizer.setSaveChartService(e) + } + getSaveChartService() { + return this._saveChartService + } + mainSeriesQuotesAndMetainfo() { + let e, t, i; + const s = this._model && this._model.mainSeries(); + if (s) { + const r = e => null == e ? "" : s.formatter().format(e, void 0, void 0, !0, ! + 1) + "", + n = e => null == e ? "" : e + ""; + e = { + resolution: s.interval(), + symbol: s.symbol() + }; + const o = s.symbolInfo(); + o && (e.symbol = o.full_name, e.description = o.description, e.exchange = o + .exchange); + const a = s.bars().last(); + null !== a && (t = a.value.slice(1, 5).map(r)); + const l = s.quotes(); + l && (i = { + change: r(l.change), + changePercent: n(l.change_percent), + last: r(l.last_price) + }) + } + return { + meta: e, + ohlc: t, + quotes: i + } + } + updateCrossHairPositionIfNeeded() { + if (this._model) { + const e = P.tool.value(); + if (this._model.model().setCurrentTool(e), Object(x.lastEventIsTouch)()) { + const e = this._maximizedPaneWidget || this._paneWidgets[0]; + if (e.hasState() && (this._isLineToolModeExceptBrush() || this + .selectPointMode().value() || Object(P.toolIsMeasure)(P.tool + .value()))) { + const t = e.state(), + i = .5 * this._model.model().timeScale().width(), + s = .5 * t.defaultPriceScale().height(); + this._model.model().setAndSaveCurrentPosition(i, s, t) + } + } + this._model && Object(x.lastEventIsTouch)() && this._model.model() + .crossHairSource().updateAllViews() + } + } + trackingModePaneWidget() { + if (!Object(x.lastEventIsTouch)()) return null; + for (const e of this.paneWidgets()) + if (e.trackingModeEnabled()) return e; + return null + } + startTrackingMode() { + if (Object(x.lastEventIsTouch)()) { + this.exitTrackingMode(), this.updateCrossHairPositionIfNeeded(); + const e = this._maximizedPaneWidget || this._paneWidgets[0], + t = this.model().model().crossHairSource().currentPoint(); + e.startTrackingMode(t, t) + } + } + exitTrackingMode() { + Object(x.lastEventIsTouch)() && this.paneWidgets().some(e => e + .trackingModeEnabled()) && (this.paneWidgets().forEach(e => e + .exitTrackingMode()), this.model().model().clearCurrentPosition()) + } + onToolChanged() { + this.selectPointMode().value() && this.cancelRequestSelectPoint(), this + .exitTrackingMode() + } + setInLoadingState(e) { + this._inLoadingState = e + } + paint(e) { + const t = null != e ? e : f.InvalidationMask.full(); + t.validationActions().forEach(e => e()), this._paneWidgets.forEach((e, i) => { + null !== this._maximizedPaneWidget && this._maximizedPaneWidget !== e || + e.paint(t.invalidateForPane(i), !1) + }), this._timeAxisWidget && this._timeAxisWidget.paint(t + .invalidateForTimeScale()), this._redraw.fire() + } + GUIResetScales() { + Object(F.trackEvent)("GUI", "Reset Scales"), + null !== this._model && this._model.resetScales() + } + maximizedPaneWidget() { + return this._maximizedPaneWidget + } + isMaximizedPane() { + return null !== this._maximizedPaneWidget + } + unsetActivePaneWidget() { + this.activePaneWidget = null + } + setActivePaneWidget(e) { + this.activePaneWidget = e + } + onPaneWidgetDestroyed(e) { + this.activePaneWidget === e && (this.activePaneWidget = null) + } + backgroundTopTheme() { + return this._backgroundTopTheme.readonly() + } + backgroundBasedTheme() { + return this._backgroundBasedTheme.readonly() + } + backgroundBottomTheme() { + return this._backgroundBottomTheme.readonly() + } + lineToolsAndGroupsDTO() { + return Object(s.ensureNotNull)(this._lineToolsSynchronizer).prepareDTO() + } + resetLineToolsInvalidated(e, t) { + Object(s.ensureNotNull)(this._lineToolsSynchronizer).resetInvalidated(e, t) + } + applyLineToolUpdateNotification(e) { + Object(s.ensureNotNull)(this._lineToolsSynchronizer) + .applyLineToolUpdateNotification(e) + } + applyAlertIdByExternalSource(e, t) { + var i; + null === (i = this._lineToolsSynchronizer) || void 0 === i || i + .applyAlertIdByExternalSource(e, t) + } + deleteAlertByExternalSource(e, t) { + var i; + null === (i = this._lineToolsSynchronizer) || void 0 === i || i + .deleteAlertByExternalSource(e) + } + shouldBeSavedEvenIfHidden() { + return this.model().model().shouldBeSavedEvenIfHidden() + } + showObjectsTreeDialog() { + var e; + null === (e = this._objectTreeDialogController) || void 0 === e || e.show() + } + addCustomWidgetToLegend(e, t) { + this._customLegendWidgetsFactoryMap.set(e, t); + for (const i of this.paneWidgets()) i.addCustomWidgetToLegend(e, t) + } + applyIndicatorsToAllChartsAvailable() { + if (!this.chartWidgetCollection().applyIndicatorsToAllChartsAvailable()) return !1; + for (const e of this.model().model().panes()) { + if (e.sourcesByGroup().all().some(e => Object(m.isStudy)(e) && !Object(m + .isESDStudy)(e))) return !0 + } + return !1 + } + restoreState(e, t, i) { + this.adjustSize(); + Object(s.ensureNotNull)(this._model).restoreState(this._content, t, i); + this._setActions() + } + addCompareAsOverlay(e, t) { + const i = this.model(); + return Object(s.ensureDefined)(this._options.isSymbolAvailable)(e).then(s => { + if (!s) return null; + const r = i.createStudyInserter({ + type: "java", + studyId: "Overlay@tv-basicstudies" + }); + return r.setForceOverlay(!0), r.setPreferredPriceScale("as-series"), r + .setTargetPriceScaleMode({ + percentage: !0 + }), void 0 !== t && r.setPropertiesState({ + allowExtendTimeScale: t + }), r.insert(async () => ({ + symbol: e + })) + }) + } + scrollHelper() { + return this._scrollHelper + } + adjustSize(e) { + var t; + let i = 0; + const s = null === this._model ? null : this._model.model().priceScaleSlotsCount(), + r = new Uint32Array(null === s ? 0 : s.left), + n = new Uint32Array(null === s ? 0 : s.right), + o = Object(y.getCanvasDevicePixelRatio)(document.body), + a = (e, t) => e + t, + c = (e, t) => { + t.forEach((t, i) => { + e[i] = Math.max(e[i], t) + }) + }; + for (const e of this._paneWidgets) + if (!this._maximizedPaneWidget || this._maximizedPaneWidget === e) { + const t = e.leftPriceAxisesContainer().optimalWidths(), + s = e.rightPriceAxisesContainer().optimalWidths(); + c(r, t), c(n, s), i += e.stretchFactor() + } let h = r.reduce(a, 0), + u = n.reduce(a, 0); + const d = this._width(), + p = this._height(); + let _ = Math.max(d - h - u, 0); + if (_ <= 102) { + h = 0, u = 0, _ = d; + for (let e = 0; e < r.length; e++) r[e] = 0; + for (let e = 0; e < n.length; e++) n[e] = 0 + } + for (const e of this._paneSeparators) e.adjustSize(); + const m = this._paneSeparators.length, + f = w.height(), + g = this.isMaximizedPane() ? 0 : f * m, + b = null !== this._timeAxisWidget ? this._timeAxisWidget.optimalHeight() : 0; + let v = p - b >= 61 ? b : 0; + v % 2 && (v += 1); + const S = g + v, + P = p < S ? 0 : p - S, + C = P / i; + let x = 0, + T = !1; + const I = null === (t = this._model) || void 0 === t ? void 0 : t.model(); + for (let e = 0; e < this._paneWidgets.length; ++e) { + const t = this._paneWidgets[e]; + void 0 !== I && t.setState(I.panes()[e]); + let i = 0; + if (this.isMaximizedPane()) i = this._maximizedPaneWidget === t ? P : 0; + else { + let s = 0; + s = e === this._paneWidgets.length - 1 ? Math.ceil((P - x) * o) / o : Math + .round(t.stretchFactor() * C * o) / o, i = Math.max(s, 2), x += i + } + t.setPriceAxisSizes("left", i, r), t.setPriceAxisSizes("right", i, n), T = T || + i !== t.height(), t.setSize(new y.Size(_, i)), I && t.state() && I + .setPaneHeight(t.state(), i) + } + null !== this._timeAxisWidget && this._timeAxisWidget.setSizes(new y.Size(_, v), r, + n), I && I.setWidth(_, e), this._controlBarNavigation && this + ._controlBarNavigation.updatePosition(), this._lhsAxesWidth !== h && (this + ._lhsAxesWidth = h, this._lhsPriceAxisWidthChanged.fire(h)), this + ._rhsAxesWidth !== u && (this._rhsAxesWidth = u, this._rhsPriceAxisWidthChanged + .fire(u)), T && l.emit("panes_height_changed") + } + setBroker(e) { + var t; + this._brokerName = e, null === (t = this._lineToolsSynchronizer) || void 0 === t || + t.setBroker(e) + } + chartPainted() { + return this._drawPlanned ? (null === this._chartPaintedPromise && (this + ._chartPaintedPromise = Object(a.createDeferredPromise)()), this + ._chartPaintedPromise.promise) : Promise.resolve() + } + setDataWindowWidget(e) { + this._dataWindowWidget = e + } + removeDataWindowWidget() { + this._dataWindowWidget = null + } + _createLineToolsSynchronizerIfNeeded() { + 0 + } + _updateThemedColor() { + const e = this.model().model(), + t = e.backgroundColorAtYPercentFromTop(.5); + let i = e.backgroundTopColor().value(), + s = e.backgroundColor().value(); + const r = Object(L.isColorDark)(t), + n = Object(L.isColorDark)(i), + o = Object(L.isColorDark)(s); + this.widget().classList.toggle("chart-widget--themed-dark", r), this.widget() + .classList.toggle("chart-widget--themed-light", !r), this.widget().classList + .toggle("chart-widget__top--themed-dark", n), this.widget().classList.toggle( + "chart-widget__top--themed-light", !n), this.widget().classList.toggle( + "chart-widget__bottom--themed-dark", o), this.widget().classList.toggle( + "chart-widget__bottom--themed-light", !o), this._backgroundTopTheme + .setValue(n ? "dark" : "light"), this._backgroundBasedTheme.setValue(r ? + "dark" : "light"), this._backgroundBottomTheme.setValue(o ? "dark" : + "light"), i === s && Object(A.isStdThemedDefaultValue)( + "chartProperties.paneProperties.background", i, this._backgroundBasedTheme + .value()) && (i = null, s = null); + for (const e of this._paneWidgets) e.updateThemedColors(i, s) + } + _isLineToolModeExceptBrush() { + const e = P.tool.value(); + return Object(_.isLineToolName)(e) && !Object(_.isLineDrawnWithPressedButton)(e) && + !this.selectPointMode().value() + } + _cancelCreatingLine() { + const e = Object(s.ensureNotNull)(this._model).model(), + t = e.lineBeingCreated(); + if (null !== t) { + const i = Object(s.ensureNotNull)(e.paneForSource(t)); + Object(s.ensureNotNull)(this.paneByState(i)).cancelCreatingLineTool() + } + const i = e.crossHairSource().measurePane(); + if (null !== i) { + Object(s.ensureNotNull)(this.paneByState(i)).cancelMeasuring() + } + } + _makePaneWidgetsAndSeparators() { + const e = this.model().model().panes(), + t = e.length, + i = this._paneWidgets.length; + for (let e = t; e < i; e++) { + Object(s.ensureDefined)(this._paneWidgets.pop()).destroy(); + const e = this._paneSeparators.pop(); + e && e.destroy() + } + const r = this._options.containsData; + for (let s = i; s < t; s++) { + const t = { + contextMenuEnabled: this._options.paneContextMenuEnabled, + currencyConversionEnabled: this._options.currencyConversionEnabled, + unitConversionEnabled: this._options.unitConversionEnabled, + handleScale: this._options.handleScale, + handleScroll: this._options.handleScroll, + priceScaleContextMenuEnabled: this._options + .priceScaleContextMenuEnabled, + legendWidgetEnabled: this._options.legendWidgetEnabled, + sourceStatusesWidgetEnabled: !r, + sourceStatusesWidget: this._options.sourceStatusesWidget, + marketStatusWidgetEnabled: this._options.marketStatusWidgetEnabled && ! + r, + marketStatusWidget: this._options.marketStatusWidget, + chartWarningWidgetEnabled: this._options.chartWarningWidgetEnabled && ! + r, + chartWarningWidget: this._options.chartWarningWidget, + dataProblemWidgetEnabled: this._options.dataProblemWidgetEnabled && !r, + legendWidget: this._options.legendWidget, + propertyPagesEnabled: this._options.propertyPagesEnabled, + sourceSelectionEnabled: this._options.sourceSelectionEnabled, + controlsEnabled: this._options.paneControlsEnabled, + croppedTickMarks: this._options.croppedTickMarks, + countdownEnabled: this._options.countdownEnabled, + customLegendWidgetFactories: new Map(this + ._customLegendWidgetsFactoryMap), + useKineticScroll: this._options.useKineticScroll + }; + void 0 !== this._options.paneContextMenu && (t.contextMenu = this._options + .paneContextMenu), void 0 !== this._options.priceScaleContextMenu && (t + .priceScaleContextMenu = this._options.priceScaleContextMenu); + const i = new g.PaneWidget(this, e[s], t, this._paneWidgetsSharedState); + if (this._paneWidgets.push(i), s > 0) { + const e = new w(this, s - 1, s); + this._paneSeparators.push(e), this._timeAxisWidget ? this._elMainTable + .insertBefore(e.getElement(), this._timeAxisWidget.getElement()) : this + ._elMainTable.appendChild(e.getElement()) + } + this._timeAxisWidget ? this._elMainTable.insertBefore(i.getElement(), this + ._timeAxisWidget.getElement()) : this._elMainTable.appendChild(i + .getElement()) + } + for (let i = 0; i < t; i++) { + const t = e[i], + s = this._paneWidgets[i]; + s.hasState() && s.state() === t ? s.updatePriceAxisWidgets() : s.setState(t) + } + for (let e = t; e--;) this._paneWidgets[e].updateControls(); + this._updateThemedColor() + } + _width() { + return this._options.width.value() + } + _height() { + return this._options.height.value() + } + _onMousewheel(e) { + if (!this.model().model().zoomEnabled() || null === this._mouseWheelHelper) return; + if (!Object(o.onWidget)() && parent && parent !== window && parent.IS_DEMO_PAGE) + return; + if (null === this._model) return; + if (this.model().timeScale().isEmpty()) return; + const t = this._mouseWheelHelper.processWheel(e), + i = t.deltaX, + r = -t.deltaY; + if (0 !== i && this._options.handleScroll.mouseWheel || 0 !== r && this._options + .handleScale.mouseWheel) { + if (e.cancelable && e.preventDefault(), 0 !== r && this._options.handleScale + .mouseWheel) { + const t = Math.sign(r) * Math.min(1, Math.abs(r)), + i = Object(s.ensureNotNull)(this._mainDiv).getBoundingClientRect(), + n = e.clientX - this._lhsAxesWidth - i.left; + if (!Number.isFinite(n) || !Number.isFinite(t)) return void H.logWarn( + "Incorrect mouse wheel processing: scrollPosition: " + n + + ", zoomScale: " + t); + const o = new C.a(e).control(); + this.model().model().zoomTime(n, t, !!o || void 0), this._onZoom.fire(o) + } + 0 !== i && this._options.handleScroll.mouseWheel && this.model().scrollChart(- + 80 * i) + } + } + _setElement(e) { + if (this._mainDiv) { + this._mainDiv.remove(); + const e = document.createRange(); + e.selectNodeContents(Object(s.ensureNotNull)(this._parent)), e.deleteContents() + } + this._controlBarNavigation && (this._controlBarNavigation.destroy(), this + ._controlBarNavigation = null), null !== this._removeMaximizeHotkey && this + ._removeMaximizeHotkey(), this._removeMaximizeHotkey = this._initMaximizeHotkey( + e); + const t = e.ownerDocument, + r = t.createElement("div"); + r.classList.add("chart-container-border"), e.insertBefore(r, e.firstChild), this + ._parent = r; + const n = t.createElement("div"); + if (n.classList.add("chart-widget"), this._mainDiv = n, this._elTooltipDiv = t + .createElement("div"), this._elTooltipDiv.className = "tooltip-wrapper", this + ._mainDiv.appendChild(this._elTooltipDiv), this._elMainTable = t.createElement( + "table"), this._elMainTable.className = "chart-markup-table", this + ._elMainTable.setAttribute("cellpading", "0"), this._elMainTable.setAttribute( + "cellspacing", "0"), this._mainDiv.appendChild(this._elMainTable), this + ._hotkeysListener && this._hotkeysListener.destroy(), this._hotkeysListener = + new D.a(this, this._mainDiv), (this._options.controlBarEnabled || Object(V + .enabled)("control_bar")) && Promise.all([i.e("react"), i.e(72), i.e(7), i + .e("chart-widget-gui") + ]).then(i.bind(null, "TGRH")).then(e => { + this._controlBarNavigation = new e.ControlBarNavigation(this, Object(s + .ensureNotNull)(this._mainDiv), this._options.controlBar), this + ._model && this.adjustSize() + }), this._options.handleScale.mouseWheel || this._options.handleScroll + .mouseWheel) { + this._mouseWheelHelper = new B.a; + const e = this._onMousewheel.bind(this); + this._onWheelBound = e, this._mainDiv.addEventListener("wheel", e, { + passive: !1 + }) + } + this.resize(), this._justActivated = !1, this.withModel(this, () => { + r.appendChild(n), n.addEventListener("mousedown", this + ._beginRequestActive.bind(this)), n.addEventListener("mouseup", + this._endRequestActive.bind(this)), n.addEventListener( + "touchstart", this._beginRequestActive.bind(this)), n + .addEventListener("touchmove", this._endRequestActive.bind(this)), n + .addEventListener("touchend", this._endRequestActive.bind(this)), n + .addEventListener("click", this._requestActive.bind(this)) + }), this._inited && (null !== this._timeAxisWidget && (this._timeAxisWidget + .destroy(), this._timeAxisWidget = null), this._paneWidgets.forEach( + e => { + e.destroy() + }), this._paneWidgets.length = 0, this._paneSeparators.forEach(e => { + e.destroy() + }), this._paneSeparators.length = 0, this._update(f.InvalidationMask + .full())) + } + _makeDefaultModel() { + let e; + if (this._content && this._content.timeScale.points) { + const t = this._content.timeScale.points.items[0]; + e = { + startDate: t + } + } + if (!Object(s.ensureNotNull)(this._metaInfoRepository).getInternalMetaInfoArray()) + throw new Error("Cannot create chart model: studies metainfo is absent"); + const t = () => { + this._drawPlanned = !1, this._drawRafId = 0, this._inLoadingState || (this + ._invalidationMask && (this._update(this._invalidationMask), this + ._invalidationMask = null), null !== this + ._chartPaintedPromise && (this._chartPaintedPromise.resolve(), this + ._chartPaintedPromise = null)) + }, + i = () => { + const i = { + readOnly: this.readOnly(), + isSnapshot: !!this._containsData, + ...n(this._options, ["timeScale", "crossHair", "esdEnabled", + "countdownEnabled", "lastPriceAnimationEnabled", + "currencyConversionEnabled", "unitConversionEnabled", + "watermarkEnabled", "shiftVisibleRangeOnNewBar" + ]) + }, + r = function(e, t, i, s, r, n, o, a, l) { + const c = new p.ChartUndoModel(e, t, i, s, r, n, o, a, l); + return c.model().fullUpdate(), c + }(this._chartSession, e => { + if (!(e instanceof f.InvalidationMask)) throw new Error( + "Invalid mask"); + null !== this._invalidationMask ? this._invalidationMask.merge( + e) : this._invalidationMask = e, this._drawPlanned || ( + this._drawPlanned = !0, this._options.visible.when( + () => { + const e = !document.hidden, + i = this.screen && this.screen.isShown(); + null !== this._timingsMeter && e && !i && this + ._timingsMeter.startWaitingDraw(); + const r = Object(s.ensureNotNull)(Object(s + .ensureNotNull)(this._parent) + .ownerDocument.defaultView); + this._drawRafId = r.requestAnimationFrame(t) + })) + }, this.properties(), e, Object(s.ensureNotNull)(this + ._metaInfoRepository), this, this._options.undoHistory, this + ._options.barsMarksContainersFactory, i); + return this._createSessions(r.model()), r + }; + Object(V.enabled)("lean_chart_load") ? this._model = this._model || i() : this + ._model = i(), this._createVolumeIfNeeded(); + if (this._content) { + let e = {}; + W && this._initialLoading && (e = { + symbol: this._defSymbol, + interval: this._defInterval, + style: this._defStyle + }), this.restoreState(this._content, this._containsData, e), W && this + ._defSymbol && this.model().model().recalculatePriceRangeOnce() + } else this._setActions(); + return this._createLineToolsSynchronizerIfNeeded(), (() => { + const e = Object(s.ensureNotNull)(this._model); + e.onTagsChanged().subscribe(this, () => this.onModelTagsChanged()), this + ._initBackgroundColor(), this._updateGui(), this._modelCreated.fire( + e), this._tagsChanged.fire(); + const t = e.mainSeries(); + this._defTimeframe && t.setDefaultTimeframe(this._defTimeframe), e + .lineCancelled().subscribe(this, () => this.onLineCancelled()), t + .dataEvents().symbolNotPermitted().subscribe(null, e => { + t.properties().symbol.setValue(e) + }), t.properties().style.unsubscribe(this, this + ._onChartStyleChanged), t.properties().style.subscribe(this, + this._onChartStyleChanged), t.dataEvents().completed() + .subscribe(this, () => this._addPerfMark("SeriesCompleted"), !0), t + .dataEvents().barReceived().subscribe(this, () => this._addPerfMark( + "SeriesFirstDataReceived"), !0); + this._options; + t.dataEvents().chartTypeNotPermitted().subscribe(null, () => { + t.properties().interval.setValue("D") + }), t.dataEvents().intradaySpreadNotPermitted().subscribe(null, + () => { + t.properties().interval.setValue("D") + }), t.dataEvents().customIntervalNotPermitted().subscribe(null, + () => { + t.properties().interval.setValue(Object(N + .getDefaultResolution)(Object(R.isRangeStyle)(t + .properties().style.value()))) + }), t.dataEvents().intradayExchangeNotPermitted().subscribe( + null, () => { + t.properties().interval.setValue("D") + }), t.requestingResolutionWhenNotSupported.subscribe(null, + e => { + t.properties().interval.setValue(e) + }) + })() + } + _handleLoginStateChanged() { + 0 + } + _subscribeToDrawingState() { + if (this._options.readOnly) return; + Object(P.init)(); + const e = (e, t) => { + if (null === this._model) return; + const i = this._model.model(); + e.model !== i && t(i, this._model) + }; + P.createdLineTool.subscribe(null, t => { + e(t, (e, i) => { + const r = Object(s.ensureNotNull)(e.paneForSource(e + .mainSeries())); + let n, o = null; + if (void 0 === t.pointPositionPercents) { + if (o = z(e, t.model, t.point.timeStamp), null === o) + return; + n = t.point.price + } else { + const i = t.pointPositionPercents.x * e.timeScale() + .width(), + s = e.mainSeries().priceScale(), + r = t.pointPositionPercents.y * s.height(), + a = e.mainSeries().firstValue(); + if (null === a) return; + o = e.timeScale().coordinateToIndex(i), n = s + .coordinateToPrice(r, a) + } + const a = { + index: Object(s.ensureNotNull)(o), + price: n + }, + l = i.createLineTool(r, a, t.linetool, t.properties, t + .linkKey, e.mainSeries(), !0); + null !== l && !Boolean(this.model().lineBeingCreated()) && t + .finalState && l.restoreExternalPoints(t.finalState, { + indexesChanged: !0, + pricesChanged: !0 + }) + }) + }), P.continuedLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = z(e, t.model, t.point.timeStamp); + if (null === s) return; + const r = { + index: s, + price: t.point.price + }, + n = e.lineBeingCreated(); + if (null === n) return; + i.continueExternalLine(r, null === t.envState ? void 0 : t + .envState, !!t.finalState) && t.finalState && n + .restoreExternalPoints(t.finalState, { + indexesChanged: !0, + pricesChanged: !0 + }) + }) + }), P.cancelledLineTool.subscribe(null, t => { + e(t, (e, t) => { + e.cancelCreatingLine() + }) + }), P.beenSetLineToolLastPoint.subscribe(null, t => { + e(t, (e, i) => { + const s = e.lineBeingCreated(); + if (null === s || s.linkKey().value() !== t.linkKey) return; + const r = z(e, t.model, t.point.timeStamp); + if (null === r) return; + const n = { + index: r, + price: t.point.price + }; + s.setLastPoint(n), s.updateAllViews(), e.lightUpdate() + }) + }), P.startedMovingLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = t.linkKeys.map(_.lineToolByLinkKey.bind(null, e)) + .filter(d.notNull); + if (s.length) { + const i = z(e, t.model, t.point.timeStamp); + if (null === i) return; + const r = { + index: i, + price: t.point.price + }, + n = void 0 !== t.itemIndex ? t.itemIndex : null; + e.startMovingSources(s, { + logical: r + }, n, t.pointPositionPercents, null === t + .envState ? void 0 : t.envState, !0) + } + }) + }), P.movedLineTool.subscribe(null, t => { + e(t, (e, i) => { + if (!e.sourcesBeingMoved().filter(_.isLineTool).filter(e => + (e => t.linkKeys.some(t => e.linkKey().value() === + t))(e)).length) return; + const s = z(e, t.model, t.point.timeStamp); + if (null === s) return; + const r = { + index: s, + price: t.point.price + }; + e.moveSources({ + logical: r + }, t.pointPositionPercents, null === t.envState ? + void 0 : t.envState, !0) + }) + }), P.finishedMovingLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = e.sourcesBeingMoved().filter(_.isLineTool); + if (0 === s.length) return; + s.forEach(i => { + const s = (e => { + for (let i = 0; i < t.linkKeys + .length; i++) + if (t.linkKeys[i] === e + .linkKey().value()) return { + state: t.finalStates[i], + changes: t.changes[i] + }; + return null + })(i); + e.endMovingSources(null !== s, !0), null !== + s && (i.restoreExternalPoints(s.state, s + .changes), s.state + .pointPositionPercents && i + .restorePositionPercents(s.state + .pointPositionPercents)) + }) + }) + }), P.startedChangingLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = Object(_.lineToolByLinkKey)(e, t.linkKey); + if (null !== s) { + const i = s.getPoint(t.pointIndex), + r = i ? i.index : z(e, t.model, t.point.timeStamp); + if (null === r) return; + if (s.isActualSymbol() && s.isActualCurrency() && s + .isActualUnit()) { + const i = { + index: r, + price: t.point.price + }; + e.startChangingLinetool(s, i, t.pointIndex, null === + t.envState ? void 0 : t.envState, !0) + } + } + }) + }), P.changedLineTool.subscribe(null, t => { + e(t, (e, i) => { + const r = e.lineBeingEdited(); + if (null === r || r.linkKey().value() !== t.linkKey) return; + let n = null; + if (n = t.changes.indexesChanged ? z(e, t.model, t.point + .timeStamp) : Object(s.ensureNotNull)(e + .linePointBeingChanged()).index, null !== n && r + .isActualSymbol() && r.isActualCurrency() && r + .isActualUnit()) { + const i = { + index: n, + price: t.point.price + }; + e.changeLinePoint(i, void 0, !0) + } + }) + }), P.finishedChangingLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = Object(_.lineToolByLinkKey)(e, t.linkKey); + null !== s && s.isActualSymbol() && s.isActualCurrency() && + s.isActualUnit() && null !== e.lineBeingEdited() && e + .endChangingLinetool(!!t.finalState, !0), null !== s && + t.finalState && s.restoreExternalPoints(t.finalState, t + .changes) + }) + }), P.removedLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = Object(_.lineToolByLinkKey)(e, t.linkKey), + { + withUndo: r + } = t; + if (null !== s) r ? i.removeSource(s, !1) : e.removeSource( + s); + else if (this._lineToolsSynchronizer) { + const { + sourceTitle: e, + linkKey: s, + symbol: n, + lineToolState: o + } = t; + i.removeUnloadedLineTool(this._lineToolsSynchronizer, e, + s, n, o, r) + } + }) + }), P.finishedLineTool.subscribe(null, t => { + e(t, (e, i) => { + const s = Object(_.lineToolByLinkKey)(e, t.linkKey); + null !== s && Object(_.isLineDrawnWithPressedButton)(s + .toolname) && s.finish() + }) + }), P.changedLineStyle.subscribe(null, t => { + e(t, (e, i) => { + const s = Object(_.lineToolByLinkKey)(e, t.linkKey); + null !== s && (s.restoreExternalState(t.state), s + .propertiesChanged(!0)) + }) + }), P.restoredLineToolState.subscribe(null, t => { + e(t, (e, i) => { + const s = Object(_.lineToolByLinkKey)(e, t.linkKey); + if (null !== s) { + const i = { + ...t.state + }; + i.indexes = t.state.points.map(i => ({ + index: z(e, t.model, i.time_t), + price: i.price + })), e.restoreLineToolState(s, i) + } + }) + }), P.restoredLineTool.subscribe(null, t => { + e(t, (e, i) => { + e.restoreSource(t.state.restorePane, t.state.paneIndex, t + .state.paneState, t.state.sourceState, null) + }) + }), P.copiedLineTool.subscribe(null, t => { + e(t, (e, i) => { + const r = Object(s.ensureNotNull)(e.paneForSource(e + .mainSeries())); + let n; + const o = Object(_.createLineToolProperties)(t.linetool, t + .state); + if (t.pointPositionPercents) { + const e = { + index: 0, + price: 0 + }; + if (n = i.createLineTool(r, e, t.linetool, o, t.linkKey, + void 0, !0), null === n) return; + n.restorePositionPercents(Object(s.ensureDefined)(t + .pointPositionPercents)) + } else { + const a = t.points.map(i => ({ + index: Object(s.ensureNotNull)(z(e, t + .model, i.timeStamp)), + price: i.price + })), + l = a[0]; + if (n = i.createLineTool(r, l, t.linetool, o, t.linkKey, + void 0, !0), null === n) return; + if (e.lineBeingCreated()) + for (let e = 1; e < a.length; e++) e !== a.length - + 1 || !Object(_.isLineDrawnWithPressedButton)(t + .linetool) && "LineToolGhostFeed" !== t + .linetool || n.finish(), i.continueCreatingLine( + a[e], new C.a(void 0), e < a.length - 1, !0) + } + n.properties().interval.setValue(t.state.interval), n + .restoreExternalState(t.state), n.restoreData && n + .restoreData(t), n.propertiesChanged(!0), t + .finalState && (n.calcIsActualSymbol(), n + .restoreExternalPoints(t.finalState, { + pricesChanged: !0, + indexesChanged: !0 + })) + }) + }) + } + } + }, + wptU: function(e, t, i) { + "use strict"; + i.r(t); + i("e3/o"); + const s = []; + let r = null; + + function n(e) { + for (let t = 0; t < s.length; t++) + if (s[t].name === e) return t; + return -1 + } + + function o(e) { + if (!r) + for (let t = s.length - 1; t >= 0 && !0 !== s[t].func(e); t--); + } + window.addEventListener("keypress", o, !1); + var a = i("h24c"), + l = i("Kxc7"), + c = i("JpbW"), + h = i("6KAu"), + u = i("FA0h"), + d = i("JWMC"); + i.d(t, "activateKeyPressHandler", (function() { + return m + })), i.d(t, "showDialog", (function() { + return f + })); + let p = null; + + function _(e) { + if (!Object(a.b)(e)) return !1; + e.preventDefault(); + const t = String.fromCharCode(e.charCode); + return l.enabled("show_interval_dialog_on_key_press") && function(e) { + return /[\d]/.test(e) + }(t) ? Object(c.showChangeIntervalDialogAsync)({ + initVal: t + }) : l.enabled("symbol_search_hot_key") && (f({ + defaultValue: t, + selectSearchOnInit: !1, + source: "keyboard" + }), Object(d.trackEvent)("GUI", "SS", "hotkey")), !0 + } + + function m() { + Object(h.a)(), + function(e, t) { + const i = { + name: e, + func: t + }, + r = n(i.name); + r > -1 && s.splice(r, 1), s.unshift(i) + }("symbolEdit", _) + } + + function f(e) { + const t = p = Object(u.a)().then(i => { + t === p && i.showDefaultSearchDialog(e) + }); + return t + } + }, + ww0J: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return l + })); + var s = i("X0WL"), + r = i("bmVy"); + const n = { + NONE: "Default" + }, + o = window.t("No volume data"), + a = new Map; + class l extends s.a { + constructor(e, t) { + super(t), this._source = e + } + getSplitTitle() { + return this._source.titleInParts(!0, n, void 0, !1) + } + text() { + return this._source.isActualInterval() ? this._source.isFailed() ? + `${this._source.title(!0, n, void 0, !1)}: ${this.sourceStatusText()}` : + `${this._source.title(!0, n, void 0, !1)} ${this.sourceStatusText()}` : this + ._source.title(!0, n, void 0, !1) + } + sourceStatusText() { + return Object(r.convertStudyStatusToString)(this._source.status(), !0) + } + sourceStatusSolutionId() { + const e = this._source.status(); + if (e.type === r.StudyStatusType.Error) return e.errorDescription.solution_id ? + e.errorDescription.solution_id : function(e) { + for (const t of Array.from(a.keys())) + if (e.includes(t)) return a.get(t) + }(e.errorDescription.error) + } + errorStatus() { + if (!this._source.isActualInterval() || this._source.isSymbolInvalid()) + return null; + return this._source.status().type === r.StudyStatusType.Error ? { + error: this.sourceStatusText(), + solutionId: this.sourceStatusSolutionId(), + title: this.sourceStatusTitle() + } : null + } + sourceStatusTitle() { + const e = this._source.status(); + if (e.type === r.StudyStatusType.Error) return -1 !== e.errorDescription.error + .toLowerCase().indexOf( + "the data vendor doesn't provide volume data for this symbol.") ? + o : void 0 + } + } + }, + x0JF: function(e, t, i) { + "use strict"; + var s = i("aO4+").Point, + r = i("vq8G").SelectionRenderer, + n = i("VdBB").HitTestResult, + o = i("29fS").PaneRendererBars, + a = i("gyZD").PaneRendererLine, + l = i("Zp8I").PaneRendererStepLine, + c = i("u0yd").PaneRendererArea, + h = i("/hKg").PaneRendererCandles, + u = i("M7/j").PaneRendererBaseline, + d = i("Zy3/").CompositeRenderer, + p = i("Tmoa"), + _ = i("k9/m").PlotRowSearchMode, + m = i("Kxc7"), + f = i("Zp/P"), + g = i("o2pV").SelectionIndexes; + + function b(e, t) { + this.m_series = e, this.m_model = t, this.m_bars = [], this._invalidated = !0, this + ._isMarkersEnabled = m.enabled("source_selection_markers"), this._selectionData = null, + this._selectionIndexer = new g(t.timeScale()) + } + + function v(e, t) { + return void 0 !== e[TradingView.OPEN_PLOT] && void 0 !== e[TradingView.HIGH_PLOT] && + void 0 !== e[TradingView.LOW_PLOT] && void 0 !== e[TradingView.CLOSE_PLOT] && (t.open = + e[TradingView.OPEN_PLOT], t.high = e[TradingView.HIGH_PLOT], t.low = e[TradingView + .LOW_PLOT], t.close = e[TradingView.CLOSE_PLOT], !0) + } + + function S(e, t) { + b.call(this, e, t) + } + + function y(e, t) { + b.call(this, e, t) + } + + function w(e, t) { + b.call(this, e, t) + } + + function P(e, t) { + b.call(this, e, t) + } + + function C(e, t) { + this.m_series = e, this.m_model = t, this.m_items = [], this._isMarkersEnabled = m.enabled( + "source_selection_markers"), this._selectionIndexer = new g(t.timeScale()) + } + + function x(e, t) { + C.call(this, e, t), this._invaidated = !0 + } + + function T(e, t) { + C.call(this, e, t), this._invaidated = !0 + } + + function I(e, t) { + C.call(this, e, t), this._invaidated = !0, this._renderer = new u + } + b.prototype._series = function() { + return this.m_series + }, b.prototype._model = function() { + return this.m_model + }, b.prototype._bars = function() { + return this.m_bars + }, b.prototype.update = function() { + this._invalidated = !0 + }, b.prototype._updateImpl = function(e) { + var t = this; + if ((e = e || v, this.m_bars = [], !this.m_model.timeScale().isEmpty() && !this.m_series + .priceScale().isEmpty()) && (null !== (a = this.m_model.timeScale() + .visibleBarsStrictRange()) && 0 !== this.m_series.bars().size())) { + for (var i = this.m_series.nearestIndex(a.firstBar(), _.NearestRight), r = this + .m_series.nearestIndex(a.lastBar(), _.NearestLeft); i <= r; i++) { + if (null !== this.m_series.bars().valueAt(i)) break + } + if (!(i > r)) { + var o, a = this.m_series.bars().range(i, r), + l = this.m_series.priceScale(), + c = this.m_series.barColorer(), + h = {}; + if (a.each((function(i, s) { + var r, n = {}; + (n.time = Math.round(i), e(s, n)) && (h.value = s, r = s[ + TradingView.STYLE_PLOT] ? s[TradingView.STYLE_PLOT] : c + .barStyle(i, !1, h), s[TradingView.STYLE_PLOT] = r, h + .previousValue = s, n.color = r.barColor, n.borderColor = r + .barBorderColor, n.wickColor = r.barWickColor, n.hollow = r + .isBarHollow, t.m_bars.push(n)) + }), this), 0 !== this.m_bars.length && (o = this.m_series.firstValue(), l + .barPricesToCoordinates(this.m_bars, o)), this.m_model.timeScale() + .barIndexesToCoordinates(this.m_bars), this.m_model.selection().isSelected( + this.m_series)) { + var u = this._selectionIndexer.indexes(); + this._selectionData = { + points: [], + bgColors: [], + visible: !0 + }; + var d = this.m_model.paneForSource(this.m_series).height(); + this._selectionData.hittestResult = n.REGULAR; + for (var p = 0; p < u.length; p++) { + var m = u[p], + f = this.m_series.bars().valueAt(m); + if (null !== f) { + var g = .5 * (f[TradingView.OPEN_PLOT] + f[TradingView.CLOSE_PLOT]), + b = this.m_model.timeScale().indexToCoordinate(m), + S = this.m_series.priceScale().priceToCoordinate(g, o); + this._selectionData.points.push(new s(b, S)), this._selectionData + .bgColors.push(this.m_model.backgroundColorAtYPercentFromTop(S / + d)) + } + } + } else this._selectionIndexer.clear() + } + } + }, b.prototype.items = function() { + return this.m_bars + }, inherit(S, b), S.prototype.renderer = function() { + this._invalidated && (this._updateImpl(), this._invalidated = !1); + var e = {}; + e.bars = this.m_bars, e.barSpacing = this.m_model.timeScale().barSpacing(); + var t = this.m_series.properties(); + e.dontDrawOpen = t.barStyle.dontDrawOpen.value(), e.thinBars = t.style.value() === + TradingView.Series.STYLE_RANGE ? t.rangeStyle.thinBars.value() : t.barStyle.thinBars + .value(); + var i = new d; + return i.append(new o(e)), this.m_model.selection().isSelected(this.m_series) && this + ._isMarkersEnabled && i.append(new r(this._selectionData)), i + }, inherit(y, b), y.prototype.renderer = function() { + this._invalidated && (this._updateImpl(), this._invalidated = !1); + var e = {}; + e.bars = this.m_bars, e.barSpacing = this.m_model.timeScale().barSpacing(), e + .wickVisible = this.m_series.properties().candleStyle.drawWick.value(), e + .bodyVisible = this.m_series.properties().candleStyle.drawBody.value(), e + .borderVisible = this.m_series.properties().candleStyle.drawBorder.value(), e + .borderColor = this.m_series.properties().candleStyle.borderColor.value(), e + .wickColor = this.m_series.properties().candleStyle.wickColor.value(), e.barWidth = + f.optimalBarWidth(e.barSpacing); + var t = new d; + return t.append(new h(e)), this.m_model.selection().isSelected(this.m_series) && this + ._isMarkersEnabled && t.append(new r(this._selectionData)), t + }, inherit(w, b), w.prototype.renderer = function() { + this._invalidated && (this._updateImpl(), this._invalidated = !1); + var e = {}; + e.bars = this.m_bars, e.barSpacing = this.m_model.timeScale().barSpacing(), e + .wickVisible = this.m_series.properties().haStyle.drawWick.value(), e.bodyVisible = + this.m_series.properties().haStyle.drawBody.value(), e.borderVisible = this.m_series + .properties().haStyle.drawBorder.value(), e.borderColor = this.m_series.properties() + .haStyle.borderColor.value(), e.wickColor = this.m_series.properties().haStyle + .wickColor.value(), e.barWidth = f.optimalBarWidth(e.barSpacing); + var t = new d; + return t.append(new h(e)), this.m_model.selection().isSelected(this.m_series) && this + ._isMarkersEnabled && t.append(new r(this._selectionData)), t + }, inherit(P, b), P.prototype.renderer = function() { + this._invalidated && (this._updateImpl(), this._invalidated = !1); + var e = {}; + e.bars = this.m_bars, e.barSpacing = this.m_model.timeScale().barSpacing(), e + .wickVisible = this.m_series.properties().hollowCandleStyle.drawWick.value(), e + .bodyVisible = this.m_series.properties().hollowCandleStyle.drawBody.value(), e + .borderVisible = this.m_series.properties().hollowCandleStyle.drawBorder.value(), e + .borderColor = this.m_series.properties().hollowCandleStyle.borderColor.value(), e + .wickColor = this.m_series.properties().hollowCandleStyle.wickColor.value(), e + .barWidth = f.optimalBarWidth(e.barSpacing); + var t = new d; + return t.append(new h(e)), + this.m_model.selection().isSelected(this.m_series) && this._isMarkersEnabled && t + .append(new r(this._selectionData)), t + }, C.prototype.update = function() { + if (this.m_items = [], this.m_model.timeScale().isEmpty() || !this.m_series + .priceScale() || this.m_series.priceScale().isEmpty()) return; + const e = this.m_model.timeScale().visibleBarsStrictRange(); + if (null === e) return; + if (0 === this.m_series.bars().size()) return; + var t = this.m_series.nearestIndex(e.firstBar() - 1, _.NearestLeft), + i = this.m_series.nearestIndex(e.lastBar() + 1, _.NearestRight); + const r = this.m_series.bars().range(t, i); + var o = this.m_series.priceScale(), + a = { + color: this.m_series.properties().lineStyle.color.value() + }, + l = this.m_series.barFunction(); + let c; + if (r.each(function(t, i) { + var r = l(i); + if (null == r) return !1; + void 0 === c && e.contains(t) && (c = r); + var n = new s(t, r); + return n.style = a, this.m_items.push(n), !1 + }.bind(this)), o.pointsArrayToCoordinates(this.m_items, c), this.m_model.timeScale() + .timedValuesToCoordinates(this.m_items), this.m_model.selection().isSelected(this + .m_series)) { + var h = this._selectionIndexer.indexes(); + this._selectionData = { + points: [], + isDark: this.m_model.isDark(), + bgColors: [], + visible: !0 + }; + var u = this.m_model.paneForSource(this.m_series).height(); + this._selectionData.hittestResult = n.REGULAR; + for (var d = 0; d < h.length; d++) { + var p = h[d], + m = this.m_series.data().valueAt(p); + if (null !== m) { + var f = l(m), + g = this.m_model.timeScale().indexToCoordinate(p), + b = this.m_series.priceScale().priceToCoordinate(f, c); + this._selectionData.points.push(new s(g, b)), this._selectionData.bgColors + .push(this.m_model.backgroundColorAtYPercentFromTop(b / u)) + } + } + } else this._selectionIndexer.clear() + }, inherit(x, C), x.prototype.update = function() { + this._invalidated = !0 + }, x.prototype.renderer = function() { + this._invalidated && (C.prototype.update.call(this), this._invalidated = !1); + var e, t, i = this.m_series.properties().lineStyle, + s = { + barSpacing: this.m_model.timeScale().barSpacing(), + items: this.m_items, + lineColor: i.color.value(), + lineStyle: i.linestyle.value(), + withMarkers: i.styleType.value() === TradingView.Series.STYLE_LINE_TYPE_MARKERS, + lineWidth: i.linewidth.value(), + simpleMode: !0 + }; + return i.styleType.value() === TradingView.Series.STYLE_LINE_TYPE_STEP ? (e = new l) + .setData(s) : e = new a(s), this.m_model.selection().isSelected(this.m_series) ? (( + t = new d).append(e), this._isMarkersEnabled && t.append(new r(this + ._selectionData))) : t = e, t + }, inherit(T, C), T.prototype.update = function() { + this._invalidated = !0 + }, T.prototype.renderer = function() { + this._invalidated && (C.prototype.update.call(this), this._invalidated = !1); + var e = { + simpleMode: !1 + }; + e.barSpacing = this.m_model.timeScale().barSpacing(), e.items = this.m_items, e + .lineColor = this.m_series.properties().areaStyle.linecolor.value(), e.lineStyle = + this.m_series.properties().areaStyle.linestyle.value(), e.lineWidth = this.m_series + .properties().areaStyle.linewidth.value(); + var t = this.m_series.properties().areaStyle.transparency.value(); + e.isSeries = !0, e.color1 = p.generateColor(this.m_series.properties().areaStyle.color1 + .value(), t), e.color2 = p.generateColor(this.m_series.properties().areaStyle + .color2.value(), t), e.bottom = this.m_series.priceScale().height(); + var i = new d; + return i.append(new c(e)), this.m_model.selection().isSelected(this.m_series) && this + ._isMarkersEnabled && i.append(new r(this._selectionData)), i + }, inherit(I, C), I.prototype.update = function() { + this._invalidated = !0 + }, I.prototype._updateImpl = function() { + C.prototype.update.call(this); + var e = this.m_series.properties().baselineStyle, + t = e.transparency.value(); + this._topFillColor1 = p.generateColor(e.topFillColor1.value(), t), this._topFillColor2 = + p.generateColor(e.topFillColor2.value(), t), this._bottomFillColor1 = p + .generateColor(e.bottomFillColor1.value(), t), this._bottomFillColor2 = p + .generateColor(e.bottomFillColor2.value(), t), this._topLineColor = e.topLineColor + .value(), this._bottomLineColor = e.bottomLineColor.value(), this._topLineWidth = e + .topLineWidth.value(), this._bottomLineWidth = e.bottomLineWidth.value(), this + ._barSpacing = this.m_model.timeScale().barSpacing(), this._bottom = this.m_series + .priceScale().height(), this._baseLevelCoordinate = Math.round(this._bottom * (Math + .abs(100 - e.baseLevelPercentage.value()) / 100)) + }, I.prototype.renderer = function() { + this._invalidated && (this._updateImpl(), this._invalidated = !1), this._renderer + .setData({ + items: this.m_items, + topFillColor1: this._topFillColor1, + topFillColor2: this._topFillColor2, + bottomFillColor1: this._bottomFillColor1, + bottomFillColor2: this._bottomFillColor2, + topLineColor: this._topLineColor, + bottomLineColor: this._bottomLineColor, + topLineWidth: this._topLineWidth, + bottomLineWidth: this._bottomLineWidth, + lineStyle: CanvasEx.LINESTYLE_SOLID, + barSpacing: this._barSpacing, + baseLevelCoordinate: this._baseLevelCoordinate, + bottom: this._bottom + }); + var e = new d; + return e.append(this._renderer), this.m_model.selection().isSelected(this.m_series) && e + .append(new r(this._selectionData)), e + }, t.SeriesBarsPaneView = S, t.SeriesCandlesPaneView = y, t.SeriesHollowCandlesPaneView = P, + t.SeriesLinePaneView = x, t.SeriesAreaPaneView = T, t.SeriesHeikenAshiPaneView = w, t + .SeriesBaselinePaneView = I, t.SeriesBarCandlesPaneView = b + }, + "x2L+": function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return o + })), i.d(t, "a", (function() { + return a + })); + var s = i("m/cY"), + r = i("Vdly"); + + function n() { + return r.getBool("Chart.ShowMarketOpenStatus", !0) + } + const o = Object(s.a)(n()); + + function a() { + o.setValue(!0), r.remove("Chart.ShowMarketOpenStatus") + } + r.onSync.subscribe(null, () => o.setValue(n())), o.subscribe(null, () => r.setValue( + "Chart.ShowMarketOpenStatus", o.value())) + }, + x5Tw: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "setupChartEventHint", (function() { + return u + })); + var s = i("Eyy1"), + r = i("YFKU"), + n = i("Vdly"), + o = i("mMWL"), + a = i("e92V"), + l = i("qFKp"), + c = i("/3z9"), + h = i("Kxc7"); + + function u(e, t = !1) { + if (!h.enabled("popup_hints")) return; + const u = e.getContainer(); + let d = null, + p = null; + + function _(e, t, r) { + if (d) d.show(e, r ? void 0 : m.bind(null, t)); + else { + const n = o.tool.value(); + Promise.all([i.e("react"), i.e(89), i.e("chart-event-hint")]).then(i.bind(null, + "PN5r")).then(i => { + d = new i.ChartEventHintRenderer(Object(s.ensureNotNull)(u)), n === o + .tool.value() && d.show(e, r ? void 0 : m.bind(null, t)) + }) + } + } + + function m(e) { + n.setValue(e, !0, { + forceFlush: !0 + }), Object(s.ensureNotNull)(d).destroy(), null !== p && p(), d = null + } + o.tool.subscribe((function() { + if (Boolean(n.getBool("hint.touchPainting"))) return; + const e = o.tool.value(); + Object(a.isStudyLineToolName)(e) && "LineToolRegressionTrend" !== e && !l + .CheckMobile.any() ? _(Object(r.t)("Click to set a point"), + "hint.touchPainting") : l.CheckMobile.any() && !Object(a + .isLineDrawnWithPressedButton)(e) && Object(a.isLineToolName)(e) ? + _(Object(r.t)( + "Move the point to position the anchor then tap to place"), + "hint.touchPainting") : d && d.hide() + })), o.createdLineTool.subscribe(null, (function() { + const e = o.tool.value(); + "LineToolPath" !== e || Boolean(n.getBool( + "hint.finishBuildPathByDblClick")) ? "LineToolPolyline" !== e || + Boolean(n.getBool("hint.finishBuildPolylineByDblClick")) || _(Object(r + .t)("Double-click to finish Polyline"), + "hint.finishBuildPolylineByDblClick") : _(Object(r.t)( + "Double-click to finish Path"), + "hint.finishBuildPathByDblClick") + })), o.finishedLineTool.subscribe(null, (function() { + if (d) { + const e = o.tool.value(); + "LineToolPath" === e ? m("hint.finishBuildPathByDblClick") : + "LineToolPolyline" === e && m("hint.finishBuildPolylineByDblClick") + } + })), t || l.CheckMobile.any() || Boolean(n.getBool("hint.startFocusedZoom")) || (p = + function(e, t) { + let i = !1; + const s = r => { + r ? (i && t(r), e.onZoom().unsubscribe(null, s)) : i || (t(r), i = !0) + }; + return e.onZoom().subscribe(null, s), () => e.onZoom().unsubscribe(null, s) + }(e, (function(e) { + if (Boolean(n.getBool("hint.startFocusedZoom"))) return; + if (e) d && (p = null, m("hint.startFocusedZoom")); + else { + const e = c.isMacKeyboard ? "⌘" : "Ctrl"; + _(Object(r.t)( + "Press and hold {key} while zooming to maintain the chart position" + ).format({ + key: e + }), "hint.startFocusedZoom") + } + }))) + } + }, + x8jL: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("MY2c"), + n = i("bOGh"), + o = i("RDU5"); + class a extends o.UndoCommand { + constructor(e, t, i) { + super(i), this._wv = e, this._newValue = t, this._oldValue = e.value() + } + redo() { + this._wv.setValue(this._newValue) + } + undo() { + this._wv.setValue(this._oldValue) + } + } + var l = i("txPx"), + c = i("aIyQ"), + h = i.n(c); + i.d(t, "createUndoHistory", (function() { + return d + })); + const u = Object(l.getLogger)("Common.UndoHistory"); + + function d() { + const e = [], + t = new r.a, + i = new r.a, + o = new h.a; + + function l(s) { + if (e.length > 0) e[e.length - 1].addCommand(s); + else { + i.clear(); + const e = t.head(), + r = e && e.text(); + e && e.canMerge(s) ? e.merge(s) : t.push(s); + const n = s.text(); + "" !== n && n !== r && u.logNormal("DO: " + n) + } + s.executeOnPush() && s.redo(), e.length || o.fire(c()) + } + + function c() { + const e = t.head(), + s = i.head(); + return { + enableUndo: !t.isEmpty(), + undoText: void 0 === e ? void 0 : e.text(), + enableRedo: !i.isEmpty(), + redoText: void 0 === s ? void 0 : s.text() + } + } + return { + beginUndoMacro: function(t) { + const i = new n.a(t); + return e.push(i), i + }, + clearStack: function() { + t.clear(), i.clear(), o.fire(c()) + }, + createUndoCheckpoint: function() { + return { + lastActualCommand: t.isEmpty() ? null : t.head() + } + }, + endUndoMacro: function() { + const t = Object(s.ensureDefined)(e.pop()); + t.isEmpty() || l(t) + }, + pushUndoCommand: l, + redo: function() { + if (i.isEmpty()) return !1; + const e = i.pop(); + return !!e && (e.redo(), t.push(e), u.logNormal("REDO: " + e.text()), o.fire( + c()), !0) + }, + redoStack: function() { + return i + }, + setWatchedValue: function(e, t, i) { + if (e.value() !== t) { + const s = new a(e, t, i); + l(s), s.redo() + } + }, + undo: function() { + if (t.isEmpty()) return !1; + const e = t.pop(); + return !!e && (e.undo(), + i.push(e), u.logNormal("UNDO: " + e.text()), o.fire(c()), !0) + }, + undoStack: function() { + return t + }, + undoToCheckpoint: function(e) { + for (; !t.isEmpty() && e.lastActualCommand !== t.head();) t.pop().undo(); + i.clear(), o.fire(c()) + }, + state: c, + onChange: function() { + return o + } + } + } + }, + xCUR: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return n + })), i.d(t, "a", (function() { + return o + })); + var s = i("n5al"), + r = i("/tGj"); + + function n(e) { + const t = e.priceScale(); + return !(null === t || !t.isPercentage()) && (!Object(r.isSymbolSource)(e) || Object(s + .isPriceSourceStyle)(e.style())) + } + + function o(e) { + const t = e.priceScale(); + if (n(e) && null !== t) return i => { + var s; + return t.formatPricePercentage(i, null !== (s = e.firstValue()) && void 0 !== + s ? s : 100) + }; + const i = e.formatter(); + return i.format.bind(i) + } + }, + xDuj: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "translatedIntervalString", (function() { + return r + })); + i("YFKU"); + var s = i("pPtI"); + + function r(e) { + const t = Object(s.getTranslatedResolutionModel)(e, !0); + return null === t ? e : t.multiplier + (t.mayOmitShortKind ? "" : t.shortKind) + } + }, + xWfy: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return c + })), i.d(t, "b", (function() { + return p + })), i.d(t, "c", (function() { + return _ + })), i.d(t, "d", (function() { + return m + })); + var s = i("tqok"), + r = i("fFKx"), + n = i("SqfW"), + o = i("KG+6"), + a = i("5vwb"), + l = i("7Fue"); + class c { + constructor(e, t) { + if (this._indexes = [], this._horizlines = new Map, this._vertlines = new Map, this + ._lines = new Map, this._hlines = new Map, this._textmarks = new Map, this + ._shapemarks = new Map, this._backgrounds = new Map, this._polygons = new Map, + this._trendchannels = new Map, this._hhists = new Map, this._dwglabels = + new Map, this._dwglines = new Map, this._dwgboxes = new Map, this._dwgtables = + new Map, this._dwgtablecells = new Map, "data" === e) { + const e = t; + this._indexes = e.indexes, this._vertlines = h(e.vertlines, this._indexes, n.b), + this._horizlines = h(e.horizlines, this._indexes, r.b), this._polygons = h(e + .polygons, this._indexes, a.b), this._hhists = h(e.hhists, this + ._indexes, o.d) + } else if ("state" === e) { + const e = t; + this._indexes = e.indexes || [], this._vertlines = u(e.vertlines, this._indexes, + n.b), this._horizlines = u(e.horizlines, this._indexes, r.b), this + ._polygons = u(e.polygons, this._indexes, a.b), this._hhists = u(e.hhists, + this._indexes, o.d) + } + this._hhistsByTimePointIndex = Object(l.b)(this._hhists) + } + horizlines() { + return this._horizlines + } + vertlines() { + return this._vertlines + } + lines() { + return this._lines + } + hlines() { + return this._hlines + } + textmarks() { + return this._textmarks + } + shapemarks() { + return this._shapemarks + } + backgrounds() { + return this._backgrounds + } + polygons() { + return this._polygons + } + trendchannels() { + return this._trendchannels + } + hhists() { + return this._hhists + } + dwglabels() { + return this._dwglabels + } + dwglines() { + return this._dwglines + } + dwgboxes() { + return this._dwgboxes + } + dwgtables() { + return this._dwgtables + } + dwgtablecells() { + return this._dwgtablecells + } + hhistsByTimePointIndex() { + return this._hhistsByTimePointIndex + } + } + + function h(e, t, i) { + const s = new Map; + return e.forEach((e, r) => { + const n = s.get(r) || new Set; + e.forEach(e => { + const s = i(e, t); + null !== s && n.add(s) + }), s.set(r, n) + }), s + } + + function u(e, t, i) { + const s = new Map; + if (void 0 === e) return s; + for (const r of e) { + const e = r.styleId, + n = s.get(e) || new Set; + r.data.forEach(e => { + const s = i(e, t); + null !== s && n.add(s) + }), s.set(e, n) + } + return s + } + + function d(e, t, i, s) { + const r = []; + return e.forEach((e, n) => { + e.forEach(e => { + ! function(e, t, i) { + let s = null; + for (const i of e) i.styleId === t && (s = i); + null === s && (s = { + styleId: t, + data: [] + }, e.push(s)), s.data.push(i) + }(r, n, s(e, t(e), i)) + }) + }), r.length > 0 ? r : void 0 + } + + function p() { + return new c + } + + function _(e) { + return new c("state", e) + } + + function m(e) { + const t = function(e) { + const t = new Set; + e.horizlines().forEach((e, i) => { + e.forEach(e => { + t.add(e.startIndex), t.add(e.endIndex) + }) + }), e.vertlines().forEach((e, i) => { + e.forEach(e => { + t.add(e.index) + }) + }), e.lines().forEach((e, i) => { + e.forEach(e => { + t.add(e.startIndex), t.add(e.endIndex) + }) + }), e.textmarks().forEach((e, i) => { + e.forEach(e => { + t.add(e.time) + }) + }), e.shapemarks().forEach((e, i) => { + e.forEach(e => { + t.add(e.time) + }) + }), e.backgrounds().forEach((e, i) => { + e.forEach(e => { + t.add(null !== e.start ? e.start : s + .INVALID_TIME_POINT_INDEX), t.add(e.stop) + }) + }), e.polygons().forEach((e, i) => { + e.forEach(e => { + e.points.forEach(e => { + t.add(e.index) + }) + }) + }), e.trendchannels().forEach((e, i) => { + e.forEach(e => { + t.add(e.startIndex), t.add(e.endIndex) + }) + }), e.hhists().forEach((e, i) => { + e.forEach(e => { + t.add(e.firstBarTime), t.add(e.lastBarTime) + }) + }), e.dwglabels().forEach((e, i) => { + e.forEach(e => { + t.add(e.x) + }) + }), e.dwglines().forEach((e, i) => { + e.forEach(e => { + var i, r; + t.add(null !== (i = e.x1) && void 0 !== i ? i : s + .INVALID_TIME_POINT_INDEX), t.add(null !== (r = e + .x2) && void 0 !== r ? r : s + .INVALID_TIME_POINT_INDEX) + }) + }), e.dwgboxes().forEach((e, i) => { + e.forEach(e => { + var i, r; + t.add(null !== (i = e.left) && void 0 !== i ? i : s + .INVALID_TIME_POINT_INDEX), t.add(null !== (r = e + .right) && void 0 !== r ? r : s + .INVALID_TIME_POINT_INDEX) + }) + }); + const i = Array.from(t); + return i.sort((e, t) => e - t), i + }(e), + i = { + indexes: t + }; + let l = 0; + const c = () => ++l; + return i.vertlines = d(e.vertlines(), c, t, n.a), i.horizlines = d(e.horizlines(), c, t, r + .a), i.polygons = d(e.polygons(), c, t, a.a), i.hhists = d(e.hhists(), c, t, o.c), i + } + }, + xdS3: function(e, t, i) {}, + xnA2: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX").LineToolColorsProperty; + class o extends s { + constructor(e, t) { + super(e, t || o.createProperties()), this.version = o.version, i.e("lt-pane-views") + .then(i.t.bind(null, "CR3a", 7)).then(({ + FibChannelPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return o.LevelsCount + } + migrateVersion(e, t, i) { + i.properties.removeProperty("reverse") + } + pointsCount() { + return 3 + } + name() { + return "Fib Channel" + } + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "17v9"))) + .FibDrawingsWith24LevelsDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolfibchannel", e, !1, { + range: [1, 24], + names: ["coeff", "color", "visible"] + }); + return o._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + var t = []; + for (let i = 1; i <= o.LevelsCount; i++) t.push(e.child("level" + i).child( + "color")); + e.addChild("linesColors", new n(t)), e.addExclusion("linesColors") + } + } + o.LevelsCount = 24, o.version = 2, t.LineToolFibChannel = o + }, + xo8u: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return o + })); + var s = i("Eyy1"), + r = i("RDU5"), + n = i("n5al"); + class o extends r.UndoCommand { + constructor(e, t, i, r) { + super(r), this._newSourcesCurrencies = new Map, this._oldSourcesCurrencies = + new Map, this._showFade = !1, this._chartWidget = i; + const o = i.model().mainSeries(); + for (const i of e.seriesLikeSources()) { + if (!i.isVisible()) continue; + const e = t || Object(n.symbolOriginalCurrency)(Object(s.ensureNotNull)(i + .symbolInfo())); + this._newSourcesCurrencies.set(i.id(), e), this._oldSourcesCurrencies.set(i + .id(), i.currency()), this._showFade = this._showFade || i === o && + i.currency() !== e + } + } + redo() { + this._applyCurrencies(this._newSourcesCurrencies) + } + undo() { + this._applyCurrencies(this._oldSourcesCurrencies) + } + _applyCurrencies(e) { + this._showFade && this._chartWidget.screen.show(); + const t = this._chartWidget.model().model(); + e.forEach((e, i) => { + Object(s.ensureNotNull)(t.dataSourceForId(i)).setCurrency(e) + }), this._chartWidget.model().selectionMacro(e => { + e.clearSelection() + }) + } + } + }, + xrEm: function(e, t, i) {}, + xt3Q: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "TradingViewApiBase", (function() { + return s + })); + class s { + constructor(e) { + this._studyTemplatesDrawer = null; + const { + chartApiInstance: t, + chartWidgetCollection: i, + studyMarket: s, + financialsDialog: r, + saveChartService: n, + loadChartService: o + } = e; + this._chartWidgetCollection = i, this._studyMarket = s, this._financialsDialog = r, + this._saveChartService = n, this._loadChartLayoutDialog = o, this + ._intervalsService = null + } + dialogs() { + var e, t, i, s, r, n; + return { + Indicators: this._studyMarket, + Financials: this._financialsDialog, + Compare: this._chartWidgetCollection.getCompareDialogRenderer(), + ObjectsTree: null, + ChartProperties: this._chartWidgetCollection.getChartPropertiesDialogRenderer(), + ChartLayoutSaveAs: null !== (t = null === (e = this._saveChartService) || + void 0 === e ? void 0 : e.getSaveAsController()) && void 0 !== t ? t : + null, + ChartLayoutRename: null !== (s = null === (i = this._saveChartService) || + void 0 === i ? void 0 : i.getRenameController()) && void 0 !== s ? s : + null, + ChartLayoutCreate: null !== (n = null === (r = this._saveChartService) || + void 0 === r ? void 0 : r.getCreateController()) && void 0 !== n ? n : + null, + ChartLayoutLoad: this._loadChartLayoutDialog + } + } + studyTemplatesDrawerApi() { + throw new Error("not implemented") + } + intervalsService() { + throw new Error("not implemented") + } + setBrokerName(e) { + this._chartWidgetCollection.setBroker(e) + } + } + }, + "xz+e": function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("7KDR").Action, + n = i("Ocx9").DefaultProperty, + o = i("j3hX").LineToolColorsProperty, + a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + l = [{ + value: a[0], + title: window.t("Supermillennium") + }, { + value: a[1], + title: window.t("Millennium") + }, { + value: a[2], + title: window.t("Submillennium") + }, { + value: a[3], + title: window.t("Grand Supercycle") + }, { + value: a[4], + title: window.t("Supercycle") + }, { + value: a[5], + title: window.t("Cycle") + }, { + value: a[6], + title: window.t("Primary") + }, { + value: a[7], + title: window.t("Intermediate") + }, { + value: a[8], + title: window.t("Minor", { + context: "wave" + }) + }, { + value: a[9], + title: window.t("Minute", { + context: "wave" + }) + }, { + value: a[10], + title: window.t("Minuette") + }, { + value: a[11], + title: window.t("Subminuette") + }, { + value: a[12], + title: window.t("Micro") + }, { + value: a[13], + title: window.t("Submicro") + }, { + value: a[14], + title: window.t("Minuscule") + }]; + class c extends s { + constructor(e, t) { + super(e, t || c.createProperties()), this.version = c.version, i.e("lt-pane-views") + .then(i.t.bind(null, "Ht/7", 7)).then(({ + ElliottLabelsPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + static migrateState(e) { + var t = { + 0: 11, + 1: 10, + 2: 9, + 3: 8, + 4: 7, + 5: 6, + 6: 5, + 7: 4, + 8: 3 + }, + i = { + 0: 11, + 1: 8 + }; + "LineToolElliottSubminuette" === e.type && (e.type = "LineToolElliottImpulse", e + .state.degree = t[e.state.wavesize]), "LineToolElliottMinor" === e.type && ( + e.type = "LineToolElliottImpulse", e.state.degree = t[e.state.wavesize]), + "LineToolElliottCircle" === e.type && (e.type = "LineToolElliottImpulse", e + .state.degree = t[e.state.wavesize]), "LineToolElliottMinorRetr" === e + .type && (e.type = "LineToolElliottCorrection", e.state.degree = i[e.state + .wavesize]), "LineToolElliottMajorRetr" === e.type && (e.type = + "LineToolElliottCorrection", e.state.degree = i[e.state.wavesize]) + } + migrateVersion(e, t, i) { + if (i.properties.hasChild("background") && i.properties.removeProperty( + "background"), i.properties.hasChild("backgroundColor") && i.properties + .removeProperty("backgroundColor"), i.properties.hasChild("showBackground") && i + .properties.removeProperty("showBackground"), 1 === e) { + var s = Object.assign({}, this._timePoint[0]); + this._timePoint.unshift(s), this._points.length > 0 && (s = Object.assign({}, + this._points[0]), this._points.unshift(s)) + } + } + applyTemplate(e) { + delete e.background, delete e.backgroundColor, delete e.showBackground, super + .applyTemplate(e) + } + name() { + return "Elliott Labels" + } + additionalActions(e) { + var t = this; + return [new r({ + label: window.t("Degree"), + subItems: a.map((function(i) { + var s = l.filter((function(e) { + return e.value === i + }))[0]; + return new r({ + label: s.title, + checkable: !0, + checked: t.properties().degree + .value() === i, + onExecute: function() { + e.setProperty(t.properties() + .degree, i, + "Change Elliott Degree") + } + }) + })) + })] + } + label(e) { + var t = a.length - this.properties().degree.value() - 1, + i = Math.floor(t / 3); + return { + group: i, + bold: !!(i % 2), + decoration: ["", "brackets", "circle"][t % 3], + label: this.labelsGroup()[i][e] + } + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "UHSU"))) + .ElliottPatternDefinitionsViewModel + } + availableDegreesValues() { + return l + } + static createProperties(e) { + var t = new n("linetoolelliott", e); + return c._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e), e.addChild("linesColors", new o([e.color])), e + .addExclusion("linesColors") + } + } + c.version = 4; + class h extends c { + pointsCount() { + return 6 + } + static _configureProperties(e) { + c._configureProperties(e) + } + } + class u extends h { + constructor(e, t) { + super(e, t || u.createProperties()) + } + name() { + return "Elliott Impulse Wave (12345)" + } + labelsGroup() { + return u._labelsGroups + } + static createProperties(e) { + var t = new n("linetoolelliottimpulse", e); + return u._configureProperties(t), t + } + static _configureProperties(e) { + h._configureProperties(e) + } + } + u._labelsGroups = [ + ["0", "1", "2", "3", "4", "5"], + ["0", "i", "ii", "iii", "iv", "v"], + ["0", "1", "2", "3", "4", "5"], + ["0", "I", "II", "III", "IV", "V"], + ["0", "1", "2", "3", "4", "5"] + ]; + class d extends h { + constructor(e, t) { + super(e, t || d.createProperties()) + } + name() { + return "Elliott Triangle Wave (ABCDE)" + } + labelsGroup() { + return d._labelsGroups + } + static createProperties(e) { + var t = new n("linetoolelliotttriangle", e); + return d._configureProperties(t), t + } + static _configureProperties(e) { + h._configureProperties(e) + } + } + d._labelsGroups = [ + ["0", "A", "B", "C", "D", "E"], + ["0", "a", "b", "c", "d", "e"], + ["0", "A", "B", "C", "D", "E"], + ["0", "a", "b", "c", "d", "e"], + ["0", "A", "B", "C", "D", "E"] + ]; + class p extends h { + constructor(e, t) { + super(e, t || p.createProperties()) + } + name() { + return "Elliott Triple Combo Wave (WXYXZ)" + } + labelsGroup() { + return p._labelsGroups + } + static createProperties(e) { + var t = new n("linetoolelliotttriplecombo", e); + return p._configureProperties(t), t + } + static _configureProperties(e) { + h._configureProperties(e) + } + } + p._labelsGroups = [ + ["0", "W", "X", "Y", "X", "Z"], + ["0", "w", "x", "y", "x", "z"], + ["0", "W", "X", "Y", "X", "Z"], + ["0", "w", "x", "y", "x", "z"], + ["0", "W", "X", "Y", "X", "Z"] + ]; + class _ extends c { + pointsCount() { + return 4 + } + static _configureProperties(e) { + c._configureProperties(e) + } + } + class m extends _ { + constructor(e, t) { + super(e, t || m.createProperties()) + } + name() { + return "Elliott Correction Wave (ABC)" + } + labelsGroup() { + return m._labelsGroups + } + static createProperties(e) { + var t = new n("linetoolelliottcorrection", e); + return m._configureProperties(t), t + } + static _configureProperties(e) { + _._configureProperties(e) + } + } + m._labelsGroups = [ + ["0", "A", "B", "C"], + ["0", "a", "b", "c"], + ["0", "A", "B", "C"], + ["0", "a", "b", "c"], + ["0", "A", "B", "C"] + ]; + class f extends _ { + constructor(e, t) { + super(e, t || f.createProperties()) + } + name() { + return "Elliott Double Combo Wave (WXY)" + } + labelsGroup() { + return f._labelsGroups + } + static createProperties(e) { + var t = new n("linetoolelliottdoublecombo", e); + return f._configureProperties(t), t + } + static _configureProperties(e) { + _._configureProperties(e) + } + } + f._labelsGroups = [ + ["0", "W", "X", "Y"], + ["0", "w", "x", "y"], + ["0", "W", "X", "Y"], + ["0", "w", "x", "y"], + ["0", "W", "X", "Y"] + ], t.LineToolElliott = c, t.LineToolElliottImpulse = u, t.LineToolElliottTriangle = d, t + .LineToolElliottTripleCombo = p, t.LineToolElliottCorrection = m, t + .LineToolElliottDoubleCombo = f + }, + xzdg: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("Eyy1"), + r = i("YFKU"), + n = i("EsvI"), + o = i("H0vP"), + a = i("ikwP"), + l = i("ogJP"), + c = i("jFln"), + h = i("u+0B"), + u = i("XlJ7"), + d = i("JWMC"), + p = i("zDbI"), + _ = i("CPmC"), + m = i("gAom"), + f = i("Hr11"), + g = i("+cnz"), + b = i("CxTi"); + class v { + constructor() { + this._width = null, this._currencyInfo = null, this._unitInfo = null, this + ._fontSize = 0, this._currencyAndUnitLabelsWrapper = document.createElement( + "div"), this._currencyAndUnitLabelsWrapper.className = b[ + "price-axis-currency-label-wrapper"], this._controlsContainer = document + .createElement("table"), this._controlsContainer.className = b[ + "price-axis-currency-label"], this._currencyAndUnitLabelsWrapper + .appendChild(this._controlsContainer), this._currencyLabelTr = document + .createElement("tr"), this._currencyLabelTr.className = b[ + "price-axis-currency-label-dropdown"], this._currencyLabelTr.classList.add( + "apply-common-tooltip"), Object(_.b)(this._currencyLabelTr, "text", e => + this._currencyTooltipContent()); + const e = document.createElement("td"); + this._currencyText = document.createElement("span"), this._currencyText.className = + b["price-axis-currency-label-text"], + e.appendChild(this._currencyText), this._currencyLabelTr.appendChild(e); + const t = document.createElement("td"); + this._currencyArrowDown = document.createElement("span"), this._currencyArrowDown + .className = b["price-axis-currency-label-arrow-down"], this._currencyArrowDown + .innerHTML = g, t.appendChild(this._currencyArrowDown), this._currencyLabelTr + .appendChild(t), this._unitLabelTr = document.createElement("tr"), this + ._unitLabelTr.className = b["price-axis-currency-label-dropdown"], this + ._unitLabelTr.classList.add("apply-common-tooltip"), Object(_.b)(this + ._unitLabelTr, "text", e => this._unitTooltipContent()); + const i = document.createElement("td"); + this._unitText = document.createElement("span"), this._unitText.className = b[ + "price-axis-currency-label-text"], i.appendChild(this._unitText), this + ._unitLabelTr.appendChild(i); + const s = document.createElement("td"); + this._unitArrowDown = document.createElement("span"), this._unitArrowDown + .className = b["price-axis-currency-label-arrow-down"], this._unitArrowDown + .innerHTML = g, s.appendChild(this._unitArrowDown), this._unitLabelTr + .appendChild(s), this._controlsContainer.appendChild(this._currencyLabelTr), + this._controlsContainer.appendChild(this._unitLabelTr), this.hideCurrency(), + this.hideUnit() + } + element() { + return this._currencyAndUnitLabelsWrapper + } + currencyLabelElement() { + return this._currencyLabelTr + } + unitLabelElement() { + return this._unitLabelTr + } + isVisible() { + return this.currencyLabelVisible() || this.unitLabelVisible() + } + width() { + if (null !== this._width) return this._width; + let e = 0; + if (this.currencyLabelVisible()) { + const t = this._currencyLabelTr.getBoundingClientRect(); + e = Math.max(e, t.right - t.left + 1 + 8) + } + if (this.unitLabelVisible()) { + const t = this._unitLabelTr.getBoundingClientRect(); + e = Math.max(e, t.right - t.left + 1 + 8) + } + return this._width = e, e + } + drawLabel(e, t, i, s) { + if (!this.isVisible()) return; + const r = this.currencyLabelVisible() ? this._currencyText.textContent || "" : this + ._unitText.textContent || "", + n = this._unitText.textContent || ""; + e.font = Object(u.makeFont)(this._fontSize, p.CHART_FONT_FAMILY); + const o = new h.TextWidthCache, + l = 2 * Number(b.css_value_currency_label_text_horizontal_padding) + Math.max(o + .measureText(e, r), o.measureText(e, n)), + c = o.yMidCorrection(e, r), + d = o.yMidCorrection(e, n), + _ = Math.round(t / 2 * i), + g = Object(f.ceiledEven)(l * i / 2), + v = this._controlsContainer.style, + S = Math.round(this.labelTop() * i), + y = Math.round(this.labelBottom() * i), + w = y - S, + P = Math.round(Number(b.css_value_currency_label_radius) * i); + Object(m.drawRoundRect)(e, _ - g, S, 2 * g, w, P), e.fillStyle = v.backgroundColor, + e.fill(); + const C = Math.max(1, Math.floor(i)); + e.lineWidth = C, e.strokeStyle = s ? b.css_value_border_color_dark : b + .css_value_border_color_light, Object(m.drawRoundRect)(e, _ - g + C / 2, S + C / + 2, 2 * g - C, w - C, P), e.stroke(); + const x = S + (y - S - 1) / 2, + T = this._isMultiLine(); + T && Object(m.drawHorizontalLine)(e, Math.floor(x + C / 2), _ - g, _ + g); + const I = this._oneLineHeight() / 2 * i, + M = T ? Math.ceil(x - I) : x, + O = Math.ceil(x + I); + e.fillStyle = v.color, e.textBaseline = "middle", e.textAlign = "center", Object(a + .drawScaled)(e, i, () => e.fillText(r, _ / i, (M + c) / i)), T && Object(a + .drawScaled)(e, i, () => e.fillText(n, _ / i, (O + d) / i)) + } + showCurrency() { + this._currencyLabelTr.classList.remove("js-hidden"), this._width = null, this + ._updateMultiLine(), this._updateVisibility() + } + hideCurrency() { + this._currencyLabelTr.classList.add("js-hidden"), this._width = null, this + ._updateMultiLine(), this._updateVisibility() + } + showUnit() { + this._unitLabelTr.classList.remove("js-hidden"), this._width = null, this + ._updateMultiLine(), this._updateVisibility() + } + hideUnit() { + this._unitLabelTr.classList.add("js-hidden"), this._width = null, this + ._updateMultiLine(), this._updateVisibility() + } + currencyLabelVisible() { + return !this._currencyLabelTr.classList.contains("js-hidden") + } + unitLabelVisible() { + return !this._unitLabelTr.classList.contains("js-hidden") + } + setCurrencyInfo(e) { + if (this._currencyInfo === e) return !1; + this._currencyInfo = e; + const t = null === e.selectedCurrency ? Object(r.t)("Mixed") : Object(s + .ensureDefined)(e.displayedValues.get(e.selectedCurrency)); + return this._currencyText.textContent !== t && (this._currencyText.textContent = t, + this._width = null), this._currencyArrowDown.classList.contains( + "js-hidden") !== e.readOnly && (this._currencyArrowDown.classList.toggle( + "js-hidden", e.readOnly), this._currencyLabelTr.classList.toggle(b + .readonly, e.readOnly), this._width = null), !0 + } + setUnitInfo(e) { + if (null !== this._unitInfo && this._unitInfo.selectedUnit === e.selectedUnit && + 0 === this._unitInfo.availableGroups.size == (0 === e.availableGroups.size) && + this._unitInfo.originalUnits.size === e.originalUnits.size) return this + ._unitInfo = e, !1; + this._unitInfo = e; + const t = null === e.selectedUnit ? Object(r.t)("Mixed") : Object(s.ensureDefined)(e + .names.get(e.selectedUnit)); + return this._unitText.textContent !== t && (this._unitText.textContent = t, this + ._width = null), this._unitArrowDown.classList.contains("js-hidden") !== ( + 0 === e.availableGroups.size) && (this._unitArrowDown.classList.toggle( + "js-hidden", 0 === e.availableGroups.size), this._unitLabelTr.classList + .toggle(b.readonly, 0 === e.availableGroups.size), this._width = null), !0 + } + updateColors(e, t) { + const i = this._controlsContainer.style; + i.background = e, i.color = t + } + currencyInfo() { + return this._currencyInfo + } + unitInfo() { + return this._unitInfo + } + setFontSize(e) { + this._fontSize !== e && (this._fontSize = e, this._currencyLabelTr.style.fontSize = + e + "px", this._unitLabelTr.style.fontSize = e + "px", this._width = null, + this._setLineHeight(this._oneLineHeight())) + } + labelTop() { + return Number(b.css_value_currency_label_top) + } + labelBottom() { + const e = this.labelTop(), + t = this._oneLineHeight(); + let i = e + t; + return this._isMultiLine() && (i += t + 1), i + } + _currencyTooltipContent() { + const e = this._currencyInfo; + return null === e ? "" : null === e.selectedCurrency ? Array.from(e.currencies).map( + t => Object(s.ensureDefined)(e.displayedValues.get(t))).join(", ") : "" + } + _unitTooltipContent() { + const e = this._unitInfo; + return null === e ? "" : null === e.selectedUnit ? Array.from(e.units).map(t => + Object(s.ensureDefined)(e.names.get(t))).join(", ") : e.descriptions.get(e + .selectedUnit) || "" + } + _setLineHeight(e) { + this._currencyLabelTr.style.lineHeight = e + "px", this._unitLabelTr.style + .lineHeight = e + "px" + } + _updateMultiLine() { + this._controlsContainer.classList.toggle(b.multiline, this._isMultiLine()) + } + _updateVisibility() { + this._currencyAndUnitLabelsWrapper.classList.toggle("js-hidden", !this.isVisible()) + } + _oneLineHeight() { + return 7 + this._fontSize + } + _isMultiLine() { + return this.unitLabelVisible() && this.currencyLabelVisible() + } + } + async function S(e, t, s) { + const [r, n] = await Promise.all([Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i + .e(6), i.e(8), i.e(9), i.e(13), i.e(19), i.e(29), i.e(66), i.e(83), + i.e(0), i.e(2), i.e(5), i.e(18), i.e("currency-label-menu") + ]).then(i.bind(null, "9agd")), t()]); + return r.showUnitConversion(e, s, n) + } + var y = i("5VQP"); + var w = i("3/8U"), + P = i("nqXy"); + i.d(t, "PriceAxisWidgetBase", (function() { + return x + })); + const C = { + contextMenuEnabled: !0, + currencyConversionEnabled: !1, + unitConversionEnabled: !1, + countdownEnabled: !0, + contextMenu: { + general: !0, + source: !0 + }, + pressedMouseMoveScale: !0, + mouseWheelScale: !0, + croppedTickMarks: !0 + }; + class x { + constructor(e, t, i, s, r, n, o) { + this._priceScale = null, this._widthCache = new h.TextWidthCache(500), this._color = + null, this._fontSize = null, this._currencyFontSize = 0, this + ._currencyLabelWidth = null, this._isVisible = !0, this._updateTimeout = null, + this._currencyMenu = null, this._unitMenu = null, this._prevOptimalWidth = 0, + this._size = new a.Size(-1, -1), this._currentCursorClassName = "", this + ._mouseDown = !1, this._destroyed = !1, this._highlighted = !1, this + ._mouseWheelHelper = null, this._dragScaleActive = !1, this._pane = e, this + ._undoModel = t, this._properties = i, this._isLeft = "left" === s, this + ._options = Object(l.merge)(Object(l.clone)(C), r), this + ._rendererOptionsProvider = n, this._backgroundBasedTheme = o, this._cell = + document.createElement("div"), this._cell.className = "price-axis", this._cell + .style.width = "25px", this._cell.style.left = "0", this + ._canvasConfiguredHandler = () => { + this._undoModel.model().lightUpdate() + }, this._canvasBinding = Object(a.createBoundCanvas)(this._cell, new a.Size(16, + 16)), this._canvasBinding.subscribeCanvasConfigured(this + ._canvasConfiguredHandler); + const c = this._canvasBinding.canvas; + c.style.position = "absolute", c.style.zIndex = "1", c.style.left = "0", c.style + .top = "0", this._topCanvasConfiguredHandler = () => this._undoModel.model() + .lightUpdate(), this._topCanvasBinding = Object(a.createBoundCanvas)(this._cell, + new a.Size(16, 16)), this._topCanvasBinding.subscribeCanvasConfigured(this + ._topCanvasConfiguredHandler); + const u = this._topCanvasBinding.canvas; + u.style.position = "absolute", u.style.zIndex = "2", u.style.left = "0", u.style + .top = "0", this._options.currencyConversionEnabled || this._options + .unitConversionEnabled ? (this._currencyLabel = new v, this._cell.appendChild( + this._currencyLabel.element()), this._currencyLabel + .currencyLabelElement().addEventListener("click", () => this + ._showCurrenciesContextMenu()), this._currencyLabel.unitLabelElement() + .addEventListener("click", () => this._showUnitsContextMenu())) : this + ._currencyLabel = null, this._properties.childs().fontSize.subscribe(this, this + ._onFontSizeChanged), this._options.mouseWheelScale && (this + ._mouseWheelHelper = new P.a, this._cell.addEventListener("wheel", this + ._onMousewheel.bind(this), { + passive: !1 + })) + } + getElement() { + return this._cell + } + onOptimalWidthNeedToBeRecalculated(e) { + const t = this.optimalWidth(); + (this._prevOptimalWidth < t || e) && null === this._updateTimeout && (this + ._updateTimeout = setTimeout(() => { + this._undoModel.model().fullUpdate(), this._updateTimeout = null + }, 100)), this._prevOptimalWidth = t + } + optimalWidth() { + var e; + if (!this.isVisible()) return 0; + let t = 0; + const i = this.rendererOptions(); + if (this._pane.hasState()) { + const i = Object(a.getContext2D)(this._canvasBinding.canvas); + Object(c.setFont)(i, this.baseFont()); + const s = this.backLabels(!0); + for (let e = s.length; e--;) { + if (!s[e].isAxisLabelVisible()) continue; + const r = this._widthCache.measureText(i, s[e].text()); + t = Math.max(t, r); + const n = s[e].secondLineText(); + n && (t = Math.max(t, this._widthCache.measureText(i, n))); + const o = s[e].thirdLineText(); + o && (t = Math.max(t, this._widthCache.measureText(i, o))) + } + const r = this.priceScale(), + n = r.marks(); + n.length > 0 && (t = Math.max(t, this._widthCache.measureText(i, n[0].label), + this._widthCache.measureText(i, n[n.length - 1].label))); + const o = (null === (e = r.mainSource()) || void 0 === e ? void 0 : e + .firstValue()) || null; + if (null !== o) { + const e = r.coordinateToPrice(1, o), + s = r.coordinateToPrice(this._size.h - 2, o); + t = Math.max(t, this._widthCache.measureText(i, r.formatPrice(Math.floor( + Math.min(e, s)) + .11111111111111, o)), this._widthCache + .measureText(i, r.formatPrice(Math.ceil(Math.max(e, s)) - + .11111111111111, o))) + } + } + let r = 0; + this._isCurrencyLabelVisible() && (null === this._currencyLabelWidth && (this + ._currencyLabelWidth = Object(s.ensureNotNull)(this._currencyLabel) + .width()), r = this._currencyLabelWidth); + const n = t || 34; + let o = Math.max(r, Math.ceil(i.borderSize + i.offsetSize + i.paddingInner + i + .paddingOuter + n + 4)); + return o += o % 2, o + } + backLabels(e) { + const t = [], + i = this._grouppedSources(), + s = s => { + for (const r of s) { + if (!e && i.topLevelSources.has(r)) continue; + const s = r.priceAxisViews(this._pane.state(), this.priceScale()); + if (s) + for (const e of s) t.push(e) + } + }; + return s(i.sources), s(this._pane.state().customSources()), t + } + getImage() { + const e = this._size, + t = Object(a.createDisconnectedCanvas)(document, e); + if (Object(a.getPrescaledContext2D)(t).drawImage(this._canvasBinding.canvas, 0, 0, e + .w, e.h), null !== this._currencyLabel && this._currencyLabel.isVisible()) { + const i = this._undoModel.model().isDark(); + this._currencyLabel.drawLabel(Object(a.getContext2D)(t), e.w, Object(a + .getCanvasDevicePixelRatio)(t), i) + } + return t + } + paint(e) { + if (this._isVisible && e !== o.InvalidationLevel.None) { + if (e > o.InvalidationLevel.Cursor) { + const e = Object(a.getContext2D)(this._canvasBinding.canvas); + this._alignLabels(), this._drawBackground(e, this._canvasBinding + .pixelRatio), this._drawBorder(e, this._canvasBinding.pixelRatio), + this + ._pane.hasState() && (this._updateCurrencyLabel(), this._drawTickMarks( + e, this._canvasBinding.pixelRatio), this._drawBackLabels(e, this + ._canvasBinding.pixelRatio)) + } + if (this._pane.hasState()) { + const e = Object(a.getContext2D)(this._topCanvasBinding.canvas), + t = this._topCanvasBinding.pixelRatio; + e.clearRect(0, 0, Math.ceil(this._size.w * t) + 1, Math.ceil(this._size.h * + t) + 1), this._drawCrossHairLabel(e, t) + } + } + } + priceScale() { + return Object(s.ensureNotNull)(this._priceScale) + } + setPriceScale(e) { + this._priceScale !== e && (null !== this._priceScale && (this._priceScale + .onMarksChanged().unsubscribe(this, this + .onOptimalWidthNeedToBeRecalculated), this._priceScale.modeChanged() + .unsubscribeAll(this)), this._priceScale = e, null !== e && (e + .onMarksChanged().subscribe(this, this + .onOptimalWidthNeedToBeRecalculated), e.modeChanged().subscribe( + this, () => this.onOptimalWidthNeedToBeRecalculated(!0)))) + } + isVisible() { + return this._isVisible + } + setVisible(e) { + (e = !!e) !== this._isVisible && (this._cell.style.display = e ? "table-cell" : + "none", this._isVisible = e) + } + destroy() { + null !== this._currencyMenu && (this._currencyMenu.close(), this._currencyMenu = + null), null !== this._unitMenu && (this._unitMenu.close(), this._unitMenu = + null), this._topCanvasBinding.unsubscribeCanvasConfigured(this + ._topCanvasConfiguredHandler), this._topCanvasBinding.destroy(), this + ._canvasBinding.unsubscribeCanvasConfigured(this._canvasConfiguredHandler), this + ._canvasBinding.destroy(), null !== this._priceScale && (this._priceScale + .onMarksChanged().unsubscribe(this, this + .onOptimalWidthNeedToBeRecalculated), this._priceScale.modeChanged() + .unsubscribeAll(this)), this._priceScale = null, this._updateTimeout && ( + clearTimeout(this._updateTimeout), this._updateTimeout = null), this + ._properties.childs().fontSize.unsubscribe(this, this._onFontSizeChanged), this + ._destroyed = !0 + } + setHighlighted(e) { + this._highlighted = e + } + backgroundColor() { + return this._pane.state().model().backgroundColor().value() + } + backgroundTopColor() { + return this._pane.state().model().backgroundTopColor().value() + } + lineColor() { + return this._properties.childs().lineColor.value() + } + textColor() { + return this._properties.childs().textColor.value() + } + fontSize() { + return this._properties.childs().fontSize.value() + } + baseFont() { + return Object(u.makeFont)(this.fontSize(), p.CHART_FONT_FAMILY, "") + } + rendererOptions() { + let e = this._rendererOptionsProvider.options(); + return this._color === e.color && this._fontSize === e.fontSize || (this._color = e + .color), this._fontSize !== e.fontSize && (this._widthCache.reset(), this + ._fontSize = e.fontSize, this._currencyLabelWidth = null, this + ._currencyFontSize = 0, this._updateCurrencyLabelFont(), this + .onOptimalWidthNeedToBeRecalculated()), e + } + mouseEnterEvent(e) { + this._mouseEnterOrTouchStartEvent(e) + } + mouseMoveEvent(e) { + this._mouseOrTouchMoveEvent(e) + } + mouseDownEvent(e) { + this._mouseDownOrTouchStartEvent(e) + } + touchStartEvent(e) { + this._mouseOrTouchMoveEvent(e), this._mouseEnterOrTouchStartEvent(e), this + ._mouseDownOrTouchStartEvent(e) + } + pressedMouseMoveEvent(e) { + this._pressedMouseOrTouchMoveEvent(e) + } + touchMoveEvent(e) { + this._pressedMouseOrTouchMoveEvent(e) + } + mouseDownOutsideEvent() { + if (this._dragScaleActive) { + const e = this._pane.state(), + t = this.priceScale(); + this._mouseDown && (this._mouseDown = !1, this._undoModel.endScalePrice(e, t), + this.restoreDefaultCursor()), this._dragScaleActive = !1 + } + } + mouseUpEvent(e) { + this._mouseUpOrTouchEndEvent(e) + } + touchEndEvent(e) { + this._mouseLeaveOrTouchEndEvent(e), this._mouseUpOrTouchEndEvent(e) + } + mouseClickEvent(e) { + this._mouseClickOrTapEvent(e) + } + tapEvent(e) { + this._mouseClickOrTapEvent(e) + } + mouseLeaveEvent(e) { + this._mouseLeaveOrTouchEndEvent(e) + } + mouseDoubleClickEvent(e) { + this._mouseDoubleClickOrDoubleTapEvent(e) + } + doubleTapEvent(e) { + this._mouseDoubleClickOrDoubleTapEvent(e) + } + contextMenuEvent(e) { + this._contextMenuOrTouchContextMenuEvent(e) + } + touchContextMenuEvent(e) { + this._contextMenuOrTouchContextMenuEvent(e) + } + reset() { + const e = this._pane.state(), + t = this.priceScale(); + this._undoModel.resetPriceScale(e, t), this.onOptimalWidthNeedToBeRecalculated(!0) + } + sizeReady() { + return this.getWidth() >= this.optimalWidth() && null === this._updateTimeout + } + _grouppedSources() { + var e; + const t = this._pane, + i = t.state().model(), + s = this._sameSideSources().slice(), + r = t.state(), + n = this.priceScale(), + o = new Set, + a = null !== (e = i.lineBeingEdited()) && void 0 !== e ? e : i + .lineBeingCreated(); + a && o.add(a); + const l = i.customSourceBeingMoved(); + null !== l && o.add(l), i.sourcesBeingMoved().forEach(e => o.add(e)), i.selection() + .allSources().forEach(e => o.add(e)); + const c = i.hoveredSource(); + null !== c && o.add(c); + if (n === r.defaultPriceScale()) { + const e = this._pane.state().dataSources(); + for (const t of e) r.isOverlay(t) && s.push(t) + } + return { + sources: s, + topLevelSources: o + } + } + _isCurrencyLabelVisible() { + return null !== this._currencyLabel && this._currencyLabel.isVisible() + } + _updateCurrencyLabel() { + if (null !== this._currencyLabel) { + if (this._options.currencyConversionEnabled) { + const e = this.priceScale().currency(this._undoModel.model() + .availableCurrencies()); + null !== e && this._properties.childs().showCurrency.value() ? (this + ._currencyLabel.showCurrency(), this._currencyLabel.updateColors( + this.backgroundTopColor(), this.textColor()), this + ._currencyLabel.setCurrencyInfo(e) && (this._currencyLabelWidth = + null, this.onOptimalWidthNeedToBeRecalculated())) : this + ._currencyLabel.hideCurrency() + } + if (this._options.unitConversionEnabled) { + const e = this.priceScale().unit(this._undoModel.model().availableUnits()); + null !== e && this._properties.childs().showUnit.value() ? (this + ._currencyLabel.showUnit(), this._currencyLabel.updateColors(this + .backgroundTopColor(), this.textColor()), this._currencyLabel + .setUnitInfo(e) && (this._currencyLabelWidth = null, this + .onOptimalWidthNeedToBeRecalculated())) : this._currencyLabel + .hideUnit() + } + this._updateCurrencyLabelFont() + } + } + _updateCurrencyLabelFont() { + if (null === this._currencyLabel) return; + const e = this.fontSize(); + e !== this._currencyFontSize && (this._currencyLabel.setFontSize(e), this + ._currencyFontSize = e, this._currencyLabelWidth = null, this + .onOptimalWidthNeedToBeRecalculated()) + } + _alignLabels() { + let e = this._size.h / 2; + const t = [], + i = this.priceScale(), + s = i.orderedSources().slice(), + r = this._pane.state(), + n = this.rendererOptions(); + if (i === r.defaultPriceScale()) { + const e = r.priceDataSources(); + for (let t = 0; t < e.length; t++) r.isOverlay(e[t]) && s.push(e[t]) + } + const o = i.mainSource(); + for (const n of [s, r.customSources()]) + for (let s = 0; s < n.length; ++s) { + const a = n[s], + l = a.priceAxisViews(r, i); + if (l) { + const i = l.filter(e => !e.ignoreAlignment() && e.isVisible()); + if (!i.length) continue; + t.push(...i), o === a && (e = i[0].floatCoordinate()) + } + } + const a = t.filter(t => t.floatCoordinate() <= e), + l = t.filter(t => t.floatCoordinate() > e); + a.sort((e, t) => t.floatCoordinate() - e.floatCoordinate()), a.length > 0 && l + .length > 0 && l.push(a[0]), l.sort((e, t) => e.floatCoordinate() - t + .floatCoordinate()); + for (const e of t) e.setFixedCoordinate(e.coordinate()); + if (i.properties().childs().alignLabels.value()) { + for (let e = 1; e < a.length; e++) { + const t = a[e], + i = a[e - 1], + s = t.height(n), + r = t.coordinate(), + o = i.getFixedCoordinate(); + r > o - s && t.setFixedCoordinate(o - s) + } + for (let e = 1; e < l.length; e++) { + const t = l[e], + i = l[e - 1], + s = i.height(n), + r = t.coordinate(), + o = i.getFixedCoordinate(); + r < o + s && t.setFixedCoordinate(o + s) + } + } + } + _drawTickMarks(e, t) { + const i = this.priceScale().marks(); + e.save(), Object(c.setFont)(e, this.baseFont()); + const r = this.rendererOptions(), + n = this._isLeft ? Math.floor((this._size.w - r.offsetSize) * t) : 0, + o = this._isLeft ? Math.round(n - r.paddingInner * t) : Math.round(n + (r + .offsetSize + r.paddingInner) * t), + l = this.fontSize(), + h = this._isCurrencyLabelVisible() ? Object(s.ensureNotNull)(this + ._currencyLabel).labelBottom() : 0, + u = i.map(t => { + if (this._options.croppedTickMarks) return { + visible: !0, + yCorrection: this._widthCache.yMidCorrection(e, t.label) + }; + const i = t.coord - l / 2, + s = t.coord + l / 2, + r = !(s > this._size.h || i < h); + return { + visible: !(s > this._size.h || i < h), + yCorrection: r ? this._widthCache.yMidCorrection(e, t.label) : 0 + } + }); + e.fillStyle = this.textColor(), e.textAlign = this._isLeft ? "right" : "left", e + .textBaseline = "middle", Object(a.drawScaled)(e, t, () => { + for (let s = i.length; s--;) { + if (!u[s].visible) continue; + const r = i[s]; + e.fillText(r.label, o / t, r.coord + u[s].yCorrection) + } + }), e.restore() + } + _hasAlertLabel() { + return !1 + } + _showCurrenciesContextMenu() { + if (null !== this._currencyMenu && this._currencyMenu.isOpened()) return void this + ._currencyMenu.close(); + Object(d.trackEvent)("GUI", "Currency conversion"); + S(Object(r.t)("Currencies"), () => async function(e, t, s) { + return (await Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i + .e(6), i.e(8), i.e(9), i.e(13), i.e(19), i.e(29), i + .e(66), i.e(83), i.e(0), i.e(2), i.e(5), i.e(18), i + .e("currency-label-menu") + ]).then(i.bind(null, "aWqZ"))).currencyActions(e, t, s) + }(this._undoModel, Object(s.ensureNotNull)(this._currencyLabel) + .currencyInfo(), this.priceScale()), Object(s.ensureNotNull)(this + ._currencyLabel).currencyLabelElement()).then(e => { + this._destroyed ? e.close() : this._currencyMenu = e + }) + } + _showUnitsContextMenu() { + if (null !== this._unitMenu && this._unitMenu.isOpened()) return void this._unitMenu + .close(); + Object(d.trackEvent)("GUI", "Unit conversion"); + S(Object(r.t)("Units"), () => async function(e, t, s) { + return (await Promise.all([i.e("react"), i.e(1), i.e(3), i.e(4), i + .e(6), i.e(8), i.e(9), i.e(13), i.e(19), i.e(29), i + .e(66), i.e(83), i.e(0), i.e(2), i.e(5), i.e(18), i + .e("currency-label-menu") + ]).then(i.bind(null, "hpdS"))).unitActions(e, t, s) + }(this._undoModel, Object(s.ensureNotNull)(this._currencyLabel) + .unitInfo(), this.priceScale()), Object(s.ensureNotNull)(this + ._currencyLabel).unitLabelElement()).then(e => { + this._destroyed ? e.close() : this._unitMenu = e + }) + } + _onFontSizeChanged() { + this._currencyLabelWidth = null, this._currencyFontSize = 0, this + ._updateCurrencyLabelFont(), this.onOptimalWidthNeedToBeRecalculated() + } + _mouseOrTouchMoveEvent(e) { + if (!this._priceScale) return; + this.dataSourceAtPoint(e.localX, e.localY) ? this._setCursorClassName("pointer") : + this._setResizeCursor() + } + _mouseDownOrTouchStartEvent(e) { + this._zoomAvailable() && this._options.pressedMouseMoveScale && (this._mouseDown = ! + 0, + this._undoModel.startScalePrice(this._pane.state(), this.priceScale(), e + .localY), this._dragScaleActive = !0) + } + _mouseEnterOrTouchStartEvent(e) { + this._setResizeCursor() + } + _pressedMouseOrTouchMoveEvent(e) { + if (this._dragScaleActive) { + const t = this.priceScale(); + this._undoModel.scalePriceTo(this._pane.state(), t, e.localY) + } + } + _mouseUpOrTouchEndEvent(e) { + if (this._dragScaleActive) { + const e = this.priceScale(); + this._mouseDown = !1, this._undoModel.endScalePrice(this._pane.state(), e), this + .restoreDefaultCursor(), this._dragScaleActive = !1 + } + } + _mouseClickOrTapEvent(e) { + const t = this.dataSourceAtPoint(e.localX, e.localY); + t && this._undoModel.selectionMacro(e => { + e.selection().isSelected(t) || (e.clearSelection(), e + .addSourceToSelection(t)) + }) + } + _mouseLeaveOrTouchEndEvent(e) { + this._setCursorClassName("") + } + _mouseDoubleClickOrDoubleTapEvent(e) { + const t = this.dataSourceAtPoint(e.localX, e.localY); + t ? this._pane.processDoubleClickOnSource(t) : (this.reset(), Object(d.trackEvent)( + "GUI", "Double click price scale")) + } + _contextMenuOrTouchContextMenuEvent(e) { + if (this._options.contextMenuEnabled) { + const t = this.dataSourceAtPoint(e.localX, e.localY); + if (null !== t && this._options.contextMenu.source) { + return void this._undoModel.model().selectionMacro(i => { + i.selection().isSelected(t) || (i.clearSelection(), i + .addSourceToSelection(t)), this._pane + .showContextMenuForSelection(e) + }) + } + this._options.contextMenu.general && y.ContextMenuManager.createMenu(this + .getContextMenuActions(), { + statName: "PriceScaleContextMenu" + }).then(t => t.show(e)) + } + } + _setResizeCursor() { + const e = this.priceScale(); + e.isPercentage() || e.isIndexedTo100() ? this._setCursorClassName("") : this + ._zoomAvailable() && (this._options.pressedMouseMoveScale || this._options + .mouseWheelScale) && this._setCursorClassName("ns-resize") + } + _setCursorClassName(e) { + let t = ""; + e && (t = "price-axis--cursor-" + e), this._currentCursorClassName !== t && (this + ._currentCursorClassName && this._cell.classList.remove(this + ._currentCursorClassName), t && this._cell.classList.add(t), this + ._currentCursorClassName = t) + } + _zoomAvailable() { + return !this.priceScale().isEmpty() && this._undoModel.model().zoomEnabled() + } + _onMousewheel(e) { + if (!this._zoomAvailable() || !this._options.mouseWheelScale) return; + const t = Object(s.ensureNotNull)(this._mouseWheelHelper).processWheel(e).deltaY; + if (0 === t) return; + e.cancelable && e.preventDefault(); + const i = this._undoModel, + r = this._pane.state(), + n = this.priceScale(), + o = this._cell.getBoundingClientRect(), + a = e.clientY - o.top, + l = a + 15 * t; + i.startScalePrice(r, this.priceScale(), a, !0), i.scalePriceTo(r, n, l), i + .endScalePrice(r, n), e.stopPropagation() + } + _drawCrossHairLabel(e, t) { + var i, s; + e.save(); + const r = this._pane.state(), + n = r.model(), + o = this.priceScale(), + a = [], + l = this.priceScale() === r.defaultPriceScale(), + c = null !== (i = n.lineBeingEdited()) && void 0 !== i ? i : n + .lineBeingCreated(); + if (c && (c.priceScale() === o || l && r.isOverlay(c))) { + const e = c.priceAxisViews(r, o); + e && e.length && a.push(e) + } + const h = n.customSourceBeingMoved(); + this._addViewsOrMaxMin(null === h ? [] : [h], a), this._addViewsOrMaxMin(n + .sourcesBeingMoved(), a), this._addViewsOrMaxMin(n.selection().allSources(), + a); + const u = n.hoveredSource(); + if (u) { + const e = r.customSources().includes(u) ? o : u.priceScale(); + if (!n.selection().isSelected(u) && (this._isFromSameSide(e) || l && r + .isOverlay(u))) { + const e = null === (s = n.hoveredSource()) || void 0 === s ? void 0 : s + .priceAxisViews(r, o); + e && e.length && a.push(e) + } + } + const d = n.crossHairSource().priceAxisViews(r, o); + d && d.length && a.push(d); + const p = this.rendererOptions(), + _ = this._isLeft ? "right" : "left"; + a.forEach(i => { + i.forEach(i => { + e.save(), i.renderer().draw(e, p, this._widthCache, this + ._size.w, _, t), e.restore() + }) + }), e.restore() + } + _drawBackground(e, t) { + const i = Math.ceil(this._size.w * t), + s = Math.ceil(this._size.h * t), + r = this.backgroundTopColor(), + o = this.backgroundColor(); + if (r === o ? Object(a.clearRect)(e, 0, 0, i + 1, s + 1, this.backgroundColor()) : + Object(m.clearRectWithGradient)(e, 0, 0, i + 1, s + 1, r, o), this._highlighted + ) { + e.globalAlpha = .5; + const t = n.themes[this._backgroundBasedTheme.value()].getThemedColor( + "color-price-axis-highlight"); + Object(a.fillRect)(e, 0, 0, i + 1, s + 1, t), e.globalAlpha = 1 + } + const l = this._pane.state().model(), + c = this.priceScale(), + h = l.selection().lineDataSources().filter(e => e.priceScale() === c).reduce((e, + t) => { + const i = t.priceAxisPoints(); + return 0 === i.length ? e : e.concat(i) + }, []); + h.length > 0 && this._hightlightBackground(e, h, this.priceScale().mainSource(), t); + const u = l.crossHairSource(); + u.startMeasurePoint() && this._hightlightBackground(e, u.measurePoints(), this + .priceScale().mainSource(), t) + } + _drawBorder(e, t) { + e.save(), e.fillStyle = this.lineColor(); + const i = Math.max(1, Math.floor(this.rendererOptions().borderSize * t)), + s = this._isLeft ? Math.floor(this._size.w * t) - i : 0; + e.fillRect(s, 0, i, Math.ceil(this._size.h * t) + 1), e.restore() + } + _drawBackLabels(e, t) { + e.save(); + const i = this.backLabels(), + s = this.rendererOptions(), + r = this._isLeft ? "right" : "left"; + for (const n of i) n.isAxisLabelVisible() && (e.save(), n.renderer().draw(e, s, this + ._widthCache, this._size.w, r, t), e.restore()); + e.restore() + } + _hightlightBackground(e, t, i, s) { + if (!i) return; + const r = i.firstValue(); + if (null === r) return; + let n = t[0].price, + o = t[0].price; + for (let e = 1; e < t.length; e++) n = Math.min(n, t[e].price), o = Math.max(o, t[e] + .price); + const l = this.priceScale(), + c = Math.floor(l.priceToCoordinate(n, r) * s), + h = Math.ceil(l.priceToCoordinate(o, r) * s); + Object(a.fillRect)(e, Math.floor(s), c, Math.ceil((this._size.w - 1) * s) + 1, h - + c, w.a) + } + _addViewsOrMaxMin(e, t) { + const i = this._pane.state(), + s = this.priceScale(); + if (s !== i.defaultPriceScale() && (e = e.filter(e => i.isOverlay(e) || this + ._isFromSameSide(e.priceScale()))), 0 !== e.length) + if (1 === e.length) { + const r = e[0].priceAxisViews(i, s); + r && r.length && t.push(r) + } else t.push(this._minMaxViews(e)) + } + _minMaxViews(e) { + const t = this._pane.state(), + i = this.priceScale(), + s = []; + let r = 1 / 0, + n = -1 / 0, + o = null, + a = null; + for (const s of e) { + const e = s.priceAxisViews(t, i); + if (e && e.length) + for (let t = 0; t < e.length; t++) { + const i = e[t], + s = i.coordinate(); + s >= n && (n = s, a = i), s <= r && (r = s, o = i) + } + } + return a && s.push(a), o && s.push(o), s + } + _isFromSameSide(e) { + return null !== e && (this._isLeft ? this._pane.state().leftPriceScales() : this + ._pane.state().rightPriceScales()).includes(e) + } + _sameSideSources() { + const e = this._pane.state().sourcesByGroup(); + return this._isLeft ? e.leftPriceScalesSources() : e.rightPriceScalesSources() + } + } + }, + "y/Xm": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "StudyOverlayBase", (function() { + return I + })); + var s = i("Eyy1"), + r = i("qFKp"), + n = i("txPx"), + o = i("GVHu"), + a = i("XPit"), + l = i("n5al"), + c = i("tc+8"), + h = i.n(c), + u = i("5fI3"), + d = i("Kxc7"), + p = i("wOSo"), + _ = i("WkOR"), + m = i("BZtw"), + f = i("pPtI"), + g = i("k9/m"), + b = i("ogJP"), + v = i("Qb4w"); + const S = r.CheckMobile.any() && !1, + y = d.enabled("uppercase_instrument_names"), + w = d.enabled("study_overlay_compare_legend_option"), + P = d.enabled("secondary_series_extend_time_scale"), + C = d.enabled("hide_unresolved_symbols_in_legend"), + x = Object(n.getLogger)("Chart.StudyOverlay"); + + function T(e, t) { + return null == e[t] + } + class I extends o.Study { + constructor(e, t, i, s) { + t.hasChild("currencyId") || t.addChild("currencyId", new h.a(null)), t.hasChild( + "unitId") || t.addChild("unitId", new h.a(null)), t.addExclusion( + "currencyId"), t.addExclusion("unitId"), super(e, t, i, s), this + ._seriesSource = null, this.m_data = new g.PlotList(Object(a + .seriesPlotFunctionMap)(), T), this._quotesProvider = new p.a, S && this + ._quotesProvider.quotesUpdate().subscribe(this, this._onQuotesUpdate); + const r = this.properties().childs(); + r.currencyId.subscribe(this, this._onCurrencyChanged), r.unitId.subscribe(this, + this._onUnitChanged), r.allowExtendTimeScale.subscribe(this, this + ._onAllowExtendTimeScaleChanged), this._onAllowExtendTimeScaleChanged(), + r.style.subscribe(this, this._updateBarFunction), r.lineStyle.childs() + .priceSource.subscribe(this, this._updateBarFunction), r.areaStyle.childs() + .priceSource.subscribe(this, this._updateBarFunction), r.baselineStyle + .childs().priceSource.subscribe(this, this._updateBarFunction), this + ._updateBarFunction() + } + destroy() { + super.destroy() + } + setSymbolCurrencyUnit(e, t, i) { + this._setSymbolCurrencyUnitInternal(e, t, i) + } + symbol() { + return this.properties().childs().inputs.childs().symbol.value() + } + setSymbol(e) { + this.setSymbolCurrencyUnit(e) + } + symbolInfo() { + if (!this._resolvedSymbols) return null; + const e = this._properties.inputs.symbol.value(); + if (!e) return null; + let t; + return t = this._resolvedSymbols[this._getSymbolForResolve(e)] || null, t + } + data() { + return null === this._seriesSource ? super.data() : this._seriesSource.data() + .bars() + } + symbolResolved() { + return this.symbolsResolved() + } + symbolSameAsCurrent(e) { + return Object(_.b)(e, this.symbol(), this.symbolInfo()) + } + priceSource() { + switch (this._properties.style.value()) { + case 2: + return this._properties.lineStyle.priceSource.value(); + case 3: + return this._properties.areaStyle.priceSource.value(); + case 10: + return this._properties.baselineStyle.priceSource.value() + } + return null + } + barFunction() { + return this._barFunction + } + quotes() { + return this._quotesProvider.quotes() + } + currency() { + return this._properties.currencyId.value() || null + } + setCurrency(e) { + this.setSymbolCurrencyUnit(void 0, e) + } + isConvertedToOtherCurrency() { + return Object(l.isConvertedToOtherCurrency)(this.symbolInfo()) + } + unit() { + return this._properties.unitId.value() || null + } + setUnit(e) { + this._properties.unitId.setValue(e) + } + isConvertedToOtherUnit() { + return Object(l.isConvertedToOtherUnit)(this.symbolInfo()) + } + style() { + return this.properties().childs().style.value() + } + symbolSource() { + return this + } + state(e, t) { + const i = super.state(e, t); + return e && (Object(s.ensureDefined)(i.data).symbols = { + ___snapshot: this.symbolInfo() || void 0 + }), i + } + symbolTitle(e, t) { + return this.title(!0, {}, !1, e) + } + title(e, t, i, s) { + const r = this._titleInParts(e, t, i, s).join(", "); + return y ? r.toUpperCase() : r + } + titleInParts(e, t, i, s) { + const r = this._titleInParts(e, t, i, s).join(", "); + return [y ? r.toUpperCase() : r] + } + isStarted() { + return null === this._seriesSource ? super.isStarted() : this._seriesSource + .isStarted() + } + sourceId() { + return null === this._seriesSource ? super.sourceId() : Object(s.ensureNotNull)( + this._seriesSource.instanceId()) + } + moveData(e) { + null === this._seriesSource ? super.moveData(e) : this._seriesSource.moveData(e) + } + firstValue() { + const e = this._model.timeScale().visibleBarsStrictRange(); + if (null === e) return null; + const t = e.firstBar(); + if (0 === this.data().size()) return this._ownFirstValue; + const i = this.data().search(t, g.PlotRowSearchMode.NearestRight, 1); + return this._ownFirstValue = null !== i ? this._barFunction(i.value) : null, + this._ownFirstValue + } + lastValueData(e, t, i) { + const s = { + noData: !0 + }, + r = this.priceScale(); + if (this._model.timeScale().isEmpty() || null === r || r.isEmpty() || this + .data().isEmpty()) return s; + const n = this._model.timeScale().visibleBarsStrictRange(); + if (null === n) return s; + const o = this.properties().childs(); + if (!o.visible.value()) return s; + const a = this.nearestIndex(n.lastBar(), g.PlotRowSearchMode.NearestLeft, 1); + if (void 0 === a) return s; + const l = this.firstValue(); + if (null === l) return s; + const c = this._lastNonEmptyPlotRow(4), + h = null !== c && n.contains(c.index), + u = null !== c ? c.value : null, + d = t || h ? u : this.data().valueAt(a); + if (null === d) return s; + const p = this._barFunction(d); + if (!Object(b.isNumber)(p)) return s; + const _ = r.priceToCoordinate(p, l); + let m; + switch (o.style.value()) { + case 0: + m = d[1] <= d[4] ? o.barStyle.childs().upColor.value() : o.barStyle + .childs().downColor.value(); + break; + case 1: + case 9: + m = d[1] <= d[4] ? o.candleStyle.childs().upColor.value() : o + .candleStyle.childs().downColor.value(); + break; + case 2: + m = o.lineStyle.childs().color.value(); + break; + case 3: + m = o.areaStyle.childs().color1.value(); + break; + case 10: { + const e = o.baselineStyle.childs(); + m = _ < Math.round(r.height() * (Math.abs(100 - e.baseLevelPercentage + .value()) / 100)) ? e.topLineColor.value() : e.bottomLineColor + .value(); + break + } + default: + throw new Error("Not supported overlay style") + } + const f = { + noData: !1, + text: r.formatPrice(p, l), + formattedPriceAbsolute: r.formatPriceAbsolute(p), + formattedPricePercentage: r.formatPricePercentage(p, l, !0), + floatCoordinate: _, + coordinate: _, + color: m + }; + return i && (f.price = p), f + } + priceRange(e, t) { + if (!Object(b.isInteger)(e)) return x.logDebug( + "priceRange: incorrect startBar"), null; + if (!Object(b.isInteger)(t)) return x.logDebug("priceRange: incorrect endBar"), + null; + if (0 === this.data().size()) return null; + const i = this.priceSource(); + let s; + s = null !== i ? this.data().minMaxOnRangeCached(e, t, [{ + name: i, + offset: 0 + }]) : this.data().minMaxOnRangeCached(e, t, [{ + name: "low", + offset: 0 + }, { + name: "high", + offset: 0 + }]); + const r = null !== s ? new v.PriceRange(s.min, s.max) : null; + return this._postProcessPriceRange(r) + } + bars() { + return this.data() + } + open(e) { + return Object(s.ensureNotNull)(this.bars().valueAt(e))[1] + } + high(e) { + return Object(s.ensureNotNull)(this.bars().valueAt(e))[2] + } + low(e) { + return Object(s.ensureNotNull)(this.bars().valueAt(e))[3] + } + close(e) { + return Object(s.ensureNotNull)(this.bars().valueAt(e))[4] + } + hl2(e) { + return (this.high(e) + this.low(e)) / 2 + } + hlc3(e) { + return (this.high(e) + this.low(e) + this.close(e)) / 3 + } + ohlc4(e) { + return (this.open(e) + this.high(e) + this.low(e) + this.close(e)) / 4 + } + _onCurrencyChanged() { + this.isStarted() && this._tryChangeInputs(), this._currencyChanged.fire() + } + _onUnitChanged() { + this.isStarted() && this._tryChangeInputs(), this._unitChanged.fire() + } + _getSymbolObject(e) { + const t = super._getSymbolObject(e), + i = this.currency(); + null !== i && (t["currency-id"] = i); + const s = this.unit(); + return null !== s && (t["unit-id"] = s), t + } + _getSymbolForApi(e) { + return Object(l.symbolForApi)(this._resolvedSymbolsByInput[e] || null, e) + } + _onSymbolResolved(e, t, i) { + super._onSymbolResolved(e, t, i), this._recreatePriceFormattingDependencies(); + const s = t === this.symbol() ? Object(l.extractSymbolNameFromSymbolInfo)(i, + this.symbol()) : null, + r = Object(l.symbolCurrency)(i), + n = Object(l.symbolUnit)(i); + this._setSymbolCurrencyUnitInternal(s || void 0, r, n, i), this.model() + .realignLineTools(), S && this._setQuotesSymbol(this._getSymbolForApi(this + .symbol())) + } + _changeInputsImpl(e, t) { + super._changeInputsImpl(e, t), e.symbol !== t.symbol && this._model + .realignLineTools() + } + _setQuotesSymbol(e) { + const t = this.symbolInfo(), + i = Object(l.extractSymbolNameFromSymbolInfo)(t, e); + this._quotesProvider.setQuotesSessionSymbol(i) + } + _createStudyOnServer() { + null === this._seriesSource ? super._createStudyOnServer() : this + ._modifyStudyOnServer(Object(s.ensureDefined)(this._inputs)), this._model + .realignLineTools() + } + _modifyStudyOnServer(e) { + null === this._seriesSource ? super._modifyStudyOnServer(e) : (this + ._seriesSource.modifySeries(Object(u.decodeExtendedSymbol)(e.symbol), + Object(f.getServerInterval)(this._series.properties().interval + .value())), this._seriesSource.isStarted() || this._seriesSource + .start()) + } + _stopStudyOnServer() { + null === this._seriesSource ? super._stopStudyOnServer() : this._seriesSource + .stop() + } + _titleInParts(e, t, i, s) { + const r = this.properties().childs().inputs.childs().symbol.value(), + n = this.symbolInfo(); + let o; + if (n) { + if (o = n.name, w) { + const e = this._model.mainSeries().properties().statusViewStyle + .symbolTextSource.value(); + "description" === e ? o = n.description : "ticker-and-description" === + e && (o = `${n.name}, ${n.description}`) + } + if (!s && n.exchange && 0 !== n.exchange.length) return [o, [n.exchange]] + } else o = C ? "" : r; + return [o] + } + _onAllowExtendTimeScaleChanged() { + const e = this.isStarted(); + if (e && this.stop(!0), P && this.properties().childs().allowExtendTimeScale + .value()) { + this._seriesSource = new m.a(this._model.chartApi(), "st_o_"); + const e = this._seriesSource.dataEvents(); + e.seriesError().subscribe(this, e => { + this._onStudyError(this._convertSeriesErrorToStudy(e)) + }), e.loading().subscribe(this, this._onStudyLoading), e.completed() + .subscribe(this, (e, t) => { + this._onStudyCompleted(t) + }), e.dataUpdated().subscribe(this, () => { + this._studyModified = !1; + const e = this._model.paneForSource(this); + this._model.recalculatePane(e), this._updateSources(), this + .priceRangeReady() || this._enablePriceRangeReady() + }) + } else { + if (null !== this._seriesSource) { + const e = this._seriesSource.dataEvents(); + e.seriesError().unsubscribeAll(this), e.loading().unsubscribeAll(this), + e.completed().unsubscribeAll(this), e.dataUpdated().unsubscribeAll( + this), this._seriesSource.destroy() + } + this._seriesSource = null + } + e && this.start(!0) + } + _convertSeriesErrorToStudy(e) { + return { + error: e.error, + ctx: e.ctx, + solution_id: e.solution_id + } + } + _setSymbolCurrencyUnitInternal(e, t, i, s) { + const r = this.properties().childs(), + n = r.inputs.childs().symbol.value(), + o = r.currencyId.value(), + a = r.unitId.value(); + if (void 0 !== e && e !== n && r.inputs.childs().symbol.setValueSilently(e), + void 0 !== t && t !== o && r.currencyId.setValueSilently(t), void 0 !== i && + i !== a && r.unitId.setValueSilently(i), s) this._resolvedSymbolsByInput[ + this.symbol()] = s, this._resolvedSymbols[this._getSymbolForResolve(this + .symbol())] = s; + else { + const e = this.symbolInfo(); + null !== e && (r.currencyId.setValueSilently(Object(l.symbolCurrency)(e)), r + .unitId.setValueSilently(Object(l.symbolUnit)(e))) + } + r.inputs.childs().symbol.value() !== n && r.inputs.childs().symbol.listeners() + .fire(r.inputs.childs().symbol), r.currencyId.value() !== o && r.currencyId + .listeners().fire(r.currencyId), r.unitId.value() !== a && r.unitId + .listeners().fire(r.unitId) + } + _updateBarFunction() { + var e; + const t = null !== (e = this.priceSource()) && void 0 !== e ? e : "close"; + this._barFunction = Object(a.barFunction)(t) + } + } + }, + yMne: function(e, t, i) { + "use strict"; + i.d(t, "b", (function() { + return r + })), i.d(t, "a", (function() { + return n + })); + var s = i("J2xC"); + const r = parseInt(s["css-value-header-toolbar-height"]), + n = 3 + }, + yUly: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX"), + o = n.LineToolWidthsProperty, + a = n.LineToolColorsProperty; + class l extends s { + constructor(e, t) { + super(e, t || l.createProperties()), this.version = l.version, i.e("lt-pane-views") + .then(i.t.bind(null, "SvjA", 7)).then(({ + TrendBasedFibTimePaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + levelsCount() { + return l.LevelsCount + } + pointsCount() { + return 3 + } + name() { + return "Trend-Based Fib Time" + } + migrateVersion(e, t, i) {} + processErase(e, t) { + var i = "level" + t, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "u52p"))) + .TrendBasedFibTimeDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetooltrendbasedfibtime", e, !1, { + range: [1, 11] + }); + return l._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + for (var t = [e.child("trendline").child("linewidth")], i = [e.child("trendline") + .child("color") + ], r = 1; r <= l.LevelsCount; r++) t.push(e.child("level" + r).child( + "linewidth")), i.push(e.child("level" + r).child("color")); + e.addChild("linesColors", new a(i)), e.addChild("linesWidths", new o(t)) + } + } + l.LevelsCount = 11, l.version = 1, t.LineToolTrendBasedFibTime = l + }, + yfAl: function(e, t, i) { + "use strict"; + i.r(t); + var s = i("aO4+"), + r = i("Eyy1"), + n = i("txPx"), + o = i("aIyQ"), + a = i.n(o), + l = i("e3/o"), + c = i("GxN8"), + h = i("7ktv"), + u = i("MWAT"), + d = i("CW80"), + p = i("s1Gx"); + const _ = new Map([ + ["trading", e => Object(d.isTrading)(e)], + ["drawing", e => Object(d.isLineTool)(e) && !Object(d.isTrading)(e) && !e + .isPhantom() + ], + ["drawingsForAllSymbols", e => Object(d.isLineTool)(e) && !Object(d.isTrading)(e) && + !e.isPhantom() + ], + ["phantom", e => Object(d.isLineTool)(e) && e.isPhantom()], + ["restRowSources", e => !Object(d.isLineTool)(e) && !Object(d.isTrading)(e)], + ["leftPriceScale", (e, t) => "left" === f(e, t)], + ["rightPriceScale", (e, t) => "right" === f(e, t)], + ["overlayPriceScale", (e, t) => "overlay" === f(e, t)] + ]), + m = new Map([ + ["trading", "visibleSorted"], + ["drawing", "visibleSorted"], + ["drawingsForAllSymbols", "allSorted"], + ["phantom", "visibleSorted"], + ["restRowSources", "visibleSorted"], + ["leftPriceScale", "visibleSorted"], + ["rightPriceScale", "visibleSorted"], + ["overlayPriceScale", "visibleSorted"] + ]); + + function f(e, t) { + const i = e.priceScale(); + return null === i ? "overlay" : t.priceScalePosition(i) + } + class g { + constructor(e) { + this._groupedSources = new Map, this._sources = null, this._pane = e + } + clear() { + this._groupedSources.clear(), this._sources = null + } + destroy() { + this.clear() + } + all() { + return this._groupedSources.has("visibleSorted") || this._sortSources(), Object(r + .ensureDefined)(this._groupedSources.get("visibleSorted")) + } + allIncludingHidden() { + return this._groupedSources.has("allSorted") || this._sortSources(), Object(r + .ensureDefined)(this._groupedSources.get("allSorted")) + } + allExceptSpecialSources() { + if (!this._groupedSources.has("exceptSpecial")) { + const e = this.allIncludingHidden().filter(e => !e.isSpeciallyZOrderedSource()); + this._groupedSources.set("exceptSpecial", e) + } + return Object(r.ensureDefined)(this._groupedSources.get("exceptSpecial")) + } + tradingSources() { + return this._getSourcesByGroupType("trading") + } + lineSources() { + return this._getSourcesByGroupType("drawing") + } + lineSourcesForAllSymbols() { + return this._getSourcesByGroupType("drawingsForAllSymbols") + } + phantomSources() { + return this._getSourcesByGroupType("phantom") + } + allExceptLineAndTradingSources() { + return this._getSourcesByGroupType("restRowSources") + } + hitTestSources() { + if (!this._groupedSources.has("hitTest")) { + const e = this.allExceptLineAndTradingSources().concat(this.lineSources()); + this._groupedSources.set("hitTest", e) + } + return Object(r.ensureDefined)(this._groupedSources.get("hitTest")) + } + generalSources() { + if (!this._groupedSources.has("general")) { + const e = this.allExceptLineAndTradingSources().concat(this.lineSources()); + this._groupedSources.set("general", Object(p.sortSources)(e)) + } + return Object(r.ensureDefined)(this._groupedSources.get("general")) + } + leftPriceScalesSources() { + return this._getSourcesByGroupType("leftPriceScale") + } + rightPriceScalesSources() { + return this._getSourcesByGroupType("rightPriceScale") + } + overlayPriceScaleSources() { + return this._getSourcesByGroupType("overlayPriceScale") + } + _getSourcesByGroupType(e) { + const t = Object(r.ensureDefined)(m.get(e)); + return this._groupedSources.has(t) ? this._groupedSources.has(e) || this + ._groupSources(e) : (this._sortSources(), this._groupSources(e)), Object(r + .ensureDefined)(this._groupedSources.get(e)) + } + _sortSources() { + null === this._sources && (this._sources = this._pane.dataSources()); + const e = Object(p.sortSources)(this._sources), + t = e.filter(e => !Object(d.isLineTool)(e) || e.isActualSymbol() && e + .isActualCurrency() && e.isActualUnit()); + this._groupedSources.set("allSorted", e), this._groupedSources.set("visibleSorted", + t) + } + _groupSources(e) { + const t = Object(r.ensureDefined)(m.get(e)), + i = _.get(e); + if (void 0 !== i) { + const s = Object(r.ensureDefined)(this._groupedSources.get(t)).filter(e => i(e, + this._pane)); + this._groupedSources.set(e, s) + } + } + } + var b = i("1Wlv"), + v = i("FaJS"), + S = i("Qb4w"), + y = i("3ClC"), + w = i("/tGj"), + P = i("2jby"); + i.d(t, "PaneBase", (function() { + return T + })); + const C = Object(n.getLogger)("Chart.Pane"); + + function x(e, t, i) { + e.setMargins({ + top: t, + bottom: i + }) + } + class T { + constructor(e, t, i, s) { + this.m_dataSources = [], this._sourceWatchedValuesSubscriptions = new Map, this + .m_mainDataSource = null, this._cachedOrderedSources = new g(this), this + ._sourcesById = new Map, this._dataSourcesCollectionChanged = new a.a, this + ._dataSourceSymbolResolved = new a.a, this._sourcePropertiesChanged = new a.a, + this._sourcesZOrderChanged = new a.a, this._tagsChanged = new a.a, this + ._stretchFactor = 1e3, this._isInInsertManyDataSourcesState = !1, this + ._lastLineDataSourceZOrder = null, this._rightPriceScales = [], this + ._leftPriceScales = [], this._lockedPriceScale = null, this + ._currentPriceScaleRatio = null, this._onPriceScalesChanged = new a.a, this + ._isRecalculatingScales = !1, this._priceDataSources = [], this + ._bulkActionsActive = 0, this + ._reorderZOrderOnAddingSourceToCollectionAllowed = !0, this + ._priceScaleSelectionStrategy = Object(u.createPriceScaleSelectionStrategy)(i + .properties().priceScaleSelectionStrategyName.value()), this._id = null != + s ? s : Object(l.randomHashN)(6) + } + id() { + return this._id + } + bulkActionMacro(e) { + this._bulkActionsActive += 1, e(), this._bulkActionsActive -= 1, 0 === this + ._bulkActionsActive && this._dataSourcesCollectionChanged.fire() + } + sourcesByGroup() { + return this._cachedOrderedSources + } + dataSourceForId(e) { + return this._sourcesById.get(e) || null + } + changeSourceId(e, t) { + Object(r.assert)(this.hasDataSource(e)), this._sourcesById.delete(e.id()), e.setId( + t), this._sourcesById.set(t, e) + } + movePriceScale(e, t, i) { + const s = this.priceScalePosition(e); + if (s !== t) this.removePriceScale(e), this._placePriceScale(e, t, i), e + .invalidateMargins(), this._invalidateSourcesCache(); + else if (void 0 !== i && "overlay" !== s) { + const t = "left" === s ? this._leftPriceScales : this._rightPriceScales, + r = t.indexOf(e); + t.splice(r, 1), t.splice(i, 0, e) + } + } + isEmpty() { + return null === this.m_mainDataSource + } + recalculatePriceScale(e) { + if (!e) return; + const t = e.sourcesForAutoscale(); + if ((e.isAutoScale() || e.priceRangeShouldBeRecalculatedOnce()) && t && t.length > + 0 && !this.timeScale().isEmpty()) { + const t = this.timeScale().visibleBarsStrictRange(); + e.recalculatePriceRange(t) + } + e.updateAllViews() + } + onSourceTagsChanged() { + this._tagsChanged.fire() + } + insertDataSource(e, t, i) { + e.setZorder(i), t || (t = this.findSuitableScale(e)), this._addSourceToCollections( + e); + let s = !1; + (e === this.model().mainSeries() || null === this.m_mainDataSource) && (this + .m_mainDataSource = e, s = !0), t.addDataSource(e, this + ._isInInsertManyDataSourcesState), e.setPriceScale(t), t + .invalidateMargins(), e.onTagsChanged && e.onTagsChanged().subscribe(this, this + .onSourceTagsChanged), + s && this._processMainSourceChange(), this._tagsChanged.fire(), e instanceof h + .PriceDataSource && this.recalculatePriceScale(t), this + ._invalidateSourcesCache() + } + addDataSource(e, t, i) { + let s = e.zorder(); + i || (Object(d.isLineTool)(e) && !e.isSpeciallyZOrderedSource() ? (s = null !== this + ._lastLineDataSourceZOrder ? this._lastLineDataSourceZOrder + 1 : this + .newLineToolZOrder(), this._isInInsertManyDataSourcesState && (this + ._lastLineDataSourceZOrder = s)) : Object(y.isStudy)(e) && !e + .isSpeciallyZOrderedSource() && (s = this.newStudyZOrder())), this + .insertDataSource(e, t, s) + } + removeDataSource(e, t, i) { + const s = this.m_dataSources.indexOf(e); + if (-1 === s) return void C.logDebug("removeDataSource: invalid data source"); + this._removeSourceFromCollections(s, !!i), e !== this.m_mainDataSource || t || (this + .m_mainDataSource = null); + const r = e.priceScale(); + this.removeSourceFromPriceScale(e), e.onTagsChanged && e.onTagsChanged() + .unsubscribe(this, this.onSourceTagsChanged), e instanceof h.PriceDataSource && + !t && this._processMainSourceChange(), this._tagsChanged.fire(), r && + e instanceof h.PriceDataSource && this.recalculatePriceScale(r), this + ._invalidateSourcesCache() + } + hasDataSource(e) { + return this._sourcesById.has(e.id()) + } + dataSources() { + return this.m_dataSources + } + priceDataSources() { + return this._priceDataSources + } + replaceSource(e, t, i) { + const s = this.m_mainDataSource === e, + r = e.zorder(); + this.insertDataSource(t, i, r), this.removeDataSource(e, s), this._sourcesById.set(t + .id(), t), s && (this.m_mainDataSource = t, this._processMainSourceChange()) + } + isOverlay(e) { + const t = e.priceScale(); + return null === t || "overlay" === this.priceScalePosition(t) + } + updateAllViews() { + for (const e of this.m_dataSources) e.updateAllViews(); + for (const e of this.model().customSources()) e.updateViewsForPane(this) + } + priceScalePosition(e) { + return this._leftPriceScales.includes(e) ? "left" : this._rightPriceScales.includes( + e) ? "right" : "overlay" + } + createPriceScaleAtPosition(e, t) { + const i = this.properties().childs().axisProperties.state(); + i.autoScale = !0; + const s = new b.PriceScale(this.model().properties().scalesProperties, i); + return s.setHeight(this.height()), x(s, this._defaultTopMargin(), this + ._defaultBottomMargin()), this._placePriceScale(s, e, t), s + } + removePriceScale(e) { + e.modeChanged().unsubscribeAll(this), e.priceRangeChanged().unsubscribeAll(this), e + .internalHeightChanged().unsubscribeAll(this), e === this._lockedPriceScale && ( + this._lockedPriceScale = null, this._currentPriceScaleRatio = null); + const t = this._leftPriceScales.indexOf(e); - 1 !== t && (this._leftPriceScales[t] + .invalidateMargins(), this._leftPriceScales.splice(t, 1)); + const i = this._rightPriceScales.indexOf(e); + if (-1 !== i && (this._rightPriceScales[i].invalidateMargins(), this + ._rightPriceScales.splice(i, 1)), null === e.mainSource()) { + const t = e.dataSources().length; + 0 !== t && C.logError( + "Invalid priceScale state: empty mainSource but non-empty data sources=" + + t) + } + this._onPriceScalesChanged.fire() + } + move(e, t, i) { + const s = e.priceScale(); + this.removeSourceFromPriceScale(e), t.addDataSource(e), e.setPriceScale(t), t + .invalidateMargins(), this._processMainSourceChange(), this + ._invalidateSourcesCache(), e.isIncludedInAutoScale() && (null !== s && this + .recalculatePriceScale(s), + this.recalculatePriceScale(t)), this._onPriceScalesChanged.fire() + } + setZOrders(e) { + e.forEach((e, t) => { + t.setZorder(e) + }), this._invalidateSourcesCache(), 0 === this._bulkActionsActive && this + ._dataSourcesCollectionChanged.fire(), this.model().lightUpdate() + } + isMainPane() { + const e = this.model().mainSeries(); + for (const t of this.m_dataSources) + if (t === e) return !0; + return !1 + } + isLast() { + const e = this.model().panes(); + return e[e.length - 1] === this + } + newStudyZOrder() { + return Object(P.newStudyZOrder)(this._priceDataSources) + } + newLineToolZOrder(e) { + return Object(P.newLineToolZOrder)(this.m_dataSources, e) + } + containsMainSeries() { + return this._sourcesById.has(this.model().mainSeries().id()) + } + applyPriceScaleRatio(e, t) { + var i; + null !== this._lockedPriceScale && this._lockedPriceScale !== e || this + ._currentPriceScaleRatio === t || !this.isMainPane() || null === this + ._lockedPriceScale && e !== (null === (i = this.mainDataSource()) || void 0 === + i ? void 0 : i.priceScale()) || (this._setNewPriceRangeByScaleRatio(e, t, + this._mainSourceVisiblePriceRange(e), !0, !0), null !== this + ._lockedPriceScale ? this._tryToApplyNewPriceScaleRatio() : e.isLog() || + this.model().mainSeriesScaleRatioPropertyOnChanged()) + } + sendToBack(e) { + const t = this.sourcesByGroup().allExceptSpecialSources(); + this._batchReorder(e, t[0], P.moveBeforeSource) + } + bringToFront(e) { + const t = this.sourcesByGroup().allExceptSpecialSources(); + this._batchReorder(e, t[t.length - 1], P.moveAfterSource) + } + sendBackward(e) { + const t = this.sourcesByGroup().allIncludingHidden(), + i = t.indexOf(e[0]); + if (0 === i) this.bringToFront(e); + else { + const s = t[i - 1]; + this.insertBefore(e, s) + } + } + bringForward(e) { + const t = this.sourcesByGroup().allExceptSpecialSources(), + i = t.indexOf(e[e.length - 1]); + if (i === t.length - 1) this.sendToBack(e); + else { + const s = t[i + 1]; + this.insertAfter(e, s) + } + } + insertAfter(e, t) { + this._batchReorder(e, t, P.moveAfterSource) + } + insertBefore(e, t) { + this._batchReorder(e, t, P.moveBeforeSource) + } + priceScaleSelectionStrategy() { + return this._priceScaleSelectionStrategy + } + findTargetPriceAxisViews(e, t, i, s) { + if (Object(c.a)(e) && this.model().paneForSource(e) !== this) return []; + const r = e.priceScale(); + if (t === r) return i; + if (null === r) return []; + if ("overlay" === this.priceScalePosition(r)) return t === this + .defaultPriceScale() ? i : []; + const n = this.priceScalePosition(t); + if (n !== this.priceScalePosition(r)) return []; + const o = "left" === n ? this.leftPriceScales() : this.rightPriceScales(); + return o.indexOf(t) < o.indexOf(r) ? s : [] + } + onPriceScalesChanged() { + return this._onPriceScalesChanged + } + setPaneSize(e) { + let t; + switch (e) { + case "large": + t = 1; + break; + case "medium": + t = .6; + break; + case "small": + t = .3; + break; + case "tiny": + t = .15; + break; + default: + throw new Error("Unknown size enum value: " + e) + } + this._stretchFactor = 1e3 * t + } + stretchFactor() { + return this._stretchFactor + } + setStretchFactor(e) { + this._stretchFactor = e + } + customSources(e) { + return this.model().customSources(e) + } + onTagsChanged() { + return this._tagsChanged + } + dataSourcesCollectionChanged() { + return this._dataSourcesCollectionChanged + } + symbolSourceResolved() { + return this._dataSourceSymbolResolved + } + sourcePropertiesChanged() { + return this._sourcePropertiesChanged + } + sourceZOrderChanged() { + return this._sourcesZOrderChanged + } + lineToolsForArea(e) { + const t = this.height(), + i = this.width(), + s = this.logicalRectToPixels(e); + return [...this.m_dataSources, ...this.model().multiPaneSources(this)].filter(d + .isLineTool).filter(e => (e.paneViews(this) || []).some(e => { + const r = e.renderer(t, i); + return r && r.doesIntersectWithBox && r.doesIntersectWithBox(s) + })) + } + logicalRectToPixels(e) { + const t = this.defaultPriceScale(), + i = this.timeScale(), + n = Object(r.ensureNotNull)(Object(r.ensureNotNull)(t.mainSource()) + .firstValue()), + o = t.priceToCoordinate(e.p1.price, n), + a = i.indexToCoordinate(e.p1.index), + l = t.priceToCoordinate(e.p2.price, n), + c = i.indexToCoordinate(e.p2.index), + h = new s.Point(Math.min(a, c), Math.min(o, l)), + u = new s.Point(Math.max(a, c), Math.max(o, l)); + return Object(s.box)(h, u) + } + clipboardLineToolOwnerSource(e) { + const t = this.dataSourceForId(e); + if (null !== t) { + const e = t.ownerSource(); + if (null !== e && null !== e.firstValue()) return e + } + const i = this.mainDataSource(); + if (null !== i && null !== i.firstValue()) return i; + for (const e of this.dataSources()) + if (e instanceof h.PriceDataSource && null !== e.firstValue()) return e; + return null + } + realignLineTools() { + let e = !1; + for (const t of this.m_dataSources) Object(d.isLineTool)(t) && (t + .calcIsActualSymbol(), t.updateAllViews(), e = !0); + return this._invalidateSourcesCache(), e + } + startScalePrice(e, t) { + e.startScale(t) + } + scalePriceTo(e, t) { + e.scaleTo(t), this.updateAllViews() + } + endScalePrice(e) { + e.endScale() + } + resetPriceScale(e) { + const t = this.timeScale().visibleBarsStrictRange(); + e.isLockScale() || e.setMode({ + autoScale: !0 + }), e.recalculatePriceRange(t), this.updateAllViews() + } + restorePriceScaleState(e, t) { + e.restoreState(t), this.updateAllViews() + } + beginInsertManyLineDataSources() { + this._isInInsertManyDataSourcesState = !0, this._lastLineDataSourceZOrder = null + } + endInsertManyLineDataSources() { + this._isInInsertManyDataSourcesState = !1, this._lastLineDataSourceZOrder = null + } + removeSourceFromPriceScale(e) { + const t = e.priceScale(); + if (null !== t) { + const i = t.dataSources(); + i.indexOf(e) >= 0 && t.removeDataSource(e), 0 === i.length && this + .removePriceScale(t) + } + } + _addSourceToCollections(e, t) { + this.m_dataSources.push(e), this._sourcesById.set(e.id(), e), this + ._invalidateSourcesCache(), t || 0 !== this._bulkActionsActive || this + ._dataSourcesCollectionChanged.fire(); + const i = () => { + this._sourcePropertiesChanged.fire(e) + }; + e.properties().subscribe(this, i), e.zOrderChanged().subscribe(this, t => this + ._sourcesZOrderChanged.fire(e, t)), Object(d.isLineTool)(e) && (e + .normalizedPointsChanged().subscribe(this, i), e.fixedPointsChanged() + .subscribe(this, i), e.hasAlert.subscribe(i), e.linkKey().subscribe(i), this + ._sourceWatchedValuesSubscriptions.set(e.id(), i)), e instanceof h + .PriceDataSource && (e.currencyChanged().subscribe(this, () => this + ._invalidateSourcesCache()), e.unitChanged().subscribe(this, () => this + ._invalidateSourcesCache()), this._priceDataSources.push(e), Object(w + .isSymbolSource)(e) && e.symbolResolved().subscribe(this, () => this + ._dataSourceSymbolResolved.fire(e))), e.isMultiPaneAvailable() && this + .model().addMultiPaneSource(e), + !e.isSpeciallyZOrderedSource() && this + ._reorderZOrderOnAddingSourceToCollectionAllowed && (Object(d.isLineTool)(e) && + Object(P.isReorderRequired)(null, e.zorder()) || Object(y.isStudy)(e) && + Object(P.isReorderRequired)(e.zorder(), null)) && (this + ._reorderZOrderOnAddingSourceToCollectionAllowed = Object(P + .reorderDataSourcesZOrder)(this.m_dataSources)) + } + _removeSourceFromCollections(e, t) { + const i = this.m_dataSources[e]; + i.properties().unsubscribeAll(this), i.zOrderChanged().unsubscribeAll(this), this + .m_dataSources.splice(e, 1), this._sourcesById.delete(i.id()); + const s = i.id(); + if (Object(d.isLineTool)(i) && (i.normalizedPointsChanged().unsubscribeAll(this), i + .fixedPointsChanged().unsubscribeAll(this), this + ._sourceWatchedValuesSubscriptions.has(s))) { + const e = this._sourceWatchedValuesSubscriptions.get(s); + i.hasAlert.unsubscribe(e), i.linkKey().unsubscribe(e) + } + if (this._invalidateSourcesCache(), i instanceof h.PriceDataSource) { + i.currencyChanged().unsubscribeAll(this), i.unitChanged().unsubscribeAll(this); + const e = this._priceDataSources.indexOf(i); + Object(r.assert)(-1 !== e), this._priceDataSources.splice(e, 1), Object(w + .isSymbolSource)(i) && i.symbolResolved().unsubscribeAll(this) + } + t || 0 !== this._bulkActionsActive || this._dataSourcesCollectionChanged.fire(), i + .isMultiPaneAvailable() && this.model().removeMultiPaneSource(i), this + ._reorderZOrderOnAddingSourceToCollectionAllowed = !0 + } + _recalculatePriceScaleByScaleRatio(e) { + this.isMainPane() && e === this._lockedPriceScale && (null !== this + ._currentPriceScaleRatio ? this._applyOldScaleRatioToPriceScale() : this + ._tryToApplyNewPriceScaleRatio()) + } + _defaultBottomMargin() { + return .01 * this.properties().childs().bottomMargin.value() + } + _defaultTopMargin() { + return .01 * this.properties().childs().topMargin.value() + } + _updateMargins() { + const e = this._defaultTopMargin(), + t = this._defaultBottomMargin(); + for (const i of this._leftPriceScales) x(i, e, t); + for (const i of this._rightPriceScales) x(i, e, t); + for (const i of this.m_dataSources) + if (this.isOverlay(i)) { + const s = i.priceScale(); + null !== s && (x(s, e, t), this.recalculatePriceScale(s)) + } for (const e of this._leftPriceScales) this.recalculatePriceScale(e); + for (const e of this._rightPriceScales) this.recalculatePriceScale(e); + this.updateAllViews() + } + _batchReorder(e, t, i) { + i(this.sourcesByGroup().allExceptSpecialSources(), e, t), this + ._invalidateSourcesCache(), this._dataSourcesCollectionChanged.fire(), this + .model().fullUpdate() + } + _placePriceScale(e, t, i) { + if ("overlay" === t) return void e.invalidateMargins(); + const s = "left" === t ? this._leftPriceScales : this._rightPriceScales, + n = void 0 === i ? s.length : i; + s.splice(n, 0, e), e.modeChanged().subscribe(this, this._onPriceScaleModeChanged + .bind(this, e)), e.internalHeightChanged().subscribe(this, this + ._recalculatePriceScaleByScaleRatio.bind(this, e)), e.priceRangeChanged() + .subscribe(this, this._recalculateTimeScaleByScaleRatio.bind(this, e)), e + .priceRangeChanged().subscribe(this, this._onPriceScaleSetMinMaxPriceRange.bind( + this, e)), e.isLockScale() && (Object(r.assert)(null === this + ._lockedPriceScale), this._lockedPriceScale = e, this + ._currentPriceScaleRatio = null), e.invalidateMargins(), this + ._onPriceScalesChanged.fire() + } + _onPriceScaleModeChanged(e, t, i) { + if (i.lockScale && (this._lockedPriceScale !== e && null !== this + ._lockedPriceScale && this._lockedPriceScale.setMode({ + lockScale: !1 + }), this._lockedPriceScale = e, this._currentPriceScaleRatio = Object(v + .scaleRatio)(this.timeScale(), e)), t.lockScale && !i.lockScale && (this + ._lockedPriceScale = null, this._currentPriceScaleRatio = null), t + .percentage === i.percentage && t.indexedTo100 === i.indexedTo100) return; + const s = this.timeScale().visibleBarsStrictRange(); + null !== s && (e.recalculatePriceRange(s), e.updateAllViews()) + } + _applyOldScaleRatioToPriceScale() { + this._isRecalculatingScales || null === this._currentPriceScaleRatio || null === + this._lockedPriceScale || (this._isRecalculatingScales = !0, this + ._setNewPriceRangeByScaleRatio(this._lockedPriceScale, this + ._currentPriceScaleRatio, this._mainSourceVisiblePriceRange(this + ._lockedPriceScale)), this._isRecalculatingScales = !1) + } + _setNewPriceRangeByScaleRatio(e, t, i, s, r) { + const n = Object(v.priceRangeByScaleRatio)(e, this.timeScale().barSpacing(), t); + e.setPriceRange(null !== n ? n : i, s, r) + } + _applyOldScaleRatioToTimeScale() { + this._isRecalculatingScales || null === this._currentPriceScaleRatio || (this + ._isRecalculatingScales = !0, this._setNewBarSpacingByScaleRatio(), this + ._isRecalculatingScales = !1) + } + _tryToApplyNewPriceScaleRatio() { + const e = Object(r.ensureNotNull)(this._lockedPriceScale), + t = Object(v.scaleRatio)(this.timeScale(), e); + this._currentPriceScaleRatio === t || e.isLog() || (this._currentPriceScaleRatio = + t, this.model().mainSeriesScaleRatioPropertyOnChanged()) + } + _recalculateTimeScaleByScaleRatio(e) { + e === this._lockedPriceScale && (null !== this._currentPriceScaleRatio ? this + ._applyOldScaleRatioToTimeScale() : this._tryToApplyNewPriceScaleRatio()) + } + _setNewBarSpacingByScaleRatio() { + const e = this.timeScale().getValidBarSpacing(Object(v.barSpacingByScaleRatio)( + Object(r.ensureNotNull)(this._lockedPriceScale), this + ._currentPriceScaleRatio)); + this.timeScale().isValidBarSpacing(e) && this.timeScale().setBarSpacing(e) + } + _mainSourceVisiblePriceRange(e) { + const t = this.timeScale().visibleBarsStrictRange(); + return null !== t ? Object(r.ensureNotNull)(Object(r.ensureNotNull)(e.mainSource()) + .priceRange(t.firstBar(), t.lastBar())) : new S.PriceRange(-.5, .5) + } + _setMinMaxPriceRange() { + const e = Object(r.ensureNotNull)(this._lockedPriceScale), + t = Object(v.priceRangeByScaleRatio)(e, this.timeScale().maxBarSpacing(), this + ._currentPriceScaleRatio), + i = Object(v.priceRangeByScaleRatio)(e, this.timeScale().minBarSpacing(), this + ._currentPriceScaleRatio); + null !== t && e.setMaxPriceRange(t), null !== i && e.setMinPriceRange(i) + } + _onPriceScaleSetMinMaxPriceRange(e) { + e === this._lockedPriceScale && this._setMinMaxPriceRange() + } + } + }, + yi8X: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "LineToolInfoLine", (function() { + return n + })); + var s = i("Ocx9"), + r = i("WPQD"); + class n extends r.LineToolTrendLine { + constructor(e, t) { + super(e, t || n.createProperties()) + } + pointsCount() { + return 2 + } + name() { + return "Info Line" + } + static createProperties(e) { + const t = new s.DefaultProperty("linetoolinfoline", e); + return n._configureProperties(t), t + } + static _configureProperties(e) { + r.LineToolTrendLine._configureProperties(e) + } + } + }, + "z+Sa": function(e, t, i) { + "use strict"; + i.r(t), + i.d(t, "SeriesHorizontalBaseLinePaneView", (function() { + return r + })); + var s = i("k4w6"); + class r extends s.a { + constructor(e) { + super(e) + } + _updateImpl() { + this._lineRendererData.visible = !1; + const e = this._series.priceScale().mode(); + if (!e.percentage && !e.indexedTo100) return; + const t = this._series.firstValue(); + null !== t && (this._lineRendererData.visible = !0, this._lineRendererData.y = + this._series.priceScale().priceToCoordinate(t, t), this + ._lineRendererData.color = this._series.properties().baseLineColor + .value()) + } + } + }, + "z+cS": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "VerticalLineRenderer", (function() { + return a + })); + var s = i("VdBB"), + r = i("jFln"), + n = i("gAom"), + o = i("Zp/P"); + class a { + constructor() { + this._data = null, this._hitTest = null + } + setData(e) { + this._data = e + } + setHitTest(e) { + this._hitTest = e + } + hitTest(e) { + if (null === this._data) return null; + const t = Object(o.interactionTolerance)().line, + i = this._hitTest || new s.HitTestResult(s.HitTestResult.MOVEPOINT), + r = Math.abs(e.x - this._data.x) <= t + this._data.linewidth / 2, + n = void 0 === this._data.top || this._data.top - e.y <= t, + a = void 0 === this._data.bottom || e.y - this._data.bottom <= t; + return r && n && a ? i : null + } + draw(e, t) { + if (null === this._data) return; + if (this._data.linewidth <= 0) return; + if (this._data.x < -this._data.linewidth / 2 || this._data.x > t.cssWidth + this + ._data.linewidth / 2) return; + const i = t.pixelRatio; + e.lineCap = "butt", e.strokeStyle = this._data.color, e.lineWidth = Math.max(1, Math + .floor(this._data.linewidth * i)), void 0 !== this._data.linestyle && + Object(r.setLineStyle)(e, this._data.linestyle); + const s = void 0 !== this._data.top ? Math.max(this._data.top, 0) : 0, + o = void 0 !== this._data.bottom ? Math.min(this._data.bottom, t.cssHeight) : t + .cssHeight, + a = Math.round(this._data.x * i), + l = Math.floor(s * i), + c = Math.ceil(o * i); + Object(n.drawVerticalLine)(e, a, l, c) + } + } + }, + "z61+": function(e, t, i) { + "use strict"; + var s = i("Eyy1"), + r = i("0YCj"), + n = i.n(r), + o = i("23IT"), + a = i("ogJP"), + l = i("txPx"); + const c = ["first_visible_bar_time", "last_visible_bar_time"]; + + function h(e) { + return !e.groupId && !e.isHidden && !c.includes(e.id) + } + var u = i("Ecpn"); + i.d(t, "a", (function() { + return p + })); + const d = Object(l.getLogger)("Platform.GUI.PropertyDialog.Indicators.MetaInfo"); + class p { + constructor(e) { + this._metaInfo = e + } + hasUserEditableInputs() { + return this._metaInfo.inputs.some(h) + } + getUserEditableInputs() { + return this._metaInfo.inputs.filter(h) + } + hasUserEditableProperties() { + return n.a.isScriptStrategy(this._metaInfo) + } + hasUserEditableStyles() { + const e = this._metaInfo; + return e.plots.length > 0 || void 0 !== e.bands || void 0 !== e.filledAreas || + Object(u.a)(e.shortId) || n.a.isScriptStrategy(this._metaInfo) || Object.values( + e.graphics).some(e => void 0 !== e) + } + getUserEditablePlots() { + const e = new Set, + t = this._metaInfo; + return t.plots.filter(i => { + if (Object(o.isColorerPlot)(i) || Object(o.isTextColorerPlot)(i) || + Object(o.isDataOffsetPlot)(i) || Object(o.isOhlcColorerPlot)(i) || + Object(o.isAlertConditionPlot)(i)) return !1; + if (Object(o.isOhlcPlot)(i)) { + const r = i.target; + if (e.has(r)) return !1; + e.add(r); + const n = Object(s.ensureDefined)(t.ohlcPlots); + return !Object(s.ensureDefined)(n[r]).isHidden + } { + const e = t.styles ? t.styles[i.id] : void 0; + return void 0 === e || !e.isHidden + } + }) + } + hasUserEditableOptions() { + return this.hasUserEditableInputs() || this.hasUserEditableProperties() || this + .hasUserEditableStyles() + } + getStrategyProperties() { + const e = this._metaInfo, + t = e.inputs.filter(m), + i = { + ..._ + }; + for (const s of t) { + const t = s.internalID; + i[t] = s, _.hasOwnProperty(t) || d.logWarn( + `Unknown strategy input internal id ${t} in ${e.fullId}`) + } + return Object(a.clone)(i) + } + } + const _ = { + currency: void 0, + backtest_fill_limits_assumption: void 0, + calc_on_every_tick: void 0, + calc_on_order_fills: void 0, + commission_value: void 0, + commission_type: void 0, + initial_capital: void 0, + pyramiding: void 0, + slippage: void 0, + default_qty_type: void 0, + default_qty_value: void 0, + margin_long: void 0, + margin_short: void 0 + }; + + function m(e) { + return "strategy_props" === e.groupId + } + }, + "z8/4": function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "OverlayLegendView", (function() { + return n + })); + var s = i("JjUe"), + r = i("qXYw"); + class n extends s.OverlayDataWindowView { + constructor(e, t) { + super(e, t), this._additional = null, this._showBarChange = t.properties() + .paneProperties.legendProperties.showBarChange, this._showSeriesOHLC = t + .properties().paneProperties.legendProperties.showSeriesOHLC, this + ._studyOverlay = e, this._showBarChange.subscribe(this, this.update), this + ._showSeriesOHLC.subscribe(this, this.update) + } + isValuesVisible() { + return this._showSeriesOHLC.value() || this._showBarChange.value() + } + additional() { + return this._additional + } + destroy() { + this._showBarChange.unsubscribeAll(this), this._showSeriesOHLC.unsubscribeAll( + this) + } + _updateImpl() { + super._updateImpl() + } + _createValuesProvider(e, t) { + return new r.OverlayLegendValuesProvider(e, t) + } + } + }, + zDbI: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "CHART_FONT_FAMILY", (function() { + return r + })); + var s = i("mNbo"); + const r = Object(s.isOnMobileAppPage)("old") ? "system-ui, -apple-system" : + "'Trebuchet MS', Roboto, Ubuntu, sans-serif" + }, + zL3Q: function(e, t, i) { + "use strict"; + i.d(t, "a", (function() { + return _ + })), i.d(t, "b", (function() { + return m + })); + var s = i("hY0g"), + r = i.n(s), + n = i("4o++"), + o = i("mMWL"), + a = i("CW80"), + l = i("m/3z"); + const c = new r.a(!1), + h = new r.a(n.MagnetMode.WeakMagnet), + u = Object(l.c)(), + d = Object(l.d)(); + + function p() { + const e = u.value(); + if (d.value() && (o.isToolEditingNow.value() || o.isToolCreatingNow.value())) return void c + .setValue(!1); + const t = o.tool.value(), + i = e && (Object(a.isLineToolName)(t) || o.isToolEditingNow.value() || Object(o + .toolIsMeasure)(t)), + s = Object(o.properties)().childs().magnet.value(); + h.setValue(!s && i ? n.MagnetMode.StrongMagnet : Object(o.properties)().childs().magnetMode + .value()), c.setValue(i ? !s : s) + } + + function _() { + return c + } + + function m() { + return h + } + Object(o.runOnDrawingStateReady)(() => { + Object(o.properties)().childs().magnet.subscribe(null, p), Object(o.properties)() + .childs().magnetMode.subscribe(null, p), u.subscribe(p), d.subscribe(p), o.tool + .subscribe(p), o.isToolEditingNow.subscribe(p), p() + }) + }, + zM7N: function(e, t, i) { + "use strict"; + i.d(t, "c", (function() { + return c + })), i.d(t, "b", (function() { + return h + })), i.d(t, "e", (function() { + return u + })), i.d(t, "d", (function() { + return d + })); + var s = i("YFKU"), + r = i("eJTA"), + n = i("/McG"), + o = i("8pII"), + a = i("FZIs"); + + function l() { + return { + [a.a.Light]: JSON.parse(JSON.stringify(n)), + [a.a.Dark]: JSON.parse(JSON.stringify(o)) + } + } + + function c() { + return [a.a.Light, a.a.Dark] + } + + function h(e) { + return l()[e] + } + + function u(e) { + return { + [a.a.Light]: s.t("Light", { + context: "colorThemeName" + }), + [a.a.Dark]: s.t("Dark", { + context: "colorThemeName" + }) + } [e] || e + } + + function d(e) { + const t = l(); + return c().some(i => p(t[i], e)) + } + + function p(e, t) { + let i = e.content === t.content; + return function(e = {}, t) { + try { + ! function e(t, i, s) { + for (const r in t) + if (t.hasOwnProperty(r)) { + const n = i.concat(r); + if ("object" == typeof t[r]) e(t[r], n, s); + else if (s(n, t[r])) throw new Error("exit") + } + }(e, [], t) + } catch (e) { + return + } + }(e.content, (e, s) => { + const n = function(e, t = {}) { + let i = t; + for (let t = 0; t < e.length; t++) { + if (!i || "object" != typeof i) return; + i = i[e[t]] + } + if ("string" == typeof i || "number" == typeof i) return i; + return + }(e, t.content); + return i = function(e, t) { + if ("string" == typeof e && "string" == typeof t) try { + return Object(r.areEqualRgb)(Object(r.parseRgb)(e), Object(r + .parseRgb)(t)) + } catch (i) { + return e === t + } + return e === t + }(s, n), !i + }), i + } + i.d(t, "a", (function() { + return a.a + })) + }, + zRdu: function(e, t, i) { + "use strict"; + var s; + i.d(t, "a", (function() { + return s + })), + function(e) { + e[e.Separator = 0] = "Separator", e[e.Action = 1] = "Action", e[e.ActionAsync = 2] = + "ActionAsync", e[e.Loader = 3] = "Loader" + }(s || (s = {})) + }, + zUrt: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "backend", (function() { + return s + })); + const s = i("Ery9") + }, + zXvd: function(e, t, i) { + "use strict"; + i.r(t), i.d(t, "NumericFormatter", (function() { + return n + })); + var s = i("kcTO"), + r = i("nc0P"); + class n { + constructor(e) { + this._precision = e + } + format(e) { + return (void 0 !== this._precision ? e.toFixed(this._precision) : n.formatNoE(e)) + .replace(".", s.formatterOptions.decimalSign) + } + parse(e) { + const t = e.replace(s.formatterOptions.decimalSign, "."); + let i = parseFloat(t); + return this._precision && (i = +i.toFixed(this._precision)), i + } + static formatNoE(e) { + if (!Number.isFinite(e)) return String(e); + const t = new r.Big(e); + return t.lt(1) ? t.toFixed() : t.toString() + } + } + }, + zZ5f: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("5rJj"), + n = i("j3hX").LineToolColorsProperty; + class o extends s { + constructor(e, t) { + super(e, t || o.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "xp9B", 7)).then(({ + FibSpeedResistanceFanPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + hLevelsCount() { + return o.HLevelsCount + } + vLevelsCount() { + return o.VLevelsCount + } + pointsCount() { + return 2 + } + name() { + return "Fib Speed Resistance Fan" + } + processErase(e, t) { + var i = "h" === t.type ? "hlevel" + t.index : "vlevel" + t.index, + s = this.properties()[i].visible; + e.setProperty(s, !1, "Erase level line") + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "2PB4"))) + .FibSpeedResistanceFanDefinitionsViewModel + } + _snapTo45DegreesAvailable() { + return !0 + } + static createProperties(e) { + void 0 !== e && void 0 === e.reverse && (e.reverse = !0); + var t = new r("linetoolfibspeedresistancefan", e, !1, { + range: [1, 7], + prefixes: ["h", "v"], + names: ["coeff", "color", "visible"] + }); + return o._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e); + var t = [e.child("grid").child("color")]; + for (let i = 1; i <= o.HLevelsCount; i++) t.push(e.child("hlevel" + i).child( + "color")); + for (let i = 1; i <= o.VLevelsCount; i++) t.push(e.child("vlevel" + i).child( + "color")); + e.addChild("linesColors", new n(t)), e.addExclusion("linesColors") + } + } + o.HLevelsCount = 7, o.VLevelsCount = 7, t.LineToolFibSpeedResistanceFan = o + }, + ziJ5: function(e, t, i) { + "use strict"; + (function(e) { + var s = i("QIuV").LineToolTrading, + r = i("Ss5c").LineDataSource, + n = i("RTYN").PositionAveragePriceAxisView, + o = i("jkoZ"), + a = i("Ocx9").DefaultProperty, + l = i("kcTO").PriceFormatter, + c = i("s1Gx").sortSourcesPreOrdered.LineToolPosition; + + function h(e) { + return null == e ? e = "" : e += "", e + } + class u { + constructor(e) { + this._line = e, this._data = { + bodyText: "position", + quantityText: "0" + }, this._closeEnabled = !0, this._direction = "buy", this._profitState = + "neutral" + } + setDirection(e) { + return this._direction = e, this._line.updateAllViewsAndRedraw(), this + } + setProfitState(e) { + return this._profitState = e, this._line.updateAllViewsAndRedraw(), this + } + getPrice() { + return this._line.points().length > 0 ? this._line.points()[0].price : this + ._line._timePoint.length > 0 ? this._line._timePoint[0].price : void 0 + } + setPrice(e) { + if (this._line.points().length > 0) { + var t = this._line.points()[0]; + t.price = e, this._line._points[0] = t, this._line.normalizePoints(), + this._line.updateAllViewsAndRedraw() + } + return this._line._timePoint.length > 0 && (this._line._timePoint[0].price = + e), this + } + getText() { + return this._data.bodyText + } + setText(e) { + return this._data.bodyText = e || "", this._line.updateAllViewsAndRedraw(), + this + } + setTooltip(e) { + return this._line.properties().tooltip.setValue(h(e)), this + } + getTooltip() { + return this._line.properties().tooltip.value() + } + setProtectTooltip(e) { + return this._line.properties().protectTooltip.setValue(h(e)), this + } + getProtectTooltip() { + return this._line.properties().protectTooltip.value() + } + setCloseTooltip(e) { + return this._line.properties().closeTooltip.setValue(h(e)), this + } + getCloseTooltip() { + return this._line.properties().closeTooltip.value() + } + setReverseTooltip(e) { + return this._line.properties().reverseTooltip.setValue(h(e)), this + } + getReverseTooltip() { + return this._line.properties().reverseTooltip.value() + } + getQuantity() { + return this._data.quantityText + } + setQuantity(e) { + return this._data.quantityText = e || "", this._line + .updateAllViewsAndRedraw(), this + } + getExtendLeft() { + var e = this._line.properties().extendLeft.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .extendLeft.value() : e + } + setExtendLeft(e) { + return this._line.properties().extendLeft.setValue(e), this + } + getLineLength() { + var e = this._line.properties().lineLength.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .lineLength.value() : e + } + setLineLength(e) { + return this._line.properties().lineLength.setValue(Math.max(0, Math.min(e, + 100))), this + } + getLineColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.lineBuyColor : e.lineSellColor) + .value() + } + setLineColor(e) { + return "buy" === this._direction ? this.setLineBuyColor(e) : this + .setLineSellColor(e), this + } + setLineBuyColor(e) { + return this._line.properties().lineBuyColor.setValue(e), this + } + setLineSellColor(e) { + return this._line.properties().lineSellColor.setValue(e), this + } + getLineStyle() { + var e = this._line.properties().lineStyle.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .lineStyle.value() : e + } + setLineStyle(e) { + return this._line.properties().lineStyle.setValue(e), this + } + getLineWidth() { + var e = this._line.properties().lineWidth.value(); + return "inherit" === e ? this._line._model.properties().tradingProperties + .lineWidth.value() : e + } + setLineWidth(e) { + return this._line.properties().lineWidth.setValue(e), this + } + getBodyBorderColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.bodyBorderBuyColor : e + .bodyBorderSellColor).value() + } + setBodyBorderColor(e) { + return "buy" === this._direction ? this.setBodyBorderBuyColor(e) : this + .setBodyBorderSellColor(e), this + } + setBodyBorderBuyColor(e) { + return this._line.properties().bodyBorderBuyColor.setValue(e), this + } + setBodyBorderSellColor(e) { + return this._line.properties().bodyBorderSellColor.setValue(e), this + } + getBodyBackgroundColor() { + return o.getColorFromProperties(this._line.properties().bodyBackgroundColor, + this._line.properties().bodyBackgroundTransparency) + } + setBodyBackgroundColor(e) { + return o.setColorToProperties(e, this._line.properties() + .bodyBackgroundColor, this._line.properties() + .bodyBackgroundTransparency), this + } + getBodyTextColor() { + var e = this._line.properties(); + return ("positive" === this._profitState ? e.bodyTextPositiveColor : + "negative" === this._profitState ? e.bodyTextNegativeColor : e + .bodyTextNeutralColor).value() + } + setBodyTextColor(e) { + return "positive" === this._profitState ? this.setBodyTextPositiveColor(e) : + "negative" === this._profitState ? this.setBodyTextNegativeColor(e) : + this.setBodyTextNeutralColor(e), this + } + setBodyTextPositiveColor(e) { + return this._line.properties().bodyTextPositiveColor.setValue(e), this + } + setBodyTextNegativeColor(e) { + return this._line.properties().bodyTextNegativeColor.setValue(e), this + } + setBodyTextNeutralColor(e) { + return this._line.properties().bodyTextNeutralColor.setValue(e), this + } + getBodyFont() { + return o.getFontFromProperties(this._line.properties().bodyFontFamily, this + ._line.properties().bodyFontSize, this._line.properties() + .bodyFontBold, this._line.properties().bodyFontItalic) + } + setBodyFont(e) { + return o.setFontToProperties(e, this._line.properties().bodyFontFamily, this + ._line.properties().bodyFontSize, this._line.properties() + .bodyFontBold, this._line.properties().bodyFontItalic), this + } + getQuantityBorderColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.quantityBorderBuyColor : e + .quantityBorderSellColor).value() + } + setQuantityBorderColor(e) { + return "buy" === this._direction ? this.setQuantityBorderBuyColor(e) : this + .setQuantityBorderSellColor(e), this + } + setQuantityBorderBuyColor(e) { + return this._line.properties().quantityBorderBuyColor.setValue(e), this + } + setQuantityBorderSellColor(e) { + return this._line.properties().quantityBorderSellColor.setValue(e), this + } + getQuantityBackgroundColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.quantityBackgroundBuyColor : e + .quantityBackgroundSellColor).value() + } + setQuantityBackgroundColor(e) { + return "buy" === this._direction ? this.setQuantityBackgroundBuyColor(e) : + this.setQuantityBackgroundSellColor(e), this + } + setQuantityBackgroundBuyColor(e) { + return this._line.properties().quantityBackgroundBuyColor.setValue(e), this + } + setQuantityBackgroundSellColor(e) { + return this._line.properties().quantityBackgroundSellColor.setValue(e), this + } + getQuantityTextColor() { + return o.getColorFromProperties(this._line.properties().quantityTextColor, + this._line.properties().quantityTextTransparency) + } + setQuantityTextColor(e) { + return o.setColorToProperties(e, this._line.properties().quantityTextColor, + this._line.properties().quantityTextTransparency), this + } + getQuantityFont() { + return o.getFontFromProperties(this._line.properties().quantityFontFamily, + this._line.properties().quantityFontSize, this._line.properties() + .quantityFontBold, this._line.properties().quantityFontItalic) + } + setQuantityFont(e) { + return o.setFontToProperties(e, this._line.properties().quantityFontFamily, + this._line.properties().quantityFontSize, this._line.properties() + .quantityFontBold, this._line.properties().quantityFontItalic), this + } + getReverseButtonBorderColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.reverseButtonBorderBuyColor : e + .reverseButtonBorderSellColor).value() + } + setReverseButtonBorderColor(e) { + return "buy" === this._direction ? this.setReverseButtonBorderBuyColor(e) : + this.setReverseButtonBorderSellColor(e), this + } + setReverseButtonBorderBuyColor(e) { + return this._line.properties().reverseButtonBorderBuyColor.setValue(e), this + } + setReverseButtonBorderSellColor(e) { + return this._line.properties().reverseButtonBorderSellColor.setValue(e), + this + } + getReverseButtonBackgroundColor() { + return o.getColorFromProperties(this._line.properties() + .reverseButtonBackgroundColor, this._line.properties() + .reverseButtonBackgroundTransparency) + } + setReverseButtonBackgroundColor(e) { + return o.setColorToProperties(e, this._line.properties() + .reverseButtonBackgroundColor, this._line.properties() + .reverseButtonBackgroundTransparency), this + } + getReverseButtonIconColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.reverseButtonIconBuyColor : e + .reverseButtonIconSellColor).value() + } + setReverseButtonIconColor(e) { + return "buy" === this._direction ? this.setReverseButtonIconBuyColor(e) : + this.setReverseButtonIconSellColor(e), this + } + setReverseButtonIconBuyColor(e) { + return this._line.properties().reverseButtonIconBuyColor.setValue(e), this + } + setReverseButtonIconSellColor(e) { + return this._line.properties().reverseButtonIconSellColor.setValue(e), this + } + getCloseButtonBorderColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.closeButtonBorderBuyColor : e + .closeButtonBorderSellColor).value() + } + setCloseButtonBorderColor(e) { + return "buy" === this._direction ? this.setCloseButtonBorderBuyColor(e) : + this.setCloseButtonBorderSellColor(e), this + } + setCloseButtonBorderBuyColor(e) { + return this._line.properties().closeButtonBorderBuyColor.setValue(e), this + } + setCloseButtonBorderSellColor(e) { + return this._line.properties().closeButtonBorderSellColor.setValue(e), this + } + getCloseButtonBackgroundColor() { + return o.getColorFromProperties(this._line.properties() + .closeButtonBackgroundColor, this._line.properties() + .closeButtonBackgroundTransparency) + } + setCloseButtonBackgroundColor(e) { + return o.setColorToProperties(e, this._line.properties() + .closeButtonBackgroundColor, this._line.properties() + .closeButtonBackgroundTransparency), this + } + getCloseButtonIconColor() { + var e = this._line.properties(); + return ("buy" === this._direction ? e.closeButtonIconBuyColor : e + .closeButtonIconSellColor).value() + } + setCloseButtonIconColor(e) { + return "buy" === this._direction ? this.setCloseButtonIconBuyColor(e) : this + .setCloseButtonIconSellColor(e), this + } + setCloseButtonIconBuyColor(e) { + return this._line.properties().closeButtonIconBuyColor.setValue(e), this + } + setCloseButtonIconSellColor(e) { + return this._line.properties().closeButtonIconSellColor.setValue(e), this + } + block() { + this._blocked = !0, this._line.updateAllViewsAndRedraw() + } + unblock() { + this._blocked = !1, this._line.updateAllViewsAndRedraw() + } + isFunction(e) { + return "function" == typeof e + } + onReverse(e, t) { + return t ? this.isFunction(t) && (this._onReverseData = e, this + ._onReverseCallback = t) : this.isFunction(e) && (this + ._onReverseCallback = e), this + } + callOnReverse() { + this.isFunction(this._onReverseCallback) && this._onReverseCallback.call( + this, this._onReverseData) + } + isOnReverseCallbackPresent() { + return this.isFunction(this._onReverseCallback) + } + onClose(e, t) { + return t ? this.isFunction(t) && (this._onCloseData = e, this + ._onCloseCallback = t) : this.isFunction(e) && (this + ._onCloseCallback = e), this + } + setCloseEnabled(e) { + return this._closeEnabled === e || (this._closeEnabled = e, this + ._onCloseCallback && this._line.updateAllViewsAndRedraw()), this + } + isCloseEnabled() { + return this._closeEnabled + } + callOnClose() { + this.isFunction(this._onCloseCallback) && this._closeEnabled && this + ._onCloseCallback.call(this, this._onCloseData) + } + isOnCloseCallbackPresent() { + return this._closeEnabled && this.isFunction(this._onCloseCallback) + } + onModify(e, t) { + return t ? this.isFunction(t) && (this._onModifyData = e, this + ._onModifyCallback = t) : this.isFunction(e) && (this + ._onModifyCallback = e), this + } + callOnModify() { + this.isFunction(this._onModifyCallback) && this._onModifyCallback.call(this, + this._onModifyData) + } + onContextMenu(e, t) { + return t ? this.isFunction(t) && (this._onContextMenuData = e, this + ._onContextMenuCallback = t) : this.isFunction(e) && (this + ._onContextMenuCallback = e), this + } + shouldShowContextMenu() { + return this.isFunction(this._onContextMenuCallback) + } + callOnContextMenu() { + if (this.isFunction(this._onContextMenuCallback)) return this + ._onContextMenuCallback.call(this, this._onContextMenuData) + } + remove() { + this._line._model.removeSource(this._line), delete this._line + } + } + class d extends s { + constructor(e, t) { + super(e, t || d.createProperties()), this._adapter = new u(this), i.e( + "lt-pane-views").then(i.t.bind(null, "GzSs", 7)).then(({ + PositionPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }); + var s = e.mainSeries().symbolInfo(), + r = null !== s ? s.pricescale : 100, + n = null !== s && s.fractional ? s.minmov : 1, + o = null !== s && s.fractional, + a = null !== s ? s.minmove2 : void 0; + this._formatter = new l(r, n, o, a) + } + zorder() { + return c + } + isSpeciallyZOrderedSource() { + return !0 + } + setPoint(e, t, i) { + this._points[e] = t, this.normalizePoints() + } + addPoint(e, t) { + return this._points.push(e), this._lastPoint = null, this.normalizePoints(), + this.createServerPoints(), !0 + } + name() { + return "Position" + } + createPriceAxisView(e) { + return this._priceAxisView = new n(this, { + pointIndex: e, + backgroundPropertyGetter: () => this._adapter.getLineColor() + }), this._priceAxisView + } + paneViews() { + return TradingView.printing && !e.enabled("snapshot_trading_drawings") ? + null : this._model.properties().tradingProperties.showPositions + .value() ? r.prototype.paneViews.call(this) : null + } + priceAxisViews(t, i) { + return TradingView.printing && !e.enabled("snapshot_trading_drawings") ? + null : this._model.properties().tradingProperties.showPositions + .value() ? r.prototype.priceAxisViews.call(this, t, i) : null + } + hasContextMenu() { + return this._adapter.shouldShowContextMenu() + } + contextMenuItems() { + return this._adapter.callOnContextMenu() + } + formatter() { + return this._formatter + } + static createProperties(e) { + var t = new a("linetoolposition", e, !1, !1); + return d._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e) + } + } + t.LineToolPosition = d + }).call(this, i("Kxc7")) + }, + zqZp: function(e, t, i) { + "use strict"; + var s = i("Ss5c").LineDataSource, + r = i("Ocx9").DefaultProperty, + n = i("j3hX").LineToolColorsProperty; + class o extends s { + constructor(e, t) { + super(e, t || o.createProperties()), i.e("lt-pane-views").then(i.t.bind(null, + "Ni7V", 7)).then(({ + PriceLabelPaneView: e + }) => { + this._setPaneViews([new e(this, this._model)]) + }) + } + pointsCount() { + return 1 + } + name() { + return "Price Label" + } + async _getPropertyDefinitionsViewModelClass() { + return (await Promise.all([i.e(27), i.e(62), i.e( + "lt-property-pages-with-definitions")]).then(i.bind(null, "hQgR"))) + .PriceLabelDefinitionsViewModel + } + static createProperties(e) { + var t = new r("linetoolpricelabel", e); + return o._configureProperties(t), t + } + static _configureProperties(e) { + s._configureProperties(e), e.addChild("linesColors", new n([e.childs() + .borderColor + ])), e.addChild("textsColors", new n([e.childs().color])) + } + } + t.LineToolPriceLabel = o + } + }, + [ + ["/G2Z", "runtime", "vendors"] + ] +]); diff --git a/static/charting_library/bundles/library.579e6e3fd95b660ad833.css b/static/charting_library/bundles/library.579e6e3fd95b660ad833.css new file mode 100644 index 0000000..faa0acb --- /dev/null +++ b/static/charting_library/bundles/library.579e6e3fd95b660ad833.css @@ -0,0 +1 @@ +html{-webkit-text-size-adjust:100%;-webkit-app-region:no-drag}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#434651;font-family:Trebuchet MS,roboto,ubuntu,sans-serif;font-size:14px}html.theme-dark body{color:#d1d4dc}html[lang=vi] body{font-family:Arial,sans-serif}body,html{box-sizing:border-box}body,dir,h1,h2,h3,h4,h5,h6,html,li,menu,ol,p,ul{margin:0;padding:0}a{text-decoration:none}a:active{outline:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){a:hover{outline:0}}h1{font-size:2em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sup{top:-.25em}sub{bottom:-.25em}figure{margin:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button,select{text-transform:none}button,input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:initial}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:none;margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.tv-text ol,.tv-text p,.tv-text ul{color:#131722;font-size:14px;line-height:1.6;margin-bottom:12px}html.theme-dark .tv-text ol,html.theme-dark .tv-text p,html.theme-dark .tv-text ul{color:#d1d4dc}.tv-text ol.tv-text__color_bright,.tv-text p.tv-text__color_bright,.tv-text ul.tv-text__color_bright{color:#fff}.tv-text ol.tv-text__color_silver,.tv-text p.tv-text__color_silver,.tv-text ul.tv-text__color_silver{color:silver}.tv-text ol.tv-text__color_silver_30,.tv-text p.tv-text__color_silver_30,.tv-text ul.tv-text__color_silver_30{color:#9b9b9b}.tv-text ol.tv-text__paragraph--additional-top-margin,.tv-text p.tv-text__paragraph--additional-top-margin,.tv-text ul.tv-text__paragraph--additional-top-margin{margin-top:24px}.tv-text ol.tv-text__paragraph--additional-top-margin_double,.tv-text p.tv-text__paragraph--additional-top-margin_double,.tv-text ul.tv-text__paragraph--additional-top-margin_double{margin-top:48px}.tv-text ol.tv-text__paragraph--additional-bottom-margin,.tv-text p.tv-text__paragraph--additional-bottom-margin,.tv-text ul.tv-text__paragraph--additional-bottom-margin{margin-bottom:24px}.tv-text ol.tv-text__paragraph--additional-bottom-margin_double,.tv-text p.tv-text__paragraph--additional-bottom-margin_double,.tv-text ul.tv-text__paragraph--additional-bottom-margin_double{margin-bottom:48px}.tv-text ol .tv-text--highlight-important,.tv-text p .tv-text--highlight-important,.tv-text ul .tv-text--highlight-important{background:#fff3e0;box-shadow:0 0 0 .37em #fff3e0}html.theme-dark .tv-text ol .tv-text--highlight-important,html.theme-dark .tv-text p .tv-text--highlight-important,html.theme-dark .tv-text ul .tv-text--highlight-important{background:#142e61;box-shadow:0 0 0 .37em #142e61}.tv-text ol .tv-text--highlight-important:empty,.tv-text p .tv-text--highlight-important:empty,.tv-text ul .tv-text--highlight-important:empty{background:#0000;box-shadow:none}.tv-text h1{font-size:45px;margin-bottom:30px;margin-top:30px}@media screen and (max-width:1019px){.tv-text h1{font-size:38px}}@media screen and (max-width:767px){.tv-text h1{font-size:32px}}@media screen and (max-width:479px){.tv-text h1{font-size:28px}}.tv-text h2{font-size:31px}@media screen and (max-width:1019px){.tv-text h2{font-size:26px}}@media screen and (max-width:479px){.tv-text h2{font-size:24px}}.tv-text h3{font-size:17px}@media screen and (max-width:1019px){.tv-text h3{font-size:16px}}.tv-text h4{font-size:15px}.tv-text h2,.tv-text h3,.tv-text h4{margin-bottom:20px;margin-top:20px}.tv-text h1:first-child,.tv-text h2:first-child,.tv-text h3:first-child,.tv-text h4:first-child{margin-top:0}.tv-text ol,.tv-text ul{list-style-position:inside}.tv-text--position-outside ol,.tv-text--position-outside ul{list-style-position:outside;padding-left:17px}.tv-text a:not(.tv-badge):not(.tv-button){color:#2962ff;transition:color .35s ease}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button){color:#2962ff}.tv-text a:not(.tv-badge):not(.tv-button):visited{fill:#2962ff;color:#2962ff}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button):visited{fill:#2962ff;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-text a:not(.tv-badge):not(.tv-button):hover{fill:#1e53e5;color:#1e53e5;transition-duration:.06s}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button):hover{fill:#1e53e5;color:#1e53e5}}.tv-text a:not(.tv-badge):not(.tv-button):focus{outline:auto}.tv-text a:not(.tv-badge):not(.tv-button):focus:not(:-moz-focusring){outline:none}.tv-text a:not(.tv-badge):not(.tv-button):-moz-focusring{outline:auto}.tv-text a:not(.tv-badge):not(.tv-button):active{fill:#1848cc;color:#1848cc;transition-duration:.06s}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button):active{fill:#1848cc;color:#1848cc}.tv-text__font.tv-text__font--size_semilarge{font-size:15px}@media screen and (max-width:767px){.tv-text__font.tv-text__font--size_semilarge{font-size:14px}}.tv-text__font.tv-text__font--size_large{font-size:17px}@media screen and (max-width:767px){.tv-text__font.tv-text__font--size_large{font-size:16px}}.tv-text__font.tv-text__font--size_xlarge{font-size:19px}@media screen and (max-width:767px){.tv-text__font.tv-text__font--size_xlarge{font-size:18px}}.tv-text__font--bold{font-weight:700}.tv-text__font--italic{font-style:italic}.tv-text--darkbg,.tv-text--darkbg ol,.tv-text--darkbg p,.tv-text--darkbg ul{color:#fff}.tv-text--highlight-important{background:#fff3e0;box-shadow:0 0 0 .07em #fff3e0}html.theme-dark .tv-text--highlight-important{background:#142e61;box-shadow:0 0 0 .07em #142e61}.tv-text--highlight-important:empty{background:#0000;box-shadow:none}.symbol-change-direction.up{color:#3cbc98}.symbol-change-direction.down{color:#ff4a68}.js-hidden{display:none!important}.js-no-pointer-events{pointer-events:none!important}body{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;box-sizing:border-box;min-width:320px}body.i-no-scroll{overflow:hidden!important}body.i-no-padding{padding:0!important}::selection{background:#e3effd99}html.theme-dark ::selection{background:#143a8799}.i-hidden{display:none!important}.i-invisible{visibility:hidden!important}.i-clearfix:after{clear:both;content:"";display:table}.i-align_left{text-align:left!important}.i-align_right{text-align:right!important}.i-align_center{text-align:center!important}.i-float_left{float:left!important}.i-float_right{float:right!important}.i-float_none{float:none!important}@media screen and (min-width:1020px){.i-device-only{display:none!important}}@media screen and (max-width:1019px){.i-desktop-only{display:none!important}}@media screen and (min-width:479px){.i-phones-only{display:none!important}}@media screen and (max-width:479px){.i-except-phones-only{display:none!important}}.i-no-break{white-space:nowrap}body.fullscreen-mode{overflow:hidden}.tv-layout-width{box-sizing:border-box;margin:0 auto;padding:0 20px;width:1020px}.tv-layout-width--no-padding{padding:0;width:980px}.tv-layout-width--simple{padding:0}.tv-dialog .tv-layout-width{max-width:100%}.chart-page .tv-layout-width{width:100%}@media screen and (max-width:1019px){.tv-layout-width{width:auto}.tv-layout-width .tv-feed{margin-left:-20px;margin-right:-20px}.tv-layout-width .tv-feed--tablet-top-indent{margin-top:48px}}.tv-layout-padding{padding:0 20px}body.page-wide .tv-layout-width,body.popup-wide .fancybox-overlay .tv-layout-width{width:1520px}.tv-main,body.page-fullwidth .tv-layout-width{width:100%}.tv-main{display:flex;flex-direction:column;min-height:100%}.tv-side-toolbar{float:left;height:100%;overflow-x:visible;overflow-y:hidden;position:static}.tv-main-panel{background-color:#f1f3f6;overflow:hidden;position:relative}.tv-side-panel{float:right;height:100%;position:relative;z-index:15}.tv-panels{height:100%}.chart-page .tv-content{padding:0}.clear{clear:both}.clearfix:after{clear:both;content:"";display:block}.hide{display:none!important}.show{display:block!important}.tv-right{float:right!important}.tv-left{float:left!important}#_atssh{margin-top:-20px;position:absolute}.js-right-boundary{margin-right:0}.icon{background:url(1df47f578aeef40dd1f2328338a133be.png) 0 0 no-repeat;display:inline-block;position:relative;vertical-align:middle}textarea.tv-textarea{border:1px solid #c9cbcd;color:#5a5a5a;margin:0;padding:0 5px}body{background-color:#fff}html.theme-dark body{background-color:#131722}body.tv-body--bg_superdark,html.theme-dark body.tv-body--bg_superdark{background:#131722}body.tv-body--bg_contrast{background-color:#fff}html.theme-dark body.tv-body--bg_contrast{background-color:#1e222d}body.extension{min-width:0;overflow:hidden}img{border:none}textarea{resize:none}:focus{outline:none}input,textarea{border-radius:0}.tv-profile .tags,.unselectable{-webkit-user-select:none;user-select:none}.selectable,input,textarea{-webkit-user-select:text;user-select:text}.text-center{text-align:center}#footer{background:#dbdbdb;border-top:1px solid #999;color:#626262;font-size:small;height:24px}#chart-area{background:#0000}#chart-area,.chart-container{position:relative}#chart-area.fullscreen{height:100%!important;left:0;position:fixed;top:0;width:100%!important;z-index:15}.chart-page{background-color:var(--tv-color-platform-background,#e0e3eb)}html.theme-dark .chart-page{background-color:var(--tv-color-platform-background,#2a2e39)}.chart-page .chart-container{contain:strict;position:relative}.chart-page .chart-container-border{background-color:#fff;border:none;height:100%;overflow:hidden;position:relative;width:100%;z-index:0}html.theme-dark .chart-page .chart-container-border{background-color:#131722}.chart-page .chart-container.multiple.active:after{border:2px solid #2962ff;bottom:0;box-sizing:border-box;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}html.theme-dark .chart-page .chart-container.multiple.active:after{border-color:#2962ff}.chart-page .chart-container.inactive .back-to-present{display:none}.chart-page .chart-container.no-header-toolbar .chart-container-border{border-top-left-radius:4px;border-top-right-radius:4px}.chart-page .chart-container.no-bottom-toolbar .chart-container-border{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ui-tabs .ui-tabs-nav li a{font-size:x-small}.input-reset{border-radius:50%;cursor:pointer;display:none;height:16px;position:absolute;right:7px;top:7px;width:16px}.input-reset:before{background:url(1df47f578aeef40dd1f2328338a133be.png) no-repeat -103px -340px;content:" ";display:block;height:10px;left:50%;margin:-5px 0 0 -5px;position:absolute;top:50%;width:10px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.input-reset:hover{background-color:#f2f5f8}}.input-reset:active{opacity:.6}.loading-indicator{background:#fff;height:100%;left:0;position:absolute;top:0;width:100%;z-index:150}html.theme-dark .loading-indicator{background:#131722}.loading-indicator img{left:50%;margin:-58px 0 0 -58px;position:absolute;top:50%}.loading-indicator img.small{margin:-12px 0 0 -12px}.ui-slider-horizontal{background-color:#f4f7f9;border:1px solid #c9cbcd!important;box-shadow:inset 0 1px 2px #00000026;height:5px!important;margin:7px 0 0}html.theme-dark .ui-slider-horizontal{background-color:#171b29;border-color:#2f3241!important}.ui-slider-handle{background:url(1df47f578aeef40dd1f2328338a133be.png) -20px -80px!important;border:none!important;height:15px!important;margin-left:-7px!important;top:-5px!important;width:15px!important}.ui-slider-horizontal.linewidth-slider{background:url(4a9abefd31dab7c8239e02e925aacd78.png) 0 0 no-repeat!important;border:none!important;box-shadow:none;display:inline-block;height:12px!important;margin:7px 10px;vertical-align:middle;width:101px}.ui-slider-horizontal.linewidth-slider:after,.ui-slider-horizontal.linewidth-slider:before{content:none}.ui-slider-horizontal.transparency-slider{background:url(7e0cc5f7d7f5151500dd60b8d6ca60a1.png)!important;height:8px!important;margin:7px 10px;width:99px}.ui-slider-horizontal.transparency-slider.wide-slider{margin:7px 1px;width:176px}.ui-slider-horizontal.transparency-slider .gradient{background:linear-gradient(90deg,#0000 0,#7db9e8);height:100%;left:0;position:absolute;top:0;width:92%}.ui-slider-horizontal.linewidth-slider .ui-slider-handle,.ui-slider-horizontal.transparency-slider .ui-slider-handle{background:url(40566afd832a155e5e370a8bd423de4b.svg) 0 0 no-repeat!important;height:20px!important;margin:-10px 0 0 -10px!important;top:50%!important;width:20px!important}.ui-slider-horizontal.linewidth-slider .ui-slider-handle.without-shift-handle-left,.ui-slider-horizontal.transparency-slider .ui-slider-handle.without-shift-handle-left{margin:-10px 3px 0 -3px!important}.falling,.growing,.search-results .symbol-last.falling,.search-results .symbol-last.growing{color:#fff}.growing{background:#3cbc98}.falling{background:#ff4a68}.font-awesome{font-family:FontAwesome;font-weight:700}#chart-area .chart-promo,#chart-container .chart-promo,.tv-chart-view__chart-inner .chart-promo{background:#fff;bottom:55px;display:none;height:80px;left:10px;position:absolute;transition:width .5s ease-in-out;width:0;z-index:5}#chart-area .chart-promo.expanded,#chart-container .chart-promo.expanded,.tv-chart-view__chart-inner .chart-promo.expanded{display:block;opacity:1;width:330px}#chart-area .chart-promo a.chart-promo-link,#chart-container .chart-promo a.chart-promo-link,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link{border:1px solid #dadee1;border-radius:4px;box-shadow:0 0 30px 0 #00000026;color:#000;display:block;height:80px;width:330px}#chart-area .chart-promo a.chart-promo-link .image-promo,#chart-container .chart-promo a.chart-promo-link .image-promo,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .image-promo{height:80px;width:330px}#chart-area .chart-promo a.chart-promo-link .comment,#chart-container .chart-promo a.chart-promo-link .comment,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .comment{color:#555;display:block;font-size:12px;line-height:60px;margin-top:-2px;padding:10px 128px 10px 22px}#chart-area .chart-promo a.chart-promo-link .comment .comment-alignment,#chart-container .chart-promo a.chart-promo-link .comment .comment-alignment,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .comment .comment-alignment{display:inline-block;line-height:15px;max-height:60px;overflow:hidden;vertical-align:middle;white-space:pre-wrap}#chart-area .chart-promo a.chart-promo-link .logo,#chart-container .chart-promo a.chart-promo-link .logo,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .logo{float:right;height:80px;line-height:80px;text-align:center;width:128px}#chart-area .chart-promo a.chart-promo-link .logo img,#chart-container .chart-promo a.chart-promo-link .logo img,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .logo img{max-height:100%;max-width:85px;vertical-align:middle}#chart-area .chart-promo a.remove-ad,#chart-container .chart-promo a.remove-ad,.tv-chart-view__chart-inner .chart-promo a.remove-ad{background:#ecf1f4;border-top-left-radius:5px;border-top-right-radius:5px;color:#5cbfe7;font-size:11px;height:18px;line-height:18px;opacity:.8;padding:0 11px;position:absolute;right:0;top:-18px}#chart-container .chart-promo,.tv-chart-view__chart-inner .chart-promo{bottom:30px}#myswf{left:0;position:fixed;top:0}.tv-button{fill:currentColor;-webkit-tap-highlight-color:transparent;background-color:initial;border:none;border-radius:4px;box-sizing:border-box;color:#757575;cursor:pointer;display:inline-block;font-size:14px;line-height:32px;margin:0;min-width:40px;outline:0;overflow:hidden;padding:1px 22px;position:relative;text-align:center;text-decoration:none;transition:background-color .35s ease,border-color .35s ease,color .35s ease;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.tv-button.tv-button--danger_ghost,.tv-button.tv-button--default,.tv-button.tv-button--default_ghost,.tv-button.tv-button--primary_ghost,.tv-button.tv-button--secondary_ghost,.tv-button.tv-button--state,.tv-button.tv-button--success_ghost,.tv-button.tv-button--warning_ghost{padding:0 21px}.tv-button.i-active,.tv-button.i-hover,.tv-button:active{transition-duration:.06s}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button:hover{transition-duration:.06s}}.tv-button svg{vertical-align:middle}.tv-button--block{display:block;text-align:center;width:100%}.tv-button+.tv-button{margin-left:15px}.tv-button.tv-button--no-left-margin{margin-left:0}.tv-button__text{display:inline-block;position:relative}.tv-button__text--full-height{word-wrap:break-word;align-items:center;display:flex;height:100%;justify-content:center;line-height:1.2em;margin:11px 5px;white-space:normal;width:100%}.tv-button--default,.tv-button--default_ghost,a.tv-button--default:visited{background-color:#fff;border-color:#fff;color:#fff}html.theme-dark .tv-button--default,html.theme-dark .tv-button--default_ghost,html.theme-dark a.tv-button--default:visited{background-color:#1e222d;border-color:#1e222d}.tv-button--default_ghost{color:#fff}html.theme-dark .tv-button--default_ghost{color:#1e222d}.tv-button--default_ghost.i-checked{background-color:#fff;border-color:#fff;color:#fff}html.theme-dark .tv-button--default_ghost.i-checked{background-color:#1e222d;border-color:#1e222d}.tv-button--default.i-active,.tv-button--default:active,.tv-button--default_ghost.i-active,.tv-button--default_ghost:active{background-color:#ececec;border-color:#ececec;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--default.i-active,html.theme-dark .tv-button--default:active,html.theme-dark .tv-button--default_ghost.i-active,html.theme-dark .tv-button--default_ghost:active{background-color:#1c2030;border-color:#1c2030}.tv-button--default.i-hover,.tv-button--default_ghost.i-hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--default:hover,.tv-button--default_ghost:hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#fff}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{background-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{background-color:#1e222d}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{border-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{border-color:#1e222d}}.tv-button--default_ghost .tv-button__loader-item{background-color:#e0e3eb}html.theme-dark .tv-button--default_ghost .tv-button__loader-item{background-color:#1e222d}.tv-button--default_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--default_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--default,.tv-button--default.i-checked,.tv-button--default_ghost,.tv-button--default_ghost.i-checked{border:1px solid #b2b5be;color:#6a6d78}html.theme-dark .tv-button--default,html.theme-dark .tv-button--default.i-checked,html.theme-dark .tv-button--default_ghost,html.theme-dark .tv-button--default_ghost.i-checked{border-color:#363a45;color:#787b86}.tv-button--default.i-hover,.tv-button--default_ghost.i-hover{border-color:#b2b5be;color:#6a6d78}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--default:hover,.tv-button--default_ghost:hover{border-color:#b2b5be;color:#6a6d78}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{border-color:#363a45}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{color:#787b86}}.tv-button--default.i-active,.tv-button--default:active,.tv-button--default_ghost.i-active,.tv-button--default_ghost:active{border-color:#b2b5be;color:#6a6d78}html.theme-dark .tv-button--default.i-active,html.theme-dark .tv-button--default:active,html.theme-dark .tv-button--default_ghost.i-active,html.theme-dark .tv-button--default_ghost:active{border-color:#363a45;color:#787b86}.tv-button--primary,.tv-button--primary_ghost,a.tv-button--primary:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .tv-button--primary,html.theme-dark .tv-button--primary_ghost,html.theme-dark a.tv-button--primary:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}.tv-button--primary_ghost,html.theme-dark .tv-button--primary_ghost{color:#2962ff}.tv-button--primary_ghost.i-checked{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .tv-button--primary_ghost.i-checked{background-color:#2962ff;border-color:#2962ff;color:#fff}.tv-button--primary.i-active,.tv-button--primary:active,.tv-button--primary_ghost.i-active,.tv-button--primary_ghost:active{background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--primary.i-active,html.theme-dark .tv-button--primary:active,html.theme-dark .tv-button--primary_ghost.i-active,html.theme-dark .tv-button--primary_ghost:active{background-color:#1848cc;border-color:#1848cc;color:#fff}.tv-button--primary.i-hover,.tv-button--primary_ghost.i-hover{background-color:#1e53e5;border-color:#1e53e5;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--primary:hover,.tv-button--primary_ghost:hover{background-color:#1e53e5;border-color:#1e53e5;color:#fff}}html.theme-dark .tv-button--primary.i-hover,html.theme-dark .tv-button--primary_ghost.i-hover{background-color:#1e53e5}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary:hover,html.theme-dark .tv-button--primary_ghost:hover{background-color:#1e53e5}}html.theme-dark .tv-button--primary.i-hover,html.theme-dark .tv-button--primary_ghost.i-hover{border-color:#1e53e5}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary:hover,html.theme-dark .tv-button--primary_ghost:hover{border-color:#1e53e5}}html.theme-dark .tv-button--primary.i-hover,html.theme-dark .tv-button--primary_ghost.i-hover{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary:hover,html.theme-dark .tv-button--primary_ghost:hover{color:#fff}}.tv-button--primary_ghost .tv-button__loader-item,html.theme-dark .tv-button--primary_ghost .tv-button__loader-item{background-color:#1e53e5}.tv-button--primary_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--primary_ghost:hover .tv-button__loader-item{background-color:#fff}}html.theme-dark .tv-button--primary_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--secondary,.tv-button--secondary_ghost,a.tv-button--secondary:visited{background-color:#e9eff2;border-color:#e9eff2;color:#757575}.tv-button--secondary_ghost{color:#757575}.tv-button--secondary_ghost.i-checked{background-color:#e9eff2;border-color:#e9eff2;color:#757575}.tv-button--secondary.i-active,.tv-button--secondary:active,.tv-button--secondary_ghost.i-active,.tv-button--secondary_ghost:active{background-color:#cfdce3;border-color:#cfdce3;color:#757575;transform:translateY(1px)}.tv-button--secondary.i-hover,.tv-button--secondary_ghost.i-hover{background-color:#dce6ea;border-color:#dce6ea;color:#757575}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--secondary:hover,.tv-button--secondary_ghost:hover{background-color:#dce6ea;border-color:#dce6ea;color:#757575}}.tv-button--secondary_ghost .tv-button__loader-item{background-color:#dce6ea}.tv-button--secondary_ghost.i-hover .tv-button__loader-item{background-color:#757575}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--secondary_ghost:hover .tv-button__loader-item{background-color:#757575}}.tv-button--success,.tv-button--success_ghost,a.tv-button--success:visited{background-color:#009688;border-color:#009688;color:#fff}html.theme-dark .tv-button--success,html.theme-dark .tv-button--success_ghost,html.theme-dark a.tv-button--success:visited{background-color:#00796b;border-color:#00796b;color:#fff}.tv-button--success_ghost{color:#009688}html.theme-dark .tv-button--success_ghost{color:#00796b}.tv-button--success_ghost.i-checked{background-color:#009688;border-color:#009688;color:#fff}html.theme-dark .tv-button--success_ghost.i-checked{background-color:#00796b;border-color:#00796b;color:#fff}.tv-button--success.i-active,.tv-button--success:active,.tv-button--success_ghost.i-active,.tv-button--success_ghost:active{background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--success.i-active,html.theme-dark .tv-button--success:active,html.theme-dark .tv-button--success_ghost.i-active,html.theme-dark .tv-button--success_ghost:active{background-color:#009688;border-color:#009688;color:#fff}.tv-button--success.i-hover,.tv-button--success_ghost.i-hover{background-color:#00897b;border-color:#00897b;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--success:hover,.tv-button--success_ghost:hover{background-color:#00897b;border-color:#00897b;color:#fff}}html.theme-dark .tv-button--success.i-hover,html.theme-dark .tv-button--success_ghost.i-hover{background-color:#00897b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success:hover,html.theme-dark .tv-button--success_ghost:hover{background-color:#00897b}}html.theme-dark .tv-button--success.i-hover,html.theme-dark .tv-button--success_ghost.i-hover{border-color:#00897b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success:hover,html.theme-dark .tv-button--success_ghost:hover{border-color:#00897b}}html.theme-dark .tv-button--success.i-hover,html.theme-dark .tv-button--success_ghost.i-hover{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success:hover,html.theme-dark .tv-button--success_ghost:hover{color:#fff}}.tv-button--success_ghost .tv-button__loader-item,html.theme-dark .tv-button--success_ghost .tv-button__loader-item{background-color:#00897b}.tv-button--success_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--success_ghost:hover .tv-button__loader-item{background-color:#fff}}html.theme-dark .tv-button--success_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--danger,.tv-button--danger_ghost,a.tv-button--danger:visited{background-color:#ef5350;border-color:#ef5350;color:#fff}html.theme-dark .tv-button--danger,html.theme-dark .tv-button--danger_ghost,html.theme-dark a.tv-button--danger:visited{background-color:#d32f2f;border-color:#d32f2f;color:#fff}.tv-button--danger_ghost{color:#ef5350}html.theme-dark .tv-button--danger_ghost{color:#d32f2f}.tv-button--danger_ghost.i-checked{background-color:#ef5350;border-color:#ef5350;color:#fff}html.theme-dark .tv-button--danger_ghost.i-checked{background-color:#d32f2f;border-color:#d32f2f;color:#fff}.tv-button--danger.i-active,.tv-button--danger:active,.tv-button--danger_ghost.i-active,.tv-button--danger_ghost:active{background-color:#d32f2f;border-color:#d32f2f;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--danger.i-active,html.theme-dark .tv-button--danger:active,html.theme-dark .tv-button--danger_ghost.i-active,html.theme-dark .tv-button--danger_ghost:active{background-color:#f44336;border-color:#f44336;color:#fff}.tv-button--danger.i-hover,.tv-button--danger_ghost.i-hover{background-color:#e53935;border-color:#e53935;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--danger:hover,.tv-button--danger_ghost:hover{background-color:#e53935;border-color:#e53935;color:#fff}}html.theme-dark .tv-button--danger.i-hover,html.theme-dark .tv-button--danger_ghost.i-hover{background-color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger:hover,html.theme-dark .tv-button--danger_ghost:hover{background-color:#e53935}}html.theme-dark .tv-button--danger.i-hover,html.theme-dark .tv-button--danger_ghost.i-hover{border-color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger:hover,html.theme-dark .tv-button--danger_ghost:hover{border-color:#e53935}}html.theme-dark .tv-button--danger.i-hover,html.theme-dark .tv-button--danger_ghost.i-hover{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger:hover,html.theme-dark .tv-button--danger_ghost:hover{color:#fff}}.tv-button--danger_ghost .tv-button__loader-item,html.theme-dark .tv-button--danger_ghost .tv-button__loader-item{background-color:#e53935}.tv-button--danger_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--danger_ghost:hover .tv-button__loader-item{background-color:#fff}}html.theme-dark .tv-button--danger_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--warning,.tv-button--warning_ghost,a.tv-button--warning:visited{background-color:#f89e30;border-color:#f89e30;color:#fff}.tv-button--warning_ghost{color:#f89e30}.tv-button--warning_ghost.i-checked{background-color:#f89e30;border-color:#f89e30;color:#fff}.tv-button--warning.i-active,.tv-button--warning:active,.tv-button--warning_ghost.i-active,.tv-button--warning_ghost:active{background-color:#d47807;border-color:#d47807;color:#fff;transform:translateY(1px)}.tv-button--warning.i-hover,.tv-button--warning_ghost.i-hover{background-color:#f79217;border-color:#f79217;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--warning:hover,.tv-button--warning_ghost:hover{background-color:#f79217;border-color:#f79217;color:#fff}}.tv-button--warning_ghost .tv-button__loader-item{background-color:#f79217}.tv-button--warning_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--warning_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--link{color:#2962ff;transition:color .35s ease}html.theme-dark .tv-button--link{color:#2962ff}.tv-button--link:visited{fill:#2962ff;color:#2962ff}html.theme-dark .tv-button--link:visited{fill:#2962ff;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--link:hover{fill:#1e53e5;color:#1e53e5;transition-duration:.06s}html.theme-dark .tv-button--link:hover{fill:#1e53e5;color:#1e53e5}}.tv-button--link:focus{outline:auto}.tv-button--link:focus:not(:-moz-focusring){outline:none}.tv-button--link:-moz-focusring{outline:auto}.tv-button--link:active{fill:#1848cc;color:#1848cc;transition-duration:.06s}html.theme-dark .tv-button--link:active{fill:#1848cc;color:#1848cc}.tv-button--danger_ghost,.tv-button--default_ghost,.tv-button--primary_ghost,.tv-button--secondary_ghost,.tv-button--success_ghost,.tv-button--warning_ghost{background-color:initial;border-style:solid;border-width:1px}html.theme-dark .tv-button--danger_ghost,html.theme-dark .tv-button--default_ghost,html.theme-dark .tv-button--primary_ghost,html.theme-dark .tv-button--secondary_ghost,html.theme-dark .tv-button--success_ghost,html.theme-dark .tv-button--warning_ghost{background-color:initial}.tv-button--danger_ghost.tv-button--size_large,.tv-button--default_ghost.tv-button--size_large,.tv-button--primary_ghost.tv-button--size_large,.tv-button--secondary_ghost.tv-button--size_large,.tv-button--success_ghost.tv-button--size_large,.tv-button--warning_ghost.tv-button--size_large{border-width:2px}.tv-button--danger_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--default_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--primary_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--secondary_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--success_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--warning_ghost.tv-button--size_large.tv-button--thin-border{border-width:1px}.tv-button .tv-ripple{background-color:#ffffff40}.tv-button--default .tv-ripple,.tv-button--default_ghost .tv-ripple{background-color:#75869640}.tv-button.i-disabled .tv-ripple{background-color:initial}.tv-button.i-disabled,.tv-button.i-disabled:active,.tv-button:disabled,.tv-button:disabled:active{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be;cursor:default}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button.i-disabled:hover,.tv-button:disabled:hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be;cursor:default}}html.theme-dark .tv-button.i-disabled,html.theme-dark .tv-button.i-disabled:active,html.theme-dark .tv-button:disabled,html.theme-dark .tv-button:disabled:active{background-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button.i-disabled:hover,html.theme-dark .tv-button:disabled:hover{background-color:#363a45}}html.theme-dark .tv-button.i-disabled,html.theme-dark .tv-button.i-disabled:active,html.theme-dark .tv-button:disabled,html.theme-dark .tv-button:disabled:active{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button.i-disabled:hover,html.theme-dark .tv-button:disabled:hover{border-color:#363a45}}html.theme-dark .tv-button.i-disabled,html.theme-dark .tv-button.i-disabled:active,html.theme-dark .tv-button:disabled,html.theme-dark .tv-button:disabled:active{color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button.i-disabled:hover,html.theme-dark .tv-button:disabled:hover{color:#50535e}}.tv-button.i-disabled:active,.tv-button:disabled:active{transform:translateY(0)}.tv-button--size_xsmall{border-radius:1px;font-size:11px;font-weight:400;line-height:15px;padding:2px 7px}.tv-button--size_xsmall.tv-button--danger_ghost,.tv-button--size_xsmall.tv-button--default,.tv-button--size_xsmall.tv-button--default_ghost,.tv-button--size_xsmall.tv-button--primary_ghost,.tv-button--size_xsmall.tv-button--secondary_ghost,.tv-button--size_xsmall.tv-button--state,.tv-button--size_xsmall.tv-button--success_ghost,.tv-button--size_xsmall.tv-button--warning_ghost{padding:1px 6px}.tv-button--size_xsmall+.tv-button--size_xsmall{margin-left:10px}.tv-button--size_small{font-size:13px;line-height:25px;padding:1px 12px}.tv-button--size_small.tv-button--danger_ghost,.tv-button--size_small.tv-button--default,.tv-button--size_small.tv-button--default_ghost,.tv-button--size_small.tv-button--primary_ghost,.tv-button--size_small.tv-button--secondary_ghost,.tv-button--size_small.tv-button--state,.tv-button--size_small.tv-button--success_ghost,.tv-button--size_small.tv-button--warning_ghost{padding:0 11px}.tv-button--size_small+.tv-button--size_small{margin-left:10px}.tv-button--size_large{font-size:17px;line-height:44px;padding:1px 30px}.tv-button--size_large.tv-button--danger_ghost,.tv-button--size_large.tv-button--default,.tv-button--size_large.tv-button--default_ghost,.tv-button--size_large.tv-button--primary_ghost,.tv-button--size_large.tv-button--secondary_ghost,.tv-button--size_large.tv-button--state,.tv-button--size_large.tv-button--success_ghost,.tv-button--size_large.tv-button--warning_ghost{padding:0 29px}.tv-button--size_promo{border-radius:120px;font-size:24px;line-height:54px;padding:1px 40px}.tv-button--size_promo.tv-button--danger_ghost,.tv-button--size_promo.tv-button--default,.tv-button--size_promo.tv-button--default_ghost,.tv-button--size_promo.tv-button--primary_ghost,.tv-button--size_promo.tv-button--secondary_ghost,.tv-button--size_promo.tv-button--state,.tv-button--size_promo.tv-button--success_ghost,.tv-button--size_promo.tv-button--warning_ghost{padding:0 39px}.tv-button--no-padding{padding:1px}.tv-button--no-padding.tv-button--danger_ghost,.tv-button--no-padding.tv-button--default,.tv-button--no-padding.tv-button--default_ghost,.tv-button--no-padding.tv-button--primary_ghost,.tv-button--no-padding.tv-button--secondary_ghost,.tv-button--no-padding.tv-button--state,.tv-button--no-padding.tv-button--success_ghost,.tv-button--no-padding.tv-button--warning_ghost{padding:0}.tv-button--state{background:#0000;border-style:solid;border-width:1px;text-align:center}html.theme-dark .tv-button--state{background:#0000}.tv-button--state:after{content:"";display:inline-block}.tv-button--state__checked,.tv-button--state__uncheck-hint,.tv-button--state__unchecked{display:block;height:0;transition:opacity .2625s ease,transform .2625s ease}.tv-button--state__ellipsis-text{display:block;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__checked,.tv-button--state.i-checked:hover .tv-button--state__uncheck-hint,.tv-button--state.i-checked:hover .tv-button--state__unchecked{will-change:opacity,transform}}.tv-button--state.i-checked .tv-button--state__unchecked,.tv-button--state__checked,.tv-button--state__uncheck-hint{opacity:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__checked{opacity:0}}.tv-button--state.i-checked .tv-button--state__checked,.tv-button--state__unchecked{opacity:1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__uncheck-hint{opacity:1}.tv-button--state.i-checked:hover .tv-button--state__checked{transform:translateY(-5px)}}.tv-button--state.i-checked .tv-button--state__unchecked,.tv-button--state__checked,.tv-button--state__uncheck-hint{transform:translateY(5px)}.tv-button--state.i-checked .tv-button--state__checked{transform:translateY(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__uncheck-hint{transform:translateY(0)}}.tv-button--state.tv-button--success{background-color:initial;color:#009688}html.theme-dark .tv-button--state.tv-button--success{background-color:initial;color:#00796b}.tv-button--state.tv-button--success.i-checked{background-color:#009688;color:#fff}html.theme-dark .tv-button--state.tv-button--success.i-checked{background-color:#00796b;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--success:hover{background-color:#00897b;color:#fff}html.theme-dark .tv-button--state.tv-button--success:hover{background-color:#00897b;color:#fff}}.tv-button--state.tv-button--success:active{background-color:#00796b;color:#fff}html.theme-dark .tv-button--state.tv-button--success:active{background-color:#009688;color:#fff}.tv-button--state.tv-button--danger{background-color:initial;color:#ef5350}html.theme-dark .tv-button--state.tv-button--danger{background-color:initial;color:#d32f2f}.tv-button--state.tv-button--danger.i-checked{background-color:#ff4a68;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--danger:hover{background-color:#f24965;color:#fff}}.tv-button--state.tv-button--danger:active{background-color:#ff173e;color:#fff}.tv-button--state.tv-button--primary{background-color:initial;color:#2962ff}html.theme-dark .tv-button--state.tv-button--primary{background-color:initial;color:#2962ff}.tv-button--state.tv-button--primary.i-checked{background-color:#2962ff;color:#fff}html.theme-dark .tv-button--state.tv-button--primary.i-checked{background-color:#2962ff;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--primary:hover{background-color:#1e53e5;color:#fff}html.theme-dark .tv-button--state.tv-button--primary:hover{background-color:#1e53e5;color:#fff}}.tv-button--state.tv-button--primary:active{background-color:#1848cc;color:#fff}html.theme-dark .tv-button--state.tv-button--primary:active{background-color:#1848cc;color:#fff}.tv-button--state.tv-button--primary_ghost-hover.i-checked{background-color:initial;color:#2962ff}html.theme-dark .tv-button--state.tv-button--primary_ghost-hover.i-checked{background-color:initial;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--primary_ghost-hover:hover{background-color:#1e53e5;color:#fff}html.theme-dark .tv-button--state.tv-button--primary_ghost-hover:hover{background-color:#1e53e5;color:#fff}}.tv-button--state.tv-button--primary_ghost-hover:active{background-color:#1848cc;color:#fff}html.theme-dark .tv-button--state.tv-button--primary_ghost-hover:active{background-color:#1848cc;color:#fff}.tv-button--state.tv-button--secondary{background-color:initial;color:#757575}.tv-button--state.tv-button--secondary.i-checked{background-color:#e9eff2;color:#757575}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--secondary:hover{background-color:#dce6ea;color:#757575}}.tv-button--state.tv-button--secondary:active{background-color:#cfdce3;color:#757575}.tv-button--state.tv-button--warning{background-color:initial;color:#f89e30}.tv-button--state.tv-button--warning.i-checked{background-color:#f89e30;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--warning:hover{background-color:#f79217;color:#fff}}.tv-button--state.tv-button--warning:active{background-color:#d47807;color:#fff}.tv-button--state.tv-button--icon-with-text svg{margin-bottom:-8px;margin-right:6px;vertical-align:unset}.tv-button--icon{align-items:center;display:inline-flex;height:34px;justify-content:center;min-width:auto;padding:0!important;width:34px}.tv-button--icon.tv-button--size_xsmall{height:19px;width:19px}.tv-button--icon.tv-button--size_small{height:27px;width:27px}.tv-button--icon.tv-button--size_large{height:46px;width:46px}.tv-button__icon{display:flex;margin-right:7px}.tv-button--loader .tv-button__text{transition:opacity .175s ease,transform .175s ease}.tv-button--loader.i-start-load .tv-button__text{opacity:0;transform:translateY(-5px)}.tv-button--loader.i-loading .tv-button__text{opacity:0;transform:translateY(5px)}.tv-button--loader.i-stop-load .tv-button__text{opacity:1;transform:translateY(0);transition-delay:.175s}.tv-button__loader{bottom:0;font-size:0;height:100%;left:0;margin:0 auto;opacity:0;position:absolute;right:0;text-align:center;top:0;transition:opacity .35s ease}.tv-button__loader:after{content:"";display:inline-block;height:100%;vertical-align:middle}.tv-button--loader.i-loading .tv-button__loader,.tv-button--loader.i-start-load .tv-button__loader{opacity:1}.tv-button--loader.i-stop-load .tv-button__loader{opacity:0}.tv-button__loader-item{background-color:#fff;border-radius:100%;display:inline-block;height:10px;margin-left:2px;margin-right:2px;opacity:0;transform:translateY(12px) scale(.6);transition:transform .35s cubic-bezier(.68,-.55,.265,1.55),opacity .35s ease;vertical-align:middle;width:10px}.tv-button__loader-item:nth-child(2){transition-delay:.11666667s}.tv-button__loader-item:nth-child(3){transition-delay:.23333333s}.tv-button--default .tv-button__loader-item{background-color:#757575}.tv-button--loader.i-loading .tv-button__loader-item,.tv-button--loader.i-start-load .tv-button__loader-item{opacity:1}.tv-button--loader.i-stop-load .tv-button__loader-item{opacity:0}.tv-button--loader.i-loading .tv-button__loader-item,.tv-button--loader.i-start-load .tv-button__loader-item,.tv-button--loader.i-stop-load .tv-button__loader-item{transform:translateY(0) scale(.6)}.tv-button--loader.i-loading .tv-button__loader-item,.tv-button--loader.i-stop-load .tv-button__loader-item{animation:tv-button-loader .96s ease-in-out infinite both}.tv-button--loader.i-loading .tv-button__loader-item:nth-child(2),.tv-button--loader.i-stop-load .tv-button__loader-item:nth-child(2){animation-delay:.151s}.tv-button--loader.i-loading .tv-button__loader-item:nth-child(3),.tv-button--loader.i-stop-load .tv-button__loader-item:nth-child(3){animation-delay:.32s}.tv-button--no-border-radius{border-radius:0}.tv-button--no-border{border:none}.tv-button--connect{border-radius:0}.tv-button--connect_left{border-bottom-left-radius:0;border-top-left-radius:0}.tv-button--connect_right{border-bottom-right-radius:0;border-top-right-radius:0}.tv-button--with-icon{align-items:center;display:inline-flex;transform:translate(0)}@keyframes tv-button-loader{0%,to{transform:scale(.6)}50%{transform:scale(.9)}}.tv-control-input{-webkit-tap-highlight-color:transparent;-webkit-appearance:none;appearance:none;background-color:#fff;border:1px solid #e0e3eb;border-radius:2px;box-sizing:border-box;color:#434651;display:block;font-size:13px;height:34px;padding:0 12px;transition:border-color .35s ease,background-color .35s ease;width:100%}html.theme-dark .tv-control-input{background-color:#1e222d;border-color:#363a45;color:#d1d4dc}.tv-control-input::placeholder{color:#a3a6af;opacity:1}html.theme-dark .tv-control-input::placeholder{color:#50535e}.tv-control-input:-webkit-autofill{-webkit-text-fill-color:#535353!important;box-shadow:inset 0 0 0 1000px #fff!important}.tv-control-input--size_xsmall{height:19px}.tv-control-input--size_small{height:27px}.tv-control-input--size_large{font-size:16px;height:48px}.tv-control-input--connect{border-left:0;border-radius:0;border-right:0}.tv-control-input--connect_left{border-bottom-left-radius:0;border-left:none;border-top-left-radius:0}.tv-control-input--connect_right{border-bottom-right-radius:0;border-right:none;border-top-right-radius:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input:hover{border-color:#c1c4cd;transition-duration:.06s}html.theme-dark .tv-control-input:hover{border-color:#50535e}}.tv-control-input:focus{border-color:#2962ff!important;transition-duration:.06s}.tv-control-input[readonly]{border-color:#dadde0;color:#8a8a8a}.tv-control-input[readonly]:focus{border-color:#e0e3eb!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input[readonly]:hover{border-color:#e0e3eb!important}}html.theme-dark .tv-control-input[readonly]:focus{border-color:#2a2e39!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-control-input[readonly]:hover{border-color:#2a2e39!important}}.tv-control-input--readonly_dark,.tv-control-input--readonly_dark[readonly],html.theme-dark .tv-control-input--readonly_dark,html.theme-dark .tv-control-input--readonly_dark[readonly]{color:#50535e}.tv-control-input.i-disabled,.tv-control-input[disabled]{border-color:#e0e3eb!important;color:#e0e3eb!important}html.theme-dark .tv-control-input.i-disabled,html.theme-dark .tv-control-input[disabled]{border-color:#2a2e39!important;color:#2a2e39!important}.tv-control-input.i-disabled::placeholder,.tv-control-input[disabled]::placeholder{color:#e0e3eb!important}html.theme-dark .tv-control-input.i-disabled::placeholder,html.theme-dark .tv-control-input[disabled]::placeholder{color:#2a2e39!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input.i-disabled:hover,.tv-control-input[disabled]:hover{border-color:#e0e3eb!important}html.theme-dark .tv-control-input.i-disabled:hover,html.theme-dark .tv-control-input[disabled]:hover{border-color:#2a2e39!important}}.tv-control-input.i-error{border-color:#ff4a68!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input.i-error:hover{border-color:#f24965!important}}.tv-control-input.i-error:focus{border-color:#ff173e!important}.tv-control-input.i-success{border-color:#009688!important}html.theme-dark .tv-control-input.i-success{border-color:#00796b!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input.i-success:hover,html.theme-dark .tv-control-input.i-success:hover{border-color:#00897b!important}}.tv-control-input.i-success:active,.tv-control-input.i-success:focus{border-color:#00796b!important}html.theme-dark .tv-control-input.i-success:active,html.theme-dark .tv-control-input.i-success:focus{border-color:#009688!important}.tv-control-input--phone{direction:ltr;text-align:left}.tv-control-input--file{display:none}body,html{background:none;height:100%;overflow:hidden;width:100%}body{min-width:240px}#library-container{background:#fff;border:1px solid #d9dadb}#library-container #showExtendedHoursLink{display:none}.on-widget .open-popup{background:#6798bb;border-width:0!important;border:none;margin-left:4px;padding:7px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.on-widget .open-popup:hover{background:#69a3cc}}.on-widget .open-popup:active{background:#71acd6}.on-widget .open-popup svg{fill:#fff;display:block;height:14px;width:16px}.on-widget .widgetbar-widget-hotlist .widgetbar-widgetheader .widgetbar-headerspace{display:none}.text .logo-highlighted{font-weight:700;text-decoration:underline}.on-cme-widget .symbol-edit-popup .filter,.on-cme-widget .symbol-search-dialog .filter{display:none}.on-cme-widget .symbol-search-dialog .results{height:450px}.load-chart .chart-search,.load-chart .chart-search input{width:100%}@media only screen and (max-width:750px){.charts-popup-list .item.save-load-chart-title{display:block}}.charts-popup-list .item .title,.charts-popup-list .item .title-expanded{width:auto}.common-tooltip-36YLR71G{color:#f0f3fa;display:inline-flex;font-size:12px;line-height:18px;opacity:1;pointer-events:none;position:fixed;transition:opacity .15s linear;z-index:1000}.common-tooltip--hidden-36YLR71G{opacity:0}.common-tooltip--horizontal-36YLR71G{margin:4px 0}.common-tooltip--horizontal-36YLR71G.common-tooltip--farther-36YLR71G{margin:8px 0}.common-tooltip--vertical-36YLR71G{margin:0 4px}.common-tooltip--vertical-36YLR71G.common-tooltip-farther-36YLR71G{margin:0 8px}.common-tooltip--direction_normal-36YLR71G{flex-direction:row}.common-tooltip--direction_normal-36YLR71G .common-tooltip__body-36YLR71G{border-bottom-left-radius:2px;border-top-left-radius:2px}.common-tooltip--direction_normal-36YLR71G .common-tooltip__body--no-buttons-36YLR71G,.common-tooltip--direction_normal-36YLR71G .common-tooltip__button-container-36YLR71G{border-bottom-right-radius:2px;border-top-right-radius:2px}.common-tooltip--direction_normal-36YLR71G .common-tooltip__button-36YLR71G:not(:last-child){margin-right:1px}.common-tooltip--direction_reversed-36YLR71G{flex-direction:row-reverse}.common-tooltip--direction_reversed-36YLR71G .common-tooltip__body-36YLR71G{border-bottom-right-radius:2px;border-top-right-radius:2px}.common-tooltip--direction_reversed-36YLR71G .common-tooltip__body--no-buttons-36YLR71G,.common-tooltip--direction_reversed-36YLR71G .common-tooltip__button-container-36YLR71G{border-bottom-left-radius:2px;border-top-left-radius:2px}.common-tooltip--direction_reversed-36YLR71G .common-tooltip__button-36YLR71G:not(:first-child){margin-left:1px}.common-tooltip__ear-holder-36YLR71G{position:relative}.common-tooltip__ear-holder-36YLR71G:after{border:0 solid #2a2e39;box-sizing:border-box;content:"";display:block;height:0;position:absolute;width:0}html.theme-dark .common-tooltip__ear-holder-36YLR71G:after{border-color:#50535e}.common-tooltip__ear-holder--above-36YLR71G:after,.common-tooltip__ear-holder--below-36YLR71G:after{border-left:6px solid #0000;border-right:6px solid #0000;left:50%;margin-left:-6px}html.theme-dark .common-tooltip__ear-holder--above-36YLR71G:after,html.theme-dark .common-tooltip__ear-holder--below-36YLR71G:after{border-left-color:#0000;border-right-color:#0000}.common-tooltip__ear-holder--below-36YLR71G:after{border-bottom-width:4px;bottom:100%}.common-tooltip__ear-holder--above-36YLR71G:after{border-top-width:4px;top:100%}.common-tooltip__ear-holder--after-36YLR71G:after,.common-tooltip__ear-holder--before-36YLR71G:after{border-bottom:6px solid #0000;border-top:6px solid #0000;margin-top:-6px;top:50%}html.theme-dark .common-tooltip__ear-holder--after-36YLR71G:after,html.theme-dark .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom-color:#0000;border-top-color:#0000}.common-tooltip__ear-holder--before-36YLR71G:after{border-right-width:4px;right:100%}.common-tooltip__ear-holder--after-36YLR71G:after{border-left-width:4px;left:100%}.common-tooltip__body-36YLR71G{word-wrap:break-word;background-color:#2a2e39;box-sizing:border-box;display:block;max-width:320px;overflow:hidden;padding:3px 8px;position:relative;text-align:left;white-space:pre-wrap}html.theme-dark .common-tooltip__body-36YLR71G{background-color:#50535e}.common-tooltip__body--with-hotkey-36YLR71G{display:flex;max-width:420px;padding:0}.common-tooltip__body--width_wide-36YLR71G{max-width:640px}.common-tooltip__body--width_narrow-36YLR71G{max-width:200px}.common-tooltip__body--no-padding-36YLR71G{padding:0}.common-tooltip__hotkey-block-36YLR71G{align-items:center;color:#ff9800;display:inline-flex;flex:1 0 auto;justify-content:center;line-height:12px;padding:4px 8px 5px}.common-tooltip__hotkey-block--divider-36YLR71G{border-left:1px solid #5d606b;margin-left:8px}html.theme-dark .common-tooltip__hotkey-block--divider-36YLR71G{border-left:1px solid #363a45}.common-tooltip__hotkey-text-36YLR71G{align-items:center;display:inline-flex;margin:3px 0 3px 8px}.common-tooltip__hotkey-button-36YLR71G{align-items:center;border:1px solid;border-radius:2px;display:inline-flex;height:13px;justify-content:center;min-width:7px;padding:0 3px}.common-tooltip__plus-sign-36YLR71G{height:15px;line-height:16px;text-align:center;width:13px}.common-tooltip__button-container-36YLR71G{display:flex;overflow:hidden;position:relative}.common-tooltip__button-36YLR71G{align-items:center;background-color:#2962ff;color:#fff;display:flex;padding:0 10px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.common-tooltip__button-36YLR71G:hover{background-color:#bbd9fb}}.common-tooltip-36YLR71G.theme-white{color:#131722}html.theme-dark .common-tooltip-36YLR71G.theme-white{color:#d1d4dc}.common-tooltip-36YLR71G.theme-white .common-tooltip__body-36YLR71G{background-color:#fff;border-radius:0}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__body-36YLR71G{background-color:#1e222d}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G{border:1px solid #e0e3eb}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G{border:1px solid #363a45}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:after{border-color:#fff}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:after{border-color:#1e222d}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:after,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:after{border-left:6px solid #0000;border-right:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:after{border-left-color:#0000;border-right-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:after,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom:6px solid #0000;border-top:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom-color:#0000;border-top-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:before{border:0 solid #e0e3eb;content:"";display:block;height:0;position:absolute;width:0;z-index:1000}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:before{border-color:#363a45}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:before,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:before{border-left:7px solid #0000;border-right:7px solid #0000;left:50%;margin-left:-7px}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:before,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:before{border-left-color:#0000;border-right-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:before{border-bottom-width:6px;top:-6px}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:before{border-top-width:6px;bottom:-6px}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:before,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:before{border-bottom:7px solid #0000;border-top:7px solid #0000;margin-top:-7px;top:50%}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:before,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:before{border-bottom-color:#0000;border-top-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:before{border-right-width:6px;left:-6px}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:before{border-left-width:6px;right:-6px}.common-tooltip-36YLR71G.theme-round-shadow{box-shadow:0 1px 3px 0 #2a2c394a;color:#131722}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow{color:#d1d4dc}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__body-36YLR71G{background-color:#fff}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__body-36YLR71G{background-color:#1e222d}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder-36YLR71G:after{border-color:#fff}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder-36YLR71G:after{border-color:#1e222d}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--above-36YLR71G:after,.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--below-36YLR71G:after{border-left:6px solid #0000;border-right:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--above-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--below-36YLR71G:after{border-left-color:#0000;border-right-color:#0000}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--after-36YLR71G:after,.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom:6px solid #0000;border-top:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--after-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom-color:#0000;border-top-color:#0000}.container-e6Js9pSl{background-color:#e0e3eb;box-sizing:border-box;height:100%;width:100%}html.theme-dark .container-e6Js9pSl{background-color:#2a2e39}.container-e6Js9pSl .inner-e6Js9pSl{background-color:#fff;height:100%;width:100%}html.theme-dark .container-e6Js9pSl .inner-e6Js9pSl{background-color:#131722}.container-e6Js9pSl.border-left-e6Js9pSl{padding-left:4px}.container-e6Js9pSl.border-right-e6Js9pSl{padding-right:4px}.container-e6Js9pSl.border-top-e6Js9pSl{padding-top:4px}.container-e6Js9pSl.border-bottom-e6Js9pSl{padding-bottom:4px}.container-e6Js9pSl.top-right-radius-e6Js9pSl .inner-e6Js9pSl{border-top-right-radius:0}.container-e6Js9pSl.top-left-radius-e6Js9pSl .inner-e6Js9pSl{border-top-left-radius:0}.container-e6Js9pSl.bottom-right-radius-e6Js9pSl .inner-e6Js9pSl{border-bottom-right-radius:0}.container-e6Js9pSl.bottom-left-radius-e6Js9pSl .inner-e6Js9pSl{border-bottom-left-radius:0}.tv-exit-fullscreen-button{background:#fff;border:1px solid #c9cbcd;border-radius:0 0 3px 3px;color:#848487;cursor:default;font-size:11px;font-weight:700;left:50%;margin:0 0 0 -59px;opacity:.6;padding:2px 4px;position:fixed;top:-1px;width:116px;z-index:16}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-exit-fullscreen-button:hover{opacity:1}}button,html input[type=button],input[type=reset],input[type=submit]{cursor:default}.chart-widget{border-style:none;box-sizing:border-box;height:256px;left:0;margin:0;overflow:hidden;padding:0;position:absolute;top:0;width:512px}.chart-header{background-color:#fff;border-bottom:1px solid gray;color:#fff}table.chart-markup-table{border:none;border-collapse:collapse;border-spacing:0;line-height:0px;margin:0;padding:0}.chart-markup-table tr{margin:0;padding:0}td.chart-markup-table{border:none;line-height:0px;margin:0;padding:0;text-align:left;vertical-align:top}.chart-gui-wrapper{align-items:flex-start;direction:ltr;display:flex;height:100%;max-height:100%;max-width:100%;overflow:hidden;position:relative;width:100%}.chart-data-window{background-color:#fff;border-collapse:collapse;box-sizing:border-box;color:#434651;margin:0;padding:0;position:absolute;text-align:left;width:100%}html.theme-dark .chart-data-window{background-color:#131722;color:#d1d4dc}.chart-data-window .box{margin:3px}.chart-data-window .box.with-actions{cursor:pointer}.chart-data-window .box:first-child .chart-data-window-header:first-child{margin-top:0}.chart-data-window .hover .chart-data-window-header .hover-source-icon{display:block}.chart-data-window .active{border-left:2px solid #528cde}.chart-data-window .active .chart-data-window-header{background:#e9f8ff}.chart-data-window .active .chart-data-window-header,.chart-data-window .active .chart-data-window-item .chart-data-window-item-title{padding-left:8px}.chart-data-window .active .chart-data-window-item{font-weight:700}.chart-data-window .hidden{opacity:.3}.chart-data-window .hidden .chart-data-window-item{display:none}.chart-data-window .chart-data-window-header,.chart-data-window .chart-data-window-item{margin-bottom:3px;position:relative}.chart-data-window .chart-data-window-header{background:#f0f3fa;font-size:12px;font-weight:700;padding:9px 10px}html.theme-dark .chart-data-window .chart-data-window-header{background:#2a2e39}.chart-data-window .chart-data-window-header .toggle-source-icon{display:block;height:10px;position:absolute;right:14px;top:11px;width:16px}.chart-data-window .chart-data-window-header .toggle-source-icon svg{fill:#787b86;display:block;height:10px;width:16px}html.theme-dark .chart-data-window .chart-data-window-header .toggle-source-icon svg{fill:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-data-window .chart-data-window-header .toggle-source-icon:hover svg{fill:#2962ff!important}}.chart-data-window .chart-data-window-header .hover-source-icon{background:#2962ff;border-radius:10px;display:none;height:10px;position:absolute;right:40px;top:11px;width:10px}.chart-data-window .chart-data-window-item:last-child{margin-bottom:0}.chart-data-window .chart-data-window-item .chart-data-window-item-title,.chart-data-window .chart-data-window-item .chart-data-window-item-value{box-sizing:border-box;display:inline-block;padding:4px 10px;white-space:nowrap;width:50%}.chart-data-window .chart-data-window-item .chart-data-window-item-title .real-color,.chart-data-window .chart-data-window-item .chart-data-window-item-value .real-color{border:1px dotted #ccc;cursor:help;display:inline-block;height:8px;margin-right:15px;width:15px}.chart-data-window .chart-data-window-item .chart-data-window-item-value{text-align:right}.chart-loading-screen{height:0;left:0;position:absolute;top:0;width:0;z-index:4}.chart-loading-screen .chart-loading-screen-shield{background:red;height:100%;opacity:0;width:100%}.chart-loading-screen.fade{height:100%;width:100%}.chart-loading-screen.fade .chart-loading-screen-shield{opacity:.5;transition:opacity .3s ease}.bar-mark-tooltip{background:#ffffffe6;border:1px solid gray;display:none;min-height:18px;padding:8px 10px 8px 8px;position:absolute;z-index:14}html.theme-dark .bar-mark-tooltip{background:#131722e6}.bar-mark-tooltip .text{display:inline-block;font-size:13px;line-height:13px;max-width:250px;overflow:hidden;padding-left:4px;padding-top:2px;text-overflow:ellipsis}.published-charts-tooltip{background:#ffffffe6;border:1px solid;cursor:default;display:none;height:32px;margin-top:-25px;padding:8px 30px 8px 8px;position:absolute;z-index:7}html.theme-dark .published-charts-tooltip{background:#131722e6}.published-charts-tooltip .avatar{height:32px;left:8px;position:absolute;top:8px;width:32px}.published-charts-tooltip .avatar img{height:32px;width:32px}.published-charts-tooltip .pin{background-image:url(7393f661fc7d4389ea6d4dabd2a5aeea.png);cursor:pointer;height:16px;position:absolute;right:9px;top:9px;vertical-align:top;width:16px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.published-charts-tooltip .pin:hover{background-position:32px 0}}.published-charts-tooltip .pin.pinned{background-position:16px 0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.published-charts-tooltip .pin.pinned:hover{background-position:16px 0}}.published-charts-tooltip .text{color:#434651;cursor:pointer;display:inline-block;font-size:13px;font-weight:700;line-height:15px;max-width:250px;overflow:hidden;padding-left:39px;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .published-charts-tooltip .text{color:#8b8f95}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.published-charts-tooltip .text:hover{text-decoration:underline}}.published-charts-tooltip .username{color:#8f8f8f;font-size:11px;font-weight:400;line-height:13px;padding-left:39px;padding-top:2px;white-space:nowrap}.published-charts-tooltip:after,.published-charts-tooltip:before{border:solid #0000;content:" ";height:0;left:100%;pointer-events:none;position:absolute;width:0}.published-charts-tooltip:after{border-width:1em;margin-top:-1em;top:50%}.published-charts-tooltip:before{border-width:1.1em;margin-top:-1.1em;top:50%}.published-charts-tooltip:not(.right):after{border-color:#fff0 #fff0 #fff0 #fff}html.theme-dark .published-charts-tooltip:not(.right):after{border-left-color:#131722}.published-charts-tooltip.right:after{border-color:#fff0 #fff #fff0 #fff0}html.theme-dark .published-charts-tooltip.right:after{border-right-color:#131722}.published-charts-tooltip.right:before{left:-2.2em}.published-charts-tooltip.right:after{left:-2em}.published-charts-tooltip.green{border-color:#78c143}.published-charts-tooltip.red{border-color:#cc4545}.published-charts-tooltip.neutral{border-color:#eac300}.published-charts-tooltip.green:before{border-color:#78c14300 #78c14300 #78c14300 #78c143}.published-charts-tooltip.red:before{border-color:#cc454500 #cc454500 #cc454500 #cc4545}.published-charts-tooltip.neutral:before{border-color:#eac30000 #eac30000 #eac30000 #eac300}.published-charts-tooltip.green.right:before{border-color:#78c14300 #78c143 #78c14300 #78c14300}.published-charts-tooltip.red.right:before{border-color:#cc454500 #cc4545 #cc454500 #cc454500}.published-charts-tooltip.neutral.right:before{border-color:#eac30000 #eac300 #eac30000 #eac30000}.chart-controls-bar{background-color:var(--tv-color-pane-background,#fff);border-top:1px solid;border-color:var(--tv-color-platform-background,#e0e3eb);border-radius:0 0 4px 4px;box-sizing:border-box;contain:strict;height:39px;overflow:hidden;position:absolute}html.theme-dark .chart-controls-bar{background-color:var(--tv-color-pane-background,#131722);border-color:var(--tv-color-platform-background,#2a2e39)}.no-border-bottom-left-radius .chart-controls-bar{border-bottom-left-radius:0}.no-border-bottom-right-radius .chart-controls-bar{border-bottom-right-radius:0}.charts-popup-list.date-range-popupmenu{margin-left:1px}.charts-popup-list.date-range-popupmenu .item{padding-left:10px;padding-right:10px}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(40f9a03d174178efb12303caa9bc7cd8.woff2) format("woff2"),url(3293616ec0c605c7c2db25829a0a509e.woff) format("woff")}.ui-draggable{touch-action:none}.chart-gui-button-pseudo-border{background:#0000;border:1px solid #b5b7b9;content:"";display:block;height:100%;left:-1px;position:absolute;top:-1px;width:100%;z-index:1}html.theme-dark .chart-gui-button-pseudo-border{border-color:#4c525e}._tv-dialog .button,._tv-dialog .submenu,.bottom-widgetbar-content.backtesting .button,.bottom-widgetbar-content.backtesting .submenu,.properties-toolbar .button,.properties-toolbar .submenu,.widgetbar-widgetheader .button,.widgetbar-widgetheader .submenu{position:relative}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){._tv-dialog .button:not(.disabled):not(.selected):hover:before,._tv-dialog .submenu:not(.disabled):not(.selected):hover:before,.bottom-widgetbar-content.backtesting .button:not(.disabled):not(.selected):hover:before,.bottom-widgetbar-content.backtesting .submenu:not(.disabled):not(.selected):hover:before,.properties-toolbar .button:not(.disabled):not(.selected):hover:before,.properties-toolbar .submenu:not(.disabled):not(.selected):hover:before,.widgetbar-widgetheader .button:not(.disabled):not(.selected):hover:before,.widgetbar-widgetheader .submenu:not(.disabled):not(.selected):hover:before{background:#0000;border:1px solid #b5b7b9;content:"";display:block;height:100%;left:-1px;position:absolute;top:-1px;width:100%;z-index:1}html.theme-dark ._tv-dialog .button:not(.disabled):not(.selected):hover:before,html.theme-dark ._tv-dialog .submenu:not(.disabled):not(.selected):hover:before,html.theme-dark .bottom-widgetbar-content.backtesting .button:not(.disabled):not(.selected):hover:before,html.theme-dark .bottom-widgetbar-content.backtesting .submenu:not(.disabled):not(.selected):hover:before,html.theme-dark .properties-toolbar .button:not(.disabled):not(.selected):hover:before,html.theme-dark .properties-toolbar .submenu:not(.disabled):not(.selected):hover:before,html.theme-dark .widgetbar-widgetheader .button:not(.disabled):not(.selected):hover:before,html.theme-dark .widgetbar-widgetheader .submenu:not(.disabled):not(.selected):hover:before{border-color:#4c525e}._tv-dialog .tv-select-container:not(.sbHolderDisabled):hover,.bottom-widgetbar-content.backtesting .tv-select-container:not(.sbHolderDisabled):hover,.properties-toolbar .tv-select-container:not(.sbHolderDisabled):hover,.widgetbar-widgetheader .tv-select-container:not(.sbHolderDisabled):hover{border:1px solid #b5b7b9}html.theme-dark ._tv-dialog .tv-select-container:not(.sbHolderDisabled):hover,html.theme-dark .bottom-widgetbar-content.backtesting .tv-select-container:not(.sbHolderDisabled):hover,html.theme-dark .properties-toolbar .tv-select-container:not(.sbHolderDisabled):hover,html.theme-dark .widgetbar-widgetheader .tv-select-container:not(.sbHolderDisabled):hover{border-color:#4c525e}.widgetbar-widgetheader .button:hover{border:1px solid #f7f8fa}html.theme-dark .widgetbar-widgetheader .button:hover{border-color:#4c525e}}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;width:100%}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#e0e3eb80;border-radius:50%;display:inline-block;height:19px;position:relative;transform-origin:bottom;width:19px;z-index:2}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{bottom:50%;color:#50535e;font-size:11px;opacity:1;pointer-events:false;position:absolute;text-align:center;top:50%;width:100%;z-index:2}html.theme-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{color:#50535e}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{height:15px;left:2px;opacity:0;pointer-events:false;position:absolute;top:2px;z-index:3}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#131722}.chart-container.inactive .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{display:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-container:hover .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{display:inline-block}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#e0e3eb00}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{opacity:1}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#000}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{opacity:0}}.price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#0000}.price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{opacity:0}.price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{opacity:1}.price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#e0e3eb80}.price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{opacity:0}.price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{opacity:1}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#2a2e3980}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd,html.theme-dark .chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{color:#787b86}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#2a2e3900}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#9598a1}}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#2a2e3980}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#0000}.time-axis{cursor:default}.time-axis--cursor-grabbing{cursor:grabbing}.time-axis--cursor-ew-resize{cursor:ew-resize}.tv-spinner{animation:tv-spinner__container-rotate .9s linear infinite;color:#2962ff;direction:ltr;display:none;height:1em;left:calc(50% - .5em);margin:0 auto;position:absolute;top:calc(50% - .5em);width:1em;will-change:transform}.tv-spinner--size_mini{font-size:16px}.tv-spinner--size_medium{font-size:32px}.tv-spinner--size_large{font-size:56px}.tv-spinner--size_mini .tv-spinner__width_element:after{border-width:2px}.tv-spinner--size_medium .tv-spinner__width_element:after{border-width:3px}.tv-spinner--size_large .tv-spinner__width_element:after{border-width:4px}.tv-spinner--shown{display:block}.tv-spinner__spinner-layer{color:currentColor;height:100%;position:absolute;transform:rotate(90deg);white-space:nowrap;width:100%}.tv-spinner__spinner-layer:after{border-radius:50%;border-top-style:solid;border-width:.07em;box-sizing:border-box;content:"";left:45%;position:absolute;top:0;width:10%}.tv-spinner__background{display:inline-block;height:100%;overflow:hidden;position:absolute;width:100%}.tv-spinner__background:after{border-color:#8797a533;border-radius:50%;border-style:solid;bottom:0;box-sizing:border-box;content:"";left:0;position:absolute;top:0;width:100%}.tv-spinner__circle-clipper{display:inline-block;height:100%;overflow:hidden;position:relative;width:50%}.tv-spinner__circle-clipper:after{animation-duration:1.4s;animation-iteration-count:1;animation-timing-function:cubic-bezier(.36,0,.37,.99);border-bottom-color:#0000;border-radius:50%;border-style:solid;bottom:0;box-sizing:border-box;content:"";position:absolute;top:0;width:200%;will-change:transform}.tv-spinner__circle-clipper--left:after{animation-name:tv-spinner__left-spin;border-right-color:#0000;left:0;transform:rotate(0deg)}.tv-spinner__circle-clipper--right:after{animation-name:tv-spinner__right-spin;border-left-color:#0000;left:-100%;transform:rotate(-124deg)}@keyframes tv-spinner__container-rotate{to{transform:rotate(1turn)}}@keyframes tv-spinner__left-spin{0%{transform:rotate(130deg)}to{transform:rotate(0deg)}}@keyframes tv-spinner__right-spin{0%{transform:rotate(-130deg)}to{transform:rotate(-124deg)}}.pane{cursor:crosshair;overflow:hidden}.pane--cursor-pointer{cursor:pointer}.pane--cursor-eraser{cursor:url(0579d40b812fa2c3ffe72e5803a6e14c.cur),default}.pane--cursor-dot{cursor:url(ed68e83c16f77203e73dbc4c3a7c7fa1.cur),default}.pane--cursor-default{cursor:default}.pane--cursor-grabbing{cursor:grabbing}.pane--cursor-zoom-in{cursor:zoom-in}.pane--cursor-ew-resize{cursor:ew-resize}.pane--cursor-ns-resize{cursor:ns-resize}.pane--cursor-nwse-resize{cursor:nwse-resize}.pane--cursor-nesw-resize{cursor:nesw-resize}.price-axis{cursor:default;height:100%;overflow:hidden;position:absolute}.price-axis--cursor-grabbing{cursor:grabbing}.price-axis--cursor-pointer{cursor:pointer}.price-axis--cursor-ns-resize{cursor:ns-resize}.price-axis-currency-label-wrapper-25tFaE37{left:0;pointer-events:none;position:absolute;text-align:center;top:6px;-webkit-user-select:none;user-select:none;width:100%;z-index:3}.price-axis-currency-label-25tFaE37{border:1px solid #d1d4dc;border-radius:4px;display:inline-block;text-align:left}.chart-container.inactive .price-axis-currency-label-25tFaE37{display:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-container:hover .price-axis-currency-label-25tFaE37{display:inline-block}}.price-axis-currency-label-25tFaE37 tr{pointer-events:auto}.price-axis-currency-label-25tFaE37 tr td:first-child{border-radius:4px 0 0 4px;padding-left:4px}.price-axis-currency-label-25tFaE37 tr td:last-child{border-radius:0 4px 4px 0;padding-right:2px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.price-axis-currency-label-25tFaE37 tr:hover:not(.readonly-25tFaE37){background-color:#f0f3fa}html.theme-dark .price-axis-currency-label-25tFaE37 tr:hover:not(.readonly-25tFaE37){background-color:#1e222d}}.price-axis-currency-label-25tFaE37 tr.readonly-25tFaE37{pointer-events:none}.price-axis-currency-label-25tFaE37 tr.readonly-25tFaE37 td:last-child{padding-right:4px}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 .price-axis-currency-label-dropdown-25tFaE37:last-child{border-top:1px solid #d1d4dc}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:first-child td:first-child{border-radius:4px 0 0 0}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:first-child td:last-child{border-radius:0 4px 0 0}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:last-child td:first-child{border-radius:0 0 0 4px}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:last-child td:last-child{border-radius:0 0 4px 0}.price-axis-currency-label-text-25tFaE37{white-space:nowrap}.price-axis-currency-label-arrow-down-25tFaE37 svg{margin-bottom:2px;margin-left:2px;vertical-align:middle}.chart-widget__top--themed-dark .price-axis-currency-label-25tFaE37{border-color:#363a45}.chart-widget__top--themed-dark .price-axis-currency-label-25tFaE37.multiline-25tFaE37 .price-axis-currency-label-dropdown-25tFaE37:last-child{border-top:1px solid #363a45}.pane-separator{margin:0;padding:0;position:relative}.pane-separator .handle{cursor:row-resize;height:9px;left:0;position:absolute;top:-4px;width:100%;z-index:50}.pane-separator .handle.i-active{background:#b2b5be33}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.pane-separator .handle:hover{background:#b2b5be33}}.chart-widget--themed-dark .pane-separator .handle.i-active{background:#b2b5be1f}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget--themed-dark .pane-separator .handle:hover{background:#b2b5be1f}}.pane-separator .handle.i-active:before{background:#b2b5be03;content:"";height:100%;left:0;opacity:0;position:fixed;top:0;width:100%}@keyframes tv-transition--fade-in{0%{opacity:0;visibility:visible}to{opacity:1}}@keyframes tv-transition--fade-out{0%{opacity:1}to{opacity:0;visibility:hidden}}@keyframes tv-transition--slide-out{0%{max-height:9000px}to{max-height:0;visibility:hidden}}.tv-transition--fade-in{animation:tv-transition--fade-in .35s ease forwards}.tv-transition--fade-out{animation:tv-transition--fade-out .35s ease forwards}.tv-transition--slide-out{animation:tv-transition--slide-out .35s ease forwards}@font-face{font-family:EuclidCircular;font-style:normal;font-weight:400;src:url(b1a63a011fd92dfb93db6db243bb036c.woff2) format("woff2")} \ No newline at end of file diff --git a/static/charting_library/bundles/library.579e6e3fd95b660ad833.rtl.css b/static/charting_library/bundles/library.579e6e3fd95b660ad833.rtl.css new file mode 100644 index 0000000..9ad054d --- /dev/null +++ b/static/charting_library/bundles/library.579e6e3fd95b660ad833.rtl.css @@ -0,0 +1 @@ +html{-webkit-text-size-adjust:100%;-webkit-app-region:no-drag}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#434651;font-family:Trebuchet MS,roboto,ubuntu,sans-serif;font-size:14px}html.theme-dark body{color:#d1d4dc}html[lang=vi] body{font-family:Arial,sans-serif}body,html{box-sizing:border-box}body,dir,h1,h2,h3,h4,h5,h6,html,li,menu,ol,p,ul{margin:0;padding:0}a{text-decoration:none}a:active{outline:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){a:hover{outline:0}}h1{font-size:2em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sup{top:-.25em}sub{bottom:-.25em}figure{margin:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button,select{text-transform:none}button,input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:initial}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:none;margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.tv-text ol,.tv-text p,.tv-text ul{color:#131722;font-size:14px;line-height:1.6;margin-bottom:12px}html.theme-dark .tv-text ol,html.theme-dark .tv-text p,html.theme-dark .tv-text ul{color:#d1d4dc}.tv-text ol.tv-text__color_bright,.tv-text p.tv-text__color_bright,.tv-text ul.tv-text__color_bright{color:#fff}.tv-text ol.tv-text__color_silver,.tv-text p.tv-text__color_silver,.tv-text ul.tv-text__color_silver{color:silver}.tv-text ol.tv-text__color_silver_30,.tv-text p.tv-text__color_silver_30,.tv-text ul.tv-text__color_silver_30{color:#9b9b9b}.tv-text ol.tv-text__paragraph--additional-top-margin,.tv-text p.tv-text__paragraph--additional-top-margin,.tv-text ul.tv-text__paragraph--additional-top-margin{margin-top:24px}.tv-text ol.tv-text__paragraph--additional-top-margin_double,.tv-text p.tv-text__paragraph--additional-top-margin_double,.tv-text ul.tv-text__paragraph--additional-top-margin_double{margin-top:48px}.tv-text ol.tv-text__paragraph--additional-bottom-margin,.tv-text p.tv-text__paragraph--additional-bottom-margin,.tv-text ul.tv-text__paragraph--additional-bottom-margin{margin-bottom:24px}.tv-text ol.tv-text__paragraph--additional-bottom-margin_double,.tv-text p.tv-text__paragraph--additional-bottom-margin_double,.tv-text ul.tv-text__paragraph--additional-bottom-margin_double{margin-bottom:48px}.tv-text ol .tv-text--highlight-important,.tv-text p .tv-text--highlight-important,.tv-text ul .tv-text--highlight-important{background:#fff3e0;box-shadow:0 0 0 .37em #fff3e0}html.theme-dark .tv-text ol .tv-text--highlight-important,html.theme-dark .tv-text p .tv-text--highlight-important,html.theme-dark .tv-text ul .tv-text--highlight-important{background:#142e61;box-shadow:0 0 0 .37em #142e61}.tv-text ol .tv-text--highlight-important:empty,.tv-text p .tv-text--highlight-important:empty,.tv-text ul .tv-text--highlight-important:empty{background:#0000;box-shadow:none}.tv-text h1{font-size:45px;margin-bottom:30px;margin-top:30px}@media screen and (max-width:1019px){.tv-text h1{font-size:38px}}@media screen and (max-width:767px){.tv-text h1{font-size:32px}}@media screen and (max-width:479px){.tv-text h1{font-size:28px}}.tv-text h2{font-size:31px}@media screen and (max-width:1019px){.tv-text h2{font-size:26px}}@media screen and (max-width:479px){.tv-text h2{font-size:24px}}.tv-text h3{font-size:17px}@media screen and (max-width:1019px){.tv-text h3{font-size:16px}}.tv-text h4{font-size:15px}.tv-text h2,.tv-text h3,.tv-text h4{margin-bottom:20px;margin-top:20px}.tv-text h1:first-child,.tv-text h2:first-child,.tv-text h3:first-child,.tv-text h4:first-child{margin-top:0}.tv-text ol,.tv-text ul{list-style-position:inside}.tv-text--position-outside ol,.tv-text--position-outside ul{list-style-position:outside;padding-right:17px}.tv-text a:not(.tv-badge):not(.tv-button){color:#2962ff;transition:color .35s ease}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button){color:#2962ff}.tv-text a:not(.tv-badge):not(.tv-button):visited{fill:#2962ff;color:#2962ff}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button):visited{fill:#2962ff;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-text a:not(.tv-badge):not(.tv-button):hover{fill:#1e53e5;color:#1e53e5;transition-duration:.06s}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button):hover{fill:#1e53e5;color:#1e53e5}}.tv-text a:not(.tv-badge):not(.tv-button):focus{outline:auto}.tv-text a:not(.tv-badge):not(.tv-button):focus:not(:-moz-focusring){outline:none}.tv-text a:not(.tv-badge):not(.tv-button):-moz-focusring{outline:auto}.tv-text a:not(.tv-badge):not(.tv-button):active{fill:#1848cc;color:#1848cc;transition-duration:.06s}html.theme-dark .tv-text a:not(.tv-badge):not(.tv-button):active{fill:#1848cc;color:#1848cc}.tv-text__font.tv-text__font--size_semilarge{font-size:15px}@media screen and (max-width:767px){.tv-text__font.tv-text__font--size_semilarge{font-size:14px}}.tv-text__font.tv-text__font--size_large{font-size:17px}@media screen and (max-width:767px){.tv-text__font.tv-text__font--size_large{font-size:16px}}.tv-text__font.tv-text__font--size_xlarge{font-size:19px}@media screen and (max-width:767px){.tv-text__font.tv-text__font--size_xlarge{font-size:18px}}.tv-text__font--bold{font-weight:700}.tv-text__font--italic{font-style:italic}.tv-text--darkbg,.tv-text--darkbg ol,.tv-text--darkbg p,.tv-text--darkbg ul{color:#fff}.tv-text--highlight-important{background:#fff3e0;box-shadow:0 0 0 .07em #fff3e0}html.theme-dark .tv-text--highlight-important{background:#142e61;box-shadow:0 0 0 .07em #142e61}.tv-text--highlight-important:empty{background:#0000;box-shadow:none}.symbol-change-direction.up{color:#3cbc98}.symbol-change-direction.down{color:#ff4a68}.js-hidden{display:none!important}.js-no-pointer-events{pointer-events:none!important}body{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent;box-sizing:border-box;min-width:320px}body.i-no-scroll{overflow:hidden!important}body.i-no-padding{padding:0!important}::selection{background:#e3effd99}html.theme-dark ::selection{background:#143a8799}.i-hidden{display:none!important}.i-invisible{visibility:hidden!important}.i-clearfix:after{clear:both;content:"";display:table}.i-align_left{text-align:right!important}.i-align_right{text-align:left!important}.i-align_center{text-align:center!important}.i-float_left{float:right!important}.i-float_right{float:left!important}.i-float_none{float:none!important}@media screen and (min-width:1020px){.i-device-only{display:none!important}}@media screen and (max-width:1019px){.i-desktop-only{display:none!important}}@media screen and (min-width:479px){.i-phones-only{display:none!important}}@media screen and (max-width:479px){.i-except-phones-only{display:none!important}}.i-no-break{white-space:nowrap}body.fullscreen-mode{overflow:hidden}.tv-layout-width{box-sizing:border-box;margin:0 auto;padding:0 20px;width:1020px}.tv-layout-width--no-padding{padding:0;width:980px}.tv-layout-width--simple{padding:0}.tv-dialog .tv-layout-width{max-width:100%}.chart-page .tv-layout-width{width:100%}@media screen and (max-width:1019px){.tv-layout-width{width:auto}.tv-layout-width .tv-feed{margin-left:-20px;margin-right:-20px}.tv-layout-width .tv-feed--tablet-top-indent{margin-top:48px}}.tv-layout-padding{padding:0 20px}body.page-wide .tv-layout-width,body.popup-wide .fancybox-overlay .tv-layout-width{width:1520px}.tv-main,body.page-fullwidth .tv-layout-width{width:100%}.tv-main{display:flex;flex-direction:column;min-height:100%}.tv-side-toolbar{float:right;height:100%;overflow-x:visible;overflow-y:hidden;position:static}.tv-main-panel{background-color:#f1f3f6;overflow:hidden;position:relative}.tv-side-panel{float:left;height:100%;position:relative;z-index:15}.tv-panels{height:100%}.chart-page .tv-content{padding:0}.clear{clear:both}.clearfix:after{clear:both;content:"";display:block}.hide{display:none!important}.show{display:block!important}.tv-right{float:left!important}.tv-left{float:right!important}#_atssh{margin-top:-20px;position:absolute}.js-right-boundary{margin-left:0}.icon{background:url(1df47f578aeef40dd1f2328338a133be.png) 100% 0 no-repeat;display:inline-block;position:relative;vertical-align:middle}textarea.tv-textarea{border:1px solid #c9cbcd;color:#5a5a5a;margin:0;padding:0 5px}body{background-color:#fff}html.theme-dark body{background-color:#131722}body.tv-body--bg_superdark,html.theme-dark body.tv-body--bg_superdark{background:#131722}body.tv-body--bg_contrast{background-color:#fff}html.theme-dark body.tv-body--bg_contrast{background-color:#1e222d}body.extension{min-width:0;overflow:hidden}img{border:none}textarea{resize:none}:focus{outline:none}input,textarea{border-radius:0}.tv-profile .tags,.unselectable{-webkit-user-select:none;user-select:none}.selectable,input,textarea{-webkit-user-select:text;user-select:text}.text-center{text-align:center}#footer{background:#dbdbdb;border-top:1px solid #999;color:#626262;font-size:small;height:24px}#chart-area{background:#0000}#chart-area,.chart-container{position:relative}#chart-area.fullscreen{height:100%!important;position:fixed;right:0;top:0;width:100%!important;z-index:15}.chart-page{background-color:var(--tv-color-platform-background,#e0e3eb)}html.theme-dark .chart-page{background-color:var(--tv-color-platform-background,#2a2e39)}.chart-page .chart-container{contain:strict;position:relative}.chart-page .chart-container-border{background-color:#fff;border:none;height:100%;overflow:hidden;position:relative;width:100%;z-index:0}html.theme-dark .chart-page .chart-container-border{background-color:#131722}.chart-page .chart-container.multiple.active:after{border:2px solid #2962ff;bottom:0;box-sizing:border-box;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}html.theme-dark .chart-page .chart-container.multiple.active:after{border-color:#2962ff}.chart-page .chart-container.inactive .back-to-present{display:none}.chart-page .chart-container.no-header-toolbar .chart-container-border{border-top-left-radius:4px;border-top-right-radius:4px}.chart-page .chart-container.no-bottom-toolbar .chart-container-border{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ui-tabs .ui-tabs-nav li a{font-size:x-small}.input-reset{border-radius:50%;cursor:pointer;display:none;height:16px;left:7px;position:absolute;top:7px;width:16px}.input-reset:before{background:url(1df47f578aeef40dd1f2328338a133be.png) no-repeat -103px -340px;content:" ";display:block;height:10px;margin:-5px -5px 0 0;position:absolute;right:50%;top:50%;width:10px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.input-reset:hover{background-color:#f2f5f8}}.input-reset:active{opacity:.6}.loading-indicator{background:#fff;height:100%;position:absolute;right:0;top:0;width:100%;z-index:150}html.theme-dark .loading-indicator{background:#131722}.loading-indicator img{margin:-58px -58px 0 0;position:absolute;right:50%;top:50%}.loading-indicator img.small{margin:-12px -12px 0 0}.ui-slider-horizontal{background-color:#f4f7f9;border:1px solid #c9cbcd!important;box-shadow:inset 0 1px 2px #00000026;height:5px!important;margin:7px 0 0}html.theme-dark .ui-slider-horizontal{background-color:#171b29;border-color:#2f3241!important}.ui-slider-handle{background:url(1df47f578aeef40dd1f2328338a133be.png) -20px -80px!important;border:none!important;height:15px!important;margin-right:-7px!important;top:-5px!important;width:15px!important}.ui-slider-horizontal.linewidth-slider{background:url(4a9abefd31dab7c8239e02e925aacd78.png) 100% 0 no-repeat!important;border:none!important;box-shadow:none;display:inline-block;height:12px!important;margin:7px 10px;vertical-align:middle;width:101px}.ui-slider-horizontal.linewidth-slider:after,.ui-slider-horizontal.linewidth-slider:before{content:none}.ui-slider-horizontal.transparency-slider{background:url(7e0cc5f7d7f5151500dd60b8d6ca60a1.png)!important;height:8px!important;margin:7px 10px;width:99px}.ui-slider-horizontal.transparency-slider.wide-slider{margin:7px 1px;width:176px}.ui-slider-horizontal.transparency-slider .gradient{background:linear-gradient(270deg,#0000 0,#7db9e8);height:100%;left:0;position:absolute;top:0;width:92%}.ui-slider-horizontal.linewidth-slider .ui-slider-handle,.ui-slider-horizontal.transparency-slider .ui-slider-handle{background:url(40566afd832a155e5e370a8bd423de4b.svg) 100% 0 no-repeat!important;height:20px!important;margin:-10px 0 0 -10px!important;top:50%!important;width:20px!important}.ui-slider-horizontal.linewidth-slider .ui-slider-handle.without-shift-handle-left,.ui-slider-horizontal.transparency-slider .ui-slider-handle.without-shift-handle-left{margin:-10px 3px 0 -3px!important}.falling,.growing,.search-results .symbol-last.falling,.search-results .symbol-last.growing{color:#fff}.growing{background:#3cbc98}.falling{background:#ff4a68}.font-awesome{font-family:FontAwesome;font-weight:700}#chart-area .chart-promo,#chart-container .chart-promo,.tv-chart-view__chart-inner .chart-promo{background:#fff;bottom:55px;display:none;height:80px;position:absolute;right:10px;transition:width .5s ease-in-out;width:0;z-index:5}#chart-area .chart-promo.expanded,#chart-container .chart-promo.expanded,.tv-chart-view__chart-inner .chart-promo.expanded{display:block;opacity:1;width:330px}#chart-area .chart-promo a.chart-promo-link,#chart-container .chart-promo a.chart-promo-link,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link{border:1px solid #dadee1;border-radius:4px;box-shadow:0 0 30px 0 #00000026;color:#000;display:block;height:80px;width:330px}#chart-area .chart-promo a.chart-promo-link .image-promo,#chart-container .chart-promo a.chart-promo-link .image-promo,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .image-promo{height:80px;width:330px}#chart-area .chart-promo a.chart-promo-link .comment,#chart-container .chart-promo a.chart-promo-link .comment,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .comment{color:#555;display:block;font-size:12px;line-height:60px;margin-top:-2px;padding:10px 22px 10px 128px}#chart-area .chart-promo a.chart-promo-link .comment .comment-alignment,#chart-container .chart-promo a.chart-promo-link .comment .comment-alignment,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .comment .comment-alignment{display:inline-block;line-height:15px;max-height:60px;overflow:hidden;vertical-align:middle;white-space:pre-wrap}#chart-area .chart-promo a.chart-promo-link .logo,#chart-container .chart-promo a.chart-promo-link .logo,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .logo{float:left;height:80px;line-height:80px;text-align:center;width:128px}#chart-area .chart-promo a.chart-promo-link .logo img,#chart-container .chart-promo a.chart-promo-link .logo img,.tv-chart-view__chart-inner .chart-promo a.chart-promo-link .logo img{max-height:100%;max-width:85px;vertical-align:middle}#chart-area .chart-promo a.remove-ad,#chart-container .chart-promo a.remove-ad,.tv-chart-view__chart-inner .chart-promo a.remove-ad{background:#ecf1f4;border-top-left-radius:5px;border-top-right-radius:5px;color:#5cbfe7;font-size:11px;height:18px;left:0;line-height:18px;opacity:.8;padding:0 11px;position:absolute;top:-18px}#chart-container .chart-promo,.tv-chart-view__chart-inner .chart-promo{bottom:30px}#myswf{position:fixed;right:0;top:0}.tv-button{fill:currentColor;-webkit-tap-highlight-color:transparent;background-color:initial;border:none;border-radius:4px;box-sizing:border-box;color:#757575;cursor:pointer;display:inline-block;font-size:14px;line-height:32px;margin:0;min-width:40px;outline:0;overflow:hidden;padding:1px 22px;position:relative;text-align:center;text-decoration:none;transition:background-color .35s ease,border-color .35s ease,color .35s ease;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.tv-button.tv-button--danger_ghost,.tv-button.tv-button--default,.tv-button.tv-button--default_ghost,.tv-button.tv-button--primary_ghost,.tv-button.tv-button--secondary_ghost,.tv-button.tv-button--state,.tv-button.tv-button--success_ghost,.tv-button.tv-button--warning_ghost{padding:0 21px}.tv-button.i-active,.tv-button.i-hover,.tv-button:active{transition-duration:.06s}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button:hover{transition-duration:.06s}}.tv-button svg{vertical-align:middle}.tv-button--block{display:block;text-align:center;width:100%}.tv-button+.tv-button{margin-right:15px}.tv-button.tv-button--no-left-margin{margin-right:0}.tv-button__text{display:inline-block;position:relative}.tv-button__text--full-height{word-wrap:break-word;align-items:center;display:flex;height:100%;justify-content:center;line-height:1.2em;margin:11px 5px;white-space:normal;width:100%}.tv-button--default,.tv-button--default_ghost,a.tv-button--default:visited{background-color:#fff;border-color:#fff;color:#fff}html.theme-dark .tv-button--default,html.theme-dark .tv-button--default_ghost,html.theme-dark a.tv-button--default:visited{background-color:#1e222d;border-color:#1e222d}.tv-button--default_ghost{color:#fff}html.theme-dark .tv-button--default_ghost{color:#1e222d}.tv-button--default_ghost.i-checked{background-color:#fff;border-color:#fff;color:#fff}html.theme-dark .tv-button--default_ghost.i-checked{background-color:#1e222d;border-color:#1e222d}.tv-button--default.i-active,.tv-button--default:active,.tv-button--default_ghost.i-active,.tv-button--default_ghost:active{background-color:#ececec;border-color:#ececec;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--default.i-active,html.theme-dark .tv-button--default:active,html.theme-dark .tv-button--default_ghost.i-active,html.theme-dark .tv-button--default_ghost:active{background-color:#1c2030;border-color:#1c2030}.tv-button--default.i-hover,.tv-button--default_ghost.i-hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--default:hover,.tv-button--default_ghost:hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#fff}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{background-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{background-color:#1e222d}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{border-color:#1e222d}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{border-color:#1e222d}}.tv-button--default_ghost .tv-button__loader-item{background-color:#e0e3eb}html.theme-dark .tv-button--default_ghost .tv-button__loader-item{background-color:#1e222d}.tv-button--default_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--default_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--default,.tv-button--default.i-checked,.tv-button--default_ghost,.tv-button--default_ghost.i-checked{border:1px solid #b2b5be;color:#6a6d78}html.theme-dark .tv-button--default,html.theme-dark .tv-button--default.i-checked,html.theme-dark .tv-button--default_ghost,html.theme-dark .tv-button--default_ghost.i-checked{border-color:#363a45;color:#787b86}.tv-button--default.i-hover,.tv-button--default_ghost.i-hover{border-color:#b2b5be;color:#6a6d78}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--default:hover,.tv-button--default_ghost:hover{border-color:#b2b5be;color:#6a6d78}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{border-color:#363a45}}html.theme-dark .tv-button--default.i-hover,html.theme-dark .tv-button--default_ghost.i-hover{color:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--default:hover,html.theme-dark .tv-button--default_ghost:hover{color:#787b86}}.tv-button--default.i-active,.tv-button--default:active,.tv-button--default_ghost.i-active,.tv-button--default_ghost:active{border-color:#b2b5be;color:#6a6d78}html.theme-dark .tv-button--default.i-active,html.theme-dark .tv-button--default:active,html.theme-dark .tv-button--default_ghost.i-active,html.theme-dark .tv-button--default_ghost:active{border-color:#363a45;color:#787b86}.tv-button--primary,.tv-button--primary_ghost,a.tv-button--primary:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .tv-button--primary,html.theme-dark .tv-button--primary_ghost,html.theme-dark a.tv-button--primary:visited{background-color:#2962ff;border-color:#2962ff;color:#fff}.tv-button--primary_ghost,html.theme-dark .tv-button--primary_ghost{color:#2962ff}.tv-button--primary_ghost.i-checked{background-color:#2962ff;border-color:#2962ff;color:#fff}html.theme-dark .tv-button--primary_ghost.i-checked{background-color:#2962ff;border-color:#2962ff;color:#fff}.tv-button--primary.i-active,.tv-button--primary:active,.tv-button--primary_ghost.i-active,.tv-button--primary_ghost:active{background-color:#1848cc;border-color:#1848cc;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--primary.i-active,html.theme-dark .tv-button--primary:active,html.theme-dark .tv-button--primary_ghost.i-active,html.theme-dark .tv-button--primary_ghost:active{background-color:#1848cc;border-color:#1848cc;color:#fff}.tv-button--primary.i-hover,.tv-button--primary_ghost.i-hover{background-color:#1e53e5;border-color:#1e53e5;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--primary:hover,.tv-button--primary_ghost:hover{background-color:#1e53e5;border-color:#1e53e5;color:#fff}}html.theme-dark .tv-button--primary.i-hover,html.theme-dark .tv-button--primary_ghost.i-hover{background-color:#1e53e5}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary:hover,html.theme-dark .tv-button--primary_ghost:hover{background-color:#1e53e5}}html.theme-dark .tv-button--primary.i-hover,html.theme-dark .tv-button--primary_ghost.i-hover{border-color:#1e53e5}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary:hover,html.theme-dark .tv-button--primary_ghost:hover{border-color:#1e53e5}}html.theme-dark .tv-button--primary.i-hover,html.theme-dark .tv-button--primary_ghost.i-hover{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary:hover,html.theme-dark .tv-button--primary_ghost:hover{color:#fff}}.tv-button--primary_ghost .tv-button__loader-item,html.theme-dark .tv-button--primary_ghost .tv-button__loader-item{background-color:#1e53e5}.tv-button--primary_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--primary_ghost:hover .tv-button__loader-item{background-color:#fff}}html.theme-dark .tv-button--primary_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--primary_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--secondary,.tv-button--secondary_ghost,a.tv-button--secondary:visited{background-color:#e9eff2;border-color:#e9eff2;color:#757575}.tv-button--secondary_ghost{color:#757575}.tv-button--secondary_ghost.i-checked{background-color:#e9eff2;border-color:#e9eff2;color:#757575}.tv-button--secondary.i-active,.tv-button--secondary:active,.tv-button--secondary_ghost.i-active,.tv-button--secondary_ghost:active{background-color:#cfdce3;border-color:#cfdce3;color:#757575;transform:translateY(1px)}.tv-button--secondary.i-hover,.tv-button--secondary_ghost.i-hover{background-color:#dce6ea;border-color:#dce6ea;color:#757575}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--secondary:hover,.tv-button--secondary_ghost:hover{background-color:#dce6ea;border-color:#dce6ea;color:#757575}}.tv-button--secondary_ghost .tv-button__loader-item{background-color:#dce6ea}.tv-button--secondary_ghost.i-hover .tv-button__loader-item{background-color:#757575}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--secondary_ghost:hover .tv-button__loader-item{background-color:#757575}}.tv-button--success,.tv-button--success_ghost,a.tv-button--success:visited{background-color:#009688;border-color:#009688;color:#fff}html.theme-dark .tv-button--success,html.theme-dark .tv-button--success_ghost,html.theme-dark a.tv-button--success:visited{background-color:#00796b;border-color:#00796b;color:#fff}.tv-button--success_ghost{color:#009688}html.theme-dark .tv-button--success_ghost{color:#00796b}.tv-button--success_ghost.i-checked{background-color:#009688;border-color:#009688;color:#fff}html.theme-dark .tv-button--success_ghost.i-checked{background-color:#00796b;border-color:#00796b;color:#fff}.tv-button--success.i-active,.tv-button--success:active,.tv-button--success_ghost.i-active,.tv-button--success_ghost:active{background-color:#00796b;border-color:#00796b;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--success.i-active,html.theme-dark .tv-button--success:active,html.theme-dark .tv-button--success_ghost.i-active,html.theme-dark .tv-button--success_ghost:active{background-color:#009688;border-color:#009688;color:#fff}.tv-button--success.i-hover,.tv-button--success_ghost.i-hover{background-color:#00897b;border-color:#00897b;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--success:hover,.tv-button--success_ghost:hover{background-color:#00897b;border-color:#00897b;color:#fff}}html.theme-dark .tv-button--success.i-hover,html.theme-dark .tv-button--success_ghost.i-hover{background-color:#00897b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success:hover,html.theme-dark .tv-button--success_ghost:hover{background-color:#00897b}}html.theme-dark .tv-button--success.i-hover,html.theme-dark .tv-button--success_ghost.i-hover{border-color:#00897b}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success:hover,html.theme-dark .tv-button--success_ghost:hover{border-color:#00897b}}html.theme-dark .tv-button--success.i-hover,html.theme-dark .tv-button--success_ghost.i-hover{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success:hover,html.theme-dark .tv-button--success_ghost:hover{color:#fff}}.tv-button--success_ghost .tv-button__loader-item,html.theme-dark .tv-button--success_ghost .tv-button__loader-item{background-color:#00897b}.tv-button--success_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--success_ghost:hover .tv-button__loader-item{background-color:#fff}}html.theme-dark .tv-button--success_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--success_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--danger,.tv-button--danger_ghost,a.tv-button--danger:visited{background-color:#ef5350;border-color:#ef5350;color:#fff}html.theme-dark .tv-button--danger,html.theme-dark .tv-button--danger_ghost,html.theme-dark a.tv-button--danger:visited{background-color:#d32f2f;border-color:#d32f2f;color:#fff}.tv-button--danger_ghost{color:#ef5350}html.theme-dark .tv-button--danger_ghost{color:#d32f2f}.tv-button--danger_ghost.i-checked{background-color:#ef5350;border-color:#ef5350;color:#fff}html.theme-dark .tv-button--danger_ghost.i-checked{background-color:#d32f2f;border-color:#d32f2f;color:#fff}.tv-button--danger.i-active,.tv-button--danger:active,.tv-button--danger_ghost.i-active,.tv-button--danger_ghost:active{background-color:#d32f2f;border-color:#d32f2f;color:#fff;transform:translateY(1px)}html.theme-dark .tv-button--danger.i-active,html.theme-dark .tv-button--danger:active,html.theme-dark .tv-button--danger_ghost.i-active,html.theme-dark .tv-button--danger_ghost:active{background-color:#f44336;border-color:#f44336;color:#fff}.tv-button--danger.i-hover,.tv-button--danger_ghost.i-hover{background-color:#e53935;border-color:#e53935;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--danger:hover,.tv-button--danger_ghost:hover{background-color:#e53935;border-color:#e53935;color:#fff}}html.theme-dark .tv-button--danger.i-hover,html.theme-dark .tv-button--danger_ghost.i-hover{background-color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger:hover,html.theme-dark .tv-button--danger_ghost:hover{background-color:#e53935}}html.theme-dark .tv-button--danger.i-hover,html.theme-dark .tv-button--danger_ghost.i-hover{border-color:#e53935}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger:hover,html.theme-dark .tv-button--danger_ghost:hover{border-color:#e53935}}html.theme-dark .tv-button--danger.i-hover,html.theme-dark .tv-button--danger_ghost.i-hover{color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger:hover,html.theme-dark .tv-button--danger_ghost:hover{color:#fff}}.tv-button--danger_ghost .tv-button__loader-item,html.theme-dark .tv-button--danger_ghost .tv-button__loader-item{background-color:#e53935}.tv-button--danger_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--danger_ghost:hover .tv-button__loader-item{background-color:#fff}}html.theme-dark .tv-button--danger_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button--danger_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--warning,.tv-button--warning_ghost,a.tv-button--warning:visited{background-color:#f89e30;border-color:#f89e30;color:#fff}.tv-button--warning_ghost{color:#f89e30}.tv-button--warning_ghost.i-checked{background-color:#f89e30;border-color:#f89e30;color:#fff}.tv-button--warning.i-active,.tv-button--warning:active,.tv-button--warning_ghost.i-active,.tv-button--warning_ghost:active{background-color:#d47807;border-color:#d47807;color:#fff;transform:translateY(1px)}.tv-button--warning.i-hover,.tv-button--warning_ghost.i-hover{background-color:#f79217;border-color:#f79217;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--warning:hover,.tv-button--warning_ghost:hover{background-color:#f79217;border-color:#f79217;color:#fff}}.tv-button--warning_ghost .tv-button__loader-item{background-color:#f79217}.tv-button--warning_ghost.i-hover .tv-button__loader-item{background-color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--warning_ghost:hover .tv-button__loader-item{background-color:#fff}}.tv-button--link{color:#2962ff;transition:color .35s ease}html.theme-dark .tv-button--link{color:#2962ff}.tv-button--link:visited{fill:#2962ff;color:#2962ff}html.theme-dark .tv-button--link:visited{fill:#2962ff;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--link:hover{fill:#1e53e5;color:#1e53e5;transition-duration:.06s}html.theme-dark .tv-button--link:hover{fill:#1e53e5;color:#1e53e5}}.tv-button--link:focus{outline:auto}.tv-button--link:focus:not(:-moz-focusring){outline:none}.tv-button--link:-moz-focusring{outline:auto}.tv-button--link:active{fill:#1848cc;color:#1848cc;transition-duration:.06s}html.theme-dark .tv-button--link:active{fill:#1848cc;color:#1848cc}.tv-button--danger_ghost,.tv-button--default_ghost,.tv-button--primary_ghost,.tv-button--secondary_ghost,.tv-button--success_ghost,.tv-button--warning_ghost{background-color:initial;border-style:solid;border-width:1px}html.theme-dark .tv-button--danger_ghost,html.theme-dark .tv-button--default_ghost,html.theme-dark .tv-button--primary_ghost,html.theme-dark .tv-button--secondary_ghost,html.theme-dark .tv-button--success_ghost,html.theme-dark .tv-button--warning_ghost{background-color:initial}.tv-button--danger_ghost.tv-button--size_large,.tv-button--default_ghost.tv-button--size_large,.tv-button--primary_ghost.tv-button--size_large,.tv-button--secondary_ghost.tv-button--size_large,.tv-button--success_ghost.tv-button--size_large,.tv-button--warning_ghost.tv-button--size_large{border-width:2px}.tv-button--danger_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--default_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--primary_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--secondary_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--success_ghost.tv-button--size_large.tv-button--thin-border,.tv-button--warning_ghost.tv-button--size_large.tv-button--thin-border{border-width:1px}.tv-button .tv-ripple{background-color:#ffffff40}.tv-button--default .tv-ripple,.tv-button--default_ghost .tv-ripple{background-color:#75869640}.tv-button.i-disabled .tv-ripple{background-color:initial}.tv-button.i-disabled,.tv-button.i-disabled:active,.tv-button:disabled,.tv-button:disabled:active{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be;cursor:default}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button.i-disabled:hover,.tv-button:disabled:hover{background-color:#e0e3eb;border-color:#e0e3eb;color:#b2b5be;cursor:default}}html.theme-dark .tv-button.i-disabled,html.theme-dark .tv-button.i-disabled:active,html.theme-dark .tv-button:disabled,html.theme-dark .tv-button:disabled:active{background-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button.i-disabled:hover,html.theme-dark .tv-button:disabled:hover{background-color:#363a45}}html.theme-dark .tv-button.i-disabled,html.theme-dark .tv-button.i-disabled:active,html.theme-dark .tv-button:disabled,html.theme-dark .tv-button:disabled:active{border-color:#363a45}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button.i-disabled:hover,html.theme-dark .tv-button:disabled:hover{border-color:#363a45}}html.theme-dark .tv-button.i-disabled,html.theme-dark .tv-button.i-disabled:active,html.theme-dark .tv-button:disabled,html.theme-dark .tv-button:disabled:active{color:#50535e}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-button.i-disabled:hover,html.theme-dark .tv-button:disabled:hover{color:#50535e}}.tv-button.i-disabled:active,.tv-button:disabled:active{transform:translateY(0)}.tv-button--size_xsmall{border-radius:1px;font-size:11px;font-weight:400;line-height:15px;padding:2px 7px}.tv-button--size_xsmall.tv-button--danger_ghost,.tv-button--size_xsmall.tv-button--default,.tv-button--size_xsmall.tv-button--default_ghost,.tv-button--size_xsmall.tv-button--primary_ghost,.tv-button--size_xsmall.tv-button--secondary_ghost,.tv-button--size_xsmall.tv-button--state,.tv-button--size_xsmall.tv-button--success_ghost,.tv-button--size_xsmall.tv-button--warning_ghost{padding:1px 6px}.tv-button--size_xsmall+.tv-button--size_xsmall{margin-right:10px}.tv-button--size_small{font-size:13px;line-height:25px;padding:1px 12px}.tv-button--size_small.tv-button--danger_ghost,.tv-button--size_small.tv-button--default,.tv-button--size_small.tv-button--default_ghost,.tv-button--size_small.tv-button--primary_ghost,.tv-button--size_small.tv-button--secondary_ghost,.tv-button--size_small.tv-button--state,.tv-button--size_small.tv-button--success_ghost,.tv-button--size_small.tv-button--warning_ghost{padding:0 11px}.tv-button--size_small+.tv-button--size_small{margin-right:10px}.tv-button--size_large{font-size:17px;line-height:44px;padding:1px 30px}.tv-button--size_large.tv-button--danger_ghost,.tv-button--size_large.tv-button--default,.tv-button--size_large.tv-button--default_ghost,.tv-button--size_large.tv-button--primary_ghost,.tv-button--size_large.tv-button--secondary_ghost,.tv-button--size_large.tv-button--state,.tv-button--size_large.tv-button--success_ghost,.tv-button--size_large.tv-button--warning_ghost{padding:0 29px}.tv-button--size_promo{border-radius:120px;font-size:24px;line-height:54px;padding:1px 40px}.tv-button--size_promo.tv-button--danger_ghost,.tv-button--size_promo.tv-button--default,.tv-button--size_promo.tv-button--default_ghost,.tv-button--size_promo.tv-button--primary_ghost,.tv-button--size_promo.tv-button--secondary_ghost,.tv-button--size_promo.tv-button--state,.tv-button--size_promo.tv-button--success_ghost,.tv-button--size_promo.tv-button--warning_ghost{padding:0 39px}.tv-button--no-padding{padding:1px}.tv-button--no-padding.tv-button--danger_ghost,.tv-button--no-padding.tv-button--default,.tv-button--no-padding.tv-button--default_ghost,.tv-button--no-padding.tv-button--primary_ghost,.tv-button--no-padding.tv-button--secondary_ghost,.tv-button--no-padding.tv-button--state,.tv-button--no-padding.tv-button--success_ghost,.tv-button--no-padding.tv-button--warning_ghost{padding:0}.tv-button--state{background:#0000;border-style:solid;border-width:1px;text-align:center}html.theme-dark .tv-button--state{background:#0000}.tv-button--state:after{content:"";display:inline-block}.tv-button--state__checked,.tv-button--state__uncheck-hint,.tv-button--state__unchecked{display:block;height:0;transition:opacity .2625s ease,transform .2625s ease}.tv-button--state__ellipsis-text{display:block;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__checked,.tv-button--state.i-checked:hover .tv-button--state__uncheck-hint,.tv-button--state.i-checked:hover .tv-button--state__unchecked{will-change:opacity,transform}}.tv-button--state.i-checked .tv-button--state__unchecked,.tv-button--state__checked,.tv-button--state__uncheck-hint{opacity:0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__checked{opacity:0}}.tv-button--state.i-checked .tv-button--state__checked,.tv-button--state__unchecked{opacity:1}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__uncheck-hint{opacity:1}.tv-button--state.i-checked:hover .tv-button--state__checked{transform:translateY(-5px)}}.tv-button--state.i-checked .tv-button--state__unchecked,.tv-button--state__checked,.tv-button--state__uncheck-hint{transform:translateY(5px)}.tv-button--state.i-checked .tv-button--state__checked{transform:translateY(0)}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.i-checked:hover .tv-button--state__uncheck-hint{transform:translateY(0)}}.tv-button--state.tv-button--success{background-color:initial;color:#009688}html.theme-dark .tv-button--state.tv-button--success{background-color:initial;color:#00796b}.tv-button--state.tv-button--success.i-checked{background-color:#009688;color:#fff}html.theme-dark .tv-button--state.tv-button--success.i-checked{background-color:#00796b;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--success:hover{background-color:#00897b;color:#fff}html.theme-dark .tv-button--state.tv-button--success:hover{background-color:#00897b;color:#fff}}.tv-button--state.tv-button--success:active{background-color:#00796b;color:#fff}html.theme-dark .tv-button--state.tv-button--success:active{background-color:#009688;color:#fff}.tv-button--state.tv-button--danger{background-color:initial;color:#ef5350}html.theme-dark .tv-button--state.tv-button--danger{background-color:initial;color:#d32f2f}.tv-button--state.tv-button--danger.i-checked{background-color:#ff4a68;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--danger:hover{background-color:#f24965;color:#fff}}.tv-button--state.tv-button--danger:active{background-color:#ff173e;color:#fff}.tv-button--state.tv-button--primary{background-color:initial;color:#2962ff}html.theme-dark .tv-button--state.tv-button--primary{background-color:initial;color:#2962ff}.tv-button--state.tv-button--primary.i-checked{background-color:#2962ff;color:#fff}html.theme-dark .tv-button--state.tv-button--primary.i-checked{background-color:#2962ff;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--primary:hover{background-color:#1e53e5;color:#fff}html.theme-dark .tv-button--state.tv-button--primary:hover{background-color:#1e53e5;color:#fff}}.tv-button--state.tv-button--primary:active{background-color:#1848cc;color:#fff}html.theme-dark .tv-button--state.tv-button--primary:active{background-color:#1848cc;color:#fff}.tv-button--state.tv-button--primary_ghost-hover.i-checked{background-color:initial;color:#2962ff}html.theme-dark .tv-button--state.tv-button--primary_ghost-hover.i-checked{background-color:initial;color:#2962ff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--primary_ghost-hover:hover{background-color:#1e53e5;color:#fff}html.theme-dark .tv-button--state.tv-button--primary_ghost-hover:hover{background-color:#1e53e5;color:#fff}}.tv-button--state.tv-button--primary_ghost-hover:active{background-color:#1848cc;color:#fff}html.theme-dark .tv-button--state.tv-button--primary_ghost-hover:active{background-color:#1848cc;color:#fff}.tv-button--state.tv-button--secondary{background-color:initial;color:#757575}.tv-button--state.tv-button--secondary.i-checked{background-color:#e9eff2;color:#757575}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--secondary:hover{background-color:#dce6ea;color:#757575}}.tv-button--state.tv-button--secondary:active{background-color:#cfdce3;color:#757575}.tv-button--state.tv-button--warning{background-color:initial;color:#f89e30}.tv-button--state.tv-button--warning.i-checked{background-color:#f89e30;color:#fff}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-button--state.tv-button--warning:hover{background-color:#f79217;color:#fff}}.tv-button--state.tv-button--warning:active{background-color:#d47807;color:#fff}.tv-button--state.tv-button--icon-with-text svg{margin-bottom:-8px;margin-left:6px;vertical-align:unset}.tv-button--icon{align-items:center;display:inline-flex;height:34px;justify-content:center;min-width:auto;padding:0!important;width:34px}.tv-button--icon.tv-button--size_xsmall{height:19px;width:19px}.tv-button--icon.tv-button--size_small{height:27px;width:27px}.tv-button--icon.tv-button--size_large{height:46px;width:46px}.tv-button__icon{display:flex;margin-left:7px}.tv-button--loader .tv-button__text{transition:opacity .175s ease,transform .175s ease}.tv-button--loader.i-start-load .tv-button__text{opacity:0;transform:translateY(-5px)}.tv-button--loader.i-loading .tv-button__text{opacity:0;transform:translateY(5px)}.tv-button--loader.i-stop-load .tv-button__text{opacity:1;transform:translateY(0);transition-delay:.175s}.tv-button__loader{bottom:0;font-size:0;height:100%;left:0;margin:0 auto;opacity:0;position:absolute;right:0;text-align:center;top:0;transition:opacity .35s ease}.tv-button__loader:after{content:"";display:inline-block;height:100%;vertical-align:middle}.tv-button--loader.i-loading .tv-button__loader,.tv-button--loader.i-start-load .tv-button__loader{opacity:1}.tv-button--loader.i-stop-load .tv-button__loader{opacity:0}.tv-button__loader-item{background-color:#fff;border-radius:100%;display:inline-block;height:10px;margin-left:2px;margin-right:2px;opacity:0;transform:translateY(12px) scale(.6);transition:transform .35s cubic-bezier(.68,-.55,.265,1.55),opacity .35s ease;vertical-align:middle;width:10px}.tv-button__loader-item:nth-child(2){transition-delay:.11666667s}.tv-button__loader-item:nth-child(3){transition-delay:.23333333s}.tv-button--default .tv-button__loader-item{background-color:#757575}.tv-button--loader.i-loading .tv-button__loader-item,.tv-button--loader.i-start-load .tv-button__loader-item{opacity:1}.tv-button--loader.i-stop-load .tv-button__loader-item{opacity:0}.tv-button--loader.i-loading .tv-button__loader-item,.tv-button--loader.i-start-load .tv-button__loader-item,.tv-button--loader.i-stop-load .tv-button__loader-item{transform:translateY(0) scale(.6)}.tv-button--loader.i-loading .tv-button__loader-item,.tv-button--loader.i-stop-load .tv-button__loader-item{animation:tv-button-loader .96s ease-in-out infinite both}.tv-button--loader.i-loading .tv-button__loader-item:nth-child(2),.tv-button--loader.i-stop-load .tv-button__loader-item:nth-child(2){animation-delay:.151s}.tv-button--loader.i-loading .tv-button__loader-item:nth-child(3),.tv-button--loader.i-stop-load .tv-button__loader-item:nth-child(3){animation-delay:.32s}.tv-button--no-border-radius{border-radius:0}.tv-button--no-border{border:none}.tv-button--connect{border-radius:0}.tv-button--connect_left{border-bottom-right-radius:0;border-top-right-radius:0}.tv-button--connect_right{border-bottom-left-radius:0;border-top-left-radius:0}.tv-button--with-icon{align-items:center;display:inline-flex;transform:translate(0)}@keyframes tv-button-loader{0%,to{transform:scale(.6)}50%{transform:scale(.9)}}.tv-control-input{-webkit-tap-highlight-color:transparent;-webkit-appearance:none;appearance:none;background-color:#fff;border:1px solid #e0e3eb;border-radius:2px;box-sizing:border-box;color:#434651;display:block;font-size:13px;height:34px;padding:0 12px;transition:border-color .35s ease,background-color .35s ease;width:100%}html.theme-dark .tv-control-input{background-color:#1e222d;border-color:#363a45;color:#d1d4dc}.tv-control-input::placeholder{color:#a3a6af;opacity:1}html.theme-dark .tv-control-input::placeholder{color:#50535e}.tv-control-input:-webkit-autofill{-webkit-text-fill-color:#535353!important;box-shadow:inset 0 0 0 1000px #fff!important}.tv-control-input--size_xsmall{height:19px}.tv-control-input--size_small{height:27px}.tv-control-input--size_large{font-size:16px;height:48px}.tv-control-input--connect{border-left:0;border-radius:0;border-right:0}.tv-control-input--connect_left{border-bottom-right-radius:0;border-right:none;border-top-right-radius:0}.tv-control-input--connect_right{border-bottom-left-radius:0;border-left:none;border-top-left-radius:0}.tv-control-input--connect_right#id_username{direction:ltr;text-align:right}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input:hover{border-color:#c1c4cd;transition-duration:.06s}html.theme-dark .tv-control-input:hover{border-color:#50535e}}.tv-control-input:focus{border-color:#2962ff!important;transition-duration:.06s}.tv-control-input[readonly]{border-color:#dadde0;color:#8a8a8a}.tv-control-input[readonly]:focus{border-color:#e0e3eb!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input[readonly]:hover{border-color:#e0e3eb!important}}html.theme-dark .tv-control-input[readonly]:focus{border-color:#2a2e39!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){html.theme-dark .tv-control-input[readonly]:hover{border-color:#2a2e39!important}}.tv-control-input--readonly_dark,.tv-control-input--readonly_dark[readonly],html.theme-dark .tv-control-input--readonly_dark,html.theme-dark .tv-control-input--readonly_dark[readonly]{color:#50535e}.tv-control-input.i-disabled,.tv-control-input[disabled]{border-color:#e0e3eb!important;color:#e0e3eb!important}html.theme-dark .tv-control-input.i-disabled,html.theme-dark .tv-control-input[disabled]{border-color:#2a2e39!important;color:#2a2e39!important}.tv-control-input.i-disabled::placeholder,.tv-control-input[disabled]::placeholder{color:#e0e3eb!important}html.theme-dark .tv-control-input.i-disabled::placeholder,html.theme-dark .tv-control-input[disabled]::placeholder{color:#2a2e39!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input.i-disabled:hover,.tv-control-input[disabled]:hover{border-color:#e0e3eb!important}html.theme-dark .tv-control-input.i-disabled:hover,html.theme-dark .tv-control-input[disabled]:hover{border-color:#2a2e39!important}}.tv-control-input.i-error{border-color:#ff4a68!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input.i-error:hover{border-color:#f24965!important}}.tv-control-input.i-error:focus{border-color:#ff173e!important}.tv-control-input.i-success{border-color:#009688!important}html.theme-dark .tv-control-input.i-success{border-color:#00796b!important}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-control-input.i-success:hover,html.theme-dark .tv-control-input.i-success:hover{border-color:#00897b!important}}.tv-control-input.i-success:active,.tv-control-input.i-success:focus{border-color:#00796b!important}html.theme-dark .tv-control-input.i-success:active,html.theme-dark .tv-control-input.i-success:focus{border-color:#009688!important}.tv-control-input--phone{direction:ltr;text-align:right}.tv-control-input--file{display:none}body,html{background:none;height:100%;overflow:hidden;width:100%}body{min-width:240px}#library-container{background:#fff;border:1px solid #d9dadb}#library-container #showExtendedHoursLink{display:none}.on-widget .open-popup{background:#6798bb;border-width:0!important;border:none;margin-right:4px;padding:7px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.on-widget .open-popup:hover{background:#69a3cc}}.on-widget .open-popup:active{background:#71acd6}.on-widget .open-popup svg{fill:#fff;display:block;height:14px;width:16px}.on-widget .widgetbar-widget-hotlist .widgetbar-widgetheader .widgetbar-headerspace{display:none}.text .logo-highlighted{font-weight:700;text-decoration:underline}.on-cme-widget .symbol-edit-popup .filter,.on-cme-widget .symbol-search-dialog .filter{display:none}.on-cme-widget .symbol-search-dialog .results{height:450px}.load-chart .chart-search,.load-chart .chart-search input{width:100%}@media only screen and (max-width:750px){.charts-popup-list .item.save-load-chart-title{display:block}}.charts-popup-list .item .title,.charts-popup-list .item .title-expanded{width:auto}.common-tooltip-36YLR71G{color:#f0f3fa;display:inline-flex;font-size:12px;line-height:18px;opacity:1;pointer-events:none;position:fixed;transition:opacity .15s linear;z-index:1000}.common-tooltip--hidden-36YLR71G{opacity:0}.common-tooltip--horizontal-36YLR71G{margin:4px 0}.common-tooltip--horizontal-36YLR71G.common-tooltip--farther-36YLR71G{margin:8px 0}.common-tooltip--vertical-36YLR71G{margin:0 4px}.common-tooltip--vertical-36YLR71G.common-tooltip-farther-36YLR71G{margin:0 8px}.common-tooltip--direction_normal-36YLR71G{flex-direction:row}.common-tooltip--direction_normal-36YLR71G .common-tooltip__body-36YLR71G{border-bottom-right-radius:2px;border-top-right-radius:2px}.common-tooltip--direction_normal-36YLR71G .common-tooltip__body--no-buttons-36YLR71G,.common-tooltip--direction_normal-36YLR71G .common-tooltip__button-container-36YLR71G{border-bottom-left-radius:2px;border-top-left-radius:2px}.common-tooltip--direction_normal-36YLR71G .common-tooltip__button-36YLR71G:not(:last-child){margin-left:1px}.common-tooltip--direction_reversed-36YLR71G{flex-direction:row-reverse}.common-tooltip--direction_reversed-36YLR71G .common-tooltip__body-36YLR71G{border-bottom-left-radius:2px;border-top-left-radius:2px}.common-tooltip--direction_reversed-36YLR71G .common-tooltip__body--no-buttons-36YLR71G,.common-tooltip--direction_reversed-36YLR71G .common-tooltip__button-container-36YLR71G{border-bottom-right-radius:2px;border-top-right-radius:2px}.common-tooltip--direction_reversed-36YLR71G .common-tooltip__button-36YLR71G:not(:first-child){margin-right:1px}.common-tooltip__ear-holder-36YLR71G{position:relative}.common-tooltip__ear-holder-36YLR71G:after{border:0 solid #2a2e39;box-sizing:border-box;content:"";display:block;height:0;position:absolute;width:0}html.theme-dark .common-tooltip__ear-holder-36YLR71G:after{border-color:#50535e}.common-tooltip__ear-holder--above-36YLR71G:after,.common-tooltip__ear-holder--below-36YLR71G:after{border-left:6px solid #0000;border-right:6px solid #0000;left:50%;margin-left:-6px}html.theme-dark .common-tooltip__ear-holder--above-36YLR71G:after,html.theme-dark .common-tooltip__ear-holder--below-36YLR71G:after{border-left-color:#0000;border-right-color:#0000}.common-tooltip__ear-holder--below-36YLR71G:after{border-bottom-width:4px;bottom:100%}.common-tooltip__ear-holder--above-36YLR71G:after{border-top-width:4px;top:100%}.common-tooltip__ear-holder--after-36YLR71G:after,.common-tooltip__ear-holder--before-36YLR71G:after{border-bottom:6px solid #0000;border-top:6px solid #0000;margin-top:-6px;top:50%}html.theme-dark .common-tooltip__ear-holder--after-36YLR71G:after,html.theme-dark .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom-color:#0000;border-top-color:#0000}.common-tooltip__ear-holder--before-36YLR71G:after{border-right-width:4px;right:100%}.common-tooltip__ear-holder--after-36YLR71G:after{border-left-width:4px;left:100%}.common-tooltip__body-36YLR71G{word-wrap:break-word;background-color:#2a2e39;box-sizing:border-box;display:block;max-width:320px;overflow:hidden;padding:3px 8px;position:relative;text-align:right;white-space:pre-wrap}html.theme-dark .common-tooltip__body-36YLR71G{background-color:#50535e}.common-tooltip__body--with-hotkey-36YLR71G{display:flex;max-width:420px;padding:0}.common-tooltip__body--width_wide-36YLR71G{max-width:640px}.common-tooltip__body--width_narrow-36YLR71G{max-width:200px}.common-tooltip__body--no-padding-36YLR71G{padding:0}.common-tooltip__hotkey-block-36YLR71G{align-items:center;color:#ff9800;display:inline-flex;flex:1 0 auto;justify-content:center;line-height:12px;padding:4px 8px 5px}.common-tooltip__hotkey-block--divider-36YLR71G{border-right:1px solid #5d606b;margin-right:8px}html.theme-dark .common-tooltip__hotkey-block--divider-36YLR71G{border-right:1px solid #363a45}.common-tooltip__hotkey-text-36YLR71G{align-items:center;display:inline-flex;margin:3px 8px 3px 0}.common-tooltip__hotkey-button-36YLR71G{align-items:center;border:1px solid;border-radius:2px;display:inline-flex;height:13px;justify-content:center;min-width:7px;padding:0 3px}.common-tooltip__plus-sign-36YLR71G{height:15px;line-height:16px;text-align:center;width:13px}.common-tooltip__button-container-36YLR71G{display:flex;overflow:hidden;position:relative}.common-tooltip__button-36YLR71G{align-items:center;background-color:#2962ff;color:#fff;display:flex;padding:0 10px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.common-tooltip__button-36YLR71G:hover{background-color:#bbd9fb}}.common-tooltip-36YLR71G.theme-white{color:#131722}html.theme-dark .common-tooltip-36YLR71G.theme-white{color:#d1d4dc}.common-tooltip-36YLR71G.theme-white .common-tooltip__body-36YLR71G{background-color:#fff;border-radius:0}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__body-36YLR71G{background-color:#1e222d}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G{border:1px solid #e0e3eb}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G{border:1px solid #363a45}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:after{border-color:#fff}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:after{border-color:#1e222d}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:after,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:after{border-left:6px solid #0000;border-right:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:after{border-left-color:#0000;border-right-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:after,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom:6px solid #0000;border-top:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom-color:#0000;border-top-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:before{border:0 solid #e0e3eb;content:"";display:block;height:0;position:absolute;width:0;z-index:1000}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder-36YLR71G:before{border-color:#363a45}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:before,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:before{border-left:7px solid #0000;border-right:7px solid #0000;margin-right:-7px;right:50%}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:before,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:before{border-left-color:#0000;border-right-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--below-36YLR71G:before{border-bottom-width:6px;top:-6px}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--above-36YLR71G:before{border-top-width:6px;bottom:-6px}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:before,.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:before{border-bottom:7px solid #0000;border-top:7px solid #0000;margin-top:-7px;top:50%}html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:before,html.theme-dark .common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:before{border-bottom-color:#0000;border-top-color:#0000}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--before-36YLR71G:before{border-left-width:6px;right:-6px}.common-tooltip-36YLR71G.theme-white .common-tooltip__ear-holder--after-36YLR71G:before{border-right-width:6px;left:-6px}.common-tooltip-36YLR71G.theme-round-shadow{box-shadow:0 1px 3px 0 #2a2c394a;color:#131722}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow{color:#d1d4dc}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__body-36YLR71G{background-color:#fff}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__body-36YLR71G{background-color:#1e222d}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder-36YLR71G:after{border-color:#fff}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder-36YLR71G:after{border-color:#1e222d}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--above-36YLR71G:after,.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--below-36YLR71G:after{border-left:6px solid #0000;border-right:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--above-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--below-36YLR71G:after{border-left-color:#0000;border-right-color:#0000}.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--after-36YLR71G:after,.common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom:6px solid #0000;border-top:6px solid #0000}html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--after-36YLR71G:after,html.theme-dark .common-tooltip-36YLR71G.theme-round-shadow .common-tooltip__ear-holder--before-36YLR71G:after{border-bottom-color:#0000;border-top-color:#0000}.container-e6Js9pSl{background-color:#e0e3eb;box-sizing:border-box;height:100%;width:100%}html.theme-dark .container-e6Js9pSl{background-color:#2a2e39}.container-e6Js9pSl .inner-e6Js9pSl{background-color:#fff;height:100%;width:100%}html.theme-dark .container-e6Js9pSl .inner-e6Js9pSl{background-color:#131722}.container-e6Js9pSl.border-left-e6Js9pSl{padding-right:4px}.container-e6Js9pSl.border-right-e6Js9pSl{padding-left:4px}.container-e6Js9pSl.border-top-e6Js9pSl{padding-top:4px}.container-e6Js9pSl.border-bottom-e6Js9pSl{padding-bottom:4px}.container-e6Js9pSl.top-right-radius-e6Js9pSl .inner-e6Js9pSl{border-top-left-radius:0}.container-e6Js9pSl.top-left-radius-e6Js9pSl .inner-e6Js9pSl{border-top-right-radius:0}.container-e6Js9pSl.bottom-right-radius-e6Js9pSl .inner-e6Js9pSl{border-bottom-left-radius:0}.container-e6Js9pSl.bottom-left-radius-e6Js9pSl .inner-e6Js9pSl{border-bottom-right-radius:0}.tv-exit-fullscreen-button{background:#fff;border:1px solid #c9cbcd;border-radius:0 0 3px 3px;color:#848487;cursor:default;font-size:11px;font-weight:700;margin:0 -59px 0 0;opacity:.6;padding:2px 4px;position:fixed;right:50%;top:-1px;width:116px;z-index:16}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.tv-exit-fullscreen-button:hover{opacity:1}}button,html input[type=button],input[type=reset],input[type=submit]{cursor:default}.chart-widget{border-style:none;box-sizing:border-box;height:256px;margin:0;overflow:hidden;padding:0;position:absolute;right:0;top:0;width:512px}.chart-header{background-color:#fff;border-bottom:1px solid gray;color:#fff}table.chart-markup-table{border:none;border-collapse:collapse;border-spacing:0;direction:ltr;line-height:0px;margin:0;padding:0}.chart-markup-table tr{margin:0;padding:0}td.chart-markup-table{border:none;direction:rtl;line-height:0px;margin:0;padding:0;text-align:right;vertical-align:top}.chart-gui-wrapper{align-items:flex-start;direction:ltr;display:flex;height:100%;max-height:100%;max-width:100%;overflow:hidden;position:relative;width:100%}.chart-data-window{background-color:#fff;border-collapse:collapse;box-sizing:border-box;color:#434651;margin:0;padding:0;position:absolute;text-align:right;width:100%}html.theme-dark .chart-data-window{background-color:#131722;color:#d1d4dc}.chart-data-window .box{margin:3px}.chart-data-window .box.with-actions{cursor:pointer}.chart-data-window .box:first-child .chart-data-window-header:first-child{margin-top:0}.chart-data-window .hover .chart-data-window-header .hover-source-icon{display:block}.chart-data-window .active{border-right:2px solid #528cde}.chart-data-window .active .chart-data-window-header{background:#e9f8ff}.chart-data-window .active .chart-data-window-header,.chart-data-window .active .chart-data-window-item .chart-data-window-item-title{padding-right:8px}.chart-data-window .active .chart-data-window-item{font-weight:700}.chart-data-window .hidden{opacity:.3}.chart-data-window .hidden .chart-data-window-item{display:none}.chart-data-window .chart-data-window-header,.chart-data-window .chart-data-window-item{margin-bottom:3px;position:relative}.chart-data-window .chart-data-window-header{background:#f0f3fa;font-size:12px;font-weight:700;padding:9px 10px}html.theme-dark .chart-data-window .chart-data-window-header{background:#2a2e39}.chart-data-window .chart-data-window-header .toggle-source-icon{display:block;height:10px;left:14px;position:absolute;top:11px;width:16px}.chart-data-window .chart-data-window-header .toggle-source-icon svg{fill:#787b86;display:block;height:10px;width:16px}html.theme-dark .chart-data-window .chart-data-window-header .toggle-source-icon svg{fill:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-data-window .chart-data-window-header .toggle-source-icon:hover svg{fill:#2962ff!important}}.chart-data-window .chart-data-window-header .hover-source-icon{background:#2962ff;border-radius:10px;display:none;height:10px;left:40px;position:absolute;top:11px;width:10px}.chart-data-window .chart-data-window-item:last-child{margin-bottom:0}.chart-data-window .chart-data-window-item .chart-data-window-item-title,.chart-data-window .chart-data-window-item .chart-data-window-item-value{box-sizing:border-box;display:inline-block;padding:4px 10px;white-space:nowrap;width:50%}.chart-data-window .chart-data-window-item .chart-data-window-item-title .real-color,.chart-data-window .chart-data-window-item .chart-data-window-item-value .real-color{border:1px dotted #ccc;cursor:help;display:inline-block;height:8px;margin-left:15px;width:15px}.chart-data-window .chart-data-window-item .chart-data-window-item-value{text-align:left}.chart-loading-screen{height:0;position:absolute;right:0;top:0;width:0;z-index:4}.chart-loading-screen .chart-loading-screen-shield{background:red;height:100%;opacity:0;width:100%}.chart-loading-screen.fade{height:100%;width:100%}.chart-loading-screen.fade .chart-loading-screen-shield{opacity:.5;transition:opacity .3s ease}.bar-mark-tooltip{background:#ffffffe6;border:1px solid gray;display:none;min-height:18px;padding:8px 8px 8px 10px;position:absolute;z-index:14}html.theme-dark .bar-mark-tooltip{background:#131722e6}.bar-mark-tooltip .text{display:inline-block;font-size:13px;line-height:13px;max-width:250px;overflow:hidden;padding-right:4px;padding-top:2px;text-overflow:ellipsis}.published-charts-tooltip{background:#ffffffe6;border:1px solid;cursor:default;display:none;height:32px;margin-top:-25px;padding:8px 8px 8px 30px;position:absolute;z-index:7}html.theme-dark .published-charts-tooltip{background:#131722e6}.published-charts-tooltip .avatar{height:32px;position:absolute;right:8px;top:8px;width:32px}.published-charts-tooltip .avatar img{height:32px;width:32px}.published-charts-tooltip .pin{background-image:url(7393f661fc7d4389ea6d4dabd2a5aeea.png);cursor:pointer;height:16px;left:9px;position:absolute;top:9px;vertical-align:top;width:16px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.published-charts-tooltip .pin:hover{background-position:32px 0}}.published-charts-tooltip .pin.pinned{background-position:16px 0}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.published-charts-tooltip .pin.pinned:hover{background-position:16px 0}}.published-charts-tooltip .text{color:#434651;cursor:pointer;display:inline-block;font-size:13px;font-weight:700;line-height:15px;max-width:250px;overflow:hidden;padding-right:39px;text-overflow:ellipsis;white-space:nowrap}html.theme-dark .published-charts-tooltip .text{color:#8b8f95}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.published-charts-tooltip .text:hover{text-decoration:underline}}.published-charts-tooltip .username{color:#8f8f8f;font-size:11px;font-weight:400;line-height:13px;padding-right:39px;padding-top:2px;white-space:nowrap}.published-charts-tooltip:after,.published-charts-tooltip:before{border:solid #0000;content:" ";height:0;pointer-events:none;position:absolute;right:100%;width:0}.published-charts-tooltip:after{border-width:1em;margin-top:-1em;top:50%}.published-charts-tooltip:before{border-width:1.1em;margin-top:-1.1em;top:50%}.published-charts-tooltip:not(.right):after{border-color:#fff0 #fff #fff0 #fff0}html.theme-dark .published-charts-tooltip:not(.right):after{border-right-color:#131722}.published-charts-tooltip.right:after{border-color:#fff0 #fff0 #fff0 #fff}html.theme-dark .published-charts-tooltip.right:after{border-left-color:#131722}.published-charts-tooltip.right:before{right:-2.2em}.published-charts-tooltip.right:after{right:-2em}.published-charts-tooltip.green{border-color:#78c143}.published-charts-tooltip.red{border-color:#cc4545}.published-charts-tooltip.neutral{border-color:#eac300}.published-charts-tooltip.green:before{border-color:#78c14300 #78c143 #78c14300 #78c14300}.published-charts-tooltip.red:before{border-color:#cc454500 #cc4545 #cc454500 #cc454500}.published-charts-tooltip.neutral:before{border-color:#eac30000 #eac300 #eac30000 #eac30000}.published-charts-tooltip.green.right:before{border-color:#78c14300 #78c14300 #78c14300 #78c143}.published-charts-tooltip.red.right:before{border-color:#cc454500 #cc454500 #cc454500 #cc4545}.published-charts-tooltip.neutral.right:before{border-color:#eac30000 #eac30000 #eac30000 #eac300}.chart-controls-bar{background-color:var(--tv-color-pane-background,#fff);border-top:1px solid;border-color:var(--tv-color-platform-background,#e0e3eb);border-radius:0 0 4px 4px;box-sizing:border-box;contain:strict;height:39px;overflow:hidden;position:absolute}html.theme-dark .chart-controls-bar{background-color:var(--tv-color-pane-background,#131722);border-color:var(--tv-color-platform-background,#2a2e39)}.no-border-bottom-left-radius .chart-controls-bar{border-bottom-right-radius:0}.no-border-bottom-right-radius .chart-controls-bar{border-bottom-left-radius:0}.charts-popup-list.date-range-popupmenu{margin-right:1px}.charts-popup-list.date-range-popupmenu .item{padding-left:10px;padding-right:10px}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(40f9a03d174178efb12303caa9bc7cd8.woff2) format("woff2"),url(3293616ec0c605c7c2db25829a0a509e.woff) format("woff")}.ui-draggable{touch-action:none}.chart-gui-button-pseudo-border{background:#0000;border:1px solid #b5b7b9;content:"";display:block;height:100%;position:absolute;right:-1px;top:-1px;width:100%;z-index:1}html.theme-dark .chart-gui-button-pseudo-border{border-color:#4c525e}._tv-dialog .button,._tv-dialog .submenu,.bottom-widgetbar-content.backtesting .button,.bottom-widgetbar-content.backtesting .submenu,.properties-toolbar .button,.properties-toolbar .submenu,.widgetbar-widgetheader .button,.widgetbar-widgetheader .submenu{position:relative}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){._tv-dialog .button:not(.disabled):not(.selected):hover:before,._tv-dialog .submenu:not(.disabled):not(.selected):hover:before,.bottom-widgetbar-content.backtesting .button:not(.disabled):not(.selected):hover:before,.bottom-widgetbar-content.backtesting .submenu:not(.disabled):not(.selected):hover:before,.properties-toolbar .button:not(.disabled):not(.selected):hover:before,.properties-toolbar .submenu:not(.disabled):not(.selected):hover:before,.widgetbar-widgetheader .button:not(.disabled):not(.selected):hover:before,.widgetbar-widgetheader .submenu:not(.disabled):not(.selected):hover:before{background:#0000;border:1px solid #b5b7b9;content:"";display:block;height:100%;position:absolute;right:-1px;top:-1px;width:100%;z-index:1}html.theme-dark ._tv-dialog .button:not(.disabled):not(.selected):hover:before,html.theme-dark ._tv-dialog .submenu:not(.disabled):not(.selected):hover:before,html.theme-dark .bottom-widgetbar-content.backtesting .button:not(.disabled):not(.selected):hover:before,html.theme-dark .bottom-widgetbar-content.backtesting .submenu:not(.disabled):not(.selected):hover:before,html.theme-dark .properties-toolbar .button:not(.disabled):not(.selected):hover:before,html.theme-dark .properties-toolbar .submenu:not(.disabled):not(.selected):hover:before,html.theme-dark .widgetbar-widgetheader .button:not(.disabled):not(.selected):hover:before,html.theme-dark .widgetbar-widgetheader .submenu:not(.disabled):not(.selected):hover:before{border-color:#4c525e}._tv-dialog .tv-select-container:not(.sbHolderDisabled):hover,.bottom-widgetbar-content.backtesting .tv-select-container:not(.sbHolderDisabled):hover,.properties-toolbar .tv-select-container:not(.sbHolderDisabled):hover,.widgetbar-widgetheader .tv-select-container:not(.sbHolderDisabled):hover{border:1px solid #b5b7b9}html.theme-dark ._tv-dialog .tv-select-container:not(.sbHolderDisabled):hover,html.theme-dark .bottom-widgetbar-content.backtesting .tv-select-container:not(.sbHolderDisabled):hover,html.theme-dark .properties-toolbar .tv-select-container:not(.sbHolderDisabled):hover,html.theme-dark .widgetbar-widgetheader .tv-select-container:not(.sbHolderDisabled):hover{border-color:#4c525e}.widgetbar-widgetheader .button:hover{border:1px solid #f7f8fa}html.theme-dark .widgetbar-widgetheader .button:hover{border-color:#4c525e}}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;width:100%}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#e0e3eb80;border-radius:50%;display:inline-block;height:19px;position:relative;transform-origin:bottom;width:19px;z-index:2}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{bottom:50%;color:#50535e;font-size:11px;opacity:1;pointer-events:false;position:absolute;text-align:center;top:50%;width:100%;z-index:2}html.theme-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{color:#50535e}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{height:15px;opacity:0;pointer-events:false;position:absolute;right:2px;top:2px;z-index:3}.price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#131722}.chart-container.inactive .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{display:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-container:hover .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{display:inline-block}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#e0e3eb00}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{opacity:1}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#000}.price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{opacity:0}}.price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#0000}.price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{opacity:0}.price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{opacity:1}.price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#e0e3eb80}.price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd{opacity:0}.price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{opacity:1}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#2a2e3980}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd,html.theme-dark .chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .symbol-1DJMiIgd{color:#787b86}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#787b86}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#2a2e3900}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg,html.theme-dark .chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd:hover .wrapper-1DJMiIgd .label-1DJMiIgd .gear-1DJMiIgd svg{fill:#9598a1}}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd.fixed-symbol-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#2a2e3980}.chart-widget__bottom--themed-dark .price-axis-stub-1DJMiIgd.fixed-gear-1DJMiIgd .wrapper-1DJMiIgd .label-1DJMiIgd{background-color:#0000}.time-axis{cursor:default}.time-axis--cursor-grabbing{cursor:grabbing}.time-axis--cursor-ew-resize{cursor:ew-resize}.tv-spinner{animation:tv-spinner__container-rotate .9s linear infinite;color:#2962ff;direction:rtl;display:none;height:1em;margin:0 auto;position:absolute;right:calc(50% - .5em);top:calc(50% - .5em);width:1em;will-change:transform}.tv-spinner--size_mini{font-size:16px}.tv-spinner--size_medium{font-size:32px}.tv-spinner--size_large{font-size:56px}.tv-spinner--size_mini .tv-spinner__width_element:after{border-width:2px}.tv-spinner--size_medium .tv-spinner__width_element:after{border-width:3px}.tv-spinner--size_large .tv-spinner__width_element:after{border-width:4px}.tv-spinner--shown{display:block}.tv-spinner__spinner-layer{color:currentColor;height:100%;position:absolute;transform:rotate(-90deg);white-space:nowrap;width:100%}.tv-spinner__spinner-layer:after{border-radius:50%;border-top-style:solid;border-width:.07em;box-sizing:border-box;content:"";position:absolute;right:45%;top:0;width:10%}.tv-spinner__background{display:inline-block;height:100%;overflow:hidden;position:absolute;width:100%}.tv-spinner__background:after{border-color:#8797a533;border-radius:50%;border-style:solid;bottom:0;box-sizing:border-box;content:"";position:absolute;right:0;top:0;width:100%}.tv-spinner__circle-clipper{display:inline-block;height:100%;overflow:hidden;position:relative;width:50%}.tv-spinner__circle-clipper:after{animation-duration:1.4s;animation-iteration-count:1;animation-timing-function:cubic-bezier(.36,0,.37,.99);border-bottom-color:#0000;border-radius:50%;border-style:solid;bottom:0;box-sizing:border-box;content:"";position:absolute;top:0;width:200%;will-change:transform}.tv-spinner__circle-clipper--left:after{animation-name:tv-spinner__left-spin;border-left-color:#0000;right:0;transform:rotate(0deg)}.tv-spinner__circle-clipper--right:after{animation-name:tv-spinner__right-spin;border-right-color:#0000;right:-100%;transform:rotate(124deg)}@keyframes tv-spinner__container-rotate{to{transform:rotate(-1turn)}}@keyframes tv-spinner__left-spin{0%{transform:rotate(-130deg)}to{transform:rotate(0deg)}}@keyframes tv-spinner__right-spin{0%{transform:rotate(130deg)}to{transform:rotate(124deg)}}.pane{cursor:crosshair;overflow:hidden}.pane--cursor-pointer{cursor:pointer}.pane--cursor-eraser{cursor:url(0579d40b812fa2c3ffe72e5803a6e14c.cur),default}.pane--cursor-dot{cursor:url(ed68e83c16f77203e73dbc4c3a7c7fa1.cur),default}.pane--cursor-default{cursor:default}.pane--cursor-grabbing{cursor:grabbing}.pane--cursor-zoom-in{cursor:zoom-in}.pane--cursor-ew-resize{cursor:ew-resize}.pane--cursor-ns-resize{cursor:ns-resize}.pane--cursor-nwse-resize{cursor:nesw-resize}.pane--cursor-nesw-resize{cursor:nwse-resize}.price-axis{cursor:default;height:100%;overflow:hidden;position:absolute}.price-axis--cursor-grabbing{cursor:grabbing}.price-axis--cursor-pointer{cursor:pointer}.price-axis--cursor-ns-resize{cursor:ns-resize}.price-axis-currency-label-wrapper-25tFaE37{pointer-events:none;position:absolute;right:0;text-align:center;top:6px;-webkit-user-select:none;user-select:none;width:100%;z-index:3}.price-axis-currency-label-25tFaE37{border:1px solid #d1d4dc;border-radius:4px;display:inline-block;text-align:right}.chart-container.inactive .price-axis-currency-label-25tFaE37{display:none}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-container:hover .price-axis-currency-label-25tFaE37{display:inline-block}}.price-axis-currency-label-25tFaE37 tr{pointer-events:auto}.price-axis-currency-label-25tFaE37 tr td:first-child{border-radius:0 4px 4px 0;padding-right:4px}.price-axis-currency-label-25tFaE37 tr td:last-child{border-radius:4px 0 0 4px;padding-left:2px}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.price-axis-currency-label-25tFaE37 tr:hover:not(.readonly-25tFaE37){background-color:#f0f3fa}html.theme-dark .price-axis-currency-label-25tFaE37 tr:hover:not(.readonly-25tFaE37){background-color:#1e222d}}.price-axis-currency-label-25tFaE37 tr.readonly-25tFaE37{pointer-events:none}.price-axis-currency-label-25tFaE37 tr.readonly-25tFaE37 td:last-child{padding-left:4px}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 .price-axis-currency-label-dropdown-25tFaE37:last-child{border-top:1px solid #d1d4dc}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:first-child td:first-child{border-radius:0 4px 0 0}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:first-child td:last-child{border-radius:4px 0 0 0}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:last-child td:first-child{border-radius:0 0 4px 0}.price-axis-currency-label-25tFaE37.multiline-25tFaE37 tr:last-child td:last-child{border-radius:0 0 0 4px}.price-axis-currency-label-text-25tFaE37{white-space:nowrap}.price-axis-currency-label-arrow-down-25tFaE37 svg{margin-bottom:2px;margin-right:2px;vertical-align:middle}.chart-widget__top--themed-dark .price-axis-currency-label-25tFaE37{border-color:#363a45}.chart-widget__top--themed-dark .price-axis-currency-label-25tFaE37.multiline-25tFaE37 .price-axis-currency-label-dropdown-25tFaE37:last-child{border-top:1px solid #363a45}.pane-separator{margin:0;padding:0;position:relative}.pane-separator .handle{cursor:row-resize;height:9px;position:absolute;right:0;top:-4px;width:100%;z-index:50}.pane-separator .handle.i-active{background:#b2b5be33}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.pane-separator .handle:hover{background:#b2b5be33}}.chart-widget--themed-dark .pane-separator .handle.i-active{background:#b2b5be1f}@media (any-hover:hover),(min--moz-device-pixel-ratio:0){.chart-widget--themed-dark .pane-separator .handle:hover{background:#b2b5be1f}}.pane-separator .handle.i-active:before{background:#b2b5be03;content:"";height:100%;opacity:0;position:fixed;right:0;top:0;width:100%}@keyframes tv-transition--fade-in{0%{opacity:0;visibility:visible}to{opacity:1}}@keyframes tv-transition--fade-out{0%{opacity:1}to{opacity:0;visibility:hidden}}@keyframes tv-transition--slide-out{0%{max-height:9000px}to{max-height:0;visibility:hidden}}.tv-transition--fade-in{animation:tv-transition--fade-in .35s ease forwards}.tv-transition--fade-out{animation:tv-transition--fade-out .35s ease forwards}.tv-transition--slide-out{animation:tv-transition--slide-out .35s ease forwards}@font-face{font-family:EuclidCircular;font-style:normal;font-weight:400;src:url(b1a63a011fd92dfb93db6db243bb036c.woff2) format("woff2")} \ No newline at end of file diff --git a/static/charting_library/bundles/library.db04e45ec22f0b637da3.js b/static/charting_library/bundles/library.db04e45ec22f0b637da3.js new file mode 100644 index 0000000..bf6ff1b --- /dev/null +++ b/static/charting_library/bundles/library.db04e45ec22f0b637da3.js @@ -0,0 +1,69348 @@ +webpackJsonp([14], [function(t, e, i) { + "use strict"; + + function o(t, e) { + function i() { + this.constructor = t + } + v(t, e), t.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype, new i) + } + + function n(t, e) { + var i, o, n = {}; + for (i in t) Object.prototype.hasOwnProperty.call(t, i) && e.indexOf(i) < 0 && (n[i] = t[i]); + if (null != t && "function" == typeof Object.getOwnPropertySymbols) + for (o = 0, i = Object.getOwnPropertySymbols(t); o < i.length; o++) e.indexOf(i[o]) < 0 && (n[i[ + o]] = t[i[o]]); + return n + } + + function r(t, e, i, o) { + var n, r, s = arguments.length, + a = s < 3 ? e : null === o ? o = Object.getOwnPropertyDescriptor(e, i) : o; + if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(t, e, + i, o); + else + for (r = t.length - 1; r >= 0; r--)(n = t[r]) && (a = (s < 3 ? n(a) : s > 3 ? n(e, i, a) : n(e, + i)) || a); + return s > 3 && a && Object.defineProperty(e, i, a), a + } + + function s(t, e) { + return function(i, o) { + e(i, o, t) + } + } + + function a(t, e) { + if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(t, + e) + } + + function l(t, e, i, o) { + return new(i || (i = Promise))(function(n, r) { + function s(t) { + try { + l(o.next(t)) + } catch (t) { + r(t) + } + } + + function a(t) { + try { + l(o.throw(t)) + } catch (t) { + r(t) + } + } + + function l(t) { + t.done ? n(t.value) : new i(function(e) { + e(t.value) + }).then(s, a) + } + l((o = o.apply(t, e || [])).next()) + }) + } + + function c(t, e) { + function i(t) { + return function(e) { + return o([t, e]) + } + } + + function o(i) { + if (n) throw new TypeError("Generator is already executing."); + for (; l;) try { + if (n = 1, r && (s = r[2 & i[0] ? "return" : i[0] ? "throw" : "next"]) && !(s = s.call( + r, i[1])).done) return s; + switch (r = 0, s && (i = [0, s.value]), i[0]) { + case 0: + case 1: + s = i; + break; + case 4: + return l.label++, { + value: i[1], + done: !1 + }; + case 5: + l.label++, r = i[1], i = [0]; + continue; + case 7: + i = l.ops.pop(), l.trys.pop(); + continue; + default: + if (s = l.trys, !(s = s.length > 0 && s[s.length - 1]) && (6 === i[0] || 2 === + i[0])) { + l = 0; + continue + } + if (3 === i[0] && (!s || i[1] > s[0] && i[1] < s[3])) { + l.label = i[1]; + break + } + if (6 === i[0] && l.label < s[1]) { + l.label = s[1], s = i; + break + } + if (s && l.label < s[2]) { + l.label = s[2], l.ops.push(i); + break + } + s[2] && l.ops.pop(), l.trys.pop(); + continue + } + i = e.call(t, l) + } catch (t) { + i = [6, t], r = 0 + } finally { + n = s = 0 + } + if (5 & i[0]) throw i[1]; + return { + value: i[0] ? i[1] : void 0, + done: !0 + } + } + var n, r, s, a, l = { + label: 0, + sent: function() { + if (1 & s[0]) throw s[1]; + return s[1] + }, + trys: [], + ops: [] + }; + return a = { + next: i(0), + throw: i(1), + return: i(2) + }, "function" == typeof Symbol && (a[Symbol.iterator] = function() { + return this + }), a + } + + function h(t, e) { + for (var i in t) e.hasOwnProperty(i) || (e[i] = t[i]) + } + + function u(t) { + var e = "function" == typeof Symbol && t[Symbol.iterator], + i = 0; + return e ? e.call(t) : { + next: function() { + return t && i >= t.length && (t = void 0), { + value: t && t[i++], + done: !t + } + } + } + } + + function d(t, e) { + var i, o, n, r, s = "function" == typeof Symbol && t[Symbol.iterator]; + if (!s) return t; + i = s.call(t), n = []; + try { + for (; + (void 0 === e || e-- > 0) && !(o = i.next()).done;) n.push(o.value) + } catch (t) { + r = { + error: t + } + } finally { + try { + o && !o.done && (s = i.return) && s.call(i) + } finally { + if (r) throw r.error + } + } + return n + } + + function p() { + for (var t = [], e = 0; e < arguments.length; e++) t = t.concat(d(arguments[e])); + return t + } + + function _(t) { + return this instanceof _ ? (this.v = t, this) : new _(t) + } + + function f(t, e, i) { + function o(t) { + h[t] && (c[t] = function(e) { + return new Promise(function(i, o) { + u.push([t, e, i, o]) > 1 || n(t, e) + }) + }) + } + + function n(t, e) { + try { + r(h[t](e)) + } catch (t) { + l(u[0][3], t) + } + } + + function r(t) { + t.value instanceof _ ? Promise.resolve(t.value.v).then(s, a) : l(u[0][2], t) + } + + function s(t) { + n("next", t) + } + + function a(t) { + n("throw", t) + } + + function l(t, e) { + t(e), u.shift(), u.length && n(u[0][0], u[0][1]) + } + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var c, h = i.apply(t, e || []), + u = []; + return c = {}, o("next"), o("throw"), o("return"), c[Symbol.asyncIterator] = function() { + return this + }, c + } + + function m(t) { + function e(e, n) { + t[e] && (i[e] = function(i) { + return (o = !o) ? { + value: _(t[e](i)), + done: "return" === e + } : n ? n(i) : i + }) + } + var i, o; + return i = {}, e("next"), e("throw", function(t) { + throw t + }), e("return"), i[Symbol.iterator] = function() { + return this + }, i + } + + function g(t) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var e = t[Symbol.asyncIterator]; + return e ? e.call(t) : "function" == typeof u ? u(t) : t[Symbol.iterator]() + } + var v, y; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.__extends = o, i.d(e, "__assign", function() { + return y + }), e.__rest = n, e.__decorate = r, e.__param = s, e.__metadata = a, e.__awaiter = l, e + .__generator = c, e.__exportStar = h, e.__values = u, e.__read = d, e.__spread = p, e.__await = _, e + .__asyncGenerator = f, e.__asyncDelegator = m, e.__asyncValues = g, v = Object.setPrototypeOf || { + __proto__: [] + } + instanceof Array && function(t, e) { + t.__proto__ = e + } || function(t, e) { + for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]) + }, y = Object.assign || function(t) { + var e, i, o, n; + for (i = 1, o = arguments.length; i < o; i++) { + e = arguments[i]; + for (n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]) + } + return t + } + }, function(t, e, i) { + "use strict"; + (function(t) { + function o(t, e) { + a.call(this), this._linetool = t, this._pointindex = e, this._model = t._model, this._text = + "", this._coordinate = 0, this._background = "#5592C9", this._activeBackground = + "#0F6DBF", this._borderColor = "#2E84A6", this._color = "white", this._visible = !1, + this._invalidated = !0, this._renderer = new l + } + + function n(t, e) { + var i, r, s; + if (c.call(this), this._model = t, this._properties = e, this._pointAdded = new m, this + ._pointChanged = new m, this._onRestoringFactoryDefaults = new m, this + ._onTemplateApplying = new m, this._onTemplateApplied = new m, e.visible && e.frozen || + this._properties.merge(defaults("linetool")), i = defaults("linetoolvisibilities"), e + .intervalsVisibilities) + for (r in i.intervalsVisibilities) this._properties.intervalsVisibilities[r] || this + ._properties.intervalsVisibilities.addProperty(r, i.intervalsVisibilities[r]); + else this._properties.merge(i); + if (this._paneViews = [], this._points = [], this._fixedPoints = [], this._timePoint = [], + this._currentPointsetId = null, this._properties.symbol || this._properties.merge({ + symbol: t.mainSeries().symbol() + }), this._properties.interval || this._properties.merge({ + interval: t.mainSeries().interval() + }), this._properties.addExclusion && (this._properties.addExclusion("symbol"), this + ._properties.addExclusion("symbolInfo"), this._properties.addExclusion("points"), + this._properties.addExclusion("interval"), this._properties.addExclusion("visible"), + this._properties.addExclusion("lastUpdateTime")), this.calcIsActualSymbol(), this + ._properties.intervalsVisibilities.listeners().subscribe(this, n.prototype + .calcIsActualSymbol), + this._properties.listeners().subscribe(this, n.prototype.propertiesChanged), this + ._createPointsProperties(), "_tooltipFieldsHash" in this && !this.hasOwnProperty( + "_tooltipFieldsHash") && (this._tooltipFieldsHash = $.extend(!0, {}, this + ._tooltipFieldsHash)), this.m_priceAxisViews = [], this.m_timeAxisViews = [], this + .pointsCount() > 0) + for (s = 0; s < this.pointsCount(); s++) this.m_priceAxisViews.push(this + .createPriceAxisView(s)), this.m_timeAxisViews.push(new o(this, s)); + this._properties.visible.listeners().subscribe(this, function(t) { + t.value() || this._model.selectedSource() !== this || this._model + .setSelectedSource(null) + }), this.customization = this.customization || { + forcePriceAxisLabel: !1, + disableSelection: !1, + disableErasing: !1, + disableSave: !1, + showInObjectsTree: !0 + }, this._properties.lastUpdateTime || this._properties.addProperty("lastUpdateTime", 0), + this._syncStateExclusions = [] + } + var r = i(8).Point, + s = i(221).LineToolPriceAxisView, + a = i(222).TimeAxisView, + l = i(223), + c = i(46).DataSource, + h = i(26), + u = i(34).Interval, + d = i(127).DateTimeFormatter, + p = i(810), + _ = i(22), + f = i(7).getLogger("Chart.LineDataSource"), + m = i(10), + g = i(3).propertyPages, + v = i(66).lineToolsInfo; + inherit(o, a), o.prototype.setActive = function(t) { + this._active = t + }, o.prototype.update = function() { + this._invalidated = !0 + }, o.prototype.updateImpl = function() { + var t, e, i; + this._visible = !1, this._model.timeScale().isEmpty() || (t = this._linetool + .axisPoints(), t.length <= this._pointindex || this._linetool === this._model + .selectedSource() && (this._text = "", e = t[this._pointindex].index, this + ._coordinate = this._model.timeScale().indexToCoordinate(e), i = this._model + .timeScale().indexToUserTime(e), i && (this._text = new d(this._model + .mainSeries().isDWM()).format(i)), this._visible = !0, this + ._invalidated = !1)) + }, o.prototype.renderer = function() { + this._invalidated && (this.updateImpl(), this._invalidated = !1); + var t = { + text: this._text, + coordinate: this._coordinate, + color: this._color, + background: this._active ? this._activeBackground : this._background, + borderColor: this._borderColor, + visible: this._visible + }; + return this._renderer.setData(t), this._renderer + }, inherit(n, c), n.prototype.pointAdded = function() { + return this._pointAdded + }, n.prototype.pointChanged = function() { + return this._pointChanged + }, n.PointPriceProperty = function(e, i) { + t.call(this), this._lineSource = e, this._pointIndex = i, e.pointAdded().subscribe(this, + function(t) { + this._pointIndex === t && this._listeners.fire(this) + }), e.pointChanged().subscribe(this, function(t) { + this._pointIndex === t && this._listeners.fire(this) + }) + }, inherit(n.PointPriceProperty, t), n.prototype.enableCurrentIntervalVisibility = + function() { + var t, e, i, o, n, r, s, a = u.parse(this._model.mainSeries().interval()); + a.kind() === u.SECONDS && (a.multiplier() < 60 ? (this.properties() + .intervalsVisibilities.seconds.setValue(!0), t = Math.min(this.properties() + .intervalsVisibilities.secondsFrom.value(), a.multiplier()), this + .properties().intervalsVisibilities.secondsFrom.setValue(t), e = Math.max( + this.properties().intervalsVisibilities.secondsTo.value(), a + .multiplier()), this.properties().intervalsVisibilities.secondsTo + .setValue(e)) : a = new u(u.MINUTES, a.multiplier() / 60)), + a.kind() === u.MINUTES && (a.multiplier() < 60 ? (this.properties() + .intervalsVisibilities.minutes.setValue(!0), t = Math.min(this.properties() + .intervalsVisibilities.minutesFrom.value(), a.multiplier()), this + .properties().intervalsVisibilities.minutesFrom.setValue(t), e = Math.max( + this.properties().intervalsVisibilities.minutesTo.value(), a + .multiplier()), this.properties().intervalsVisibilities.minutesTo + .setValue(e)) : (i = Math.floor(a.multiplier() / 60), this.properties() + .intervalsVisibilities.hours.setValue(!0), o = Math.min(this.properties() + .intervalsVisibilities.hoursFrom.value(), i), this.properties() + .intervalsVisibilities.hoursFrom.setValue(o), n = Math.max(this.properties() + .intervalsVisibilities.hoursTo.value(), i), this.properties() + .intervalsVisibilities.hoursTo.setValue(n))), a.kind() === u.DAYS && (this + .properties().intervalsVisibilities.days.setValue(!0), r = Math.min(this + .properties().intervalsVisibilities.daysFrom.value(), a.multiplier()), this + .properties().intervalsVisibilities.daysFrom.setValue(r), s = Math.max(this + .properties().intervalsVisibilities.daysTo.value(), a.multiplier()), this + .properties().intervalsVisibilities.daysTo.setValue(s)), a.kind() === u.WEEKS && + this.properties().intervalsVisibilities.weeks.setValue(!0), a.kind() === u.MONTHS && + this.properties().intervalsVisibilities.months.setValue(!0) + }, n.prototype.getType = function() { + return TradingView.className(this.constructor) + }, n.prototype.getConstructor = function() { + return this._constructor || null + }, n.prototype.isActualSymbol = function() { + return this._isActualSymbol + }, n.prototype.isActualInterval = function() { + return this._isActualInterval + }, n.prototype.isSavedInChart = function(t) { + return !this.customization.disableSave + }, n.prototype.setSavingInChartEnabled = function(t) { + this.customization.disableSave = !t + }, n.prototype.showInObjectTree = function() { + return this.customization.showInObjectsTree + }, n.prototype.setShowInObjectsTreeEnabled = function(t) { + this.customization.showInObjectsTree = t + }, n.prototype.isSelectionEnabled = function() { + return !this.customization.disableSelection + }, n.prototype.setSelectionEnabled = function(t) { + this.customization.disableSelection = !t + }, n.prototype.visibilityKeyByInterval = function(t) { + var e, i = u.parse(t); + return n.IntervalsVisibilities.forEach(function(t) { + t.kind === i.kind() && t.from <= i.multiplier() && t.to >= i.multiplier() && + (e = t.key) + }), e + }, n.prototype.calcIsActualSymbol = function() { + var t, e = this._properties.symbol, + i = this._model.mainSeries(), + o = e.value(); + this._isActualSymbol = i.symbolSameAsCurrent(o), this._isActualSymbol && (t = i + .symbol(), o !== t && (f.logWarn( + 'Possible drawing "migrating" detected from "' + + o + '" to "' + t + '"'), f.logWarn("Series symbolInfo: " + JSON + .stringify(i.symbolInfo())), f.logWarn(Error().stack)), e.setValue(t)), this + .calcIsActualInterval() + }, n.prototype.calcIsActualInterval = function() { + var t, e, i, o, n, r = this._properties, + s = this._model.mainSeries(), + a = u.parse(s.interval()), + l = r.intervalsVisibilities; + this._isActualInterval = !1, a.kind() === u.SECONDS && a.multiplier() < 60 && (t = l + .seconds.value(), e = l.secondsFrom.value(), i = l.secondsTo.value(), this + ._isActualInterval = t && a.multiplier() >= e && a.multiplier() <= i), + a.kind() === u.SECONDS && a.multiplier() >= 60 && (o = Math.floor(a.multiplier() / + 60), t = l.minutes.value(), e = l.minutesFrom.value(), i = l.minutesTo + .value(), this._isActualInterval = t && o >= e && o <= i), a.kind() === u + .MINUTES && a.multiplier() < 60 && (t = l.minutes.value(), e = l.minutesFrom + .value(), i = l.minutesTo.value(), this._isActualInterval = t && a + .multiplier() >= + e && a.multiplier() <= i), a.kind() === u.MINUTES && a.multiplier() >= 60 && ( + n = Math.floor(a.multiplier() / 60), t = l.hours.value(), e = l.hoursFrom + .value(), i = l.hoursTo.value(), this._isActualInterval = t && n >= e && n <= i + ), a.kind() === u.DAYS && (t = l.days.value(), e = l.daysFrom.value(), i = l + .daysTo.value(), this._isActualInterval = t && a.multiplier() >= e && a + .multiplier() <= i), a.kind() === u.WEEKS && (this._isActualInterval = l.weeks + .value()), a.kind() === u.MONTHS && (this._isActualInterval = l.months.value()), + this._isActualInterval || this._model.selectedSource() !== this || this._model + .setSelectedSource(null) + }, n.PointPriceProperty.prototype.value = function() { + var t = this._lineSource.points()[this._pointIndex].price, + e = this._lineSource.ownerSource().formatter(), + i = e.parse(e.format(t)); + return i.price ? i.price : i.value + }, n.PointPriceProperty.prototype.setValue = function(t) { + var e, i, o = this._lineSource.points()[this._pointIndex]; + o.price = parseFloat(t), e = this._lineSource.priceScale(), e.isPercent() && (i = this + ._lineSource.ownerSource().firstValue(), o.price = e.priceRange() + .convertToPercent(o.price, i)), this._lineSource.setPoint(this._pointIndex, o), + this._lineSource._model.updateSource(this._lineSource), this._listeners.fire(this), + this._lineSource.endChanging(!0), this._lineSource._syncMultichartState(), this + ._lineSource._properties.lastUpdateTime.setValue((new Date).valueOf()) + }, n.PointIndexProperty = function(e, i) { + t.call(this), this._lineSource = e, this._pointIndex = i + }, inherit(n.PointIndexProperty, t), n.PointIndexProperty.prototype.value = function() { + return this._lineSource.points()[this._pointIndex].index + }, n.PointIndexProperty.prototype.setValue = function(t) { + var e, i, o = this._lineSource.points()[this._pointIndex]; + o.index = t, e = this._lineSource.priceScale(), e.isPercent() && (i = this._lineSource + .ownerSource().firstValue(), o.price = e.priceRange().convertToPercent(o.price, + i)), this._lineSource.setPoint(this._pointIndex, o), this._lineSource._model + .updateSource(this._lineSource), this._listeners.fire(this), this._lineSource + .endChanging(!0), this._lineSource._syncMultichartState(), this._lineSource + ._properties.lastUpdateTime.setValue((new Date).valueOf()) + }, n.prototype._syncMultichartState = function() { + var t = { + points: this._timePoint, + interval: this._model.mainSeries().interval() + }; + this.linkKey && !this.properties().singleChartOnly && h.finishChangingLineTool({ + model: this._model, + linkKey: this.linkKey, + symbol: this._model.mainSeries().symbol(), + finalState: t + }) + }, n.prototype._createPointProperty = function(t) { + var e, i = this._properties.points; + i.addProperty(t), e = i[t], e.addChild("price", new n.PointPriceProperty(this, t)), e + .addChild("bar", new n.PointIndexProperty(this, t)) + }, n.prototype._createPointsProperties = function() { + this._properties.addProperty("points"); + for (var t = 0; t < this.pointsCount(); t++) this._createPointProperty(t) + }, + n.prototype.priceScale = function() { + return this._ownerSource ? this._ownerSource.m_priceScale : null + }, n.prototype.symbol = function() { + return this._properties.symbol.value() + }, n.prototype.properties = function() { + return this._properties + }, n.prototype.isSavedInStudyTemplates = function() { + return !1 + }, n.prototype.state = function(t) { + var e = TradingView.className(this.constructor), + i = { + type: e, + id: this.id(), + state: this.properties().state(), + points: this._timePoint, + zorder: this.zorder(), + linkKey: this.linkKey + }; + return i.state._isActualInterval = this.isActualInterval(), delete i.state.points, t && + (i.indexes = this._points), this.ownerSource() && (i.ownerSource = this + .ownerSource().id()), this.isFixed() && (i.positionPercents = this + ._positionPercents || this.calcPositionPercents()), "version" in this && 1 !== + this.version && (i.version = this.version), this.hasAlert.value() && (i.alertId = + this._alertId), i + }, n.prototype.template = function() { + var t = this.properties().state(); + return delete t.points, delete t.symbol, delete t.symbolInfo, t + }, n.prototype.applyTemplate = function(t) { + delete t.symbolInfo, this._onTemplateApplying.fire(t); + var e = this.properties(); + e.merge(t), e.saveDefaults(), this.propertiesChanged(), this.calcIsActualSymbol(), this + .updateAllViews(), this.model().invalidate(new _(_.LIGHT_UPDATE)), this + ._onTemplateApplied.fire() + }, n.prototype.restoreFactoryDefaults = function() { + this.properties().restoreFactoryDefaults(), this._onRestoringFactoryDefaults.fire(), + this.model().updateSource(this) + }, n.prototype.clearData = function() { + this._points = [] + }, n.prototype.currentPointsetId = function() { + return "pointset_" + this._currentPointsetId + }, n.prototype.stop = function() { + this.clearServerPoints(), this.hasAlert.value() && TradingView.alertsDispatcher && + TradingView.alertsDispatcher.deleteAlert(this._alertId) + }, n.prototype.isStarted = function() { + return null !== this._currentPointsetId + }, n.prototype.restart = function() { + this.isFixed() || (this._currentPointsetId = null, this.createServerPoints()) + }, n.prototype.tryCreateServerPoints = function() { + this.isFixed() || null === this._currentPointsetId && this.createServerPoints() + }, n.prototype.normalizePoint = function(t) { + var e = this._model.timeScale().normalizeBarIndex(t.index); + return e.price = t.price, e + }, n.prototype.normalizePoints = function() { + var t, e; + for (this._timePoint = [], t = 0; t < this._points.length; t++) { + if (e = this._model.timeScale().normalizeBarIndex(this._points[t].index), !e + .time_t) { + this._timePoint = []; + break + } + e.price = this._points[t].price, this._timePoint.push(e) + } + }, n.prototype.denormalizeTimePoints = function() { + var t, e, i = []; + for (t = 0; t < this._timePoint.length; t++) { + if (void 0 === (e = this._model.timeScale().denormalizeTimePoint(this._timePoint[ + t]))) { + i = []; + break + } + i.push({ + index: e, + price: this._timePoint[t].price + }) + } + i.length > 0 && (this._points = i) + }, n.prototype.restorePoints = function(t, e, i) { + this._timePoint = t, this._points = e, i || this.denormalizeTimePoints() + }, n.prototype.restoreExternalPoints = function(t) { + if (this.properties().interval.setValue(t.interval), this._timePoint = t.points, this + .denormalizeTimePoints(), !this.isActualSymbol()) return void this + .clearServerPoints(); + this.createServerPoints() + }, n.prototype.restorePositionPercents = function(t) { + this._positionPercents = t + }, n.prototype.updateAllViewsAndRedraw = function() { + this.updateAllViews(), this._model.updateSource(this) + }, n.prototype.propertiesChanged = function() { + if (this.calcIsActualInterval(), this.updateAllViewsAndRedraw(), this.linkKey) { + var t = this.properties().state(this._syncStateExclusions); + delete t.interval, h.changeLineStyle({ + linkKey: this.linkKey, + state: t, + model: this._model + }) + } + }, n.prototype.points = function() { + var t, e, i = []; + for (t = 0; t < this._points.length; t++) e = this._points[t], i.push({ + index: e.index, + price: e.price, + time: e.time + }); + return this._lastPoint && i.push({ + index: this._lastPoint.index, + price: this._lastPoint.price, + time: this._lastPoint.time + }), this._currentMovingPoint && this._startMovingPoint && this.correctPoints(i), i + }, n.prototype.axisPoints = function() { + return this.points() + }, n.prototype.fixedPoints = function() { + var t, e, i, o, n = []; + if (this._positionPercents && !this.priceScale().isEmpty()) + for (t = 0; t < this._positionPercents.length; t++) e = this._positionPercents[t], + i = this._model.timeScale().width() * e.x, o = this.priceScale().height() * e.y, + n.push(new r(i, o)); + else + for (t = 0; t < this._fixedPoints.length; t++) n.push(this._fixedPoints[t].clone()); + return this._lastPoint && n.push(this._lastPoint.clone()), this._currentMovingPoint && + this._startMovingPoint && this.correctFixedPoints(n), n + }, n.prototype._convertPriceFromPercentIfNeeded = function(t) { + var e, i = this.priceScale(); + i.isPercent() && (e = this.ownerSource().firstValue(), t.price = i.priceRange() + .convertFromPercent(t.price, e)) + }, n.prototype._convertPriceToPercentIfNeeded = function(t) { + var e, i = this.priceScale(); + i.isPercent() && (e = this.ownerSource().firstValue(), t.price = i.priceRange() + .convertToPercent(t.price, e)) + }, n.prototype._preparePoint = function(t, e) { + var i = t; + return e && e.shift && this.points().length >= 2 && this._properties.snapTo45Degrees && + this._snapPoint45Degree(i, this.points()[this.points().length - 2]), this + ._convertPriceFromPercentIfNeeded(i), i + }, n.prototype.addPoint = function(t, e, i) { + var o = this._preparePoint(t, e); + return this._addPointIntenal(o, e, i) + }, n.prototype._addPointIntenal = function(t, e, i) { + this._points.push(t); + var o = this._points.length === this.pointsCount(); + return o ? (this._lastPoint = null, i || (this.normalizePoints(), this + .createServerPoints())) : this._lastPoint = t, this._pointAdded.fire(this + ._points.length - 1), o + }, n.prototype.addFixedPoint = function(t) { + this._fixedPoints.push(t); + var e = this._fixedPoints.length === this.pointsCount(); + return e && this.calcPositionPercents(), e + }, n.prototype.calcPositionPercents = function() { + var t, e, i, o; + if (!this.priceScale() || this.priceScale().isEmpty()) return []; + for (this._positionPercents = [], t = 0; t < this._fixedPoints.length; t++) e = this + ._fixedPoints[0], i = e.x / this._model.timeScale().width(), o = e.y / this + .priceScale().height(), this._positionPercents.push({ + x: i, + y: o + }); + return this._positionPercents + }, n.prototype.calcMiddlePoint = function(t, e) { + return new r((t.x + e.x) / 2, (t.y + e.y) / 2) + }, n.prototype.restoreFixedPoints = function() { + this._fixedPoints = this.fixedPoints() + }, n.prototype.onData = function(t) { + var e, i, o, n, r, s; + if (t.params.customId === this.currentPointsetId() && 0 !== t.params.plots.length) { + for (e = 0; e < t.params.plots.length; e++) i = t.params.plots[e], o = this + ._timePoint[i.index], n = i.value[0], r = new Date(1e3 * i.value[1]), s = { + index: n, + time: r, + price: o.price + }, this._points.length <= i.index ? (this._points.push(s), this._pointAdded + .fire(this._points.length - 1)) : (this._points[i.index] = s, this + ._pointChanged.fire(i.index)); + this.checkAlert && this.checkAlert(), this.updateAllViewsAndRedraw() + } + }, n.prototype.correctPricesToPercents = function() { + var t, e, i = this.priceScale(), + o = this.ownerSource().firstValue(); + for (t = 0; t < this._points.length; t++) e = this._points[t], e.price = i.priceRange() + .convertFromPercent(e.price, o), this._pointChanged.fire(t) + }, n.prototype.startChanging = function(t, e) { + t < this.m_priceAxisViews.length && this.m_priceAxisViews[t].setActive(!0), t < this + .m_timeAxisViews.length && this.m_timeAxisViews[t].setActive(!0), this._properties + .lastUpdateTime.setValue((new Date).valueOf()) + }, n.prototype.setPoint = function(t, e, i) { + if (i && i.shift && this._properties.snapTo45Degrees) { + var o = 0 === t ? 1 : t - 1; + this._snapPoint45Degree(e, this.points()[o]) + } + this._convertPriceFromPercentIfNeeded(e), this._points[t] = e, this._pointChanged.fire( + t), this.normalizePoints() + }, n.prototype.startMoving = function(t) { + this.isFixed() && this.restoreFixedPoints(), this._convertPriceFromPercentIfNeeded(t), + this._startMovingPoint = t, this._properties.lastUpdateTime.setValue((new Date) + .valueOf()) + }, n.prototype.move = function(t) { + this._convertPriceFromPercentIfNeeded(t), this._currentMovingPoint = t, this + .updateAllViews() + }, n.prototype.correctPoints = function(t) { + var e, i, o = this._currentMovingPoint.index - this._startMovingPoint.index, + n = this._currentMovingPoint.price - this._startMovingPoint.price; + if (0 === o && 0 === n) return !1; + for (e = 0; e < t.length; e++) i = t[e], i.index += o, i.price += n, t[e] = i; + return !0 + }, n.prototype.correctFixedPoints = function(t) { + var e, i = this._currentMovingPoint.subtract(this._startMovingPoint); + for (e = 0; e < t.length; e++) t[e] = t[e].add(i) + }, n.prototype.endMoving = function(t) { + var e, i, o; + if (this._properties.interval.setValue(this._model.mainSeries().interval()), e = !1, + i = !1, this._currentMovingPoint && this._startMovingPoint) { + if (e = this._currentMovingPoint.index !== this._startMovingPoint.index, i = this + ._currentMovingPoint.price !== this._startMovingPoint.price, this.isFixed()) + this.correctFixedPoints(this._fixedPoints); + else if (this.correctPoints(this._points)) + for (o = 0; o < this._points.length; o++) this._pointChanged.fire(o); + this._startMovingPoint = null, this._currentMovingPoint = null + } + if (this.isFixed()) return this.calcPositionPercents(), void this.updateAllViews(); + this.normalizePoints(), this.updateAllViews(), e && !t && this.createServerPoints(), ( + i || e) && this.synchronizeAlert(!this._alertUndoMode) + }, n.prototype.endChanging = function(t, e) { + var i; + for (this._properties.interval.setValue(this._model.mainSeries().interval()), e || (this + .normalizePoints(), this.createServerPoints()), i = 0; i < this.m_priceAxisViews + .length; i++) this.m_priceAxisViews[i].setActive(!1); + for (i = 0; i < this.m_timeAxisViews.length; i++) this.m_timeAxisViews[i].setActive(!1); + this.synchronizeAlert(!t) + }, n.prototype.paneViews = function(t) { + var e, i; + if (this.isSourceHidden()) return null; + for (e = [], + i = this._paneViews.length - 1; i >= 0; --i) e.push(this._paneViews[i]); + return e + }, n.prototype._setPaneViews = function(t) { + this._paneViews = t, this._model.invalidate(new _(_.LIGHT_UPDATE)) + }, n.prototype.dataWindowView = function() { + return null + }, n.prototype.statusView = function() { + return null + }, n.prototype.isSourceHidden = function() { + return !this._properties.visible.value() || h.hideAllDrawings().value() && this + .canBeHidden() || !this._isActualInterval || !this._isActualSymbol + }, n.prototype.priceAxisViews = function(t, e) { + var i, o, n; + return this.isSourceHidden() ? null : -1 !== t.dataSources().indexOf(this) && e === this + .priceScale() ? this._model.lineBeingEdited() === this ? (i = this._model + .linePointBeingEdited(), i < this.m_priceAxisViews.length ? (o = this + .m_priceAxisViews.slice(), n = o[i], o.splice(i, 1), o.push(n), o) : this + .m_priceAxisViews) : this.m_priceAxisViews : null + }, n.prototype.timeAxisViews = function() { + var t, e, i; + return this.isSourceHidden() ? null : this._model.lineBeingEdited() === this ? (t = this + ._model.linePointBeingEdited(), t < this.m_timeAxisViews.length ? (e = this + .m_timeAxisViews.slice(), i = e[t], e.splice(t, 1), e.push(i), e) : this + .m_timeAxisViews) : this.m_timeAxisViews + }, n.prototype.updateAllViews = function() { + var t, e, i; + if (!this._isActualSymbol) return null; + if (!this._properties.visible.value()) return null; + if (null !== (t = this.paneViews())) + for (e = t, i = 0; i < e.length; i++) e[i].update(); + for (e = this.m_priceAxisViews, i = 0; i < e.length; i++) e[i].update(); + for (e = this.m_timeAxisViews, i = 0; i < e.length; i++) e[i].update() + }, n.prototype.setLastPoint = function(t, e) { + this._lastPoint = this._preparePoint(t, e), this.updateAllViews() + }, n.prototype.setLastFixedPoint = function(t) { + this._lastFixedPoint = t, this.updateAllViews() + }, n.prototype.title = function() { + return "Line Tool" + }, n._pointSetId = 1, n.prototype.start = function() { + this.createServerPoints() + }, n.prototype.createServerPoints = function() { + var t, e, i, o, r, s; + if (!this._recursiveGuard && this._isActualSymbol && this._model.chartApi() + .connected() && (this.clearServerPoints(), !this._model.timeScale().isEmpty() && ( + 0 === + this._timePoint.length && this.normalizePoints(), 0 !== this._timePoint + .length))) { + for (this._currentPointsetId = ++n._pointSetId, t = this._model.mainSeries() + .symbolId(), e = this.properties().interval.value(), i = [], o = 0; o < this + ._timePoint.length; o++) r = this._timePoint[o], i.push([r.time_t, r.offset]); + s = this, this._model.chartApi().createPointset(this.currentPointsetId(), + "turnaround", t, e, i, + function(t) { + s.onData(t) + }) + } + }, n.prototype.clearServerPoints = function() { + null !== this._currentPointsetId && (this._model.chartApi().removePointset(this + .currentPointsetId()), this._currentPointsetId = null) + }, n.prototype.isBeingEdited = function() { + return this === this._model.lineBeingEdited() || this === this._model.sourceBeingMoved + }, n.prototype.isFixed = function() { + return this.properties().locked && this.properties().locked.value() + }, n.prototype.isLocked = n.prototype.isFrozen = function() { + return this.properties().frozen && this.properties().frozen.value() + }, n.prototype._tooltipFieldsHash = {}, + n.prototype._tooltipFieldsOrder = ["time", "price", "index", "time0", "price0", "time1", + "price1", "time2", "price2", "time3", "price3", "time4", "price4", "distance", "term", + "pointsPerBar" + ], n.prototype._tooltipFieldsOrdered = null, n.prototype._formatTooltip = function() { + return null === this._tooltipFieldsOrdered && (this._tooltipFieldsOrdered = new p(this + ._tooltipFieldsHash, p.byOrder(this._tooltipFieldsOrder))), this + ._tooltipFieldsOrdered.array.filter(function(t) { + return null !== t.value && "" !== t.value + }).map(function(t) { + return "" + t.title + ": " + t.value + }).join("
") + }, n.prototype.pointToScreenPoint = function(t) { + var e, i, o, n, s, a, l = this._model.timeScale(), + c = this.priceScale(); + if (!c || c.isEmpty() || l.isEmpty()) return [new r(0, 0), new r(0, 0)]; + if (e = null, c.isPercent()) { + if (!this.ownerSource()) return; + if (null === (e = this.ownerSource().firstValue()) || !isFinite(e)) return + } + return i = l.indexToCoordinate(t.index, !0), o = t.price, c.isPercent() && (o = c + .priceRange().convertToPercent(o, e)), n = c.priceToCoordinate(o, !0), s = + new r(i, n), i = l.indexToCoordinate(t.index, !1), n = c.priceToCoordinate(o, !1), + a = new r(i, n), [s, a] + }, n.prototype.screenPointToPoint = function(t) { + var e = this._model.timeScale(), + i = this.priceScale(), + o = e.coordinateToIndex(t.x), + n = i.coordinateToPrice(t.y), + r = null; + if (i.isPercent()) { + if (!this.ownerSource()) return; + if (null === (r = this.ownerSource().firstValue()) || !isFinite(r)) return + } + return i.isPercent() && (n = i.priceRange().convertFromPercent(n, r)), { + price: n, + index: o + } + }, n.prototype.tags = function() { + return [this._constructor] + }, n.prototype._snapPoint45Degree = function(t, e, i) { + var o, n, r, s, a, l, c, h, u, d, p, _, f = this._model.timeScale(), + m = f.indexToCoordinate(e.index), + g = f.indexToCoordinate(t.index) - m, + v = this.m_priceScale, + y = e.price, + b = t.price, + S = this.ownerSource().firstValue(); + v.isPercent() && (y = v.priceRange().convertToPercent(y, S)), o = v.priceToCoordinate( + y), n = v.priceToCoordinate(b) - o, r = Math.round(Math.atan2(g, n) / Math.PI * + 4), + 2 === Math.abs(r) ? i || (t.price = y) : 0 === Math.abs(r) || 4 === Math.abs(r) ? + i || (t.index = e.index) : 0 === Math.abs(r) || 4 === Math.abs(r) ? i || (t.index = + e.index) : (s = Math.sqrt(g * g + n * n), a = g < 0 ? -1 : 1, l = n < 0 ? -1 : + 1, c = Math.max(Math.abs(n), Math.abs(g)), h = c * Math.sqrt(2), u = h / s, c /= + u, d = Math.round(f.coordinateToIndex(m + c * a)), p = Math.abs(f + .indexToCoordinate(d) - m), _ = v.coordinateToPrice(o + p * l), t.index = d, + t.price = _) + }, n.prototype.createPriceAxisView = function(t) { + return new s(this, { + pointIndex: t + }) + }, n.prototype.version = 1, n.isLineTool = function(t) { + var e = TradingView[t]; + return !!e && TradingView.isInherited(e, n) + }, n.prototype.alertId = function() { + return this._alertId + }, n.prototype.setAlert = function(t, e) {}, n.prototype.flushAlert = function() { + delete this._alertId, delete this._alert, this.hasAlert.setValue(!1), window.saver && + window.saver.saveChartSilently(null, !1) + }, n.prototype._processAlertHanders = function(t) { + var e, i, o, n = this; + ("unsubscribe" !== (t = "subscribe" === t ? "subscribe" : "unsubscribe") || n + ._alertCallbacks) && (i = "subscribe" === t ? "on" : "off", e = n.properties(), o = + n._alertCallbacks || { + flush: n.flushAlert.bind(n), + hovered: function(t, e) { + e ? n._model.setHoveredSource(n) : n._model.hoveredSource() === n && n + ._model.setHoveredSource(null) + }, + selected: function(t, e) { + e && n._model.setSelectedSource(n) + }, + synchronizeSilently: function(t) { + n.synchronizeAlert(!1) + } + }, n._alertCallbacks || (n._alertCallbacks = o), n.getAlert().done(function(r) { + r && (r[i]("destroy", o.flush), r[i]("change:hovered", o.hovered), r[i]( + "change:selected", o.selected), e.extendLeft && e.extendLeft[t]( + n, o.synchronizeSilently), e.extendRight && e.extendRight[t](n, + o.synchronizeSilently)) + })) + }, n.prototype.editAlert = function() {}, n.prototype.getAlert = function(t) { + var e, i = this; + return t = t || {}, e = $.Deferred(), TradingView.alertsDispatcher ? TradingView + .alertsDispatcher.requestAlert(i._alertId, { + success: e.resolve.bind(e), + error: e.reject.bind(e), + fromCache: t.fromCache + }) : f.logError("[Alerts] Can't get alert without alerts dispatcher"), e.promise() + }, n.prototype.synchronizeAlert = function(t) { + var e = this; + e.hasAlert.value() && setTimeout(function() { + function i() { + e._alertUndoMode = !0, s.undoToCheckpoint(e._undoCheckpointAlert), + setTimeout(function() { + e._alertUndoMode = !1, e.localAndServerAlersMismatch = !1 + }, 0) + } + + function o(t) { + var i = t.get("description") !== t.defaultDescription(), + o = t.get("extra"), + n = o.alertSeries(), + r = e._model.mainSeries().stateForAlert(); + "MainSeries" === n.type && r.actualSymbol === n.actualSymbol && (o + .mainSeries(r), o.alertSeries(r)), t.set("resolution", e + .stateForAlert().interval), o.drawing(e), i || t + .setDefaultDescription(), e.localAndServerAlersMismatch = !0 + } + + function n(t) { + TradingView.alertsDispatcher.restartAlert(t, { + success: function() { + e.localAndServerAlersMismatch = !1 + }, + error: i, + complete: function() { + delete e._undoCheckpointAlert + } + }) + } + var r, s = e._getUndoHistory(); + e._undoCheckpointAlert || e._alertUndoMode || (r = s.undoStack().pop(), e + ._undoCheckpointAlert = s.createUndoCheckpoint(), r && s.undoStack() + .push(r)), e.getAlert().done(function(e) { + o(e), t && n(e) + }).fail(i) + }, 0) + }, n.prototype._getUndoHistory = function() { + return this._model._undoModel.undoHistory + }, n.prototype.stateForAlert = function() { + var t, e; + if (this.canHasAlert()) return t = this.state(), t.id = this.idForAlert(), t.uniqueId = + this.idForAlert(), t.title = this.title(), t.interval = this._model.mainSeries() + .interval(), e = this._getAlertPlots(), e && (t.plots = e), t + }, n.prototype._getAlertPlots = function() { + return null + }, n.prototype._linePointsToAlertPlot = function(t, e, i, o) { + if (2 !== t.length) return f.logError("[Drawing Alert] Wrong points"), null; + var n = this._model.timeScale(); + return !n || n.isEmpty() ? null : { + type: "LinePlot", + title: e || this.title(), + timestamp: n.indexToTimePoint(0), + offset1: t[0].index, + offset2: t[1].index, + price1: t[0].price, + price2: t[1].price, + extendBackward: i || !1, + extendForward: o || !1 + } + }, n.prototype.getAlertIsActive = function(t) { + this.getAlert({ + fromCache: !0 + }).done(function(e) { + t(!!e && e.get("active")) + }).fail(function() { + t(!1) + }) + }, n.prototype.geometry = function() { + var t = this, + e = function(e) { + var i = e.x / t._model.timeScale().width(), + o = e.y / t.priceScale().height(); + return new r(i, o) + }; + return this.points().map(function(i) { + var o = t.pointToScreenPoint(i)[0]; + return e(o) + }) + }, n.prototype.onlyYMoving = function() { + return !1 + }, n.prototype.model = function() { + return this._model + }, n.prototype.isForcedDrawPriceAxisLabel = function() { + return this.customization.forcePriceAxisLabel + }, + n.prototype.getInputsPropertyPage = function() { + return g.LineToolInputsPropertyPage + }, n.prototype.getVisibilitiesPropertyPage = function() { + return g.LineToolVisibilitiesPropertyPage + }, n.prototype.getSourceIcon = function() { + var t = v[this.getType()]; + return void 0 === t ? null : { + type: "svg", + svgCode: t.icon + } + }, n.prototype.destroy = function() { + this.stop() + }, e.LineToolPriceAxisView = s, e.LineDataSource = n + }).call(e, i(25)) + }, , function(t, e, i) { + "use strict"; + var o, n, r = i(7).getLogger("Chart.DataSourcePropertyPages"); + e.propertyPages = {}, o = e.propertyPages, n = null, e.loadPropertyPages = function() { + return null !== n ? n : (r.logNormal("Start loading property pages"), n = new Promise(function( + t) { + i.e(3).then(function(e) { + o.ChartStylesPropertyPage = i(1083), o + .LineToolABCDPatternStylesPropertyPage = i(1084), o + .LineToolArcStylesPropertyPage = i(1085), o + .LineToolArrowMarkStylesPropertyPage = i(1086), o + .LineToolBalloonStylesPropertyPage = i(1087), o + .LineToolBarsPatternStylesPropertyPage = i(1088) + .LineToolBarsPatternStylesPropertyPage, o + .LineToolBezierStylesPropertyPage = i(1089), o + .LineToolBrushStylesPropertyPage = i(1090), o + .LineToolCalloutStylesPropertyPage = i(1091), o + .LineToolCircleLinesStylesPropertyPage = i(1092), o + .LineToolDateAndPriceRangeStylesPropertyPage = i(1093), o + .LineToolDateRangeStylesPropertyPage = i(1094), o + .LineToolDisjointAngleStylesPropertyPage = i(1095), o + .LineToolElliottStylesPropertyPage = i(1096), o + .LineToolEllipseStylesPropertyPage = i(1097), o + .LineToolFibChannelStylesPropertyPage = i(1098), o + .LineToolFibCirclesStylesPropertyPage = i(1099), o + .LineToolFibRetracementStylesPropertyPage = i(1078), o + .LineToolFibSpeedResistanceArcsStylesPropertyPage = i(1100), o + .LineToolFibSpeedResistanceFanStylesPropertyPage = i(1101), o + .LineToolFibSpiralStylesPropertyPage = i(1102), o + .LineToolFibTimeZoneStylesPropertyPage = i(1103), o + .LineToolFibWedgeStylesPropertyPage = i(1104), o + .LineToolFlatBottomStylesPropertyPage = i(1105), o + .LineToolGannComplexStylesPropertyPage = i(1106) + .LineToolGannComplexStylesPropertyPage, o + .LineToolGannFixedStylesPropertyPage = i(1107) + .LineToolGannFixedStylesPropertyPage, o + .LineToolGannFanStylesPropertyPage = i(1108), o + .LineToolGannSquareStylesPropertyPage = i(1109), o + .LineToolGhostFeedInputsPropertyPage = i(400) + .LineToolGhostFeedInputsPropertyPage, o + .LineToolGhostFeedStylesPropertyPage = i(400) + .LineToolGhostFeedStylesPropertyPage, o + .LineToolHorzLineInputsPropertyPage = i(401) + .LineToolHorzLineInputsPropertyPage, o + .LineToolHorzLineStylesPropertyPage = i(401) + .LineToolHorzLineStylesPropertyPage, o + .LineToolIconStylesPropertyPage = i(1110), o + .LineToolInputsPropertyPage = i(1076), o + .LineToolLineTool5PointsPatternStylesPropertyPage = i(1111), o + .LineToolNotePropertyPage = i(1112), o + .LineToolParallelChannelStylesPropertyPage = i(1113), o + .LineToolPitchfanStylesPropertyPage = i(1114), o + .LineToolPitchforkStylesPropertyPage = i(1115), o + .LineToolPolylineStylesPropertyPage = i(1116), o + .LineToolPredictionStylesPropertyPage = i(1117), o + .LineToolPriceLabelStylesPropertyPage = i(1118), o + .LineToolProjectionStylesPropertyPage = i(1119), o + .LineToolRectangleStylesPropertyPage = i(1120), o + .LineToolRiskRewardInputsPropertyPage = i(402) + .LineToolRiskRewardInputsPropertyPage, + o.LineToolRiskRewardStylesPropertyPage = i(402) + .LineToolRiskRewardStylesPropertyPage, o + .LineToolTextStylesPropertyPage = i(1121), o + .LineToolTimeCyclesPropertyPage = i(1122), o + .LineToolTrendAngleInputsPropertyPage = i(403) + .LineToolTrendAngleInputsPropertyPage, o + .LineToolTrendAngleStylesPropertyPage = i(403) + .LineToolTrendAngleStylesPropertyPage, o + .LineToolTrendBasedFibExtensionStylesPropertyPage = i(1123), o + .LineToolTrendBasedFibTimeStylesPropertyPage = i(1124), o + .LineToolTrendLineStylesPropertyPage = i(1125), o + .LineToolTrianglePatternStylesPropertyPage = i(1126), o + .LineToolTriangleStylesPropertyPage = i(1127), o + .LineToolVertLineInputsPropertyPage = i(404) + .LineToolVertLineInputsPropertyPage, o + .LineToolVertLineStylesPropertyPage = i(404) + .LineToolVertLineStylesPropertyPage, o + .LineToolVisibilitiesPropertyPage = i(1128), o + .StudyCompareInputsPropertyPage = i(1129), o + .StudyDisplayPropertyPage = i(378).StudyDisplayPropertyPage, o + .StudyInputsPropertyPage = i(246).StudyInputsPropertyPage, o + .StudyLineDataSourcePropertyPage = i(1130), o + .StudyOverlayStylesPropertyPage = i(1131), o + .StudyPivotPointsStandardStylesPropertyPage = i(1132), o + .StudyStrategyPropertyPage = i(1133), o + .StudyStylesPropertyPage = i(378).StudyStylesPropertyPage, o + .VolumePropertyPage = i(1134), r.logNormal( + "Property pages loaded"), t() + }.bind(null, i)).catch(i.oe) + })) + } + }, , function(t, e, i) { + var o = i(569), + n = {}, + r = {}, + s = {}, + a = { + init: function() { + var t, e, i, l; + Object.keys(o).forEach(function(i) { + t = o[i], e = t.subsets, Array.isArray(e) ? e.forEach(function(t) { + n[t] = 1 + }) : e && Object.keys(e).forEach(function(t) { + n[t] = 1 + }), n[i] = 1 + }), i = Object.keys(n), i.forEach(function(t) { + i.forEach(function(i) { + if (void 0 !== (l = o[i])) { + if (!(e = l.subsets)) return; + r.hasOwnProperty(t) || (r[t] = []), Array.isArray(e) && ~e + .indexOf(t) ? r[t].push(i) : t in e && r[t].push(i) + } + }) + }), "undefined" != typeof __initialDisabledFeaturesets && + __initialDisabledFeaturesets && __initialDisabledFeaturesets.forEach(function(t) { + a.disable(t) + }), "undefined" != typeof __initialEnabledFeaturesets && + __initialEnabledFeaturesets && __initialEnabledFeaturesets.forEach(function(t) { + a.enable(t) + }), "undefined" != typeof window && (window.Featuresets = a), this.meta = { + _uniqueSetsNames: n, + _setsReverseDependencies: r, + _setsStates: s + } + }, + enabled: function(t) { + var e = function(t) { + var i, o, n = r.hasOwnProperty(t) ? r[t] : []; + if (!1 === s[t]) return !1; + for (i = s[t], o = 0; o < n.length; ++o) i |= e(n[o]); + return i + }; + return !!e(t) + }, + enable: function(t) { + s[t] = !0 + }, + disable: function(t) { + s[t] = !1 + }, + setEnabled: function(t, e) { + s[t] = !!e + }, + _uniqueSets: function() { + return Object.keys(n) + } + }; + a.init(), t.exports = a + }, function(t, e, i) { + "use strict"; + + function o(t, e, i) { + this._defaultName = t; + var n; + i ? n = e : (n = TradingView.clone(defaults(t)), e && TradingView.merge(n, e)), r.call(this, n), + this._defaultName = t, this.listeners().subscribe(this, o.prototype.onPropertyChanged), this + ._exclusions = [] + } + + function n(t) { + o._saveDefaults = t + } + var r = i(25); + inherit(o, r), o._saveDefaults = !1, o.prototype.addExclusion = function(t) { + this._exclusions.push(t) + }, o.prototype.restoreFactoryDefaults = function() { + var t, e = {}; + this._defaultName.startsWith("study_") && (e = TradingView.clone(TradingView.factoryDefaults( + "study"))), + this._defaultName.startsWith("linetool") && (e = TradingView.clone(TradingView + .factoryDefaults("linetoolvisibilities"))), t = TradingView.clone(TradingView + .factoryDefaults(this._defaultName)), this._defaultName.startsWith("study_") && t + .inputs && delete t.inputs.symbol, "linetoolicon" === this._defaultName && (t.icon = + defaults(this._defaultName).icon), ~["linetooltext", "linetooltextabsolute", + "linetoolnote", "linetoolnoteabsolute", "linetoolcallout", "linetoolballoon", + "linetoolarrowmark", "linetoolarrowmarkleft", "linetoolarrowmarkup", + "linetoolarrowmarkright", "linetoolarrowmarkdown", "linetoolhorzline", "linetoolhorzray" + ].indexOf(this._defaultName) && delete t.text, this._exclusions.forEach(function(e) { + delete t[e] + }), TradingView.merge(e, t), this.merge(e), this._defaultName.startsWith("study_") || + TradingView.saveDefaults(this._defaultName, this.state(this._exclusions)), this.listeners() + .fire(this) + }, o.prototype.cleanupFactoryDefaults = function() { + var t = {}; + TradingView.saveDefaults(this._defaultName, t), this.listeners().fire(this) + }, o.prototype.onPropertyChanged = function() { + o._saveDefaults && !this._defaultName.startsWith("study_") && this.saveDefaults() + }, o.prototype.saveDefaults = function() { + TradingView.saveDefaults(this._defaultName, this.state(this._exclusions)) + }, o.prototype.restoreDefaults = function() { + var t = TradingView.clone(defaults(this._defaultName)); + this.merge(t), this.listeners().fire(this) + }, o.prototype.clone = function(t) { + return new o(this._defaultName, this.state(), t && t.replaceByState) + }, e.DefaultProperty = o, e.saveDefaultProperties = n + }, function(t, e, i) { + "use strict"; + (function(t) { + function i() { + return x + } + + function o() { + return P + } + + function n(t) { + t = Math.max(f.ERROR, Math.min(f.DEBUG, t)), x = t, u() + } + + function r(t, e) { + var i, o = 0, + n = 0; + for (i = t.length - 1; i >= 1 && (o += 8 * (1 + encodeURIComponent(t[i]).length), !(i - 1 > + 0 && (n = 8 * (1 + encodeURIComponent(t[i - 1]).length), o + n > e))); i--); + return t.slice(i) + } + + function s(t, e, i, o, n) { + var r = { + id: m, + message: e, + subSystemId: o, + timestamp: +t + }; + m += 1, i.unshift(r), void 0 !== n && i.length > n && (i.length = n) + } + + function a(t) { + var e, i = b.reduce(function(t, e) { + return t.concat(e) + }, []); + return i.sort(function(t, e) { + return t.id - e.id + }), "number" == typeof t && (i = i.slice(-t)), e = i.map(function(t) { + return new Date(t.timestamp).toISOString() + ":" + t.subSystemId + ":" + t + .message.replace(/"/g, "'") + }), r(e, g) + } + + function l(t, e, i, n) { + var r, a; + if ((e !== w || n.id !== T) && (r = new Date, t <= f.NORMAL && s(r, e, i, n.id, n.maxCount), + t <= x && (!n.highRate || o()) && (!S || n.id.match(S)))) { + switch (a = r.toISOString() + ":" + n.id + ":" + e, t) { + case f.DEBUG: + console.debug(a); + break; + case f.INFO: + case f.NORMAL: + n.color ? console.log("%c" + a, "color: " + n.color) : console.log(a); + break; + case f.WARNING: + console.warn(a); + break; + case f.ERROR: + console.error(a) + } + w = e, T = n.id, C && clearTimeout(C), C = setTimeout(function() { + w = null, T = null, C = NaN + }, 1e3) + } + } + + function c(t, e) { + function i(t) { + return function(e) { + return l(t, e, o, n) + } + } + var o, n; + return void 0 === e && (e = {}), o = [], b.push(o), n = Object.assign(e, { + id: t + }), { + logDebug: i(f.DEBUG), + logError: i(f.ERROR), + logInfo: i(f.INFO), + logNormal: i(f.NORMAL), + logWarn: i(f.WARNING) + } + } + + function h() { + P = !!p && "true" === localStorage.getItem(y); + var t = parseInt(p ? localStorage.getItem(v) || "" : ""); + Number.isNaN(t) && (t = f.WARNING), n(t), L.logNormal("Init with settings - level: " + x + + ", high-rate: " + P) + } + + function u() { + try { + p && (localStorage.setItem(y, P + ""), localStorage.setItem(v, x + "")) + } catch (t) { + L.logWarn("Cannot save logger state (level: " + x + ", high-rate: " + P + + ") to localStorage: " + t.message) + } + } + var d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L; + Object.defineProperty(e, "__esModule", { + value: !0 + }), d = "undefined" != typeof window ? window : t, p = !1; + try { + localStorage.getItem(""), p = !0 + } catch (t) {} + _ = "undefined" != typeof TradingView ? TradingView : {}, + function(t) { + t[t.ERROR = 1] = "ERROR", t[t.WARNING = 2] = "WARNING", t[t.INFO = 3] = "INFO", t[t + .NORMAL = 4] = "NORMAL", t[t.DEBUG = 5] = "DEBUG" + }(f = e.LOGLEVEL || (e.LOGLEVEL = {})), m = 0, g = 75497472, v = "tv.logger.loglevel", y = + "tv.logger.logHighRate", b = [], S = null, w = null, T = null, C = NaN, x = f.WARNING, P = ! + 1, e.getLogLevel = i, e.isHighRateEnabled = o, e.setLogLevel = n, e.getLogHistory = a, e + .getLogger = c, L = c("logger"), e.loggingOn = d.lon = _.loggingOn = function(t, e) { + n(f.DEBUG), L.logNormal("Debug logging enabled"), P = !!t, S = e || null, u() + }, e.loggingNormal = _.loggingNormal = function() { + n(f.NORMAL), L.logNormal("Logging set to normal level") + }, e.loggingOff = d.loff = function() { + n(f.INFO), L.logInfo("Debug logging disabled") + }, h() + }).call(e, i(78)) + }, function(t, e, i) { + "use strict"; + + function o(t, e) { + return new h(t, e) + } + + function n(t, e) { + return t.x === e.x && t.y === e.y + } + + function r(t, e, i) { + if (0 === t && 0 === e) throw Error("A and B can not be both equal to zero."); + return { + A: t, + B: e, + C: i + } + } + + function s(t, e) { + var i, o, s; + if (n(t, e)) throw Error("Points should be distinct"); + return i = t.y - e.y, o = e.x - t.x, s = t.x * e.y - e.x * t.y, r(i, o, s) + } + + function a(t, e) { + if (n(t, e)) throw Error("Points of a segment should be distinct"); + return [t, e] + } + + function l(t, e) { + return { + edge: t, + isPositive: e + } + } + + function c(t, e) { + return l(t, t.A * e.x + t.B * e.y + t.C > 0) + } + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var h = function() { + function t(t, e) { + this.x = t, this.y = e + } + return t.prototype.add = function(e) { + return new t(this.x + e.x, this.y + e.y) + }, t.prototype.addScaled = function(e, i) { + return new t(this.x + i * e.x, this.y + i * e.y) + }, t.prototype.subtract = function(e) { + return new t(this.x - e.x, this.y - e.y) + }, t.prototype.dotProduct = function(t) { + return this.x * t.x + this.y * t.y + }, t.prototype.length = function() { + return Math.sqrt(this.x * this.x + this.y * this.y) + }, t.prototype.scaled = function(e) { + return new t(this.x * e, this.y * e) + }, t.prototype.normalized = function() { + return this.scaled(1 / this.length()) + }, t.prototype.transposed = function() { + return new t(-this.y, this.x) + }, t.prototype.clone = function() { + return new t(this.x, this.y) + }, t + }(); + e.Point = h, e.point = o, e.equalPoints = n, e.line = r, e.lineThroughPoints = s, e.lineSegment = a, e + .halfplane = l, e.halfplaneThroughPoint = c + }, function(t, e, i) { + "use strict"; + + function o(t, e) { + if (!t) throw Error("Assertion failed" + (e ? ": " + e : "")) + } + + function n(t) { + if (void 0 === t) throw Error("Value is undefined"); + return t + } + + function r(t) { + if (null === t) throw Error("Value is null"); + return t + } + + function s(t) { + return r(n(t)) + } + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.assert = o, e.ensureDefined = n, e.ensureNotNull = r, e.ensure = s + }, function(t, e, i) { + "use strict"; + (function(t) { + function e() { + this._listeners = [] + } + i(7).getLogger("Common.Delegate"); + e.prototype.subscribe = function(t, e, i) { + var o = { + object: t, + member: e, + singleshot: !!i + }; + this._listeners.push(o) + }, e.prototype.unsubscribe = function(t, e) { + var i, o; + for (i = 0; i < this._listeners.length; ++i) + if (o = this._listeners[i], o.object === t && o.member.prototype === e.prototype) { + this._listeners.splice(i, 1); + break + } + }, e.prototype.unsubscribeAll = function(t) { + var e, i; + for (e = this._listeners.length - 1; e >= 0; --e) i = this._listeners[e], i.object === + t && this._listeners.splice(e, 1) + }, e.prototype.destroy = function() { + delete this._listeners + }, e.prototype.fire = function() { + var t, e, i = this._listeners.slice(); + for (t = 0; t < i.length; ++t) e = i[t], e.member.apply(e.object || null, arguments); + for (t = this._listeners.length - 1; t >= 0; t--) this._listeners[t].singleshot && this + ._listeners.splice(t, 1) + }, "undefined" != typeof window && (window.Delegate = e), void 0 !== t && t && t.exports && + (t.exports = e) + }).call(e, i(42)(t)) + }, function(t, e, i) { + "use strict"; + var o = function() { + function t(t, e, i) { + this._result = t, this._data = e, this._eraseMarker = i + } + return t.prototype.result = function() { + return this._result + }, t.prototype.data = function() { + return this._data + }, t.prototype.eraseMarker = function() { + return this._eraseMarker + }, t.MOVEPOINT_BACKGROUND = 1, t.REGULAR = 2, t.MOVEPOINT = 3, t.CHANGEPOINT = 4, t.CUSTOM = + 5, t.CUSTOM_MOVE = 6, t + }(); + t.exports = o + }, function(t, e, i) { + "use strict"; + + function o(t) { + return t ? (window._tv_languages || {})[t] || null : null + } + + function n() { + document.body && document.body.dispatchEvent(new a.CustomEvent("tradingview-i18next-initialized")) + } + var r, s, a, l, c, h, u, d; + i(571), r = i(293), s = i(285), a = i(572), l = { + translate: r.translationFunction + }, window.__tradingviewI18nextInited || (c = window.language || null, h = o(c), c && h || (console + .error("No translation data"), c = "en", h = o("en")), c && h ? (u = { + interpolation: { + prefix: "__", + suffix: "__" + }, + keySeparator: ":::", + lng: c, + nsSeparator: ":::", + resources: (d = {}, d[c] = { + translation: h + }, d) + }, s.init(u, n), l.translate = s.t.bind(s), r.addTranslationFunctionToWindow(l.translate), r + .addTranslationFunctionToJQuery(l.translate)) : n(), window.__tradingviewI18nextInited = !0), t + .exports = l + }, , , function(t, e, i) { + (function(t) { + function e(t) { + return "number" == typeof t && isFinite(t) + } + + function i(t) { + return "string" == typeof t ? JSON.parse(t) : t + } + + function o(t) { + return null !== t && void 0 !== t && t.constructor === Function + } + + function n(t) { + return h(t) && t.then + } + + function r(t, e) { + t.prototype = Object.create(e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), t.prototype.superclass = e + } + + function s(t, e) { + for (var i in t.prototype) "function" == typeof t.prototype[i] && t.prototype + .hasOwnProperty(i) && (t.prototype[i] = function() { + throw Error(e + "::" + i + + " is an interface member declaration and must be overloaded in order to be called" + ) + }) + } + + function a(t, e, i, o) { + for (var n in i.prototype) + if ("function" == typeof i.prototype[n] && !t.prototype[n]) throw Error( + "Interface implementation assertion failed: " + e + " does not implement " + + o + "::" + n + " function") + } + var l, c = Array.isArray || function(t) { + return "[object Array]" === Object.prototype.toString.call(t) + }, + h = function(t) { + return "object" == typeof t && null !== t + }, + u = function(t) { + return h(t) && -1 !== ("" + t.constructor).indexOf("function Object") + }; + "undefined" != typeof window ? (l = window.TradingView = window.TradingView || {}, window + .isNumber = e, window.isFunction = o, window.inherit = r, window.isArray = c) : l = this + .TradingView = this.TradingView || {}, l.isNaN = function(t) { + return !(t <= 0 || t > 0) + }, l.isAbsent = function(t) { + return null === t || void 0 === t + }, l.isExistent = function(t) { + return null !== t && void 0 !== t + }, Number.isNaN = Number.isNaN || function(t) { + return t != t + }, l.isSameType = function(t, e) { + return Number.isNaN(t) || Number.isNaN(e) ? Number.isNaN(t) === Number.isNaN(e) : {} + .toString.call(t) === {}.toString.call(e) + }, l.isInteger = function(t) { + return "number" == typeof t && t % 1 == 0 + }, l.parseBool = function(t) { + return !0 === t || "true" === t + }, l.isBoolean = function(t) { + return !0 === t || !1 === t + }, l.isString = function(t) { + return null !== t && void 0 !== t && t.constructor === String + }, l.isInherited = function(t, e) { + return t === e || !(!t || !t.prototype) && (void 0 !== t.prototype.superclass && + null !== t.prototype.superclass && (t.prototype.superclass === e || l + .isInherited(t.prototype.superclass, e))) + }, l.TypeValidator = function(t) { + this.m_type = t + }, l.TypeValidator.prototype.check = function(t) { + return t.constructor === this.m_type || l.isInherited(t.constructor, this.m_type) + }, l.PredicateValidator = function(t) { + this.m_predicate = t + }, l.PredicateValidator.prototype.check = function(t) { + return this.m_predicate(t) + }, l.clone = function(t) { + var e, i, o; + if (!t || "object" != typeof t) return t; + e = "function" == typeof t.pop ? [] : {}; + for (i in t) t.hasOwnProperty(i) && (o = t[i], e[i] = o && "object" == typeof o ? l + .clone(o) : o); + return e + }, l.deepEquals = function(t, e, i) { + var n, r, s, a, h; + if (i || (i = ""), t === e) return [!0, i]; + if (o(t) && (t = void 0), o(e) && (e = void 0), void 0 === t && void 0 !== e) return [! + 1, i + ]; + if (void 0 === e && void 0 !== t) return [!1, i]; + if (null === t && null !== e) return [!1, i]; + if (null === e && null !== t) return [!1, i]; + if ("object" != typeof t && "object" != typeof e) return [t === e, i]; + if (Array.isArray(t) && Array.isArray(e)) { + if (n = t.length, r = e.length, n !== r) return [!1, i]; + for (s = 0; s < n; s++) + if (a = l.deepEquals(t[s], e[s], i + "[" + s + "]"), !a[0]) return a; + return [!0, i] + } + if (c(t) || c(e)) return [!1, i]; + for (h in t) + if (a = l.deepEquals(t[h], e[h], i + "[" + h + "]"), !a[0]) return a; + return [!0, i] + }, l.merge = function(t, e) { + for (var i in e) "object" == typeof e[i] && t.hasOwnProperty(i) ? l.merge(t[i], e[i]) : + t[i] = e[i]; + return t + }, l.mergeObj = function(t, e) { + for (var i in e) e[i].constructor === Object && t.hasOwnProperty(i) ? l.mergeObj(t[i], + e[i]) : t[i] = e[i]; + return t + }, l.mergeWithRules = function(t, e, i, o) { + var n, r; + for (n in e) r = o ? o + "." + n : n, i && r in i ? t[n] = i[r](t[n], e[n]) : + "object" == typeof e[n] && t.hasOwnProperty(n) ? l.merge(t[n], e[n], i, r) : t[n] = + e[n] + }, l.sortMultipleFunction = function() { + var t = [].slice.call(arguments), + e = t.length; + return function(i, o) { + var n, r, s, a, l, c, h; + for (h = 0; h < e && (c = 0, s = t[h], a = "string" == typeof s ? s : s.name, + n = i[a], r = o[a], "function" == typeof s.fn && (n = s.fn(n), r = s.fn( + r)), l = s.reverse ? -1 : 1, n < r && (c = -1 * l), n > r && (c = + 1 * l), 0 === c); h++); + return c + } + }, void 0 !== t && t && t.exports && (t.exports = { + inherit: r, + clone: l.clone, + merge: l.merge, + isNumber: e, + isInteger: l.isInteger, + isBoolean: l.isBoolean, + isString: l.isString, + isObject: h, + isHashObject: u, + isPromise: n, + isNaN: l.isNaN, + isAbsent: l.isAbsent, + isExistent: l.isExistent, + isSameType: l.isSameType, + isArray: c, + parseBool: l.parseBool, + parseJSONorNot: i, + deepEquals: l.deepEquals, + declareClassAsPureInterface: s, + requireFullInterfaceImplementation: a + }) + }).call(e, i(42)(t)) + }, , function(t, e, i) { + "use strict"; + (function(t) { + function e() {} + + function i(t) { + if (!(this instanceof i)) return new i(t); + arguments.length > 0 && (this._value = t), this._listeners = [] + } + i.prototype.value = function() { + return this._owner ? this._owner._value : this._value + }, i.prototype.setValue = function(t, e) { + var i, o, n, r = this._owner ? this._owner : this; + if ("function" == typeof r.hook && (t = r.hook(t)), r.writeLock) return r._value; + if (!e && r._value === t && r.hasOwnProperty("_value")) return t; + for (r._value = t, i = r._listeners.slice(), o = 0, n = 0; n < i.length; n++) i[n] + .once && (r._listeners.splice(n - o, 1), o++), i[n].cb(t); + return t + }, i.prototype.deleteValue = function() { + var t, e, i, o = this._owner ? this._owner : this; + if (o.hasOwnProperty("_value")) { + if (o.writeLock) return o._value; + for (delete o._value, t = o._listeners.slice(), e = 0, i = 0; i < t.length; i++) t[ + i].once && (o._listeners.splice(i - e, 1), e++), t[i].cb() + } + }, i.prototype.subscribe = function(t, e) { + var i, o, n; + if ("function" != typeof t) throw new TypeError("callback must be a function"); + i = !!e && !!e.once, o = !!e && !!e.callWithLast, n = this._owner ? this._owner : this, + o && n.hasOwnProperty("_value") && (t(n._value), i) || n._listeners.push({ + cb: t, + owner: this, + once: !!e && !!e.once + }) + }, i.prototype.unsubscribe = function(t) { + var e, i, o = this._owner ? this._owner : this; + for (void 0 === t && (t = null), e = o._listeners, i = e.length; i--;) e[i].owner !== + this && o !== this || e[i].cb !== t && null !== t || e.splice(i, 1) + }, i.prototype.listeners = function() { + return (this._owner ? this._owner : this)._listeners + }, i.prototype.readonly = function() { + if (this._readonlyInstance) return this._readonlyInstance; + var t = this._readonlyInstance = new e; + return t.subscribe = this.subscribe.bind(this), t.unsubscribe = this.unsubscribe.bind( + this), t.value = this.value.bind(this), t.when = this.when.bind(this), t.spawn = + function() { + return this.spawn().readonly() + }.bind(this), t + }, i.prototype.spawn = function() { + var t = new i; + return delete t._listeners, t._owner = this._owner || this, t.destroy = function() { + this.unsubscribe(), delete this._owner + }, t + }, i.prototype.when = function(t) { + var e, i = this; + if (this.value()) return void t(); + e = function(o) { + o && (i.unsubscribe(e), t()) + }, i.subscribe(e) + }, i.prototype.opposite = function() { + var t, e; + return this._opposite || (t = this, e = new i(!this.value()), this.subscribe(function( + t) { + e.setValue(!t) + }), e.subscribe(function(e) { + t.setValue(!e) + }), this._opposite = e), this._opposite + }, "undefined" != typeof window && (window.WatchedValue = i), void 0 !== t && t && t + .exports && (t.exports = i) + }).call(e, i(42)(t)) + }, , function(t, e, i) { + "use strict"; + + function o(t, e) { + var i, o; + return null === t ? e : null === e ? t : (i = Math.min(t.min, e.min), o = Math.max(t.max, e.max), { + min: i, + max: o + }) + } + var n, r, s, a, l, c, h, u; + Object.defineProperty(e, "__esModule", { + value: !0 + }), n = i(9), r = i(86), s = i(7), a = s.getLogger("Chart.PlotList"), + function(t) { + t[t.NearestLeft = -1] = "NearestLeft", t[t.Exact = 0] = "Exact", t[t.NearestRight = 1] = + "NearestRight" + }(l = e.PlotRowSearchMode || (e.PlotRowSearchMode = {})), c = 30, h = -2e6, u = function() { + function t(t) { + void 0 === t && (t = []), this._items = [], this._plotNames = [], this._start = 0, this + ._end = 0, this._shareRead = !1, this._minMaxCache = {}, + this._rowSearchCache = {}, this._plotNames = t + } + return t.prototype.clear = function() { + this._items = [], this._start = 0, this._end = 0, this._shareRead = !1, this + ._minMaxCache = {}, this._rowSearchCache = {} + }, t.prototype.plotNames = function() { + return this._plotNames + }, t.prototype.first = function() { + return this.size() > 0 ? this._items[this._start] : null + }, t.prototype.last = function() { + return this.size() > 0 ? this._items[this._end - 1] : null + }, t.prototype.firstIndex = function() { + return this.size() > 0 ? this._indexAt(this._start) : null + }, t.prototype.lastIndex = function() { + return this.size() > 0 ? this._indexAt(this._end - 1) : null + }, t.prototype.size = function() { + return this._end - this._start + }, t.prototype.isEmpty = function() { + return 0 === this.size() + }, t.prototype.contains = function(t) { + return null !== this._search(t) + }, t.prototype.valueAt = function(t) { + var e = this.search(t); + return null !== e ? e.value : null + }, t.prototype.add = function(t, e) { + var i, o; + return this._shareRead ? (a.logDebug("add: readonly collection modification attempt"), ! + 1) : (i = { + index: t, + value: e + }, o = this._search(t), this._rowSearchCache = {}, null === o ? (this._items + .splice(this._lowerbound(t), 0, i), this._start = 0, this._end = this._items + .length, !0) : (this._items[o] = i, !1)) + }, t.prototype.search = function(t, e) { + var i, o; + return void 0 === e && (e = l.Exact), this._rowSearchCache[t] && this._rowSearchCache[t] + [e] ? this._rowSearchCache[t][e] : null === (i = this._search(t, e)) ? null : (o = { + index: this._indexAt(i), + value: this._valueAt(i) + }, this._rowSearchCache[t] = this._rowSearchCache[t] || {}, this + ._rowSearchCache[t][e] = o, o) + }, t.prototype.fold = function(t, e) { + var i, o, n, r = e; + for (i = this._start; i < this._end; ++i) o = this._indexAt(i), n = this._valueAt(i), + r = t(o, n, r); + return r + }, t.prototype.findFirst = function(t, e) { + var i, o, n, r = void 0 !== e && Math.min(this._start + e, this._end) || this._end; + for (i = this._start; i < r; ++i) + if (o = this._indexAt(i), n = this._valueAt(i), t(o, n)) return { + index: o, + value: n + }; + return null + }, t.prototype.findLast = function(t, e) { + var i, o, n, r = void 0 !== e && Math.max(this._end - e, this._start) || this._start; + for (i = this._end - 1; i >= r; --i) + if (o = this._indexAt(i), n = this._valueAt(i), t(o, n)) return { + index: o, + value: n + }; + return null + }, t.prototype.each = function(t) { + var e, i, o; + for (e = this._start; e < this._end && (i = this._indexAt(e), o = this._valueAt(e), !t( + i, o)); ++e); + }, t.prototype.reduce = function(t, e) { + var i, o, n, r = e; + for (i = this._start; i < this._end; ++i) o = this._indexAt(i), n = this._valueAt(i), + r = t(r, o, n); + return r + }, t.prototype.range = function(e, i) { + var o = new t; + return o._items = this._items, o._start = this._lowerbound(e), o._end = Math.min(this + ._lowerbound(i) + 1, o._items.length), o._shareRead = !0, o + }, t.prototype.minMaxOnRange2 = function(t, e, i) { + var r, s, a, l, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C; + if (this.isEmpty()) return null; + for (r = null, s = n.ensureNotNull(this.firstIndex()), a = n.ensureNotNull(this + .lastIndex()), l = 0, h = i; l < h.length; l++) { + for (u = h[l], d = t - u.offset, p = e - u.offset, d = Math.max(d, s), p = Math.min( + p, a), _ = Math.ceil(d / c) * c, f = Math.max(_, Math.floor(p / c) * c), m = + this._lowerbound(d), g = this._upperbound(Math.min(p, _, e)), v = this + ._plotMinMax(m, g, u), r = o(r, v), this._minMaxCache[u.index] || (this + ._minMaxCache[u.index] = {}), y = this._minMaxCache[u.index], b = Math.max( + _ + 1, d); b < f; b += c) S = Math.floor(b / c), w = y[S], + void 0 === w && (T = S * c, C = (S + 1) * c - 1, w = this.minMaxOnRange(T, C, [ + u + ]), y[S] = w), r = o(r, w); + m = this._lowerbound(f), g = this._upperbound(p), v = this._plotMinMax(m, g, u), r = + o(r, v), void 0 !== u.baseValue && null !== r && (r.min = r.min ? Math.min(u + .baseValue, r.min) : r.min, r.max = r.min ? Math.max(u.baseValue, r + .max) : r.max) + } + return r + }, t.prototype.minMaxOnRange = function(t, e, i) { + var n, r, s, a, l, c, h = null; + for (n = 0, r = i; n < r.length; n++) s = r[n], a = this._lowerbound(t - s.offset), l = + Math.min(this._lowerbound(e - s.offset) + 1, this._items.length), this._items[this + ._end - 1] && this._items[l - 1].index > e - s.offset && (l = a), c = this + ._plotMinMax(a, l, s), h = o(h, c), void 0 !== s.baseValue && null !== h && (h.min = + h.min ? Math.min(s.baseValue, h.min) : h.min, h.max = h.max ? Math.max(s + .baseValue, h.max) : h.max); + return h + }, t.prototype.merge = function(t) { + var e, i, o, n; + if (this._shareRead) return a.logDebug( + "merge: readonly collection modification attempt"), []; + for (e = [], e.earliestRow = null, i = 0, o = t; i < o.length; i++) n = o[i], this + ._invalidateCacheForRow(n), (null === e.earliestRow || e.earliestRow.index > n + .index) && (e.earliestRow = n), this.add(n.index, n.value) ? e.push({ + insert: n + }) : e.push({ + update: n + }); + return e + }, t.prototype.addTail = function(t, e) { + var i, o, n, r; + for (void 0 === e && (e = !1), i = 0, e && this._end - this._start > 0 && (i = 1, this + ._items[this._end - this._start - 1].value = t[0].value), o = i; o < t + .length; ++o) { + if (n = t[o], null === (r = this.lastIndex())) { + a.logError("Can't add tail to the empty plotlist"); + break + } + this.add(r + 1, n.value) + } + this._rowSearchCache = {} + }, t.prototype.move = function(t) { + var e, i, o, n, r, s, l, c; + if (this._shareRead) return a.logDebug( + "move: readonly collection modification attempt"), []; + for (e = [], e.earliestRow = null, i = 0, o = t; i < o.length; i++) n = o[i], null !== ( + r = this._search(n.old)) && (s = this._items[r].value, l = { + index: n.old, + value: s + }, this._items.splice(r, 1), this._end = this._items.length, e.push({ + remove: l + }), this._invalidateCacheForRow(l), n.new !== h && (c = { + index: n.new, + value: s + }, (null === e.earliestRow || e.earliestRow.index > c.index) && (e + .earliestRow = c), this.add(c.index, c.value) ? e.push({ + insert: c + }) : e.push({ + update: c + }), this._invalidateCacheForRow(c))); + return this._rowSearchCache = {}, e + }, t.prototype.remove = function(t) { + var e, i, o, n, r, s; + if (this._shareRead) return a.logDebug( + "remove: readonly collection modification attempt"), []; + if (null === (e = this._search(t, l.NearestRight))) return []; + if (i = [], o = this._items.splice(e), o.length > 0) + for (i.earliestRow = o[0], n = 0, r = o; n < r.length; n++) s = r[n], i.push({ + remove: s + }); + return this._end = this._items.length, this._minMaxCache = {}, this + ._rowSearchCache = {}, i + }, t.prototype.state = function() { + return { + columns: this._plotNames, + start: this._start, + end: this._end, + data: this._items, + shareread: this._shareRead + } + }, t.prototype.restoreState = function(t) { + if (!t) return void this.clear(); + this._plotNames = t.columns, this._start = t.start, this._end = t.end, this._shareRead = + t.shareread, this._items = t.data, this._minMaxCache = {}, this._rowSearchCache = {} + }, t.prototype._indexAt = function(t) { + return this._items[t].index + }, t.prototype._valueAt = function(t) { + return this._items[t].value + }, t.prototype._length = function() { + return this._items.length + }, t.prototype._search = function(t, e) { + var i, o = this._bsearch(t); + return null === o && e ? e < 0 ? (i = this._lowerbound(t), + i > this._start && (i -= 1), i !== this._end && this._indexAt(i) < t ? i : null + ) : (i = this._upperbound(t), i !== this._end && t < this._indexAt(i) ? i : + null) : o + }, t.prototype._bsearch = function(t) { + var e = this._lowerbound(t); + return e === this._end || t < this._items[e].index ? null : e + }, t.prototype._lowerbound = function(t) { + return r.lowerbound(this._items, t, function(t, e) { + return t.index < e + }, this._start, this._end) + }, t.prototype._upperbound = function(t) { + return r.upperbound(this._items, t, function(t, e) { + return e.index > t + }, this._start, this._end) + }, t.prototype._plotMinMax = function(t, e, i) { + var o, n, r, s = null; + for (o = t; o < e; o++) n = this._items[o].value, void 0 === (r = n[i.index]) || + null === r || Number.isNaN(r) || (null === s ? s = { + min: r, + max: r + } : (r < s.min && (s.min = r), r > s.max && (s.max = r))); + return s + }, t.prototype._invalidateCacheForRow = function(t) { + var e, i = Math.floor(t.index / c); + for (e = 0; e < this._plotNames.length; e++) this._minMaxCache[e] && delete this + ._minMaxCache[e][i] + }, t + }(), e.PlotList = u, e.mergeMinMax = o + }, , function(t, e, i) { + "use strict"; + (function(e) { + function o(t, e, i, o) { + this._map = $.extend({}, this._map, o), e && (e = this.unpackLevels(e)), r.call(this, t, e, + i), this.updateCollectibleProperty() + } + var n = i(15).isSameType, + r = i(6).DefaultProperty, + s = i(809); + inherit(o, r), o.prototype.state = function(t, i) { + t = t || [], t.push("__collectibleLines"); + var o = e.prototype.state.call(this, t); + return i ? o : this.packLevels(o) + }, o.prototype.clone = function() { + var t = this.state(); + return this.__collectibleLines && (t.__collectibleLines = this.__collectibleLines + .state()), new o(this._defaultName, t) + }, o.prototype.merge = function(t) { + e.prototype.merge.call(this, this.unpackLevels(t)), this.updateCollectibleProperty() + }, o.prototype._map = { + prefixes: [""], + range: [0, 0], + names: ["coeff", "color", "visible", "linestyle", "linewidth"], + typecheck: { + pack: Object, + unpack: Array + } + }, o.prototype._packLvlTpl = function() { + return [] + }, o.prototype._unpackLvlTpl = function() { + return {} + }, o.prototype._packLvlFill = function(t, e, i, o) { + return o.push(i[e]), o + }, o.prototype._unpackLvlFill = function(t, e, i, o) { + return o[e] = i[t], o + }, o.prototype._iterateLevels = function(t, e) { + var i, o, r, s, a; + for (i in this._map.prefixes) + for (o = (this._map.prefixes[i] || "") + "level", r = this._map.range[0]; r <= this + ._map.range[1]; r++) + if (t[o + r] && n(t[o + r], e.typecheck())) { + s = e.tpl(); + for (a in this._map.names) s = e.fill(a, this._map.names[a], t[o + r], s); + t[o + r] = s + } return t + }, o.prototype.packLevels = function(t) { + return this._iterateLevels(t, { + tpl: this._packLvlTpl, + fill: this._packLvlFill, + typecheck: this._map.typecheck.pack + }) + }, o.prototype.unpackLevels = function(t) { + return this._iterateLevels(t, { + tpl: this._unpackLvlTpl, + fill: this._unpackLvlFill, + typecheck: this._map.typecheck.unpack + }) + }, o.prototype.saveDefaults = function() { + TradingView.saveDefaults(this._defaultName, this.state(this._exclusions, !0)) + }, o.prototype.updateCollectibleProperty = function() { + var t, e; + this.__collectibleLines && (t = this, e = [], this.__collectibleLines._childs.forEach( + function(i) { + var o, n = t.__collectibleLines[i].value(), + r = n.split("."), + s = t[r[0]]; + for (o = 1; o < r.length && s; ++o) s = s[r[o]]; + s && e.push({ + property: s.color, + defaultValue: s.color.value() + }) + }), this.collectibleColors ? this.collectibleColors.reloadProperties(e) : + this.collectibleColors = new s(e)) + }, t.exports = o + }).call(e, i(25)) + }, function(t, e, i) { + "use strict"; + + function o(t) { + this._invalidationLevel = t || o.UPDATE_CURSOR_ONLY, this._invalidatedPanes = {} + } + o.UPDATE_CURSOR_ONLY = 1, o.LIGHT_UPDATE = 2, o.FULL_UPDATE = 3, o.prototype.invalidatePane = function( + t, e) { + this._invalidatedPanes[t] ? this._invalidatedPanes[t] = Math.max(this._invalidatedPanes[t], e) : + this._invalidatedPanes[t] = e + }, o.prototype.invalidateAll = function(t) { + this._invalidationLevel = Math.max(this._invalidationLevel, t) + }, o.prototype.fullInvalidation = function() { + return this._invalidationLevel + }, o.prototype.invalidateForPane = function(t) { + return this._invalidatedPanes[t] ? Math.max(this._invalidatedPanes[t], this + ._invalidationLevel) : this._invalidationLevel + }, o.prototype.merge = function(t) { + this.force = this.force || t.force, this._invalidationLevel = Math.max(this._invalidationLevel, + t._invalidationLevel); + for (var e in t._invalidatedPanes) this._invalidatedPanes[e] ? this._invalidatedPanes[e] = Math + .max(this._invalidatedPanes[e], t._invalidatedPanes[e]) : this._invalidatedPanes[e] = t + ._invalidatedPanes[e] + }, o.prototype.exclude = function(t) { + this._invalidationLevel <= t && (this._invalidationLevel = 0); + for (var e in this._invalidatedPanes) this._invalidatedPanes[e] <= t && (this._invalidatedPanes[ + e] = 0) + }, t.exports = o + }, function(t, e, i) { + "use strict"; + + function o(t, e, i) { + h[t].unsubscribe(i, e) + } + + function n(t, e, i) { + r(t, e, i) + } + + function r(t, e, i, o) { + if (h.hasOwnProperty(t) || (h[t] = new c), d[t]) return void e.call(i); + h[t].subscribe(i, e, o) + } + + function s(t) { + u.push(t) + } + + function a(t) { + var e, i, o = []; + for (e = 1; e < arguments.length; e++) o[e - 1] = arguments[e]; + i = [t].concat(o), u.forEach(function(t) { + t.apply(null, i) + }), h.hasOwnProperty(t) && h[t].fire.apply(h[t], o) + } + + function l(t) { + d[t] && console.warn("Something went wrong: emitOnce called multiple times with same event (" + t + + ")"), d[t] = !0, a.apply(null, arguments) + } + var c, h, u, d; + Object.defineProperty(e, "__esModule", { + value: !0 + }), c = i(10), h = {}, u = [], d = {}, e.unsubscribe = o, e.on = n, e.subscribe = r, e + .subscribeToAll = s, e.emit = a, e.emitOnce = l + }, function(t, e, i) { + "use strict"; + (function(t, e, o) { + var n, r, s, a, l; + i(64), n = i(200).regExpEscape, r = i(93).TVXWindowEvents, s = i(199).TVLocalStorage, a = [ + "s.tradingview.com", "betacdn.tradingview.com" + ], l = window.TVSettings = function() { + function i(t) { + return D + "." + t + } + + function o(t, e) { + var i; + return i = V[t], window.is_authenticated && !W || null != i || (i = V[t]), null == + i ? e : i + } + + function c(t, e) { + var i = o(t, void 0); + if (null == i) return e; + try { + return JSON.parse(i) + } catch (i) { + return f(t), e + } + } + + function h(t, e) { + var i = o(t); + return null == i ? e : !(!i || "false" === i || 0 == +i) + } + + function u(t, e, i) { + var n, r = o(t, void 0, i); + if (null == r) return e; + if (n = parseFloat(r), !isFinite(n)) throw new TypeError('"' + r + + '" is not float (key: "' + t + '")'); + return n + } + + function d(t, e, i) { + var n, r = o(t, void 0, i); + if (null == r) return e; + if (n = parseInt(r, 10), !isFinite(n)) throw new TypeError('"' + r + + '" is not int (key: "' + t + '")'); + return n + } + + function p(t, e, i) { + i = i || {}; + var o = "" + e; + return V[t] !== o && (V[t] = o, g(t)), i.forceFlush && !B && (B = setTimeout( + function() { + B = void 0, v() + }, E)), l + } + + function _(t, e, i) { + return p(t, JSON.stringify(e), i), l + } + + function f(t, e) { + return e = e || {}, null != V[t] && (delete V[t], g(t)), e.forceFlush && v(), l + } + + function m() { + R = void 0, + O.length && v() + } + + function g(t) { + if (H) null == V[t] ? H.removeValue(i(t)) : H.setValue(i(t), V[t]); + else if (!window.is_authenticated || W) try { + null == V[t] ? s.removeItem(i(t)) : s.setItem(i(t), V[t]) + } catch (t) {} else O.push(t), R || (R = setTimeout(m, M)); + r.emit("settings", JSON.stringify({ + key: t, + value: V[t] + })) + } + + function v(e) { + var i, o, n, r, s; + if (!t.enabled("widget") && window.is_authenticated && !W && 0 !== O.length) { + for (i = O, O = [], o = {}, n = i.length; n--;) r = i[n], s = V[r], void 0 === + s && (s = null), o[r] = s; + $.ajax({ + url: "/savesettings/", + type: "POST", + data: { + delta: JSON.stringify(o) + }, + async: !e + }) + } + } + + function y() { + var t, e, i; + for (t = 0; t < s.length; t++) e = s.key(t), i = D.length, e.substring(0, i + 1) === + D + "." && (O = [], s.removeItem(e)); + $.post("/restoredefaults/", {}, function(t) { + TVDialogs.showNotice("Success", + "Defaults has been successfully restored") + }).error(function(t) {}) + } + + function b() { + return Object.keys(V) + } + + function S(t, e) { + var i, o = b(e), + r = []; + for (t = RegExp("^" + n(t).replace(/\\\*\\\*/gi, ".+").replace(/\\\*/gi, "[^.]+") + + "$", "gi"), i = o.length - 1; i >= 0; i--) t.test(o[i]) && r.push(o[i]), t + .lastIndex = 0; + return r + } + + function w(t) { + for (var e = 0; e < z.length; ++e) + if (z[e].exec(t)) return !0; + return !1 + } + + function T() { + var e, i, o, n, r; + for (V = {}, e = D + ".", i = !t.enabled("save_chart_properties_to_local_storage"), + o = s.length; o--;)(n = s.key(o)) && n.substring(0, e.length) === e && (r = n + .substring(e.length), i && !w(r) || (V[r] = s.getItem(n))) + } + + function C(t) { + var e, i, o, n, r; + for (V = {}, e = 0 === Object.keys(t).length, i = D + ".", o = s.length; o--;)(n = s + .key(o)) && n.substring(0, i.length) === i && (e && (r = n.substring(i + .length), p(r, s.getItem(n))), s.removeItem(n)); + Object.keys(t).forEach(function(e) { + V[e] = t[e] + "" + }) + } + + function x() { + var t, e, i, o; + if (TradingView.onWidget() && a.includes(window.location.host)) + for (t = "tradingview.", e = s.length; e--;) i = s.key(e), 0 === i.indexOf(t) && + (o = i.replace(t, D + "."), s.setItem(o, s.getItem(i)), s.removeItem(i)) + } + + function P(t) { + H ? C(H.initialSettings || {}) : window.is_authenticated && !W ? C(t || {}) : (x(), + T()), F.fire() + } + + function L(t) { + H = t + } + var I, k, A, M, E, D, V, O, R, B, z, F, N = !1, + W = t.enabled("cqg_terminal"), + H = null; + try { + N = !TradingView.onWidget() && parent && parent !== window && !!parent.IS_DEMO_PAGE + } catch (t) {} + return N ? (I = { + "widgetbar.layout-settings": { + widgets: {}, + settings: { + minimized: !0 + } + }, + notShowMainWizard: !0 + }, k = function(t, e, i) { + var o = I[t]; + return null == o ? e : o + }, A = function() {}, { + loaded: !1, + loadedModel: !1, + getValue: k, + getJSON: k, + getBool: k, + getFloat: k, + getInt: k, + setValue: A, + setJSON: A, + remove: A, + restoreDefaults: A, + keys: function() { + return Object.keys(I) + }, + keysMask: function() { + return [] + }, + sync: A, + onSync: { + subscribe: function() {} + } + }) : (M = 12e4, E = 10, "local" === window.environment && (M = 5e3), D = TradingView + .onWidget() ? "tradingview-widget" : "tradingview", V = {}, O = [], z = [ + /^widgetbar\.widget\.watchlist.+/, /.+quicks$/, + /^widgetbar\.layout-settings$/, /^ChartSideToolbarWidget\.visible$/, + /^onwidget\.watchlist$/, /^domepanel.visible$/, /^chart\.favoriteDrawings$/, + /^chart\.favoriteDrawingsPosition$/, + /^ChartFavoriteDrawingToolbarWidget\.visible/, /^trading\.chart\.proterty$/, + /^trading_floating_toolbar\.position$/ + ], r.on("settings", function(t) { + var e = JSON.parse(t); + null == e.value ? delete V[e.key] : V[e.key] = e.value + }), F = new e, document.addEventListener("visibilitychange", function() { + "hidden" !== document.visibiltyState && !0 !== document.hidden || v() + }), window.addEventListener("unload", function() { + v(!0) + }), { + loaded: !1, + loadedModel: !1, + getValue: o, + getJSON: c, + getBool: h, + getFloat: u, + getInt: d, + setValue: p, + setJSON: _, + remove: f, + restoreDefaults: y, + keys: b, + keysMask: S, + sync: P, + onSync: F, + setSettingsAdapter: L + }) + }(), void 0 !== o && o && o.exports && (o.exports = l) + }).call(e, i(5), i(10), i(42)(t)) + }, function(t, e, i) { + "use strict"; + (function(e) { + function i(t) { + if (this._listeners = new e, this._childs = [], void 0 !== t && null !== t) + if (this.isPrimitiveType(t)) this._value = t; + else + for (var i in t) this.addProperty(i, t[i]) + } + i.prototype.merge = function(t) { + var e, i; + if (null != t) + if (this.isPrimitiveType(t)) this._value = t; + else if (Array.isArray(t)) + for (e = 0; e < t.length; e++) this[e] ? this[e].merge(t[e]) : this.addProperty(e, + t[e]); + else + for (i in t) this[i] ? this[i].merge(t[i]) : this.addProperty(i, t[i]) + }, i.prototype.state = function(t) { + var e, i, o, n, r, s = this._value; + for (void 0 === s && (s = {}), e = 0; e < this._childs.length; e++) + if (i = this._childs[e], !t || -1 === t.indexOf(i)) + if (t) { + for (o = [], n = 0; n < t.length; n++) r = t[n], r.startsWith(i + ".") && o + .push(r.substr(i.length + 1)); + s[i] = this[i].state(o) + } else s[i] = this[i].state(); + return s + }, i.prototype.clone = function(t) { + return new i(this.state()) + }, i.prototype.isPrimitiveType = function(t) { + return !!isNumber(t) || (!!new TradingView.TypeValidator(String).check(t) || TradingView + .isBoolean(t)) + }, i.prototype.value = function() { + return this._value + }, i.prototype.listeners = function() { + return this._listeners + }, i.prototype.childCount = function() { + return this._childs.length + }, i.prototype.setValue = function(t, e) { + (this._value !== t || e) && (this._value = t, this._listeners.fire(this)) + }, i.prototype.setValueSilently = function(t) { + this._value = t + }, i.prototype.addProperty = function(t, e) { + var o = new i(e); + this[t] = o, this._childs.push(t), o.listeners().subscribe(this, i.prototype + .childChanged) + }, i.prototype.removeProperty = function(t) { + this[t].listeners().unsubscribe(this, i.prototype.childChanged), delete this[t], this + ._childs = this._childs.filter(function(e) { + return e !== t + }) + }, i.prototype.addChild = function(t, e) { + this[t] = e, -1 === $.inArray(t, this._childs) && this._childs.push(t), e.listeners() + .subscribe(this, i.prototype.childChanged) + }, i.prototype.childChanged = function(t, e) { + this.listeners().fire(this) + }, i.prototype.subscribe = function(t, e) { + this.listeners().subscribe(t, e) + }, i.prototype.unsubscribe = function(t, e) { + this.listeners().unsubscribe(t, e) + }, i.prototype.unsubscribeAll = function(t) { + this.listeners().unsubscribeAll(t) + }, t.exports = i + }).call(e, i(10)) + }, function(t, e, i) { + "use strict"; + (function(e, o, n) { + function r(t) { + return "cursor" === t || "arrow" === t || "dot" === t + } + + function s(t) { + !t && u && u.stayInDrawingMode.value() || this.tool.setValue(this.cursorTool.value()) + } + + function a(t, e) { + return function(e) { + t.inFire || (t.inFire = !0, t.fire(e), t.inFire = !1) + } + } + + function l() { + K || (g.setValue(TVSettings.getValue("chart.cursorPreference", "cursor")), g.subscribe( + function(t) { + r(t) && v.setValue(t) + }, { + callWithLast: !0 + }), v.subscribe(function(t) { + t && TVSettings.setValue("chart.cursorPreference", t) + }), u = new c("drawings"), d = new n, p = new n, _ = new n, f = new n, d.setValue(! + 1), p.setValue(!1), _.setValue(!1), f.setValue(!1), + g.subscribe(function() { + h.emit("onSelectedLineToolChanged") + }), K = !0) + } + var c = i(6).DefaultProperty, + h = i(23), + u = null, + d = null, + p = null, + _ = null, + f = null, + m = new e, + g = new e, + v = new e, + y = new o, + b = new o, + S = new o, + w = new o, + T = new o, + C = new o, + x = new o, + P = new o, + L = new o, + I = new o, + k = new o, + A = new o, + M = new o, + E = new o, + D = new o, + V = a(y), + O = a(b), + R = a(S), + B = a(w), + z = a(T), + F = a(C), + N = a(x), + W = a(P), + $ = a(L), + H = a(I), + U = a(k), + j = a(A), + q = a(M), + G = a(E), + Y = a(D), + K = !1; + t.exports = { + tool: g, + cursorTool: v, + toolIsCursor: r, + resetToCursor: s, + init: l, + createdLineTool: y, + continuedLineTool: b, + cancelledLineTool: S, + createLineTool: V, + continueLineTool: O, + cancelLineTool: R, + startedMovingLineTool: w, + movedLineTool: T, + finishedMovingLineTool: C, + startMovingLineTool: B, + moveLineTool: z, + finishMovingLineTool: F, + startedChangingLineTool: x, + changedLineTool: P, + finishedChangingLineTool: L, + startChangingLineTool: N, + changeLineTool: W, + finishChangingLineTool: $, + removedLineTool: I, + removeLineTool: H, + restoredLineTool: E, + restoreLineTool: G, + restoredLineToolState: D, + restoreLineToolState: Y, + finishedLineTool: k, + finishLineTool: U, + changedLineStyle: A, + changeLineStyle: j, + copiedLineTool: M, + copyLineTool: q, + properties: function() { + return u + }, + hideAllDrawings: function() { + return d + }, + hideMarksOnBars: function() { + return _ + }, + lockDrawings: function() { + return p + }, + drawOnAllCharts: function() { + return u.drawOnAllCharts + }, + lockTimeAxis: function() { + return f + }, + lockTimeAxisTime: m + } + }).call(e, i(17), i(10), i(25)) + }, , function(t, e, i) { + "use strict"; + + function o(t, e) { + if (!n.isNumber(t)) return "n/a"; + if (!n.isInteger(e)) throw new TypeError("invalid length"); + if (e < 0 || e > 16) throw new TypeError("invalid length"); + return 0 === e ? "" + t : ("0000000000000000" + t).slice(-e) + } + var n, r, s, a, l; + Object.defineProperty(e, "__esModule", { + value: !0 + }), i(12), n = i(15), r = i(7), s = r.getLogger("Chart.PriceFormatter"), e.customFormatters = { + dateFormatter: null, + timeFormatter: null + }, e.formatterOptions = { + decimalSign: ".", + decimalSignFractional: "'" + }, a = { + custom: $.t("Price format is invalid."), + fraction: $.t("Fraction part is invalid."), + secondFraction: $.t("Second fraction part is invalid.") + }, e.numberToStringWithLeadingZero = o, l = function() { + function t(t, e, i, o) { + if (this.type = "price", e || (e = 1), n.isNumber(t) && n.isInteger(t) || (t = 100), t < 0) + throw new TypeError("invalid base"); + if (this._priceScale = t, this._minMove = e, this._minMove2 = o, i && void 0 !== o && o > + 0 && 2 !== o && 4 !== o && 8 !== o) return void s.logDebug("invalid minmove2"); + this._fractional = i, this.calculateDecimal() + } + return t.prototype.isFractional = function() { + return !!this._fractional + }, t.prototype.state = function() { + return { + fractional: this._fractional, + fractionalLength: this._fractionalLength, + minMove: this._minMove, + minMove2: this._minMove2, + priceScale: this._priceScale + } + }, t.prototype.calculateDecimal = function() { + if (this._fractionalLength = 0, this._priceScale > 0 && this._minMove > 0) { + var t = this._priceScale; + for (this._fractional && this._minMove2 && (t /= this._minMove2); t > 1;) t /= 10, + this._fractionalLength++ + } + }, t.prototype.format = function(t, e, i, o) { + void 0 === o && (o = !0); + var n = ""; + return t < 0 ? (n = !0 === e ? "−" : !1 === o ? "" : "-", t = -t) : t && !0 === e && ( + n = "+"), this._fractional ? n + this._formatAsFractional(t, i) : n + this + ._formatAsDecimal(t, i) + }, t.prototype.parse = function(t) { + return this._fractional ? this._minMove2 ? this._parseAsDoubleFractional(t) : this + ._parseAsSingleFractional(t) : this._parseAsDecimal(t) + }, t.prototype.hasForexAdditionalPrecision = function() { + return !this._fractional && 10 === this._minMove2 + }, t.serialize = function(t) { + return t.state() + }, t.deserialize = function(e) { + return new t(e.priceScale, e.minMove, e.fractional, e.minMove2) + }, t.prototype._formatAsDecimal = function(t, i) { + //格式化价格 + if (this.type == "price") { + var price = "0.00"; + //如果价格大于1则保留2位小数 + if (t > 1) { + price = t.toFixed(2) + } else { + //否则 + let splitList = t.toString().split(".") + let num = 0 + if (splitList[1]) { + for (var i = 0; i < splitList[1].length; i++) { + if (splitList[1][i] == "0") { + num++ + } else { + //如果不为0了 直接中断 + break; + } + } + } + if (num >= 4) { + var last = "" + splitList[1].substring(num, splitList[1].length) + if (last.length >= 4) { + if (last[num] >= 5) { + price = '0.0{' + num + '}' + (parseInt(last[1] + last[2] + last[ + 3]) + 1) + } else { + price = '0.0{' + num + '}' + last[1] + last[2] + last[3] + } + } else { + price = '0.0{' + num + '}' + last + } + } else { + price = t.toFixed(5) + } + + } + return price + } else { + var n, r, s, a, l; + i = i || 0, n = this._fractional ? Math.pow(10, this._fractionalLength || 0) : + Math.pow(10, i) * this._priceScale / this._minMove, r = Math.floor(t), s = +( + Math + .round(t * n) - r * n).toFixed(this._fractionalLength), s >= n && (s -= n, + r += + 1), a = "", 1 !== n && (l = void 0 !== this._fractionalLength ? this + ._fractionalLength : NaN, + a = e.formatterOptions.decimalSign + o(+s.toFixed(this._fractionalLength) * + this._minMove, l + i), + a = this._removeEndingZeros(a, i)) + return "" + r + a + } + }, t.prototype._formatAsFractional = function(t, i) { + var n, r, s, a, l, c, h, u, d, p = this._priceScale / this._minMove, + _ = Math.floor(t), + f = i ? Math.floor(t * p) - _ * p : Math.round(t * p) - _ * p; + if (f === p && (f = 0, _ += 1), n = "", i && (r = (t - _ - f / p) * p, r = Math.round( + r * Math.pow(10, i)), n = o(r, i), n = this._removeEndingZeros(n, i)), !this + ._fractionalLength) throw Error("_fractionalLength is not calculated"); + return s = "", this._minMove2 ? (a = ["0", "5"], l = ["0", "2", "5", "7"], c = ["0", + "1", "2", "3", "4", "5", "6", "7" + ], h = f % this._minMove2, f = (f - h) / this._minMove2, u = o(f, this + ._fractionalLength), d = 2 === this._minMove2 ? a[h] : 8 === this + ._minMove2 ? c[h] : l[h], s = u + e.formatterOptions.decimalSignFractional + d + ) : s = o(f * this._minMove, this._fractionalLength), "" + _ + e + .formatterOptions.decimalSignFractional + s + n + }, t.prototype._removeEndingZeros = function(t, e) { + for (var i = 0; i < e && "0" === t[t.length - 1]; i++) t = t.substr(0, t.length - 1); + return t + }, t.prototype._parseAsDecimal = function(t) { + var i, o, n = RegExp(/^(\-?)[0-9]+$/), + r = n.exec(t); + return r ? (i = parseFloat(t), { + price: i, + res: !0, + suggest: this.format(i) + }) : (o = RegExp("^(-?)[0-9]+\\" + e.formatterOptions.decimalSign + "[0-9]*$"), r = + o.exec(t), r ? (i = parseFloat(t.replace(e.formatterOptions.decimalSign, + ".")), { + price: i, + res: !0, + suggest: this.format(i) + }) : { + error: a.custom, + res: !1 + }) + }, t.prototype._patchFractPart = function(t, e) { + var i = { + 0: 0, + 5: 1 + }, + o = { + 0: 0, + 2: 1, + 5: 2, + 7: 3 + }; + return 2 === e ? void 0 === i[t] ? -1 : i[t] : 4 === e ? void 0 === o[t] ? -1 : o[t] : t + }, t.prototype._parseAsSingleFractional = function(t) { + var i, o, n, r, s, l, c = RegExp(/^(\-?)[0-9]+$/), + h = c.exec(t); + return h ? (i = parseFloat(t), { + price: i, + res: !0, + suggest: this.format(i) + }) : (o = RegExp("^(-?)([0-9]+)\\" + e.formatterOptions.decimalSignFractional + + "([0-9]+)$"), h = o.exec(t), h ? (n = !!h[1], r = parseInt(h[2]), s = this + ._priceScale, (l = this._patchFractPart(parseInt(h[3]), s)) >= s || l < 0 ? + { + error: a.fraction, + res: !1 + } : (i = r + l / s, n && (i = -i), { + price: i, + res: !0, + suggest: this.format(i) + })) : { + error: a.custom, + res: !1 + }) + }, t.prototype._parseAsDoubleFractional = function(t) { + var i, o, n, r, s, l, c, h, u, d = RegExp(/^(\-?)[0-9]+$/), + p = d.exec(t); + return p ? (i = parseFloat(t), { + price: i, + res: !0, + suggest: this.format(i) + }) : (o = RegExp("^(-?)([0-9]+)\\" + e.formatterOptions.decimalSignFractional + + "([0-9]+)\\" + e.formatterOptions.decimalSignFractional + "([0-9]+)$"), p = + o.exec(t), p ? (n = !!p[1], r = parseInt(p[2]), s = void 0 !== this._minMove2 ? + this._minMove2 : NaN, l = this._priceScale / s, + c = this._minMove2, h = this._patchFractPart(parseInt(p[3]), l), u = this + ._patchFractPart(parseInt(p[4]), c), h >= l || h < 0 ? { + error: a.fraction, + res: !1 + } : void 0 !== c && u >= c || u < 0 ? { + error: a.secondFraction, + res: !1 + } : (i = void 0 !== c ? r + h / l + u / (l * c) : NaN, n && (i = -i), { + price: i, + res: !0, + suggest: this.format(i) + })) : { + error: a.custom, + res: !1 + }) + }, t + }(), e.PriceFormatter = l + }, , function(t, e, i) { + "use strict"; + + function o(t, e, i) { + var o, n, r, s, c; + if (e = e || 0, !a(t)) return i ? l.rgbaToString(l.rgba(l.parseRgb(t), l.normalizeAlphaComponent(1 - + e / 100))) : t; + if (e < 0 && e > 100) throw Error("invalid transparency"); + return o = l.parseRgb(t), n = o[0], r = o[1], s = o[2], c = l.normalizeAlphaComponent(1 - e / 100), + l.rgbaToString([n, r, s, c]) + } + + function n(t) { + return a(t) ? t : l.rgbaToString(l.rgba(l.parseRgb(t), l.normalizeAlphaComponent(1))) + } + + function r(t) { + var e = l.parseRgb(t).map(function(t) { + return t /= 255, t <= .03928 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4) + }); + return +(.2126 * e[0] + .7152 * e[1] + .0722 * e[2]).toFixed(3) + } + + function s(t, e) { + return l.rgbaToString(l.blendRgba(l.parseRgba(t), l.parseRgba(e))) + } + + function a(t) { + return 0 === t.indexOf("#") + } + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var l = i(32); + e.generateColor = o, e.resetTransparency = n, e.getLuminance = r, e.blendColors = s, e.isHexColor = a + }, function(t, e, i) { + "use strict"; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.dur = 350, e.easingFunc = { + linear: function(t) { + return t + }, + easeInQuad: function(t) { + return t * t + }, + easeOutQuad: function(t) { + return t * (2 - t) + }, + easeInOutQuad: function(t) { + return t < .5 ? 2 * t * t : (4 - 2 * t) * t - 1 + }, + easeInCubic: function(t) { + return t * t * t + }, + easeOutCubic: function(t) { + return --t * t * t + 1 + }, + easeInOutCubic: function(t) { + return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1 + }, + easeInQuart: function(t) { + return t * t * t * t + }, + easeOutQuart: function(t) { + return 1 - --t * t * t * t + }, + easeInOutQuart: function(t) { + return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t + }, + easeInQuint: function(t) { + return t * t * t * t * t + }, + easeOutQuint: function(t) { + return 1 + --t * t * t * t * t + }, + easeInOutQuint: function(t) { + return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t + } + }, e.color = { + black0: "#000", + black20: "#2b2d36", + black25: "#2b2e37", + black30: "#212121", + black70: "#4A4A4A", + black80: "#535353", + black100: "#646464", + black110: "#757575", + black140: "#8A8A8A", + black170: "#ADAEB0", + black180: "#b4b4b4", + black200: "#C8C8C8", + black220: "#DADDE0", + black230: "#ECECEC", + black240: "#F2F2F2", + black248: "#F8F8F8", + black255: "#FFF", + brand: "#3BB3E4", + brandHover: "#3BABD8", + brandActive: "#3898C2", + brandDown: "#049DDC", + brand220: "#3BB3E0", + brand255: "#3BB3FF", + brandNew: "#37A6EF", + spinner: "#00A2E2", + brandMedium80: "#3C4650", + brandMedium90: "#465a6e", + brandMedium100: "#627384", + brandMedium120: "#758696", + brandMedium150: "#94959C", + brandMedium190: "#9DB2BD", + brandMedium220: "#E9EFF2", + brandMedium230: "#EAECEF", + brandMedium240: "#F1F3F6", + brandDark: "#2A2C39", + brandDark50: "#252733", + brandDark45: "#20222D", + brandDarkText: "#6A6B74", + danger: "#FF4A68", + dangerHover: "#F24965", + dangerDown: "#FF173E", + success: "#3CBC98", + success55: "#37BC9B", + success250: "#00FFC0", + successHover: "#38B395", + successDown: "#00A97F", + attention: "#FFC84A", + attention50: "#F89E30", + growing: "#37bc9b", + falling: "#ff4a68" + } + }, , function(t, e, i) { + "use strict"; + (function(t, e) { + function o(t) { + TradingView.merge(this, { + palettes: {}, + inputs: [], + plots: [], + graphics: {}, + defaults: {} + }), + TradingView.merge(this, t); + var e = t.fullId || t.id; + TradingView.merge(this, o.parseIdString(e)), this.name = this.id + } + var n = i(9).assert, + r = i(7).getLogger("Chart.Study.MetaInfo"), + s = i(206).applyOverridesToStudyDefaults, + a = null; + o.VERSION_STUDY_ARG_SOURCE = 41, o.METAINFO_FORMAT_VERSION_SOS_V2 = 42, o + .VERSION_PINE_PROTECT_TV_4164 = 43, o.CURRENT_METAINFO_FORMAT_VERSION = 45, o + .CHILD_STUDY_ALLOWED_PLOT_TYPES = ["line"], o.CHILD_STUDY_EXCLUDE_IDS = [ + "CorrelationCoefficient@tv-basicstudies" + ], o.CHILD_STUDY_PARENT_EXCLUDE_IDS = [], o.FilledArea = {}, o.FilledArea.TYPE_PLOTS = + "plot_plot", o.FilledArea.TYPE_HLINES = "hline_hline", o.versionOf = function(t) { + var e = "_metainfoVersion" in t && isNumber(t._metainfoVersion) ? t._metainfoVersion : + 0; + return e < 0 && r.logError("Metainfo format version cannot be negative: " + e), e > o + .CURRENT_METAINFO_FORMAT_VERSION && r.logWarn( + "Client doesn't support this version of metainfo format: " + e), e + }, o.parseIdString = function(t) { + var e, i, o, n, r = {}; + if (-1 === t.indexOf("@")) r.shortId = t, r.packageId = "tv-basicstudies", r.id = t + + "@" + r.packageId, r.version = 1; + else if (e = t.split("@"), r.shortId = e[0], i = e[1].split("-"), 3 === i.length) r + .packageId = i.slice(0, 2).join("-"), r.id = r.shortId + "@" + r.packageId, r + .version = i[2]; + else if (1 === i.length && "decisionbar" === i[0]) r.packageId = "les-" + i[0], r.id = r + .shortId + "@" + r.packageId, r.version = 1; + else { + if (1 !== i.length) throw Error("unexpected study id:" + t); + r.packageId = "tv-" + i[0], r.id = r.shortId + "@" + r.packageId, r.version = 1 + } + return r.fullId = r.id + "-" + r.version, "tv-scripting" === r.packageId ? (o = r + .shortId, 0 === o.indexOf("Script$") || 0 === o.indexOf("StrategyScript$") ? ( + n = o.indexOf("_"), r.productId = n >= 0 ? o.substring(0, n) : r.packageId + ) : r.productId = r.packageId) : r.productId = r.packageId, r + }, o.getPackageName = function(t) { + return (/^[^@]+@([^-]+-[^-]+)/.exec(t || "") || [0, "tv-basicstudies"])[1] + }, o.cutFullId = function(t) { + return t.replace(/(@[^-]+-[^-]+).*$/, "$1") + }, o.cutDollarHash = function(t) { + var e, i, o = t.indexOf("$"), + n = t.indexOf("@"); + return -1 === o ? t : (e = t.substr(0, o), i = n >= 0 ? t.substr(n) : "", e + i) + }, o.cutScriptIdPart = function(t) { + var e = t.indexOf("$"), + i = t.indexOf("@"); + return e < 0 && i >= 0 ? "" : t.substring(Math.max(e + 1, 0), i >= 0 ? i : t.length) + }, o.hasUserIdSuffix = function(t) { + return /^USER;[\d\w]+;\d+$/.test(t) + }, o.getSourceIdByInputs = function(t, e) { + var i, n, r; + if (!Array.isArray(t) || !e) return null; + for (i = 0; i < t.length; ++i) + if (n = t[i], o.isSourceInput(n) && "string" == typeof e[n.id]) return r = e[n.id], + ~r.indexOf("$") && (r = r.split("$")[0]), r; + return null + }, o.getSourceInputIds = function(t) { + var e, i, n = [], + r = t.inputs; + for (e = 0; e < r.length; ++e) i = r[e], o.isSourceInput(i) && n.push(i.id); + return n + }, o.setChildStudyMetaInfoPropertiesSourceId = function(e, i, n) { + var r, s, a, l; + for (r = 0; r < e.inputs.length; ++r) s = e.inputs[r], o.isSourceInput(s) && + n instanceof t && n.inputs && n.inputs[s.id] && (a = n.inputs[s.id].value(), a + .indexOf("$") > 0 && (l = a.replace(/^[^\$]+/, i), n.inputs[s.id].setValue(l))) + }, o.patchChildStudyMetaInfoState = function(t) { + function e(t) { + if ("object" == typeof t) + for (var i in t) "string" == typeof t[i] && /^[^\$]+\$\d+$/.test(t[i]) ? t[i] = + t[i].replace(/^[^\$]+/, "{pid}") : e(t[i]) + } + t.state && e(t.state.inputs), t.state.isChildStudy = !0 + }, o.prototype.parseValue = function(t, e) { + return "bool" === t ? TradingView.parseBool(e) : e + }, o.prototype.defaultInputs = function() { + var t, e = []; + for (t = 0; t < this.inputs.length; t++) e.push(this.inputs[t].defval); + return e + }, o.prototype.state = function(t) { + var e, i = {}; + for (e in this) this.hasOwnProperty(e) && (i[e] = this[e], !0 !== t && "id" === e && (i[ + e] += "-" + this.version)); + return i + }, o.prototype.symbolInputId = function() { + var t = this.inputs.filter(function(t) { + return "symbol" === t.type + }); + return t.length > 0 ? t[0].id : null + }, o.findStudyMetaInfoByDescription = function(t, e) { + if (t) { + for (var i = 0; i < t.length; ++i) + if (t[i].description.toLowerCase() === e.toLowerCase()) return t[i]; + throw Error("unexpected study id:" + e) + } + throw Error("There is no studies metainfo") + }, o._findStudyMetaInfo = function(t, e) { + for (var i = 0; i < t.length; i += 1) + if (t[i].id === e) return [i, t[i]]; + return [] + }, o.findStudyMetaInfo = function(t, e) { + if (!t) throw new ReferenceError("There is no studies metainfo"); + var i = o._findStudyMetaInfo(t, e)[1]; + if (!i) throw new ReferenceError("unexpected study id:" + e); + return i + }, o.isParentSourceId = function(t) { + return "string" == typeof t && /^[^\$]+\$\d+$/.test(t) + }, o.isSourceInput = function(t) { + return t.id && (("source" === t.id || "src" === t.id) && ("text" === t.type || + "source" === t.type) || "source" === t.type) + }, o.getChildSourceInputTitles = function(t, e, i) { + var n, r, s, a, l = {}; + if (e.plots && e.plots.length && t.options && t.options.length) + for (n = 0; n < t.options.length; ++n) r = t.options[n], s = r && +r.split("$")[1], + (a = isFinite(s) && e.plots[s]) && ~o.CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(a + .type) && (l[r] = e.styles && e.styles[a.id] && e.styles[a.id].title || a + .id, i && (l[r] = i + ": " + l[r])); + return l + }, o.removeStudyMetaInfo = function(t, e, i) { + var n = function(i) { + return void 0 !== (i = void 0 !== i ? i : o._findStudyMetaInfo(t, e.id)[0]) && ( + t.splice(i, 1), defaults.remove(o.getStudyPropertyRootName(e)), !0) + }; + if (t) return n(i); + throw Error("There are no studies metainfo") + }, o.getStudyPropertyRootName = function(t) { + var e = "study_" + t.id; + return t.pine && t.pine.version && (e += "_" + t.pine.version.replace(".", "_")), e + }, o.addOrReplaceStudyMetaInfo = function(t, e) { + var i, n, s, a, l = new o(e), + c = o._findStudyMetaInfo(t, l.id), + h = c[0], + u = c[1]; + if (u) { + if (i = u.pine && u.pine.version, !(null == (n = l.pine && l.pine.version) || + null == i || n >= i)) return l; + o.removeStudyMetaInfo(t, l, h) + } else o.removeStudyMetaInfo(t, l, h) && r.logDebug("Study with id=" + l.id + + " already exists in the model!"); + return t.push(l), l.defaults && (s = TradingView.clone(l.defaults), s.precision = + "default", a = o.getStudyPropertyRootName(l), defaults.create(a, s)), l + }, o.overrideDefaults = function(t) { + null !== a && 0 !== t.length && s(a, t, function(t) { + return TradingView.defaultProperties["study_" + t] || null + }) + }, o.setDefaultsOverrides = function(t) { + a = t + }, o.createMetaInfoStub = function(t, e) { + var i, o, r; + return n(TradingView.isExistent(t.scriptIdPart), "scriptIdPart is missing, study: " + + JSON.stringify(t)), i = t.extra && "strategy" === t.extra.kind || !0 === t + .isTVScriptStrategy, o = TVScript.createScriptStudyId(t.scriptIdPart, e, i), r = { + isTVScriptStubToCompile: !0, + id: o, + scriptIdPart: t.scriptIdPart, + description: t.scriptName, + TVScriptSourceCode: t.scriptSource, + is_hidden_study: t.extra && t.extra.is_hidden_study, + extra: t.extra, + version: e + }, r.pine = {}, + r.pine.version = TradingView.isExistent(t.version) ? t.version : -1, r.pine.access = + TVScript.Access.MAP_ID_TO_NAME[t.access], r.pine.userHaveAccess = t.userHaveAccess, + !0 === i && (r.isTVScriptStrategy = !0), r + }, o.isScriptStrategy = function(t) { + if (t.extra && t.extra.kind) return t.extra.kind === TVScript.Kinds.STRATEGY; + if (!0 === t.isTVScriptStrategy) return !0; + var e = t.TVScriptSourceCode || t.scriptSource; + return !!e && TVScript.isStrategy(e) + }, o.replaceWithFullStudyMetaInfoAsync = function(t, e) { + var i = $.Deferred(); + return e.isTVScriptStubToCompile || i.resolve(e), i.promise() + }, o.getOrderedInputIds = function(t) { + var e, i, o = [], + n = t.inputs; + for (e = 0; e < n.length; ++e) i = n[e], o.push(i.id); + return o + }, o.canBeChild = function(t) { + var e, i, n; + if (t && "string" == typeof t) return !0; + if (!t || t.extra && !o.isAllowedSourceInputsCount(t.extra.sourceInputsCount) || !0 === + t.canNotBeChild || !1 === t.canBeChild || ~o.CHILD_STUDY_EXCLUDE_IDS.indexOf(t + .id) || t.isTVScriptStrategy || t.TVScriptSourceCode && TVScript.isStrategy(t + .TVScriptSourceCode)) return !1; + if (t.isTVScriptStubToCompile) return !0; + for (e = t.inputs, i = 0, n = 0; n < e.length; ++n) o.isSourceInput(e[n]) && ++i; + return o.isAllowedSourceInputsCount(i) + }, o.isAllowedSourceInputsCount = function(t) { + return 1 === t + }, o.canHaveChildren = function(t) { + if (t) { + if (t.isTVScriptStrategy || t.TVScriptSourceCode && TVScript.isStrategy(t + .TVScriptSourceCode)) return !1; + if (t.id && !~o.CHILD_STUDY_PARENT_EXCLUDE_IDS.indexOf(t.id) && Array.isArray(t + .plots)) + for (var e = 0; e < t.plots.length; ++e) + if (~o.CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(t.plots[e].type)) return !0 + } + return !1 + }, TradingView.StudyMetaInfo = o, void 0 !== e && e && e.exports && (e.exports = o) + }).call(e, i(25), i(42)(t)) + }, function(t, e, i) { + "use strict"; + var o, n, r, s; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = {}, n = RegExp("^([0-9]*)$"), r = RegExp("^(\\d*)([DWMS])$"), s = function() { + function t(e, i) { + if (void 0 === i && e !== t.INVALID) return t.parse(e); + var o = e; + o !== t.SECONDS && o !== t.MINUTES && o !== t.HOURS && o !== t.DAYS && o !== t.WEEKS && + o !== t.MONTHS && o !== t.INVALID && (o = "invalid"), this._kind = o, this._multiplier = + i + } + return t.prototype.kind = function() { + return this._kind + }, t.prototype.multiplier = function() { + return this._multiplier + }, t.prototype.isValid = function() { + return this.kind() !== t.INVALID + }, t.prototype.isDWM = function() { + return this.isValid() && !this.isIntraday() + }, t.prototype.isIntraday = function() { + return -1 !== [t.SECONDS, t.MINUTES, t.HOURS].indexOf(this.kind()) + }, t.prototype.letter = function() { + return this.isValid() && this.kind() !== t.MINUTES ? this.kind()[0].toUpperCase() : "" + }, t.prototype.value = function() { + return this.isValid() ? this.kind() === t.MINUTES ? this.multiplier() + "" : this + .multiplier() + this.letter() : "" + }, t.prototype.isEqualTo = function(e) { + if (!(e instanceof t)) throw Error("Argument is not an Interval"); + return this.kind() !== t.INVALID && e.kind() !== t.INVALID && (this.kind() === e + .kind() && this.multiplier() === e.multiplier()) + }, t.prototype.inMilliseconds = function(e) { + var i, n; + if (!this.isValid()) return NaN; + if (this.kind() === t.MONTHS) { + if (void 0 === e) throw Error("unixDateTimeFrom should be provided"); + return i = new Date(e), i.setUTCMonth(i.getUTCMonth() + (this.multiplier() || 1)), + + i - e + } + return n = this.multiplier(), + void 0 === n ? NaN : o[this.kind()] * n + }, t.isEqual = function(e, i) { + return t.parse(e).isEqualTo(t.parse(i)) + }, t.parse = function(e) { + var i, o; + return e = (e + "").toUpperCase().split(",")[0], i = { + D: t.DAYS, + W: t.WEEKS, + M: t.MONTHS, + H: t.HOURS, + S: t.SECONDS + }, (o = n.exec(e)) ? new t(t.MINUTES, parseInt(e, 10)) : (o = r.exec(e), o ? new t( + i[o[2]], parseInt(o[1], 10) ? parseInt(o[1], 10) : 1) : new t(t.INVALID)) + }, t.isDWM = function(e) { + return t.parse(e).isDWM() + }, t.kind = function(e) { + return t.parse(e).kind() + }, t.isValid = function(e) { + return t.parse(e).isValid() + }, t.normalize = function(e) { + var i = new t(e); + return i.isValid() ? i.value() : null + }, t.SECONDS = "seconds", t.MINUTES = "minutes", t.HOURS = "hours", t.DAYS = "days", t + .WEEKS = "weeks", t.MONTHS = "months", t.INVALID = "invalid", t + }(), e.Interval = s, o[s.SECONDS] = 1e3, o[s.MINUTES] = 60 * o[s.SECONDS], o[s.HOURS] = 60 * o[s + .MINUTES], o[s.DAYS] = 24 * o[s.HOURS], o[s.WEEKS] = 7 * o[s.DAYS] + }, function(t, e, i) { + "use strict"; + (function(e, o, n, r) { + function s(t, e, i, o) { + this._study = t, this.m_series = e, this.m_model = i, this._plotName = o, this._visible = ! + 1, this._points = [new Z(0, 0)], this._invalidated = !0, this._lineRenderer = new C + } + + function a() { + return { + visible: !0, + color: "#0496FF", + linestyle: CanvasEx.LINESTYLE_SOLID, + linewidth: 2, + plottype: at.PlotType.Line, + histogramBase: 0, + transparency: 50, + trackPrice: !1, + joinPoints: !1 + } + } + + function l(t, e, i, o) { + var n, r; + return o.isTVScriptStrategy ? n = "StudyStrategy" : (r = "study_" + (o.classId || o + .shortId), n = r in TradingView ? r : "Study"), new TradingView[n](t, e, i, o) + } + + function c(t, e, i, o, n) { + return h(t, e, i, o, st.getStudyPropertyRootName(t), n) + } + + function h(t, e, i, o, n, r) { + var s, a, l, c, h, u = p(t, e, i, o); + for (r instanceof v && (s = st.getSourceInputIds(t), s.length > 0 && (a = s[0], u.inputs[ + a] = "{pid}$0")), l = new J(n, u, !0), l.addExclusion("visible"), l.addExclusion( + "precision"), l.addExclusion("minTick"), c = 0; c < t.inputs.length; ++c) h = t + .inputs[c], h.isHidden && (l.addExclusion("inputs." + c), l.addExclusion("inputs." + h + .id)); + return l + } + + function u(t, e, i, o, n, r) { + return d(t, e, i, o, n, st.getStudyPropertyRootName(t), r) + } + + function d(t, e, i, o, n, r, s) { + var a, l, c, h = _(t, e, i, o, n), + u = new J(r, h, !0); + for (u.addExclusion("visible"), u.addExclusion("precision"), u.addExclusion("minTick"), a = + e || t, l = 0; l < a.inputs.length; ++l) c = a.inputs[l], c.isHidden && (u.addExclusion( + "inputs." + l), u.addExclusion("inputs." + c.id)); + return u + } + + function p(t, o, n, r) { + var s, a, l, c, h, u, d, p, _ = i(84); + if (st.versionOf(t) < 1) throw Error( + "This function cannot work with metainfo of the old format version. Required format version >= 1" + ); + return s = TradingView.clone(defaults("study")), f(s, t), a = st.getStudyPropertyRootName( + t), l = TradingView.clone(defaults(a, r)), t.isTVScript && t.TVScriptSourceCode !== + l + .TVScriptSourceCode && (l = TradingView.clone(TradingView.factoryDefaults(a, r))), + TradingView.merge(s, l), o && (S(!(o instanceof e), + "propsState should not be an instance of Property"), TradingView.merge(s, o)), c = + TradingView.clone(t), h = {}, _.mergeInputsObjPart(h, c.defaults.inputs), _ + .mergeInputsObjPart(h, s.inputs), s.inputs = h, delete c.inputs, delete c.defaults + .inputs, u = {}, TradingView.merge(u, c.defaults), TradingView.merge(u, TradingView + .factoryDefaults("study_" + c.id)), TradingView.merge(u, s), TradingView.merge(u, + c), delete u.defaults, s = u, + d = null !== n ? n.model().getStudyShiftColorStartOffset() : void 0, p = m(n, t), + TradingView.merge(s, g(s, p, d)), o && TradingView.merge(s.styles, o.styles), s + } + + function _(t, e, o, n, r) { + var s, a, l, c, h, u, d = i(84); + return t.version && o.version && t.version !== o.version && ct.logWarn( + "Serialized metaInfo version " + t.version + + " is not equal to the saved state version " + o.version), s = TradingView.clone( + defaults("study")), TradingView.merge(s, TradingView.factoryDefaults("study_" + t + .id)), f(s, t), TradingView.merge(s, o), s = r.updateStudyState(s, t, e), a = + TradingView.clone(e || t), a && st.versionOf(a) >= 1 && (l = {}, d.mergeInputsObjPart(l, + a.defaults.inputs), d.mergeInputsObjPart(l, s.inputs), s.inputs = l, delete a + .inputs, delete a.defaults.inputs, c = {}, TradingView.merge(c, a.defaults), + TradingView.merge(c, TradingView.factoryDefaults("study_" + a.id)), TradingView + .merge(c, s), delete a.defaults, TradingView.merge(c, a), s = c), h = null !== n ? n + .model().getStudyShiftColorStartOffset() : void 0, u = m(n, a), TradingView.merge(s, g( + s, u, h)), s + } + + function f(t, e) { + var i, o, n, r; + if (e.plots) + for (i = 0; i < e.plots.length; i++) o = e.plots[i].id, (n = e.plots[i].type) !== at + .PlotTypes.COLORER && (r = a(), n === at.PlotTypes.COLORER && (r.transparency = 0), + r.plottype = n, r.title = o, t.styles && o in t.styles && TradingView.merge(r, t + .styles[o]), t.styles[o] = r) + } + + function m(t, e) { + var i, o, n, r, s = 0; + if (t) + for (i = 0; i < t.dataSources().length; i++) o = t.dataSources()[i], o.metaInfo && o + .metaInfo() && (n = o.metaInfo().id === e.id, r = (o.metaInfo().pine && o.metaInfo() + .pine.version) === (e.pine && e.pine.version), n && r && s++); + return s + } + + function g(t, e, i) { + var o, n; + if (!e) return t; + for (o in t.styles)(n = t.styles[o].color) && (t.styles[o].color = X(n, e, i)); + return t + } + + function v(t, e, r, s) { + var a, l, c, h, u, d, p, _, f, m, g = i(158); + for (this._titleCache = {}, this._resolvedSymbols = {}, this._priceAxisViewsBase = [], this + ._paneViews = [], this._hlinesPriceAsisViews = [], this._horizlinesPriceAsisViews = [], + W.call(this, t), this.m_data = new ot, this._graphics = new q(s), this + ._plotOffsets = {}, this._plotOffsetsMetaInfoOverride = {}, this._model = t, this + ._chartApi = t._chartApi, this._series = r instanceof TradingView.Series ? r : this + ._model.mainSeries(), r instanceof v && (this._source = r, this._isChildStudy = !0, this + ._source.setChild(this)), this._numericFormatter = new et, this._metaInfo = s, this + ._properties = e, this._properties.listeners().subscribe(this, this.changeStyles), this + ._properties.visible.listeners().subscribe(this, this.visibleChanged), this._properties + .visible.listeners().subscribe(this, this.processHibernate), a = 0; a < this._metaInfo + .plots.length; a++) l = this._metaInfo.plots[a].id, null != (c = this.properties() + .styles[l]) && null != c.visible && c.visible.listeners().subscribe(this, this + .processHibernate); + for (h in this._metaInfo.graphics) + for (u in this._metaInfo.graphics[h]) d = this._properties.graphics[h][u], d.visible && + d.visible.listeners().subscribe(this, this.processHibernate); + if (this._showStudyArgumentsProperty = this.model().properties().paneProperties + .legendProperties.showStudyArguments, this._turnaroundCounter = 1, this._turnaround = + "st" + this._turnaroundCounter, this._status = "", this._plotFields = [], p = this + .metaInfo().plots) + for (a = 0, _ = p.length; a < _; a++) u = p[a].id, this._plotFields.push(u); + this.clearData(), this._studyModified = !1, this._tagsChanged = new o, this.createViews(), + f = this, this._handler = function(t) { + f.onData(t) + }, this._handler.isTVScriptStrategy = this._metaInfo.isTVScriptStrategy, this + ._createFormatter(), f = this, this._properties.precision.listeners().subscribe(null, + function() { + f._createFormatter(), f._model.invalidate(new G(G.FULL_UPDATE)) + }), this._showStudyArgumentsProperty.listeners().subscribe(this, this + .invalidateTitleCache), this._properties.description.listeners().subscribe(this, + this.invalidateTitleCache), this._properties.shortDescription && this._properties + .shortDescription.listeners().subscribe(this, this.invalidateTitleCache), n.enabled( + "update_study_formatter_on_symbol_resolve") && t.mainSeries().onSymbolResolved() + .subscribe(this, v.prototype._createFormatter), f = this, m = {}, this + ._simplePlotsCount = s.plots.filter(function(t, e) { + if (f.isLinePlot(e)) return !0; + if (f.isOHLCSeriesPlot(e)) { + var i = f.metaInfo().plots[e].target; + return !m[i] && (m[i] = i, !0) + } + return !1 + }).length, this._properties.showInDataWindow.listeners().subscribe(t, g.prototype + .fullUpdate), this.hasBarColorer() && this._properties.visible.listeners() + .subscribe(t.mainSeries(), TradingView.Series.prototype.invalidateBarStylesCache), this + .onStart = new o, this._childStudyByRebind = new o + } + + function y(t, e) { + return t && t[e] && t[e].hasOwnProperty("showLast") ? t[e].showLast.value() : null + } + var b = i(9), + S = b.assert, + w = b.ensureNotNull, + T = i(217).StudyBarColorer, + C = i(94).HorizontalLineRenderer, + x = i(787), + P = x.BandPaneView, + L = x.BandBackgroundPaneView, + I = x.HlineFillPaneView, + k = i(324).StudyPriceAxisView, + A = i(87), + M = A.StudyPaneView, + E = A.StudyBackgroundPaneView, + D = A.StudyPlotShapesPaneView, + V = A.StudyPlotCharsPaneView, + O = A.StudyPlotArrowsPaneView, + R = A.StudyPlotBarsPaneView, + B = A.StudyPlotCandlesPaneView, + z = i(805), + F = z.PlotFillPaneView, + N = z.AreaBackgroundPaneView, + W = i(46).PriceDataSource, + H = i(124), + U = i(125).StudyDataWindowView, + j = i(126), + q = i(219), + G = i(22), + Y = i(15).parseJSONorNot, + K = i(330).ChartApiInterface, + Z = i(8).Point, + X = i(32).shiftColor, + J = i(6).DefaultProperty, + Q = i(28).PriceFormatter, + tt = i(331).VolumeFormatter, + et = i(89).NumericFormatter, + it = i(19), + ot = it.PlotList, + nt = it.PlotRowSearchMode, + rt = it.mergeMinMax, + st = i(33), + at = i(111), + lt = i(3).propertyPages, + ct = i(7).getLogger("Chart.Study"); + s.prototype.update = function() { + this._invalidated = !0 + }, s.prototype.updateImpl = function() { + this._visible = !1; + var t = this._study.lastValueData(this._plotName, !0); + t.noData || (this._visible = !0, this._points = [new Z(0, t.coordinate)], this._color = + t.color) + }, s.prototype.renderer = function() { + this._invalidated && (this.updateImpl(), this._invalidated = !1); + var t = {}; + return t.width = this.m_model.timeScale().width(), t.height = this._study.priceScale() + .height(), t.points = this._points, t.color = this._color, t.linewidth = this._study + .properties().styles[this._plotName].linewidth.value(), t.linestyle = CanvasEx + .LINESTYLE_DOTTED, t.visible = this._visible, this._lineRenderer.setData(t), this + ._lineRenderer + }, inherit(v, W), TradingView.Study = v, i(918), v.prototype.lastValueData = function(t, e, + i) { + var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x = { + noData: !0 + }; + if (this._model.timeScale().isEmpty() || null == this.priceScale() || this.priceScale() + .isEmpty() || this.data().isEmpty()) return x; + if (null === (o = this._model.timeScale().visibleBars())) return x; + if (!this.properties().visible.value()) return x; + if (n = this.properties().styles, r = this.properties().ohlcPlots, n && n[t] && (s = n[ + t]), r && r[t] && (s = r[t]), !s || !s.visible.value()) return x; + if (a = this.offset(t), null == (l = this.nearestIndex(o.lastBar() - a, nt + .NearestLeft)) || void 0 === l) return x; + for (h = this.metaInfo().plots, c = 0; c < h.length && !(h[c].id === t || this + .isOHLCClosePlot(c) && h[c].target === t); c++); + if (u = this._lastNonEmptyPlotRow(c), d = null !== u && o.contains(u.index), p = + null !== u ? u.value : null, !(_ = e || d ? p : this.data().valueAt(l)) || ! + isNumber(_[c + 1])) return x; + for (f = { + noData: !1 + }, m = null, g = null, y = 0; y < h.length; y++) h[y].target === t && (this + .isSelfColorerPlot(y) || this.isOHLCColorerPlot(y)) && (m = y, g = this + .metaInfo().palettes[h[y].palette], v = this.properties().palettes[h[y].palette] + ); + if (b = _[c + 1], i && (f.price = b), this.priceScale().properties().percentage + .value()) { + if (!(S = this.firstValue(!0))) return x; + b = this.priceScale().priceRange().convertToPercent(b, S) + } + return f.text = this.priceScale().formatter().format(b), w = s.color.value(), m && _ + .length > m + 1 ? (T = _[m + 1], void 0 !== T && null !== T ? (C = g.valToIndex ? g + .valToIndex[T] : T, f.color = v.colors[C].color.value()) : f.color = w) : f + .color = w, f.floatCoordinate = this.priceScale().priceToCoordinate(b, !0), f + .coordinate = Math.round(f.floatCoordinate), f.item = _, f + }, v.prototype.series = function() { + return this._series + }, v.prototype.model = function() { + return this._model + }, v.prototype._invalidateLastNonEmptyPlotRowCache = function() { + this._lastNonEmptyPlotRowCache = {} + }, v.prototype.clearData = function() { + this._invalidateLastNonEmptyPlotRowCache(), this.m_data = new ot(this._plotFields), this + ._graphics = new q(this._metaInfo), this._plotOffsets = {} + }, v.prototype.onTagsChanged = function() { + return this._tagsChanged + }, v.prototype.properties = function() { + return this._properties + }, v.prototype.state = function(t) { + var e, i, o, n, r = TradingView.className(this.constructor), + s = { + type: r, + id: this.id(), + state: this.properties().state(), + zorder: this.zorder() + }; + for (this.metaInfo() instanceof st ? s.metaInfo = TradingView.clone(this.metaInfo() + .state()) : (s.metaInfo = TradingView.clone(this.metaInfo()), s.metaInfo.id = st + .parseIdString(s.metaInfo.id + (s.metaInfo.version ? "-" + s.metaInfo.version : + "")).fullId), t && (s.data = this.m_data.state(), s.data.symbols = this + ._resolvedSymbols, s.data.graphics = this._graphics.graphics(), s.data + .plotOffsets = this._plotOffsets), this.ownerSource() && (s.ownerSource = this + .ownerSource().id()), e = 0; e < this._metaInfo.inputs.length; e++) + "bar_time" === this._metaInfo.inputs[e].type && (i = this._metaInfo.inputs[e].id, ( + o = s.state.inputs[i]) < 0 && (n = this._rightOffsetToUnixTime(-o), s.state + .inputs[i] = n && n >= 0 ? n : 0)); + return this._isChildStudy && st.patchChildStudyMetaInfoState(s), s + }, v.prototype._plotsForAlert = function() { + var t = this, + e = this._metaInfo, + i = [at.PlotTypes.LINE, at.PlotTypes.SHAPES, at.PlotTypes.CHARS, at.PlotTypes + .ARROWS, at.PlotTypes.OHLC_OPEN, at.PlotTypes.OHLC_HIGH, at.PlotTypes.OHLC_LOW, + at.PlotTypes.OHLC_CLOSE + ]; + return e.plots.map(function(t, e) { + return t.pinePlotIndex = e, t + }).filter(function(t) { + return -1 !== i.indexOf(t.type) + }).map(function(i) { + var o = { + id: i.id, + type: i.type, + pinePlotIndex: i.pinePlotIndex, + offset: t.offset(i.id) + }; + return e.styles && void 0 !== e.styles[i.id] && (o.title = e.styles[i.id] + .title || ""), i.target && e.ohlcPlots && e.ohlcPlots[i.target] && ( + o.ohlcTitle = e.ohlcPlots[i.target].title), o + }) + }, v.prototype.isSavedInStudyTemplates = function() { + for (var t = 0; t < this._metaInfo.inputs.length; t++) + if ("bar_time" === this._metaInfo.inputs[t].type) return !1; + return !0 + }, v.prototype.restoreData = function(t) { + this._invalidateLastNonEmptyPlotRowCache(), this.m_data.restoreState(t), this + ._resolvedSymbols = t.symbols, this._graphics.setGraphics(t.graphics), this + ._postProcessGraphics(), this._plotOffsets = t.plotOffsets + }, v.prototype.restart = function() { + this._restarting = !0, this.clearData(), n.enabled("stop_study_on_restart") && this + .stop(), setTimeout(this.start.bind(this), 0) + }, v.prototype.stop = function(t) { + if (!0 === t && this._children) + for (var e = 0; e < this._children.length; ++e) this._children[e].stop(!0); + this._chartApi && this._chartApi.connected() && this._studyId && this._chartApi + .removeStudy(this._studyId, this._handler, this._isChildStudy), n.enabled( + "update_study_formatter_on_symbol_resolve") && this._model.mainSeries() + .onSymbolResolved().unsubscribe(this, v.prototype._createFormatter), this._studyId = + null, this.clearData(), this._unsubscribeExtendedHours(), this.recalculate() + }, v.prototype._resolveSymbol = function(t) { + var e = function e(i, o) { + this._chartApi.resolveSymbol(this._makeNextSymbolId(), i, function(i) { + switch (i.method) { + case "symbol_resolved": + this._resolvedSymbols[t] = i.params[1], this + .invalidateTitleCache(!0), o.resolve(t); + break; + case "symbol_error": + if ("permission denied" === i.params[1] && i.params[2]) + switch (i.params[2]) { + case TradingView.Series.PD_REASON_EXTENDED_HOURS: + break; + case TradingView.Series.PD_REASON_SYMBOL: + if (i.params[3]) return void e(i.params[3], o); + break; + default: + return void e(i.params[2], o) + } + o.reject(t) + } + }.bind(this)) + }.bind(this), + i = $.Deferred(); + return e(t, i), i.promise() + }, v.prototype._allSymbolsAreResolved = function() { + var t, e, i, o, n = $.Deferred(), + r = []; + for (t = 0; t < this._metaInfo.inputs.length; t++) "symbol" === this._metaInfo.inputs[t] + .type && (e = this._metaInfo.inputs[t].id, i = this._properties.inputs[e].value(), + this._resolvedSymbols[i] || (o = this._resolveSymbol(i), r.push(o))); + return r.length > 0 ? $.when.apply($, r).done(function() { + 0 !== this._studyId && this.stop(!0), this.start(!0), n.resolve( + "All symbols are resolved now") + }.bind(this)).fail(function(t) { + this._status = $.t("Invalid Symbol"), this.stop(!0), this._model + .updateSource(this), n.reject("Invalid symbol, " + t) + }.bind(this)) : n.resolve("There are no symbols to resolve"), n.promise() + }, v.prototype._allInputsAreValid = function() { + var t, e, i; + for (t = 0; t < this._metaInfo.inputs.length; t++) + if ("bar_time" === this._metaInfo.inputs[t].type && (e = this._metaInfo.inputs[t] + .id, void 0 === (i = this._properties.inputs[e].value()) || null == i)) + return !1; + return !0 + }, v.prototype.sourceId = function() { + return this._studyId + }, v.prototype.source = function() { + return this._source || this._series + }, v.prototype.ownerSource = function() { + return this._isChildStudy ? this._source : W.prototype.ownerSource.call(this) + }, v.prototype.getAllOwnerSources = function() { + for (var t = [], e = this.ownerSource(); null != e;) t.push(e), e = e.ownerSource(); + return t + }, v.prototype.isChildStudy = function() { + return !!this._isChildStudy + }, v.prototype.setChild = function(t) { + t instanceof v && t.source() === this && (this._children || (this._children = []), - + 1 === this._children.indexOf(t) && this._children.push(t)) + }, v.prototype.unsetChild = function(t) { + if (t instanceof v && t.source() === this && this._children) { + var e = this._children.indexOf(t); + ~e && this._children.splice(e, 1) + } + }, v.prototype.hasChildren = function() { + return !(!this._children || !this._children.length) + }, v.prototype.getAllChildren = function() { + var t, e, i, o; + if (!Array.isArray(this._children)) return []; + for (t = this._children.slice(), e = 0; e < t.length; ++e) + for (i = t[e].getAllChildren(), o = 0; o < i.length; ++o) ~t.indexOf(i[o]) || t + .push(i[o]); + return t + }, v.prototype._debugId = function() { + var t = []; + return this._studyId && t.push(this._studyId), t.push(this._metaInfo.fullId), t.push( + this._metaInfo.description), JSON.stringify({ + study: t + }) + }, v.prototype.isStarted = function() { + return !!this._studyId + }, v.prototype.isRestarting = function() { + return !!this._restarting + }, v.prototype.isVisible = function() { + var t, e, i; + if (!this.properties().visible.value()) return !1; + if (this._metaInfo.plots.length > 0) return !0; + for (t in this._metaInfo.graphics) + for (e in this._metaInfo.graphics[t]) + if (i = this.properties().graphics[t][e], !i.visible || i.visible.value()) + return !0; + return !!this._metaInfo.isTVScriptStrategy + }, v.prototype.start = function(t, e) { + var i, o = this._model.mainSeries(); + if (!o.isStarted()) return void o.onCompleted().subscribe(this, function() { + this.start(t, e) + }, !0); + this._isChildStudy && this._source.isHibernated() && this._source.start(), i = !this + ._isChildStudy && !this.hasChildren() && !this.isVisible(), !this._chartApi || !this + ._chartApi.connected() || i && !0 !== e || this._allSymbolsAreResolved().done( + function(i) { + this._startAfterSymbolsResolved(t, e) + }.bind(this)).fail(function(t) { + ct.logError("ERROR: " + this._debugId() + " start failed, " + t), + delete this._restarting + }.bind(this)) + }, v.prototype._getStudyIdWithLatestVersion = function() { + var t = st.cutDollarHash(this._metaInfo.id), + e = t; + return ["Script@tv-scripting", "StrategyScript@tv-scripting", "ESD@tv-scripting"] + .indexOf(t) >= 0 ? e += "-72!" : e += "-" + this._metaInfo.version, e + }, v.prototype._startAfterSymbolsResolved = function(t, e) { + var i, o; + if (!this.isStarted() || this._restarting) { + if (this._isChildStudy) { + if (!this._source.isStarted() || this._source.isRestarting()) return void this + ._source.onStart.subscribe(this, this._startAfterSymbolsResolved, !0); + st.setChildStudyMetaInfoPropertiesSourceId(this._metaInfo, this._source + .sourceId(), this._properties) + } + if (this._studyId = v.makeNextStudyId(), delete this._restarting, this + ._allInputsAreValid() && (this._inputs = this.inputs(), i = this + ._getStudyIdWithLatestVersion(), this._chartApi.createStudy(this._studyId, + this._turnaround, this._isChildStudy ? this._source.sourceId() : this + ._series._seriesId, i, this._inputs, this._handler, this._isChildStudy), + this._studyName = i, this._subscribeExtendedHours(), + this.onStart.fire(this._studyId), !0 === t && this._children)) + for (o = 0; o < this._children.length; ++o) this._children[o].start(!0, e) + } + }, v._nextSymbolId = 0, v.prototype._makeNextSymbolId = function() { + return "ss_" + ++v._nextSymbolId + }, v._nextStudyId = 0, v.makeNextStudyId = function() { + return "st" + ++v._nextStudyId + }, v.prototype._rightOffsetToUnixTime = function(t) { + var e; + return this._series.bars().size() >= t && (e = w(this._series.bars().lastIndex()) - t, + w(this._series.bars().valueAt(e))[TradingView.TIME_PLOT]), null + }, v.prototype.getSymbolString = function(t) { + return this._series && this._series.extendedHours.value() ? "=" + JSON.stringify({ + symbol: t, + session: "extended" + }) : t + }, v.prototype.inputsForGUI = function() { + return this.inputs({ + symbolsForDisplay: !0, + skipHiddenInputs: !0, + skipFakeInputs: !1, + fakeInputsForDisplay: !0, + asObject: !1 + }) + }, v.prototype.inputsForAlert = function() { + var t = this.offset(), + e = this.inputs(); + return t && e.push(t), e + }, v.prototype.inputs = function(t) { + var e = { + symbolsForDisplay: !1, + symbolsForChartApi: !0, + skipHiddenInputs: !1, + skipFakeInputs: !1, + asObject: !0 + }; + return TradingView.merge(e, t), this._buildInputs(e) + }, v.prototype._buildInputs = function(t) { + var e, i; + S(!!t, "options not set"), e = {}; + try { + e = this._prepareInputs(t) + } catch (t) { + ct.logWarn("Failed to prepare study inputs: " + t) + } + return t.asObject ? (i = {}, Object.keys(e).forEach(function(t) { + null != e[t] && (i[t] = e[t]) + }), i) : (i = [], Object.keys(e).forEach(function(t) { + null != e[t] && i.push(e[t]) + }), i) + }, v.prototype._prepareInputs = function(t) { + var e, i, o, r; + for (S(!!t, "options not set"), e = {}, i = 0; i < this._metaInfo.inputs.length; i++) + o = this._metaInfo.inputs[i], o.isFake && t.skipFakeInputs || o.isHidden && t + .skipHiddenInputs || "bool" === o.type && t.skipHiddenInputs && n.enabled( + "dont_show_boolean_study_arguments") || (r = this._prepareInput(o, t), e[o.id] = + TradingView.clone(r)); + return e + }, v.prototype._prepareInput = function(t, e) { + var i = this._prepareInputValue(t, e); + return !t.isFake || e.fakeInputsForDisplay ? i : e.onlyAtomValues ? i : { + v: i, + f: !0, + t: t.type + } + }, v.prototype._prepareInputValue = function(t, e) { + var i, o, n, r, s = t.id; + return "symbol" === t.type ? (i = this._properties.inputs[s].value(), e && e + .symbolsForDisplay ? this._resolvedSymbols && this._resolvedSymbols[i] && (i = + this._resolvedSymbols[i].exchange ? this._resolvedSymbols[i].name + ", " + + this._resolvedSymbols[i].exchange : this._resolvedSymbols[i].name) : (this + ._resolvedSymbols && this._resolvedSymbols[i] && (o = this._resolvedSymbols[ + i], i = o.ticker || o.full_name), e && e.symbolsForChartApi && (i = this + .getSymbolString(i))), i) : "bar_time" === t.type ? (n = this + ._properties.inputs[s].value(), n < 0 && (r = this._rightOffsetToUnixTime(-n), + n = r && r >= 0 ? r : n), n) : this._metaInfo.isTVScript || this._metaInfo + .pine ? "text" === s ? this._metaInfo.defaults.inputs.text : "pineId" === s ? this + ._metaInfo.scriptIdPart : "pineVersion" === s ? this._metaInfo.pine ? this._metaInfo + .pine.version : "-1" : this._properties.inputs[s].value() : this._properties.inputs[ + s].value() + }, v.prototype._rebindToSource = function(t, e) { + var i, o, n, r, s, a, l, c, h, u, d; + if (this._isChildStudy) { + if (this._source.unsetChild(this), delete this._nonPriceParent, o = null, t === this + ._model.mainSeries()) { + for (n = this._model.studiesMetaData(), + s = 0; s < n.length; ++s) + if (this._metaInfo.id === n[s].id) { + r = n[s]; + break + } if (!r) return void ct.logError("Can not find " + this._metaInfo.id + + " meta info"); + delete this._source, delete this._isChildStudy, delete this._ownerSource, this + ._metaInfo = r.state(!0), i = this._series._seriesId, o = K + .REBIND_STUDY_CHILD_TO_STANDALONE + } else { + if (!(t instanceof v)) return ct.logError( + "Unable to rebind study to source of this type"), !1; + this._ownerSource = t, this._source = t, i = this._source.sourceId(), this + ._source.setChild(this), this._source.isHibernated() && this._source.start() + } + this._chartApi.rebindStudy(this._studyId, this._turnaround, i, this._studyName, e, + this._handler, o) + } else { + if (!(t instanceof v)) return ct.logError( + "Unable to rebind study to source of this type"), !1; + if (a = t.isHibernated(), a && t.start(), l = !1, this + ._canCreateStudyWithRebindType(K.REBIND_STUDY_STANDALONE_TO_CHILD) && (l = this + ._chartApi.rebindStudy(this._studyId, this._turnaround, t.sourceId(), this + ._studyName, e, this._handler, K.REBIND_STUDY_STANDALONE_TO_CHILD)), !l) + return a && t.stop(), !1; + this._metaInfo = TradingView.clone(this._metaInfo), this._isChildStudy = !0, this + ._ownerSource = t, this._source = t, this._source.setChild(this), this + ._childStudyByRebind.fire() + } + return c = this.m_priceScale, h = t.priceScale(), c !== h && (u = this._model + .paneForSource(this), d = this._model.paneForSource(t), u === d && (~c + .dataSources().indexOf(this) && c.removeDataSource(this), h.addDataSource( + this), this.setPriceScale(h))), !0 + }, v.prototype.childStudyByRebind = function() { + return this._childStudyByRebind + }, v.prototype._changeInputsImpl = function(t, e) { + var i, o, n, r, s = this.source(), + a = this._properties.inputs && this._properties.inputs.state(), + l = st.getSourceIdByInputs(this._metaInfo.inputs, a), + c = !0; + if (l) + if ("high" === l || "open" === l || "low" === l || "close" === l || "hl2" === l || + "ohl3" === l || "ohlc4" === l) s = this._model.mainSeries(); + else + for (i = this._model.dataSources(), o = 0; o < i.length; ++o) + if (i[o] instanceof v && i[o].sourceId() === l) { + s = i[o]; + break + } if (s !== this.source()) { + if (!this._rebindToSource(s, t) && a) { + for (n = null, r = null, o = 0; o < e.length; ++o) + if (e[o] !== t[o] && 0 === t[o].indexOf(l)) { + n = this._properties.inputs[a[o].id], r = e[o], c = !1; + break + } n && n.setValue(r) + } + } else this._chartApi.modifyStudy(this._studyId, this._turnaround, t, this._handler); + c && (this._studyModified = c) + }, v.prototype._changeInputs = function(t) { + var e = TradingView.clone(this._inputs); + this._studyId && this._chartApi.connected() ? (this._turnaround = "st" + ++this + ._turnaroundCounter, this._allInputsAreValid() ? this._allSymbolsAreResolved() + .done(this._changeInputsImpl.bind(this, t, e)).fail(function(t) { + ct.logError("ERROR: " + this._debugId() + + " _changeInputs: cannot modify study, " + t) + }.bind(this)) : this.stop()) : (this.stop(!0), this.start(!0)), this._inputs = + t, this._tagsChanged.fire(), this._titleCache = {} + }, v.prototype.testInputValue = function(t, e) { + var i, o; + return !st.canBeChild(this._metaInfo) || !st.isSourceInput(t) || (!(i = this._properties + .inputs && this._properties.inputs[t.id]) || (o = v.getInputRebindType(t, i + .value(), e), !!this._canCreateStudyWithRebindType(o))) + }, v.prototype._canCreateStudyWithRebindType = function(t) { + return t !== K.REBIND_STUDY_STANDALONE_TO_CHILD || this._chartApi.isCanCreateStudy(!0) + }, v.prototype.changeStyles = function() { + var t, e = null != this._metaInfo.inputs.filter(function(t) { + return "symbol" === t.type + })[0]; + !this.isStarted() && !e || this._restarting || (this._inputs ? (t = this.inputs(), JSON + .stringify(t) !== JSON.stringify(this._inputs) && this._changeInputs(t)) : + this._chartApi && this._chartApi.connected() && this.restart(), this + .hasBarColorer() && this._model.mainSeries().invalidateBarStylesCache(), e && + this.invalidateBarStylesCache(), this.createViews(), this.recalculate(!0), this + .updateAllViews()) + }, v.prototype._isModifiedStudyInputs = function(t) { + if (void 0 === this._oldStudyInputs) return this._oldStudyInputs = t, !0; + var e = Object.keys(this._oldStudyInputs); + return S(e.length === Object.keys(t).length, "keys quantity should be equal"), e + .forEach(function(e) { + S(t.hasOwnProperty(e), "key '" + e + "' should existing in studyInputs"), + this._oldStudyInputs[e] !== t[e] && (this._oldStudyInputs = t) + }, this), this._oldStudyInputs === t + }, v.prototype.visibleChanged = function() { + this._series instanceof TradingView.Series && this._series.invalidateBarColorerCache() + }, v.prototype.invalidateBarStylesCache = function() { + this.m_data.each(function(t, e) { + e[TradingView.STYLE_PLOT] = null + }) + }, v.prototype.processHibernate = function() { + this.isHibernateAllowed() && (!this._studyId && this.isVisible() && this.start(), this + ._studyId && !this.isVisible() && this.stop()) + }, v.prototype.isHibernated = function() { + return !this.isVisible() && !this._studyId + }, v.prototype.isHibernateAllowed = function() { + return !this._isChildStudy && !this.hasChildren() + }, v.prototype.lastPriceLabelFixedCoordinate = function(t) { + return this._priceAxisViewsCache[t]._fixedCoordinate + }, v.prototype.priceLabelText = function(t) { + var e, i, o, n; + return 1 === this._simplePlotsCount ? this._metaInfo.shortDescription : (e = this + ._metaInfo.styles, i = this._metaInfo.ohlcPlots, e && e[t] && (o = e[t]), i && + i[t] && (o = i[t]), n = o.title, this._metaInfo.is_price_study ? this._metaInfo + .shortDescription + ":" + n : n) + }, v.prototype.createPlotLabels = function(t) { + for (var e = 0; e < t.length; e++) this._paneViews.push(new H(this._model, this, t[e], + "priceLabelText", "showStudyPlotLabels")) + }, v.prototype.createViews = function() { + var t, e, i, o, n, r, a, l, c, h, u, d, p; + if (this._priceAxisViewsBase = [], this._paneViews = [], t = {}, this + ._priceAxisViewsCache = {}, e = [], this.metaInfo().plots) + for (i = 0; i < this.metaInfo().plots.length; i++) + if (!(this.isSelfColorerPlot(i) || this.isTextColorerPlot(i) || this + .isBarColorerPlot(i) || this.isOHLCColorerPlot(i))) + if (o = this.metaInfo().plots[i].id, this.isBgColorerPlot(i)) this + ._paneViews.push(new E(this, this._series, this._model, o)); + else if (this.isPlotShapesPlot(i)) this._paneViews.push(new D(this, this + ._series, this._model, o)); + else if (this.isPlotCharsPlot(i)) this._paneViews.push(new V(this, this._series, this + ._model, o)); + else if (this.isPlotArrowsPlot(i)) this._paneViews.push(new O(this, this._series, this + ._model, o)); + else if (this.isOHLCSeriesPlot(i)) { + if (n = this.metaInfo().plots[i].target, t[n]) continue; + t[n] = n, + this.isOHLCBarsPlot(i) ? this._paneViews.push(new R(this, this._series, this + ._model, n)) : this.isOHLCCandlesPlot(i) && this._paneViews.push(new B(this, + this._series, this._model, n)), r = new k(this, { + plotIndex: n + }), this._priceAxisViewsCache[n] = r, this._priceAxisViewsBase.push(r), e.push( + n) + } else r = new k(this, { + plotIndex: o + }), this._priceAxisViewsCache[o] = r, this._priceAxisViewsBase.push(r), this + ._paneViews.push(new M(this, this._series, this._model, o)), this.properties() + .styles[o].trackPrice.value() && this._paneViews.push(new s(this, this._series, this + ._model, o)), e.push(o); + if (this._properties.bands) + for (i = 0; i < this._properties.bands.childCount(); i++) this._properties.bands[i] + .visible.value() && this._paneViews.push(new P(this._properties.bands[i], + this)); + this._properties.bandsBackground && this._paneViews.push(new L(this)), a = [], this + .metaInfo().graphics && (a = Object.keys(this.metaInfo().graphics), a.sort(function( + t, e) { + return v.graphicsZOrderPriority(t) - v.graphicsZOrderPriority(e) + })); + for (l in a) c = a[l], h = "_paneView" + c, u = "StudyPaneView_" + c, TradingView.Study[ + u] && (this[h] = new TradingView.Study[u](this, this._model), this._paneViews + .push(this[h])), this._dataWindowView || "hhists" !== c || (this + ._dataWindowView = new TradingView.StudyHHistsDataWindowView(this, this._model)); + if (this._properties.areaBackground && this._paneViews.push(new N(this)), this + ._properties.filledAreas && this._metaInfo.filledAreas) + for (i = 0; i < this._metaInfo.filledAreas.length; ++i) d = this._metaInfo + .filledAreas[i], p = this._properties.filledAreasStyle[d.id], d.type === st + .FilledArea.TYPE_PLOTS || d.palette ? this._paneViews.push(new F(this, d, p)) : + d.type === st.FilledArea.TYPE_HLINES ? this._paneViews.push(new I(this, d, p)) : + ct.logWarn("Unsupported filledArea type: " + d.type); + this.createPlotLabels(e), this._dataWindowView || (this._dataWindowView = new U(this, + this._model)), this._statusView || (this._statusView = new j(this, this._model + .properties())), this._priceAxisViews = [].concat(this._priceAxisViewsBase, this + ._hlinesPriceAsisViews, this._horizlinesPriceAsisViews) + }, v.prototype.recalculate = function(t) { + var e = this._model.paneForSource(this); + this._model.recalculatePane(e, t), this._model.updateSource(this) + }, v.prototype.data = function() { + return this.m_data + }, v.prototype.metaInfo = function() { + return this._metaInfo + }, v.prototype.status = function() { + return this._status + }, v.prototype.title = function(t, e, i) { + var o, n = JSON.stringify([t, e, i]); + return this._titleCache[n] ? this._titleCache[n] : (o = this._title(t, e, i || !this + ._showStudyArgumentsProperty.value()), this._titleCache[n] = o, o) + }, v.prototype._title = function(t, e, i) { + var o, n, r, s, a, l, c, h, u, d, p, _, f; + if (o = t ? this._metaInfo.shortDescription || this._properties.shortDescription && this + ._properties.shortDescription.value() || "Study" : this._metaInfo.description || + this._properties.description && this._properties.description.value() || "Study", e = + e || {}, o = $.t(o), !i && (n = this.inputsForGUI() || [], n.length > 0)) { + if (r = {}, this._isChildStudy) + for (s = 0; s < this._metaInfo.inputs.length; ++s) + if (a = this._metaInfo.inputs[s], st.isSourceInput(a)) { + l = a.id, c = this._properties.inputs[l].value(), c.indexOf("$") >= 0 && + this._source && (h = this._source.metaInfo(), + u = this._source.title(t, null, !0), 1 === h.plots.length ? r[ + c] = u : (d = c.split("$")[1], p = h.plots[d].id, _ = h + .styles && h.styles[p] && h.styles[p].title || p, r[c] = u + + ": " + _)); + break + } f = this, n = n.map(function(t) { + var i = isNumber(t) ? f._numericFormatter.format(t) : r && r[t] || t; + return e[i] && (i = e[i]), i + }), o += " (" + n.join(", ") + ")" + } + return o + }, v.prototype.invalidateTitleCache = function(t) { + if (this._titleCache = {}, !0 === t && this._children) + for (var e = 0; e < this._children.length; ++e) this._children[e] + .invalidateTitleCache(t) + }, v.prototype.graphics = function() { + return this._graphics.graphics() + }, v.prototype.turnaround = function(t) { + return !0 === t ? this.source().turnaround(!0) + "_" + this._turnaround : this + ._turnaround + }, v.prototype._checkTurnaround = function(t) { + return t === this._turnaround || t === this._model.mainSeries().turnaround() || t === + this.turnaround(!0) + }, v.prototype._makeJSONForNSData = function(t, e) { + var i = "" !== t.params.nonseries.d ? Y(t.params.nonseries.d) : e || ""; + return Promise.resolve(i) + }, v.prototype.onData = function(t) { + var e, i, o, n, r = this; + switch (t.method) { + case "study_loading": + this._status = $.t("loading..."), this._failed = !1, this._statusView.update(), + this._model.updateSource(this), -1 === ["Plot splits", "Plot earnings", + "Plot dividends" + ].indexOf(r._metaInfo.description) && (r._loadingStartTime = (new Date) + .getTime()); + break; + case "study_error": + delete this._loadingStartTime, this._failed = !0, this.clearData(), "string" == + typeof t.params[2] ? this._status = $.t(t.params[2].split(":", 2)[0]) : this + ._status = "", this._statusView.update(), this._model.updateSource(this); + break; + case "study_completed": + if (!this._checkTurnaround(t.params[1])) return Promise.resolve(); + e = "chartSession:" + r._chartApi._sessionid, i = (new Date).getTime() - this + ._loadingStartTime, ct.logDebug(e + ", Study " + this._metaInfo + .description + " loading took " + i + " ms"), delete this + ._loadingStartTime, this._status = "", this._statusView.update(), o = this + ._model.paneForSource(this), this._model.recalculatePane(o), this + ._updateSources(), this._model.invalidate(new G(G.FULL_UPDATE)); + break; + case "study_deleted": + break; + case "data_update": + return this._checkTurnaround(t.params.turnaround) ? (this._studyModified && ( + this.clearData(), this._studyModified = !1), n = 0 === this.m_data + .size() && this._metaInfo.plots.length > 0, S(!!t.params.nonseries, + "data.params.nonseries is missing"), new Promise(function(e) { + r._makeJSONForNSData(t).then(function(i) { + var o, s; + t.params.nonseries.d = i, r._processPlotOffsets(t + .params), r.transformData(t.params.plots), + o = r._mergeData(t.params.plots).earliestRow, r + .hasBarColorer() && (null !== o ? r._model + .mainSeries().invalidateBarStylesCache(o + .index) : ct.logNormal( + "ERROR: No earliestRow in studies plots, " + + r._debugId())), r._graphics.process(t + .params.nonseries), r + ._postProcessGraphics(), s = r._model + .paneForSource( + r), r._model.recalculatePane(s, n), r + ._updateSources(), e() + }) + })) : Promise.resolve() + } + return Promise.resolve() + }, v.prototype.transformData = function(t) {}, v.prototype.moveData = function(t) { + this._invalidateLastNonEmptyPlotRowCache(), this.m_data.move(t) + }, v.prototype.replaceData = function(t, e, i) { + this._invalidateLastNonEmptyPlotRowCache(), this.m_data.remove(t + 1), this.m_data + .addTail(i, e) + }, + v.prototype._updateSources = function() { + this._model.updateSource(this), this.hasBarColorer() && this._model.updateSource(this + ._model.mainSeries()) + }, v.processPlotOffsets = function(t, e) { + if (!e.nonseries || "nochange" !== e.nonseries.indexes) { + var i = e.nonseries.d; + if (!i || !i.indexes_replace) return i && i.offsets ? void(t._plotOffsets = i + .offsets) : void(t._plotOffsets = {}) + } + }, v.prototype._processPlotOffsets = function(t) { + v.processPlotOffsets(this, t) + }, v.prototype._mergeData = function(t) { + return this._invalidateLastNonEmptyPlotRowCache(), this.m_data.merge(t) + }, v.prototype._postProcessGraphics = function() { + var t = this, + e = function(e) { + var i, o, n, r, s = t._graphics.graphics(), + a = []; + if (s && s[e]) + for (n = s[e], i = 0; i < n.length; i += 1) + if (n[i].data) + for (o = 0; o < n[i].data.length; o += 1) r = { + line: n[i].data[o], + styleId: n[i].styleId, + lineType: e + }, a.push(new v.StudyPriceAxisView_hlines(t, r)); + return a + }; + this._hlinesPriceAsisViews = e("hlines"), this._horizlinesPriceAsisViews = e( + "horizlines"), this._priceAxisViews = [].concat(this._priceAxisViewsBase, this + ._hlinesPriceAsisViews, this._horizlinesPriceAsisViews) + }, v.prototype._getNonPriceParent = function() { + var t, e; + if (this._nonPriceParent) return this._nonPriceParent; + for (t = this.source(); t instanceof v;) { + if (e = t.metaInfo(), !e.is_price_study || "Compare@tv-basicstudies" === e.id) + return this._nonPriceParent = t, t; + t = t.source() + } + }, v.prototype.firstValue = function(t) { + var e, i, o, n, r, s; + return !this._isChildStudy && "Compare@tv-basicstudies" === this._metaInfo.id || !this + ._metaInfo.is_price_study ? null === (e = this._model.timeScale().visibleBars()) ? + null : (i = e.firstBar(), o = e.lastBar(), 0 === this.m_data.size() ? null : (r = + this, this.m_data.range(i, o).each(function(e, i) { + var o, s, a; + for (o = 1; o < i.length; ++o) + if (void 0 !== i[o - 1] && null !== i[o - 1] && !r + .isSelfColorerPlot(o - 1) && (s = r._metaInfo.plots[o - 1] + .id, a = r.properties().styles[s], a.visible && a + .visible.value() && !(t && Math.abs(i[o]) < 1e-10 || + void 0 === i[o] || null === i[o] || n))) return n = + i[o], !0 + }), this._nonPriceFirstValue = n, n)) : this._isChildStudy && (s = this + ._getNonPriceParent()) && this.priceScale() === s.priceScale() ? void 0 !== s + ._nonPriceFirstValue ? s._nonPriceFirstValue : s.firstValue() : this._series + .firstValue() + }, v.offset = function(t, e) { + var i = 0; + return t._plotOffsets && void 0 !== t._plotOffsets[e] && (i += t._plotOffsets[e]), + void 0 !== t._plotOffsetsMetaInfoOverride[e] ? i += t._plotOffsetsMetaInfoOverride[ + e] : t.properties().offsets && void 0 !== t.properties().offsets[e] && (i += t + .properties().offsets[e].val.value()), t.properties().offset && (i += t + .properties().offset.val.value()), i + }, v.prototype.offset = function(t) { + return v.offset(this, t) + }, v.prototype.priceRange = function(t, e) { + var i, o, n, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w; + if (!TradingView.isInteger(t)) return void ct.logDebug( + "priceRange: incorrect startBar"); + if (!TradingView.isInteger(e)) return void ct.logDebug("priceRange: incorrect endBar"); + if (0 === this.m_data.size()) return null; + if (i = null, o = this, n = o._metaInfo, 0 === n.plots.length) return null; + for (a = [], c = 0; c < n.plots.length; ++c) + if (!(o.isSelfColorerPlot(c) || o.isTextColorerPlot(c) || o.isBarColorerPlot(c) || o + .isBgColorerPlot(c) || o.isOHLCColorerPlot(c)) && (h = n.plots[c].id, o + .isOHLCSeriesPlot(c) ? (d = n.plots[c].target, + u = o.properties().ohlcPlots[d]) : u = o.properties().styles[h], u + .visible.value() && (l = null, u.location && (l = u.location.value()), s || + (p = [CanvasEx.MARKLOC_ABSOLUTE, CanvasEx.MARKLOC_TOP, CanvasEx + .MARKLOC_BOTTOM + ].indexOf(l) < 0, _ = o.isPlotShapesPlot(c) || o.isPlotCharsPlot(c), + s = _ && p || o.isPlotArrowsPlot(c)), o.isLinePlot(c) || (o + .isPlotShapesPlot(c) || o.isPlotCharsPlot(c)) && u.location + .value() === CanvasEx.MARKLOC_ABSOLUTE || o.isOHLCSeriesPlot(c)))) { + if (f = { + index: c + 1, + offset: o.offset(h) + }, m = o.properties().styles[h].plottype.value(), !o.properties() + .skipHistogramBaseOnAutoScale && [at.PlotType.Histogram, at.PlotType + .Columns, at.PlotType.Area + ].indexOf(m) >= 0) { + if (g = o.properties().styles[h].histogramBase.value(), !isNumber(g)) + continue; + f.baseValue = g + } + a.push(f) + } if (v = o.m_data.minMaxOnRange2(t, e, a), s && (a = [{ + index: TradingView.LOW_PLOT, + offset: 0 + }, { + index: TradingView.HIGH_PLOT, + offset: 0 + }], y = o.series().data().bars().minMaxOnRange2(t, e, a), v = rt(v, y)), null !== + v && (i = new r(v.min, v.max)), n.bands) + for (c = 0; c < n.bands.length; c++) + if (o.properties().bands[c].visible.value()) { + if (g = o.properties().bands[c].value.value(), !isNumber(g)) continue; + i ? i.apply(g, g) : i = new r(g, g) + } return i && i.minValue() === i.maxValue() && (b = .005 * i.minValue(), i = + new r(i.minValue() - b, i.maxValue() + b)), S = this.priceScale(), S && S + .properties().percentage.value() && i ? (w = this.firstValue(), w ? i + .convertToPercents(w) : null) : S && S.isLog() && i ? new r(o.priceScale() + .priceToLogical(i.minValue()), o.priceScale().priceToLogical(i.maxValue())) : i + }, v.prototype.paneViews = function(t) { + return this.properties().visible.value() ? this._paneViews : null + }, v.prototype.dataWindowView = function() { + return this._dataWindowView + }, v.prototype.statusView = function() { + return this._statusView + }, v.prototype.priceAxisViews = function(t, e) { + return this._model.paneForSource(this) === t && e === this.priceScale() && (this + ._showLastValueOnPriceScale() || this.properties().oldShowLastValue && this + .properties().oldShowLastValue.value()) ? this._priceAxisViews : null + }, v.prototype._showLastValueOnPriceScale = function() { + return this._model.properties().scalesProperties.showStudyLastValue.value() + }, v.prototype.isLinePlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.LINE + }, v.isSelfColorerPlot = function(t, e) { + return t._metaInfo.plots[e].type === at.PlotTypes.COLORER + }, v.prototype.isSelfColorerPlot = function(t) { + return v.isSelfColorerPlot(this, t) + }, v.prototype.isTextColorerPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.TEXT_COLORER + }, v.prototype.isBarColorerPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.BAR_COLORER + }, v.prototype.isBgColorerPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.BG_COLORER + }, v.prototype.isPlotShapesPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.SHAPES + }, v.prototype.isPlotCharsPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.CHARS + }, v.prototype.isPlotArrowsPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.ARROWS + }, v.prototype.isOHLCBarsPlot = function(t) { + var e = this._metaInfo.plots[t].target, + i = this.metaInfo().defaults.ohlcPlots[e]; + return i && this.isOHLCSeriesPlot(t) && i.plottype === at.OHLCType.BARS + }, v.prototype.isOHLCCandlesPlot = function(t) { + var e = this._metaInfo.plots[t].target, + i = this.metaInfo().defaults.ohlcPlots[e]; + return i && this.isOHLCSeriesPlot(t) && i.plottype === at.OHLCType.CANDLES + }, v.prototype.isOHLCSeriesPlot = function(t) { + var e = this._metaInfo.plots[t].type; + return e === at.PlotTypes.OHLC_OPEN || e === at.PlotTypes.OHLC_HIGH || e === at + .PlotTypes.OHLC_LOW || e === at.PlotTypes.OHLC_CLOSE + }, v.prototype.isOHLCOpenPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_OPEN + }, v.prototype.isOHLCHighPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_HIGH + }, v.prototype.isOHLCLowPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_LOW + }, v.prototype.isOHLCClosePlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_CLOSE + }, v.prototype.isOHLCColorerPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_COLORER + }, v.prototype.isDataOffsetPlot = function(t) { + return this._metaInfo.plots[t].type === at.PlotTypes.DATAOFFSET + }, v.prototype.hasBarColorer = function() { + for (var t = 0; t < this._metaInfo.plots.length; ++t) + if (this.isBarColorerPlot(t)) return !0; + return !1 + }, v.prototype.barColorer = function() { + var t, e, i = null; + for (t = 0; t < this._metaInfo.plots.length; ++t) this.isBarColorerPlot(t) && (e = + new T(this, t), null == i ? i = e : i.pushBackBarColorer(e)); + if (null == i) throw Error( + "Cannot create BarColorer: study doesn't have a bar_colorer plot!"); + return i + }, v.prototype.base = function() { + return "Volume" === this._metaInfo.id ? 1 : 0 + }, v.prototype._createFormatter = function() { + var t, e, i; + "default" === this.properties().precision.value() ? this.metaInfo().defaults && (t = + parseInt(this.metaInfo().defaults.precision)) : t = parseInt(this.properties() + .precision.value()), isFinite(t) || (t = -1 !== ["Volume@tv-basicstudies", + "VbPVisible@tv-volumebyprice", "VbPSessions@tv-volumebyprice" + ].indexOf(this._metaInfo.id) ? 0 : 1e4), e = this.series().symbolInfo(), 0 === t ? ( + i = 0, e && e.volume_precision && (i = e.volume_precision), this._formatter = + new tt(i)) : this._formatter = new Q(Math.pow(10, t)), this.priceScale() && this + .priceScale().updateFormatter() + }, v.prototype.formatter = function() { + return this._formatter + }, v.prototype.nearestIndex = function(t, e) { + if (!TradingView.isInteger(t)) return void ct.logDebug( + "nearestIndex: incorrect logicalPoint"); + var i = this._series.data().bars().search(t, e); + return null !== i ? i.index : void 0 + }, v.prototype._lastNonEmptyPlotRow = function(t) { + var e, i; + return TradingView.isInteger(t) ? void 0 !== this._lastNonEmptyPlotRowCache[t] ? this + ._lastNonEmptyPlotRowCache[t] : (e = 1e3, null === (i = this.data().findLast( + function(e, i) { + return void 0 !== i[t] + }, e)) ? null : (this._lastNonEmptyPlotRowCache[t] = i, this + ._lastNonEmptyPlotRowCache[t])) : (ct.logDebug( + "_lastNonEmptyPlotRow: incorrect plotIndex"), null) + }, v.prototype.updateAllViews = function() { + var t; + for (t = 0; t < this._paneViews.length; t++) this._paneViews[t].update(); + for (this._dataWindowView.update(), this._statusView.update(), t = 0; t < this + ._priceAxisViews.length; t++) this._priceAxisViews[t].update() + }, v.prototype.tags = function() { + return !this._metaInfo || !this._metaInfo.description || this._metaInfo + .isTVScriptStub || this._metaInfo.is_hidden_study || this._metaInfo.isTVScript && + "tv-scripting" === this._metaInfo.productId ? [] : [this._metaInfo.description] + }, v.isPointsBasedStudy = function(t) { + switch (t) { + case "VbPFixed@tv-volumebyprice": + case "mtp_tsanalysis@mtp-mtpredictor": + case "mtp_riskreward@mtp-mtpredictor": + case "mtp_decisionpoint@mtp-mtpredictor": + case "mtp_ew_main@mtp-mtpredictor": + case "mtp_ew_major@mtp-mtpredictor": + case "mtp_ew_minor@mtp-mtpredictor": + case "mtp_wpt_down1ora@mtp-mtpredictor": + case "mtp_wpt_down2orb@mtp-mtpredictor": + case "mtp_wpt_down3@mtp-mtpredictor": + case "mtp_wpt_down4@mtp-mtpredictor": + case "mtp_wpt_down5@mtp-mtpredictor": + case "mtp_wpt_downc@mtp-mtpredictor": + case "mtp_wpt_up1ora@mtp-mtpredictor": + case "mtp_wpt_up2orb@mtp-mtpredictor": + case "mtp_wpt_up3@mtp-mtpredictor": + case "mtp_wpt_up4@mtp-mtpredictor": + case "mtp_wpt_up5@mtp-mtpredictor": + case "mtp_wpt_upc@mtp-mtpredictor": + return !0; + default: + return !1 + } + }, v.lineToolNameForPointsBasedStudy = function(t) { + switch (t) { + case "VbPFixed@tv-volumebyprice": + return "LineToolVbPFixed"; + case "RegressionTrend@tv-basicstudies": + return "LineToolRegressionTrend"; + case "mtp_tsanalysis@mtp-mtpredictor": + return "LineStudyMtpAnalysis"; + case "mtp_riskreward@mtp-mtpredictor": + return "LineStudyMtpRiskReward"; + case "mtp_decisionpoint@mtp-mtpredictor": + return "LineStudyMtpDecisionPoint"; + case "mtp_ew_main@mtp-mtpredictor": + return "LineStudyMtpElliotWaveMain"; + case "mtp_ew_major@mtp-mtpredictor": + return "LineStudyMtpElliotWaveMajor"; + case "mtp_ew_minor@mtp-mtpredictor": + return "LineStudyMtpElliotWaveMinor"; + case "mtp_wpt_down1ora@mtp-mtpredictor": + return "LineStudyMtpDownWave1OrA"; + case "mtp_wpt_down2orb@mtp-mtpredictor": + return "LineStudyMtpDownWave2OrB"; + case "mtp_wpt_down3@mtp-mtpredictor": + return "LineStudyMtpDownWave3"; + case "mtp_wpt_down4@mtp-mtpredictor": + return "LineStudyMtpDownWave4"; + case "mtp_wpt_down5@mtp-mtpredictor": + return "LineStudyMtpDownWave5"; + case "mtp_wpt_downc@mtp-mtpredictor": + return "LineStudyMtpDownWaveC"; + case "mtp_wpt_up1ora@mtp-mtpredictor": + return "LineStudyMtpUpWave1OrA"; + case "mtp_wpt_up2orb@mtp-mtpredictor": + return "LineStudyMtpUpWave2OrB"; + case "mtp_wpt_up3@mtp-mtpredictor": + return "LineStudyMtpUpWave3"; + case "mtp_wpt_up4@mtp-mtpredictor": + return "LineStudyMtpUpWave4"; + case "mtp_wpt_up5@mtp-mtpredictor": + return "LineStudyMtpUpWave5"; + case "mtp_wpt_upc@mtp-mtpredictor": + return "LineStudyMtpUpWaveC"; + default: + throw Error("There is no line tool name, associated with study id " + t) + } + }, v.isStudyLineTool = function(t) { + var e = i(128).StudyLineDataSource, + o = TradingView[t]; + return "function" == typeof o && o.prototype instanceof e + }, v.prototype.onExtendedHoursChanged = function() { + this.restart() + }, v.prototype.hasSymbolInputs = function() { + for (var t = this._metaInfo.inputs.length; t--;) + if ("symbol" === this._metaInfo.inputs[t].type) return !0; + return !1 + }, v.prototype._subscribeExtendedHours = function() { + !this._isSubscribedToExtendedHours && this.hasSymbolInputs() && (this._series + .extendedHours.listeners().subscribe(this, this.onExtendedHoursChanged), this + ._isSubscribedToExtendedHours = !0) + }, v.prototype._unsubscribeExtendedHours = function() { + this._isSubscribedToExtendedHours && (this._series.extendedHours.listeners() + .unsubscribe(this, this.onExtendedHoursChanged), delete this + ._isSubscribedToExtendedHours) + }, v.prototype.removeByRemoveAllStudies = function() { + return !0 + }, v.prototype.canHaveChildren = function() { + return void 0 === this._canHaveChildren && (this._canHaveChildren = !!st + .canHaveChildren(this._metaInfo)), this._canHaveChildren + }, v.getInputRebindType = function(t, e, i) { + var o = st.isSourceInput(t); + return o && !~e.indexOf("$") && ~i.indexOf("$") ? K.REBIND_STUDY_STANDALONE_TO_CHILD : + o && ~e.indexOf("$") && !~i.indexOf("$") ? K.REBIND_STUDY_CHILD_TO_STANDALONE : 0 + }, v.prototype.getPlotFields = function() { + return this._plotFields + }, v.prototype.getMinFirstBarIndexForPlot = function(t) { + var e, i = y(this._properties.styles, t) || y(this._properties.ohlcPlots, t) || y(this + ._properties.filledAreasStyle, t); + return null === i ? -1 / 0 : (e = this.data().lastIndex(), null === e ? -1 / 0 : e - i + + 1) + }, v.prototype.getInputsPropertyPage = function() { + return lt.StudyInputsPropertyPage + }, v.prototype.getStylesPropertyPage = function() { + return lt.StudyStylesPropertyPage + }, v.prototype.getDisplayPropertyPage = function() { + return lt.StudyDisplayPropertyPage + }, t.exports = { + Study: v, + createStudy: l, + prepareStudyProperties: c, + prepareStudyPropertiesForLoadChart: u, + prepareStudyPropsStateForLoadChart: _ + } + }).call(e, i(25), i(10), i(5), i(73)) + }, , , , , function(t, e, i) { + "use strict"; + + function o(t, e, i) { + var o, n, s; + for (e = e || t || i || "", o = "", n = 0; n < c.length; n++) + if ((s = e.match(c[n])) && 3 === s.length) { + e = s[1], o = s[2]; + break + } r.emit(e.toLowerCase().replace(" ", "_"), { + category: t, + label: i, + value: o + }) + } + + function n(t, e, i) { + var n, r, a; + if (s.enabled("charting_library_base")) return void o(t, e, i); + n = (t ? t + ":" : "") + e, i && (n += " " + i), l.logNormal(n), s.enabled("widget") || (r = window + ._gaq, window._UNIT_TESTS || void 0 === r || (a = ["_trackEvent", t, e], void 0 !== i && a + .push(i), r.push(a))) + } + var r, s, a, l, c; + Object.defineProperty(e, "__esModule", { + value: !0 + }), r = i(23), s = i(5), a = i(7), l = a.getLogger("Common.TrackEvent"), c = [ + /Study_(Drawing)_(.*)/, /(Study)_(.*)@tv-basicstudies/, /(Study)_(.*)/, /(Chart Style) (.*)/ + ], e.trackEvent = n, window.TradingView = window.TradingView || {}, window.TradingView.trackEvent = + n + }, , , , function(t, e, i) { + "use strict"; + + function o(t, e, i) { + var o = e.subtract(t), + n = i.subtract(t), + r = n.dotProduct(o) / o.dotProduct(o); + return { + coeff: r, + distance: t.addScaled(o, r).subtract(i).length() + } + } + + function n(t, e, i) { + var n, r, s = o(t, e, i); + return 0 <= s.coeff && s.coeff <= 1 ? s : (n = t.subtract(i).length(), r = e.subtract(i).length(), + n < r ? { + coeff: 0, + distance: n + } : { + coeff: 1, + distance: r + }) + } + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.distanceToLine = o, e.distanceToSegment = n + }, function(t, e, i) { + "use strict"; + + function o(t, e, i, o, n, r) { + var s, a, h, u; + return l.equalPoints(t, e) ? null : (s = new l.Point(0, 0), a = new l.Point(i, o), n ? r ? (h = c + .intersectLineAndRectangle(l.lineThroughPoints(t, e), s, a), Array.isArray(h) ? h : null + ) : (u = c.intersectRayAndRectangle(e, t, s, a), null === u || l.equalPoints(e, u) ? + null : l.lineSegment(e, u)) : r ? (u = c.intersectRayAndRectangle(t, e, s, a), null === + u || l.equalPoints(t, u) ? null : l.lineSegment(t, u)) : (h = c + .intersectLineSegmentAndRectangle(l.lineSegment(t, e), s, a), Array.isArray(h) ? h : + null)) + } + + function n(t) { + return .3 * t + } + + function r(t) { + return 2 + .5 * t + } + + function s(t) { + return null !== t && void 0 !== t && !h.isNaN(t) + } + + function a(t, e) { + void 0 !== e && u.setLineStyle(t, e) + } + var l, c, h, u; + Object.defineProperty(e, "__esModule", { + value: !0 + }), l = i(8), c = i(132), h = i(15), u = i(90), e.extendAndClipLineSegment = o, e.optimalBarWidth = + n, e.selectionTolerance = r, e.coordinateIsValid = s, e.setValidLineStyle = a + }, function(t, e, i) { + "use strict"; + (function(t) { + function o() { + this._zorder = 0, this.m_priceScale = null, this._id = s.randomHashN(6), this._ownerSource = + null, this._userEditEnabled = !0, this.hasAlert = new t(!1) + } + + function n(t) { + o.call(this), this._isOverlay = null, this._model = t + } + var r = i(6).DefaultProperty, + s = i(61); + o.prototype.createPropertiesObject = function(t, e, i) { + return new r(t, e, i) + }, o.prototype.id = function() { + return this._id + }, o.prototype.idForAlert = function() { + return this._id + }, o.prototype.setId = function(t) { + this._id = t + }, o.prototype.zorder = function() { + return this._zorder + }, o.prototype.setZorder = function(t) { + "number" == typeof t && this._zorder !== t && (this._zorder = t) + }, o.prototype.title = function() { + throw Error("Implement this fun in a subclass") + }, o.prototype.priceScale = function() { + return this.m_priceScale + }, o.prototype.setPriceScale = function(t) { + this.m_priceScale = t + }, o.prototype.ownerSource = function() { + return this._ownerSource + }, o.prototype.setOwnerSource = function(t) { + this._ownerSource = t, t && this.setPriceScale(t.priceScale()) + }, o.prototype.isSavedInChart = function(t) { + return !0 + }, o.prototype.isSavedInStudyTemplates = function() { + return !0 + }, o.prototype.isRemovedByStudyTemplates = function() { + return !0 + }, o.prototype.hasContextMenu = function() { + return !0 + }, o.prototype.showInObjectTree = function() { + return !0 + }, o.prototype.setUserEditEnabled = function(t) { + this._userEditEnabled = t + }, o.prototype.userEditEnabled = function() { + return this._userEditEnabled + }, o.prototype.canBeHidden = function() { + return this.userEditEnabled() + }, o.prototype.isUserDeletable = function() { + return this.userEditEnabled() + }, o.prototype.canHasAlert = function() { + return !1 + }, o.prototype.properties = function() { + throw Error("Implement this fun in a subclass") + }, o.prototype.statusView = function() { + return null + }, o.prototype.dataWindowView = function() { + return null + }, o.prototype.priceAxisViews = function(t, e) { + return null + }, o.prototype.updateAllViews = function() {}, o.prototype.paneViews = function(t) { + return null + }, o.prototype.isChildStudy = function() { + return !1 + }, o.prototype.hasChildren = function() { + return !1 + }, o.prototype.canHaveChildren = function() { + return !1 + }, o.prototype.onClickOutside = function() {}, o.prototype.getInputsPropertyPage = + function() { + return null + }, o.prototype.getStylesPropertyPage = function() { + return null + }, o.prototype.getDisplayPropertyPage = function() { + return null + }, o.prototype.getVisibilitiesPropertyPage = function() { + return null + }, o.prototype.getStrategyPropertyPage = function() { + return null + }, o.prototype.getSourceIcon = function() { + return null + }, inherit(n, o), n.prototype.isNoScale = function() { + return !!this._isOverlay + }, n.prototype.base = function() { + return 0 + }, n.prototype.formatter = function() { + return null + }, n.prototype.model = function() { + return this._model + }, n.prototype.priceRange = function(t, e) { + return null + }, n.prototype.isDraggable = function() { + return !this._metaInfo || !this._metaInfo.linkedToSeries + }, n.prototype.priceLineColor = function(t) { + return t + }, e.DataSource = o, e.PriceDataSource = n + }).call(e, i(17)) + }, function(t, e, i) { + "use strict"; + + function o(t, e, i, o, n) { + this._wptStudyId = o, this._pointsCount = n, m.call(this, t, e, i) + } + + function n(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_down1ora", 2) + } + + function r(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_down2orb", 2) + } + + function s(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_down3", 3) + } + + function a(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_down4", 2) + } + + function l(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_down5", 5) + } + + function c(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_downc", 3) + } + + function h(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_up1ora", 2) + } + + function u(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_up2orb", 2) + } + + function d(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_up3", 3) + } + + function p(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_up4", 2) + } + + function _(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_up5", 5) + } + + function f(t, e, i) { + o.call(this, t, e, i, "mtp_wpt_upc", 3) + } + var m = i(105).LineStudyMtp; + inherit(o, m), o.prototype._studyInputs = function() { + var t, e, i, o, n = this.points(); + if (n.length < this.pointsCount()) return null; + for (t = [this.properties().inputs.displayZoneLabels.value()], e = 0; e < this.pointsCount(); ++ + e) { + if (i = n[e].index, null === (o = this._model.mainSeries().bars().valueAt(i))) return null; + t.push(1e3 * o[TradingView.TIME_PLOT]) + } + return t + }, o.prototype._mtpStudyId = function() { + return this._wptStudyId + }, o.prototype.pointsCount = function() { + return this._pointsCount + }, inherit(n, o), n.getTooltipText = function(t) { + return "Down Wave 1 or A: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(r, o), r.getTooltipText = function(t) { + return "Down Wave 2 or B: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(s, o), s.getTooltipText = function(t) { + return "Down Wave 3: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(a, o), a.getTooltipText = function(t) { + return "Down Wave 4: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(l, o), l.getTooltipText = function(t) { + return "Down Wave 5: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(c, o), c.getTooltipText = function(t) { + return "Down Wave C: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(h, o), h.getTooltipText = function(t) { + return "Up Wave 1 or A: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(u, o), u.getTooltipText = function(t) { + return "Up Wave 2 or B: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(d, o), d.getTooltipText = function(t) { + return "Up Wave 3: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(p, o), p.getTooltipText = function(t) { + return "Up Wave 4: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(_, o), _.getTooltipText = function(t) { + return "Up Wave 5: Select Point " + ((t ? t._points.length : 0) + 1) + }, inherit(f, o), f.getTooltipText = function(t) { + return "Up Wave C: Select Point " + ((t ? t._points.length : 0) + 1) + }, e.LineStudyMtpDownWave1OrA = n, e.LineStudyMtpDownWave2OrB = r, e.LineStudyMtpDownWave3 = s, e + .LineStudyMtpDownWave4 = a, e.LineStudyMtpDownWave5 = l, e.LineStudyMtpDownWaveC = c, e + .LineStudyMtpUpWave1OrA = h, e.LineStudyMtpUpWave2OrB = u, e.LineStudyMtpUpWave3 = d, e + .LineStudyMtpUpWave4 = p, e.LineStudyMtpUpWave5 = _, e.LineStudyMtpUpWaveC = f + }, function(t, e, i) { + "use strict"; + (function(e) { + var o = i(86), + n = 1e-10, + r = function() { + function t(t, e, i, o, n) { + var r, s = n, + a = 0; + if (isNaN(t.get(e - 1))) return { + index: NaN, + value: NaN + }; + for (r = 0; r < e; ++r) o(t.get(r), s) && (a = r, s = t.get(r)); + return { + index: a, + value: s + } + } + + function r(t, e) { + return 100 * t / e + } + + function s(t, e, i, o, n) { + var r, s, a; + this._areaRight = t, this._areaLeft = e, this._pivotType = i, this._series = o, this + ._currentIndex = n.new_var(0), this._currentValue = n.new_var(NaN), this + ._pivotIndex = n.new_var(-1), this._index = w.n(n), this._isNewBar = n.symbol + .isNewBar, r = this._currentIndex.get(1), s = this._currentValue.get(1), a = + this._pivotIndex.get(1), this._index > 1 && (this._currentIndex.set(r), this + ._currentValue.set(s), this._pivotIndex.set(a)) + } + + function a(t, e, i) { + var o, n, r, a, l; + this._deviation = t, o = i.new_var(w.high(i)), n = i.new_var(w.low(i)), o.get(2 * + e + 1), n.get(2 * e + 1), this._pivotHigh = new s(e, e, s.HIGH, o, i), this + ._pivotLow = new s(e, e, s.LOW, n, i), this._lastVal = i.new_var(NaN), this + ._lastIndex = i.new_var(-1), this._lastType = i.new_var(), this._index = w.n(i), + this._isNewBar = i.symbol.isNewBar, this._isBarClosed = i.symbol.isBarClosed, + r = this._lastIndex.get(1), a = this._lastVal.get(1), l = this._lastType.get(1), + this._index > 1 && this.addPivot(r, a, l), this.processPivot(this._pivotHigh), + this.processPivot(this._pivotLow) + } + + function l(t) { + this.symbol = t, this.vars = [], this.vars_index = 0, this.ctx = [], this + .ctx_index = 0 + } + + function c(t) { + this.mindepth = 0, this.original = NaN, this.modified = !1, this.symbol = t + } + + function h(t, e) { + this.timezone = t || "America/New_York", this.session = e || "0000-0000" + } + + function u(t, e, i, o, n, r) { + this.periodBase = i, this.tickerid = t, this.period = e, this.index = -1, this + .time = NaN, this.open = NaN, this.high = NaN, this.low = NaN, this.close = NaN, + this.volume = NaN, this.updatetime = NaN, this.isNewBar = !1, this + .isBarClosed = !1, this.session = new S.Session, this.other_sessions = {}, this + .script = o, this.ticker = u.parseTicker(t); + var s = u.parsePeriod(e); + this.resolution = s.resolution, this.interval = s.interval, this.bb_cache = {}, this + .minTick = n, this.periodForInitialRange = r + } + + function d(t, e, i, o, n, r, s, a, c) { + this.body = n, this.symbols = [], this.runner = o, this.inputCallback = s, this + .out = r, this.nonseriesOut = c, this.ctx = new l(this.add_sym(t, e, i, a)), + this.init() + } + + function p(t) { + this.symbols = [], this.barsets = [], this.subscription = [], this.host = t, this + .isRecalculated = !1, this.start() + } + + function _(t) { + p.feed = t + } + + function f(t) { + this.runner = new p(t) + } + + function m(t, e) { + this.info = t, this.bars = e || [], this.isBarClosed = !0 + } + + function g(t, e) { + this.period = t, this.generateEmptyBars = !!e + } + + function v() {} + var y = "undefined" != typeof window ? window : e, + b = y.PineJsCalendar ? y.PineJsCalendar : i(50), + S = i(58), + w = {}; + return w.max_series_size = 10001, w.n = function(t) { + return t.symbol.index + 1 + }, w.nz = function(t, e) { + return e = e || 0, isFinite(t) ? t : e + }, w.na = function(t) { + return 0 === arguments.length ? NaN : isNaN(t) ? 1 : 0 + }, w.isZero = function(t) { + return Math.abs(t) <= 1e-10 + }, w.toBool = function(t) { + return isFinite(t) && !w.isZero(t) + }, w.eq = function(t, e) { + return w.isZero(t - e) + }, w.neq = function(t, e) { + return !w.eq(t, e) + }, w.ge = function(t, e) { + return w.isZero(t - e) || t > e + }, w.gt = function(t, e) { + return !w.isZero(t - e) && t > e + }, w.lt = function(t, e) { + return !w.isZero(t - e) && t < e + }, w.le = function(t, e) { + return w.isZero(t - e) || t < e + }, w.and = function(t, e) { + return isNaN(t) || isNaN(e) ? NaN : w.isZero(t) || w.isZero(e) ? 0 : 1 + }, w.or = function(t, e) { + return isNaN(t) || isNaN(e) ? NaN : w.isZero(t) && w.isZero(e) ? 0 : 1 + }, w.not = function(t) { + return isNaN(t) ? NaN : w.isZero(t) ? 1 : 0 + }, w.greaterOrEqual = function(t, e) { + return e - t < n + }, w.lessOrEqual = function(t, e) { + return t - e < n + }, w.equal = function(t, e) { + return Math.abs(t - e) < n + }, w.greater = function(t, e) { + return t - e > n + }, w.less = function(t, e) { + return e - t > n + }, w.max = Math.max, w.min = Math.min, w.pow = Math.pow, w.abs = Math.abs, w.log = + Math.log, w.log10 = function(t) { + return Math.log(t) / Math.LN10 + }, w.sqrt = Math.sqrt, w.sign = function(t) { + return isNaN(t) ? NaN : w.isZero(t) ? 0 : t > 0 ? 1 : -1 + }, w.exp = Math.exp, w.sin = Math.sin, w.cos = Math.cos, w.tan = Math.tan, w.asin = + Math.asin, w.acos = Math.acos, w.atan = Math.atan, w.floor = Math.floor, w.ceil = + Math.ceil, w.round = Math.round, w.avg = function(t, e, i, o, n, r) { + var s, a; + if (2 === arguments.length) return (t + e) / 2; + for (s = 0, a = 0; a < arguments.length; a++) s += arguments[a]; + return s / arguments.length + }, w.open = function(t) { + return t.symbol.open + }, w.high = function(t) { + return t.symbol.high + }, w.low = function(t) { + return t.symbol.low + }, w.close = function(t) { + return t.symbol.close + }, w.hl2 = function(t) { + return (t.symbol.high + t.symbol.low) / 2 + }, w.hlc3 = function(t) { + return (t.symbol.high + t.symbol.low + t.symbol.close) / 3 + }, w.ohlc4 = function(t) { + return (t.symbol.open + t.symbol.high + t.symbol.low + t.symbol.close) / 4 + }, w.volume = function(t) { + return t.symbol.volume + }, w.updatetime = function(t) { + return t.symbol.updatetime + }, w.time = function(t, e, i) { + return t.symbol.bartime(e, i) + }, w.period = function(t) { + return t.symbol.period + }, w.tickerid = function(t) { + return t.symbol.tickerid + }, w.ticker = function(t) { + return t.symbol.ticker + }, w.interval = function(t) { + return t.symbol.interval + }, w.isdwm = function(t) { + return t.symbol.isdwm() + }, w.isintraday = function(t) { + return !t.symbol.isdwm() + }, w.isdaily = function(t) { + return "D" === t.symbol.resolution + }, w.isweekly = function(t) { + return "W" === t.symbol.resolution + }, w.ismonthly = function(t) { + return "M" === t.symbol.resolution + }, w.year = function(t) { + return w.timepart(t.symbol, b.YEAR, arguments[1]) + }, w.month = function(t) { + return w.timepart(t.symbol, b.MONTH, arguments[1]) + }, w.weekofyear = function(t) { + return w.timepart(t.symbol, b.WEEK_OF_YEAR, arguments[1]) + }, w.dayofmonth = function(t) { + return w.timepart(t.symbol, b.DAY_OF_MONTH, arguments[1]) + }, w.dayofweek = function(t) { + return w.timepart(t.symbol, b.DAY_OF_WEEK, arguments[1]) + }, w.hour = function(t) { + return w.timepart(t.symbol, b.HOUR_OF_DAY, arguments[1]) + }, w.minute = function(t) { + return w.timepart(t.symbol, b.MINUTE, arguments[1]) + }, w.second = function(t) { + return w.timepart(t.symbol, b.SECOND, arguments[1]) + }, w.add_days_considering_dst = function(t, e, i) { + return b.add_days_considering_dst(b.get_timezone(t), e, i) + }, w.selectSessionBreaks = function(t, e) { + var i, o, n, r, s, a; + if (w.isdwm(t) || void 0 === t.symbol.session.timezone) return []; + if (i = u.newBarBuilder(t.symbol.period, t.symbol.session), o = [], n = e + .length, i.moveTo(e[n - 1]), 1 === n && i.sessionStart === e[0]) o.push(e[ + 0]); + else { + for (r = n - 2; r >= 0; --r)(s = e[r]) >= i.sessionStart || (i.moveTo(s), + a = e[r + 1], o.push(a)); + o.reverse() + } + return o + }, w.iff = function(t, e, i) { + return w.not(t) ? i : e + }, w.rising = function(t, e) { + for (var i = 1; i < e + 1; ++i) + if (t.get(i) > t.get(0)) return 0; + return 1 + }, w.falling = function(t, e) { + for (var i = 1; i < e + 1; ++i) + if (t.get(i) < t.get(0)) return 0; + return 1 + }, w.timepart = function(t, e, i) { + var o = b.utc_to_cal(t.timezone, i || t.bartime()); + return b.get_part(o, e) + }, w.rsi = function(t, e) { + return w.isZero(e) ? 100 : w.isZero(t) ? 0 : 100 - 100 / (1 + t / e) + }, w.sum = function(t, e, i) { + var o = i.new_var(), + n = w.nz(t.get()) + w.nz(o.get(1)) - w.nz(t.get(e)); + return o.set(n), n + }, w.sma = function(t, e, i) { + var o = w.sum(t, e, i); + return w.na(t.get(e - 1)) ? NaN : o / e + }, w.rma = function(t, e, i) { + var o = w.sum(t, e, i), + n = e - 1, + r = t.get(n), + s = i.new_var(), + a = s.get(1), + l = t.get(), + c = w.na(r) ? NaN : w.na(a) ? o / e : (l + a * n) / e; + return s.set(c), c + }, w.fixnan = function(t, e) { + var i = e.new_var(); + return isNaN(t) ? i.get(1) : (i.set(t), t) + }, w.tr = function(t, e) { + var i, o, n; + return 1 === arguments.length && (e = t, t = void 0), i = void 0 !== t && !!t, + o = e.new_var(w.close(e)), n = o.get(1), i && isNaN(n) && (n = w.close(e)), + w.max(w.max(w.high(e) - w.low(e), w.abs(w.high(e) - n)), w.abs(w.low(e) - + n)) + }, w.atr = function(t, e) { + var i = e.new_var(w.tr(e)); + return w.sma(i, t, e) + }, w.ema = function(t, e, i) { + var o = w.sum(t, e, i), + n = i.new_var(), + r = t.get(0), + s = t.get(e - 1), + a = n.get(1), + l = w.na(s) ? NaN : w.na(a) ? o / e : 2 * (r - a) / (e + 1) + a; + return n.set(l), l + }, w.wma = function(t, e, i) { + var o, n, r = 0; + for (e = Math.round(e), o = e; o >= 0; o--) n = e - o, r += n * t.get(o); + return 2 * r / (e * (e + 1)) + }, w.vwma = function(t, e, i) { + var o = i.new_var(w.volume(i)), + n = i.new_var(t.get(0) * w.volume(i)); + return w.sma(n, e, i) / w.sma(o, e, i) + }, w.swma = function(t, e) { + return (t.get(0) + 2 * t.get(1) + 2 * t.get(2) + t.get(3)) / 6 + }, w.lowestbars = function(e, i, o) { + return -t(e, i, o, function(t, e) { + return w.lt(t, e) + }, Number.MAX_VALUE).index + }, w.lowest = function(e, i, o) { + return t(e, i, o, function(t, e) { + return w.lt(t, e) + }, Number.MAX_VALUE).value + }, w.highestbars = function(e, i, o) { + return -t(e, i, o, function(t, e) { + return w.gt(t, e) + }, Number.MIN_VALUE).index + }, w.highest = function(e, i, o) { + return t(e, i, o, function(t, e) { + return w.gt(t, e) + }, Number.MIN_VALUE).value + }, w.cum = function(t, e) { + var i = e.new_var(), + o = w.nz(i.get(1)) + t; + return i.set(o), o + }, w.accdist = function(t) { + var e = w.high(t), + i = w.low(t), + o = w.close(t), + n = w.volume(t); + return w.cum(o === e && o === i || e === i ? 0 : n * (2 * o - i - e) / (e - i), + t) + }, w.correlation = function(t, e, i, o) { + var n = w.sma(t, i, o), + r = w.sma(e, i, o), + s = o.new_var(t.get() * e.get()); + return (w.sma(s, i, o) - n * r) / Math.sqrt(w.variance2(t, n, i) * w.variance2( + e, r, i)) + }, w.stoch = function(t, e, i, o, n) { + var s = w.highest(e, o), + a = w.lowest(i, o); + return w.fixnan(r(t.get() - a, s - a), n) + }, w.tsi = function(t, e, i, o) { + var n = o.new_var(w.change(t)), + r = o.new_var(w.abs(w.change(t))), + s = o.new_var(w.ema(n, i, o)), + a = o.new_var(w.ema(r, i, o)); + return w.ema(s, e, o) / w.ema(a, e, o) + }, w.cross = function(t, e, i) { + function o(t) { + return t < 0 ? -1 : 0 === t ? 0 : 1 + } + if (isNaN(t) || isNaN(e)) return !1; + var n = i.new_var(o(t - e)); + return !isNaN(n.get(1)) && n.get(1) !== n.get() + }, w.linreg = function(t, e, i) { + var o, n, r, s, a, l, c = 0, + h = 0, + u = 0, + d = 0; + for (o = 0; o < e; ++o) n = t.get(o), r = e - 1 - o, s = r + 1, c += s, h += n, + u += s * s, d += n * s; + return a = (e * d - c * h) / (e * u - c * c), l = h / e, l - a * c / e + a + a * + (e - 1 - i) + }, w.sar = function(t, e, i, o) { + function n(e, i) { + var o = m.get(); + return g.set(e), m.set(i), v.set(1e3 * t), y.set(o), o + } + var r, s, a = w.high(o), + l = w.low(o), + c = w.close(o), + h = o.new_var(a), + u = o.new_var(l), + d = o.new_var(c), + p = d.get(1), + _ = u.get(1), + f = h.get(1), + m = o.new_var(), + g = o.new_var(), + v = o.new_var(), + y = o.new_var(), + b = y.get(1); + if (isNaN(p)) return NaN; + if (r = 1e-7, isNaN(b) && (w.ge(c, p) ? (g.set(1), m.set(Math.max(a, f)), b = + Math.min(l, _)) : (g.set(-1), b = Math.max(a, f), m.set(Math.min(l, + _))), v.set(1e3 * t)), 1 === g.get()) { + if (w.gt(a, m.get()) && (m.set(a), v.set(Math.min(v.get() + 1e3 * e, 1e3 * + i))), w.le(l, b)) return n(-1, l) + } else if (w.lt(l, m.get()) && (m.set(l), v.set(Math.min(v.get() + 1e3 * e, + 1e3 * i))), w.ge(a, b)) return n(1, a); + return s = b + v.get() * (m.get() - b) / 1e3, 1 === g.get() ? w.ge(s, l) && (s = + l - r) : w.le(s, a) && (s = a + r), y.set(s), s + }, w.alma = function(t, e, i, o) { + var n, r, s, a = Math.floor(i * (e - 1)), + l = e / o * (e / o), + c = [], + h = 0; + for (n = 0; n < e; ++n) r = Math.exp(-1 * Math.pow(n - a, 2) / (2 * l)), h += r, + c.push(r); + for (n = 0; n < e; ++n) c[n] /= h; + for (s = 0, n = 0; n < e; ++n) s += c[n] * t.get(e - n - 1); + return s + }, w.wvap = function(t, e) { + return t.get() - t.get(1) + }, w.change = function(t) { + return t.get() - t.get(1) + }, w.roc = function(t, e) { + var i = t.get(e); + return 100 * (t.get() - i) / i + }, w.dev = function(t, e, i) { + var o = w.sma(t, e, i); + return w.dev2(t, e, o) + }, w.dev2 = function(t, e, i) { + var o, n, r, s = 0; + for (o = 0; o < e; o++) n = t.get(o), r = w.abs(n - i), s += r; + return s / e + }, w.stdev = function(t, e, i) { + var o = w.variance(t, e, i); + return w.sqrt(o) + }, w.variance = function(t, e, i) { + var o = w.sma(t, e, i); + return w.variance2(t, o, e) + }, w.variance2 = function(t, e, i) { + var o, n, r, s = 0; + for (o = 0; o < i; o++) n = t.get(o), r = w.abs(n - e), s += r * r; + return s / i + }, w.percentrank = function(t, e) { + var i, o, n, r; + if (w.na(t.get(e - 1))) return NaN; + for (i = 0, o = t.get(), n = 1; n < e; n++) r = t.get(n), w.ge(o, r) && i++; + return 100 * i / e + }, w.createNewSessionCheck = function(t) { + var e = u.newBarBuilder(t.symbol.period, t.symbol.session); + return function(t) { + return e.indexOfBar(t) === S.POST_SESSION && (e.moveTo(t), !0) + } + }, s.LOW = 0, s.HIGH = 1, s.prototype.isPivotFound = function() { + return -1 !== this._pivotIndex.get() + }, s.prototype.pivotIndex = function() { + return this._pivotIndex.get() + }, s.prototype.currentValue = function() { + return this._currentValue.get() + }, s.prototype.pivotType = function() { + return this._pivotType + }, s.prototype.reset = function() { + this._currentValue.set(NaN), this._currentIndex.set(0), this._pivotIndex.set(-1) + }, s.prototype.isRightSideOk = function(t) { + return t - this._currentIndex.get() === this._areaRight + }, s.prototype.isViolate = function(t, e) { + if (t < 1 || isNaN(this._currentValue.get())) return !0; + var i = this._series.get(this._index - t); + return !!isNaN(i) || (i === this._currentValue.get() ? e : this._pivotType === s + .HIGH ? i > this._currentValue.get() : i < this._currentValue.get()) + }, s.prototype.processPoint = function(t) { + this.isViolate(t, !1) && (this._currentValue.set(this._series.get()), this + ._currentIndex.set(t)) + }, s.prototype.isRestartNeeded = function(t) { + return t - this._currentIndex.get() > this._areaRight + }, s.prototype.update = function() { + var t, e; + if (this._isNewBar && this.isPivotFound() && this.reset(), this.processPoint( + this._index), this.isRightSideOk(this._index)) { + if (-1 === this._pivotIndex.get()) { + for (t = !0, e = 0; e < this._areaLeft; ++e) + if (this.isViolate(this._currentIndex.get() - 1 - e, !0)) { + t = !1; + break + } t && this._pivotIndex.set(this._currentIndex.get()) + } + } else -1 !== this._pivotIndex.get() && this._pivotIndex.set(-1); + if (this.isRestartNeeded(this._index)) + for (this.reset(), e = 0; e <= this._areaRight; ++e) this.processPoint(this + ._index - this._areaRight + e) + }, a.prototype.addPivot = function(t, e, i) { + this._lastIndex.set(t), this._lastVal.set(e), this._lastType.set(i) + }, a.prototype.updatePivot = function(t, e) { + this._lastIndex.set(t), this._lastVal.set(e) + }, a.prototype.lastPrice = function() { + return this._lastVal.get() + }, a.prototype.lastIndex = function() { + return this._lastIndex.get() + }, a.prototype.addPoint = function(t, e, i) { + var o; + return isNaN(this._lastVal.get()) ? void this.addPivot(t, e, i) : (o = this + ._lastVal.get(), this._lastType.get() === i ? void((i === s.HIGH ? e > + o : e < o) && this.updatePivot(t, e)) : void(Math.abs(o - e) / e > + this._deviation && this.addPivot(t, e, i))) + }, a.prototype.processPivot = function(t) { + t.update(), this._isBarClosed && t.isPivotFound() && this.addPoint(t + .pivotIndex(), t.currentValue(), t.pivotType()) + }, w.zigzag = function(t, e, i) { + return new a(t, e, i).lastPrice() + }, w.zigzagbars = function(t, e, i) { + var o = new a(t, e, i); + return -1 === o.lastIndex() ? NaN : o.lastIndex() - w.n(i) + }, l.prototype.new_sym = function(t, e, i, o) { + return this.symbol.script.add_sym(t, e, i, void 0, o) + }, l.prototype.select_sym = function(t) { + this.symbol = this.symbol.script.get_sym(t) + }, l.prototype.new_var = function(t) { + var e, i = this.vars; + return i.length <= this.vars_index && i.push(new c(this.symbol)), e = i[this + .vars_index++], arguments.length > 0 && e.set(t), e + }, l.prototype.new_ctx = function() { + return this.ctx.length <= this.ctx_index && this.ctx.push(new l(this.symbol)), + this.ctx[this.ctx_index++] + }, l.prototype.prepare = function(t) { + var e, i; + for (this.ctx_index = 0, this.vars_index = 0, e = 0; e < this.vars.length; e++) + this.vars[e].prepare(t); + for (i = 0; i < this.ctx.length; i++) this.ctx[i].prepare(t) + }, l.prototype.stop = function() { + this.symbol = null, this.vars = null + }, c.prototype.valueOf = function() { + return this.get(0) + }, c.prototype.get = function(t) { + return isNaN(t) && (t = 0), t = t || 0, this.hist ? t >= this.hist.length ? ( + console.error("not enough depth: " + this), NaN) : this._get(t) : (this + .mindepth = w.max(this.mindepth, t), NaN) + }, c.prototype._get = function(t) { + var e = this.hist_pos - t; + return e < 0 && (e += this.hist.length), this.hist[e] + }, c.prototype.set = function(t) { + this.hist && (this.hist[this.hist_pos] = t, this.modified = !0) + }, c.prototype.prepare = function(t) { + t === this.symbol && (t.isNewBar ? (this.original = this.get(0), !this + .modified && this.hist || this.add_hist()) : this.set(this + .original), this.modified = !1) + }, c.prototype.add_hist = function() { + var t, e, i; + if (!this.hist) { + for (t = w.na(this.mindepth) ? w.max_series_size : w.min(this.mindepth + 1, + w.max_series_size), t = Math.round(t), e = Array(t), i = 0; i < + t; i++) e[i] = NaN; + this.hist = e, this.hist_pos = -1 + } + this.hist_pos = Math.min(this.hist_pos + 1, this.hist.length), this.hist_pos === + this.hist.length && (this.hist_pos = this.hist.length - 1, this.hist + .shift(), this.hist.push(NaN)), this.hist[this.hist_pos] = this.original + }, c.prototype.adopt = function(t, e, i) { + var o, n, r, s; + return this.hist || (this.mindepth = NaN), o = e.get(), n = t.indexOf(o), 0 !== + i && (r = e.get(1), w.na(r) || (s = t.indexOf(r), n = n === s ? -1 : n)), + n < 0 ? NaN : this._get(n) + }, c.prototype.indexOf = function(t) { + var e, i, n, r; + return this.hist ? w.na(t) ? -1 : (e = this.hist.length, i = this.symbol.index + + 1, n = Math.min(e, i), r = o.upperbound_int(this.hist, t, 0, n), 0 === + r ? -1 : n - r) : (this.mindepth = NaN, -1) + }, u.parseTicker = function(t) { + var e = t.indexOf(":"); + return -1 === e ? t : t.substr(e + 1) + }, u.parsePeriod = function(t) { + var e, i, o, n, r, s, a, l; + return t += "", e = t.slice(0), i = e.indexOf(",") >= 0, i && (n = e.split(","), + o = u.parsePeriod(n[1]), e = n[0]), r = !1, s = !1, a = e[e.length - 1], + -1 === "DWM".indexOf(a) && ("S" === a ? s = !0 : (r = !0, a = "")), l = + parseInt(r ? e : e.length > 1 ? e.slice(0, e.length - 1) : 1), { + resolution: a, + interval: l, + pureResolution: "" + l + a, + isIntraday: r, + isSeconds: s, + range: o + } + }, u.newBarBuilder = function(t, e, i) { + var o = u.parsePeriod(t); + return S.newBarBuilder(o.resolution, o.interval, e, i) + }, u.newSession = function(t, e) { + var i = b.get_timezone(t); + return (new S.Session).init(i, e) + }, u.prototype.set_symbolinfo = function(t) { + t || console.error("WARN: symbolinfo isn't defined for " + this.tickerid), this + .info = t, this.timezone = b.get_timezone(t.timezone), this.session.init( + this.timezone, t.session); + for (var e in this.other_sessions) this.other_sessions.hasOwnProperty(e) && this + .other_sessions[e].init(this.timezone, e) + }, u.prototype.get_session = function(t) { + if (!t) return this.session; + var e = this.other_sessions[t]; + return e || (e = new S.Session, this.other_sessions[t] = e), e + }, u.prototype.isdwm = function() { + return "" !== this.resolution && "S" !== this.resolution + }, u.prototype.enable_dwm_aligning = function(t, e) { + this.dwm_aligner = u.newBarBuilder(this.period, t, e) + }, u.prototype.bartime = function(t, e) { + var i, o, n, r, s = this.time; + return t && (i = t, e && (i += e), o = this.bb_cache[i], o || (n = this + .get_session(e), o = u.newBarBuilder(t, n), this.bb_cache[i] = o), + s = o.alignTime(s)), !this.isdwm() || isNaN(s) ? s : (r = b.utc_to_cal( + this.timezone, s), this.session.spec.correctTradingDay(r, this + .timezone), b.cal_to_utc(this.timezone, r)) + }, u.prototype.lastbar = function(t) { + var e, i; + isNaN(t.time) || (e = t.time, this.dwm_aligner && (this.dwm_aligner.moveTo(e), + e = this.dwm_aligner.startOfBar(0)), i = this.time !== e, i && this + .index >= 0 && !this.isBarClosed && (this.isNewBar = !1, this + .isBarClosed = !0, this.script.calc(this)), this.time = e, this + .open = t.open, this.high = t.high, this.low = t.low, this.close = t + .close, this.volume = t.volume, this.updatetime = t.updatetime, this + .isNewBar = i, this.isBarClosed = t.isBarClosed, this.isLastBar = t + .isLastBar, this.isNewBar && this.index++, this.script.calc(this)) + }, d.prototype.calc = function(t) { + var e, i, o = this.ctx, + n = this.body; + o.prepare(t), e = n.main(o, this.inputCallback), i = this, this.out && e && (! + isNaN(o.symbol.time) || e.nonseries) && (e.nonseries ? ("projection" === + e.type && (e.projectionTime = o.symbol.time), this.nonseriesOut(o + .symbol, e)) : e.bars ? e.bars.forEach(function(t) { + i.out(o.symbol, t) + }) : this.out(o.symbol, e)) + }, d.prototype.init = function() { + var t = this.ctx, + e = this.body; + e.init && e.init(t, this.inputCallback), e.main(t, this.inputCallback) + }, d.prototype.add_sym = function(t, e, i, o, n) { + var r = this.runner.add_sym(t, e, i, this, o, n); + return this.symbols.push(r), r.isdwm() && this.symbols.length > 1 && r + .enable_dwm_aligning(this.symbols[0].session, r.session), r + }, d.prototype.stop = function() { + this.symbols = null, this.ctx.stop(), this.ctx = null + }, d.prototype.get_sym = function(t) { + return this.symbols[t] + }, p.prototype.add_sym = function(t, e, i, o, n, r) { + var s = new u(t, e, i, o, n, r); + return this.symbols.push(s), s + }, p.prototype.get_sym = function(t) { + return this.symbols[t] + }, p.prototype.out = function(t, e) { + if (this.nonseriesUpdate) { + var i = $.extend({}, this.nonseriesUpdate); + e.splice(0, 0, t.time), i.lastBar = e, this.host.nonseriesOut(t, i) + } else this.host.out(t, e) + }, p.prototype.start = function() { + function t(t, o) { + var n = p.feed.subscribe(t.tickerid, t.period, t.periodBase, t + .periodForInitialRange, + function(i) { + "series" == (i.nonseries ? "nonseries" : "series") ? e.update(o, + i): i.lastBar ? (e.nonseriesUpdate = i, i.lastBar + .isLastBar = !0, e.symbols[0].lastbar(i.lastBar), e + .nonseriesUpdate = null) : r.nonseriesOut(t, i) + }, r.onErrorCallback, r.symbolInfo, r.sessionId, r.rangeExtension); + i.push(n) + } + var e, i, o, n, r = this.host; + for (this._script = new d(r.tickerid, r.period, r.periodBase || r.period, this, + r.body, this.out.bind(this), r.input, r.symbolInfo.minmov / r.symbolInfo + .pricescale, r.nonseriesOut), e = this, i = [], o = this.symbols, n = + 0; n < o.length; n++) t(o[n], n); + this.subscription = i + }, p.prototype.stop = function() { + var t, e = this.subscription; + if (!e && !this._script) return void console.warn( + "Recurring script engine stop happened."); + for (t = 0; t < e.length; t++) p.feed.unsubscribe(e[t]); + this.subscription = null, this._script.stop(), this._script = null, this + .symbols = null + }, p.prototype.update = function(t, e) { + var i, o; + if (!e) return void console.error("Unexpected barset = null"); + i = this.symbols[t], this.isRecalculated ? (o = e.bar(e.count() - 1), o + .isBarClosed = e.isLastBarClosed(), o.isLastBar = !0, i.lastbar(o)) : + this.barsets[t] || (this.barsets[t] = e, i.set_symbolinfo(e.symbolinfo()), + this.recalc()) + }, p.prototype.recalc = function() { + var t, e, i, o, n, r, s, a = this.symbols; + for (t = 0; t < a.length; t++) + if (!this.barsets[t]) return; + for (e = a.length - 1; e >= 0; e--) + for (i = a[e], o = this.barsets[e], n = o.count(), r = 0; r < n; r++) s = o + .bar(r), s.isLastBar = r === n - 1, s.isBarClosed = !s.isLastBar || o + .isLastBarClosed(), i.lastbar(s); + this.isRecalculated = !0, this.barsets[0] && this.barsets[0].endOfData && this + .host.setNoMoreData(), this.host.recalc(this, { + endOfData: this.barsets[0].endOfData, + nextTime: this.barsets[0].nextTime + }) + }, p.feed = { + subscribe: function(t, e, i, o) { + console.error("must be initialized with setupFeed") + }, + unsubscribe: function(t) { + console.error("must be initialized with setupFeed") + } + }, f.prototype.stop = function() { + this.runner.stop() + }, m.prototype.symbolinfo = function() { + return this.info + }, m.prototype.isLastBarClosed = function() { + return this.isBarClosed + }, m.prototype.setLastBarClosed = function(t) { + this.isBarClosed = t + }, m.prototype.bar = function(t) { + return this.bars[t] + }, m.prototype.count = function() { + return this.bars.length + }, m.prototype.add = function(t, e) { + var i = t, + o = this.bars, + n = o.length, + r = i.time, + s = 0 === n ? NaN : o[n - 1].time; + 0 === n || s < r ? o.push(i) : s === r ? o[n - 1] = i : console.error( + "time order violation, prev: " + new Date(s).toUTCString() + ", cur: " + + new Date(r).toUTCString()), this.isBarClosed = !!e + }, g.prototype.init = function(t) { + this.bb = u.newBarBuilder(this.period, t.symbol.session), this.bbEmptyBars = + this.generateEmptyBars ? u.newBarBuilder(this.period, t.symbol.session) : + void 0 + }, g.prototype.extrapolate = function(t, e) { + return isNaN(t) || isNaN(e) ? void 0 : S.extrapolateBarsFrontToTime(this + .bbEmptyBars, t, e) + }, g.prototype.main = function(t) { + var e = t.symbol.time, + i = this.bb.alignTime(e), + o = t.new_var(i), + n = w.na(i), + r = o.get(1), + s = w.na(r) ? 1 : w.neq(i, r), + a = t.new_var(), + l = t.new_var(), + c = t.new_var(), + h = t.new_var(), + u = a.get(1), + d = l.get(1), + p = c.get(1), + _ = h.get(1), + f = n ? NaN : s ? w.open(t) : u, + m = n ? NaN : s ? w.high(t) : w.max(w.high(t), d), + g = n ? NaN : s ? w.low(t) : w.min(w.low(t), p), + v = n ? NaN : w.close(t), + y = n ? NaN : s ? w.volume(t) : w.volume(t) + _, + b = n ? NaN : e, + S = t.symbol.isBarClosed && this.bb.isLastBar(0, e), + T = this.generateEmptyBars && s ? this.extrapolate(r, i) : void 0, + C = t.new_var(w.close(t)), + x = C.get(1), + P = T instanceof Array ? x : NaN; + return a.set(f), l.set(m), c.set(g), h.set(y), [i, f, m, g, v, y, b, S, T, P] + }, v.prototype.main = function(t) { + return [w.open(t), w.high(t), w.low(t), w.close(t), w.volume(t), w.updatetime( + t)] + }, { + Std: w, + Series: c, + Symbol: u, + SymbolInfo: h, + StudyEngine: f, + BarSet: m, + OHLCV: v, + BarBuilder: g, + setupFeed: _ + } + }(); + t.exports = r + }).call(e, i(78)) + }, function(t, e, i) { + "use strict"; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.STATUS_OFFLINE = 0, e.STATUS_RESOLVING = 1, e.STATUS_LOADING = 2, e.STATUS_READY = 3, e + .STATUS_INVALID_SYMBOL = 4, e.STATUS_SNAPSHOT = 5, e.STATUS_EOD = 6, e.STATUS_PULSE = 7, e + .STATUS_DELAYED = 8, e.STATUS_DELAYED_STREAMING = 9, e.STATUS_NO_BARS = 10, e.STATUS_REPLAY = 11, e + .STYLE_BARS = 0, e.STYLE_CANDLES = 1, e.STYLE_LINE = 2, e.STYLE_LINE_TYPE_MARKERS = 0, e + .STYLE_LINE_TYPE_STEP = 1, e.STYLE_LINE_TYPE_SIMPLE = 2, e.STYLE_AREA = 3, e.STYLE_RENKO = 4, e + .STYLE_KAGI = 5, e.STYLE_PNF = 6, e.STYLE_PB = 7, e.STYLE_HEIKEN_ASHI = 8, e.STYLE_HOLLOW_CANDLES = + 9, e.STYLE_BASELINE = 10, e.STYLE_SHORT_NAMES = {}, e.STYLE_SHORT_NAMES[e.STYLE_BARS] = "bar", e + .STYLE_SHORT_NAMES[e.STYLE_CANDLES] = "candle", e.STYLE_SHORT_NAMES[e.STYLE_HOLLOW_CANDLES] = + "hollowCandle", e.STYLE_SHORT_NAMES[e.STYLE_LINE] = "line", e.STYLE_SHORT_NAMES[e.STYLE_AREA] = + "area", e.STYLE_SHORT_NAMES[e.STYLE_RENKO] = "renko", e.STYLE_SHORT_NAMES[e.STYLE_PB] = "pb", e + .STYLE_SHORT_NAMES[e.STYLE_KAGI] = "kagi", e.STYLE_SHORT_NAMES[e.STYLE_PNF] = "pnf", e + .STYLE_SHORT_NAMES[e.STYLE_HEIKEN_ASHI] = "ha", e.STYLE_SHORT_NAMES[e.STYLE_BASELINE] = "baseline", + e.SYMBOL_STRING_DATA = {}, e.SYMBOL_STRING_DATA[e.STYLE_RENKO] = { + type: "BarSetRenko@tv-prostudies" + }, e.SYMBOL_STRING_DATA[e.STYLE_PB] = { + type: "BarSetPriceBreak@tv-prostudies" + }, e.SYMBOL_STRING_DATA[e.STYLE_KAGI] = { + type: "BarSetKagi@tv-prostudies" + }, e.SYMBOL_STRING_DATA[e.STYLE_PNF] = { + type: "BarSetPnF@tv-prostudies" + }, e.SYMBOL_STRING_DATA[e.STYLE_HEIKEN_ASHI] = { + type: "BarSetHeikenAshi@tv-basicstudies" + } + }, function(t, e, i) { + "use strict"; + + function o(t) { + var e, i, o, n, r, s; + if ("Asia/Bahrain" === t && (t = "Asia/Kuwait"), this._name = t, e = u[t], e || (e = { + time: [], + offset: [] + }, this._invalid = !0), e.time.length !== e.offset.length && (e = { + time: [], + offset: [] + }, this._invalid = !0), !e.time_utc) { + for (i = e.time, o = e.offset, n = i.length, r = Array(n), s = 0; s < n; s++) i[s] *= 1e3, o[ + s] *= 1e3, r[s] = i[s] - o[s]; + e.time_utc = r + } + this.tz = e + } + + function n(t, e) { + var i, o, n, s = t.length; + if (0 === s) return -1; + if (isNaN(e)) throw Error("Key is NaN"); + for (i = 0, o = s - 1, n = r((i + o) / 2);;) { + if (t[n] > e) { + if ((o = n - 1) < i) return n + } else if (i = n + 1, o < i) return n < s - 1 ? n + 1 : -1; + n = r((i + o) / 2) + } + } + var r, s, a, l, c, h, u = i(806).tzData; + o.prototype.offset_utc = function(t) { + return o._offset(this.tz.time_utc, this.tz.offset, t) + }, o.prototype.offset_loc = function(t) { + return o._offset(this.tz.time, this.tz.offset, t) + }, o.prototype.is_valid = function() { + return !this._invalid + }, o._offset = function(t, e, i) { + var o = n(t, i); + return -1 === o ? 0 : e[o] + }, r = function(t) { + return 0 | t + }, s = function(t) { + return 60 * t * 1e3 + }, a = function(t) { + return 1e3 * t + }, l = function(t, e) { + return r((r(t / 1e3) - r(e / 1e3)) / 60) + }, c = function(t, e) { + return r(r(t / 1e3) - r(e / 1e3)) + }, h = { + SUNDAY: 1, + MONDAY: 2, + TUESDAY: 3, + WEDNESDAY: 4, + THURSDAY: 5, + FRIDAY: 6, + SATURDAY: 7, + JANUARY: 0, + DECEMBER: 11, + YEAR: 1, + MONTH: 2, + WEEK_OF_YEAR: 3, + DAY_OF_MONTH: 5, + DAY_OF_YEAR: 6, + DAY_OF_WEEK: 7, + HOUR_OF_DAY: 11, + MINUTE: 12, + SECOND: 13, + minutesPerDay: 1440, + secondsPerDay: s(1440), + get_minutes_from_hhmm: function(t) { + return -1 !== t.indexOf(":") && (t = t.split(":").join("")), t % 100 + 60 * r(t / 100) + }, + get_year: function(t) { + return t.getUTCFullYear() + }, + get_month: function(t) { + return t.getUTCMonth() + }, + get_hours: function(t) { + return t.getUTCHours() + }, + get_minutes: function(t) { + return t.getUTCMinutes() + }, + get_seconds: function(t) { + return t.getUTCSeconds() + }, + get_day_of_month: function(t) { + return t.getUTCDate() + }, + get_day_of_week: function(t) { + return t.getUTCDay() + 1 + }, + get_day_of_year: function(t) { + var e = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + return r((t.getTime() - e) / h.secondsPerDay) + 1 + }, + get_week_of_year: function(t) { + var e = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0), + i = h.clone(t); + return h.set_hms(i, 0, 0, 0, 0), i.setUTCDate(i.getUTCDate() + 4 - (i.getUTCDay() || + 7)), r(((i.getTime() - e) / h.secondsPerDay + 1) / 7) + }, + get_minutes_from_midnight: function(t) { + return 60 * h.get_hours(t) + h.get_minutes(t) + }, + set_hms: function(t, e, i, o, n) { + t.setUTCHours(e), t.setUTCMinutes(i), t.setUTCSeconds(o), t.setUTCMilliseconds(n) + }, + add_days_considering_dst: function(t, e, i) { + var o, n = t.offset_utc(e), + r = this.clone(e); + return this.add_date(r, i), o = t.offset_utc(r), r.setTime(r.getTime() + n - o), r + }, + add_date: function(t, e) { + t.setTime(t.getTime() + e * h.secondsPerDay) + }, + clone: function(t) { + return new Date(t.getTime()) + }, + get_days_per_year: function(t) { + var e = t.getUTCFullYear(); + return this.days_per_year(e) + }, + days_per_year: function(t) { + return t % 4 != 0 || t % 100 == 0 && t % 400 != 0 ? 365 : 366 + }, + get_part: function(t, e) { + switch (e) { + case h.YEAR: + return h.get_year(t); + case h.MONTH: + return h.get_month(t); + case h.DAY_OF_MONTH: + return h.get_day_of_month(t); + case h.WEEK_OF_YEAR: + return h.get_week_of_year(t); + case h.DAY_OF_WEEK: + return h.get_day_of_week(t); + case h.HOUR_OF_DAY: + return h.get_hours(t); + case h.MINUTE: + return h.get_minutes(t); + case h.DAY_OF_YEAR: + return h.get_day_of_year(t); + case h.SECOND: + return h.get_seconds(t); + default: + return t.getTime() + } + }, + time_minutes: s, + time_seconds: a, + time_minutes_diff: l, + time_seconds_diff: c, + utc_to_cal: function(t, e) { + var i = t.offset_utc(e); + return new Date(e + i) + }, + get_cal: function(t, e, i, o) { + var n = new Date(Date.UTC(e, i, o)), + r = t.offset_utc(+n); + return new Date(n.valueOf() - r) + }, + get_cal_utc: function(t, e, i) { + return new Date(Date.UTC(t, e, i)) + }, + cal_to_utc: function(t, e) { + var i = e.getTime(); + return i - t.offset_loc(i) + }, + get_timezone: function(t) { + return new o(t) + }, + shift_day: function(t, e) { + var i = t - 1; + return i += e, i > 6 ? i %= 7 : i < 0 && (i = (7 + i % 7) % 7), i + 1 + } + }, t.exports = h + }, , function(t, e, i) { + "use strict"; + (function(t) { + function o(e) { + e || (e = {}), this.checkable = e.checkable || !1, this.checked = e.checked || null, this + .enabled = void 0 === e.enabled || e.enabled, this.visible = e.visible || !0, this + .active = !0, this.font = e.font || "Arial", this.icon = e.icon || null, this.iconText = + e.iconText || null, this.iconVisibleInMenu = e.iconVisibleMenu || !0, this + .deleteButton = e.deleteButton || null, this.shortcut = null, this.setShortCut(e + .shortcut, e.doNotBindShortcut), this.statusTip = e.statusTip || null, this.text = e + .text || null, this.toolTip = e.toolTip || null, this.htmlclass = e.htmlclass || null, + this.statName = e.statName || null, this._callbackContext = e.callbackContext || this, + this._callbacks = new t, this.subActions = e.subActions || [] + } + + function n() { + o.call(this), this.font = null, this.subActions = null, this.htmlclass = "action-separator" + } + + function r(t) { + o.call(this), this.deferred = t + } + var s = i(147); + o.prototype.callbacks = function() { + return this._callbacks + }, o.prototype.callbackContext = function() { + return this._callbackContext + }, o.prototype.setCallbackContext = function(t) { + this._callbackContext = t + }, o.prototype.hasSubActions = function() { + return this.subActions && this.subActions.length + }, o.prototype.setChecked = function(t) { + this.checked = t + }, o.prototype._toggleChecked = function() { + this.checked = !this.checked + }, o.prototype.setVisible = function(t) { + this.visible = t + }, o.prototype.setEnabled = function(t) { + this.enabled = t + }, o.prototype.disable = function() { + this.setEnabled(!1) + }, o.prototype.enable = function() { + this.setEnabled(!0) + }, o.prototype.setActive = function(t) { + this.active !== t && (this.active = t, this.shortcut && !this.doNotBindShortcut && (t ? + this._bindShortCut() : this._unbindShortCut())) + }, o.prototype.setShortCut = function(t, e) { + t && (this.shortcut = t, !0 !== e && this._bindShortCut()) + }, o.prototype._bindShortCut = function() { + s.bind(this.shortcut, function(t) { + if (t.preventDefault(), this.enabled) return this.executeCallback(), !1 + }.bind(this)) + }, o.prototype._unbindShortCut = function() { + s.unbind(this.shortcut) + }, o.prototype.setIconVisible = function(t) { + this.iconVisibleInMenu = t + }, o.prototype.executeCallback = function(t) { + this._lastEvent = t, this._toggleChecked(), this._callbacks.fire(this) + }, inherit(n, o), inherit(r, o), e.Action = o, e.ActionSeparator = n, e.ActionPlaceholder = + r + }).call(e, i(10)) + }, function(t, e, i) { + "use strict"; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var o = function() { + function t() { + this._renderers = [], this._globalAlpha = 1 + } + return t.prototype.setGlobalAlpha = function(t) { + this._globalAlpha = t + }, t.prototype.append = function(t) { + this._renderers.push(t) + }, t.prototype.insert = function(t, e) { + this._renderers.splice(e, 0, t) + }, t.prototype.draw = function(t) { + for (var e = 0; e < this._renderers.length; e++) t.save(), t.globalAlpha = this + ._globalAlpha, this._renderers[e].draw(t), t.restore() + }, t.prototype.drawBackground = function(t) { + var e, i; + for (t.save(), t.globalAlpha = this._globalAlpha, e = 0; e < this._renderers + .length; e++) i = this._renderers[e], i.drawBackground && i.drawBackground(t); + t.restore() + }, t.prototype.hitTest = function(t) { + var e, i, o = null; + for (e = this._renderers.length - 1; e >= 0; e--) null !== (i = this._renderers[e] + .hitTest(t)) && (null === o || i.result() > o.result()) && (o = i); + return o + }, t + }(); + e.CompositeRenderer = o + }, function(t, e, i) { + "use strict"; + + function o(t, e) { + return t <= e + } + + function n(t, e) { + return t >= e + } + + function r(t, e, i) { + return Math.min(Math.max(t, e), i) + } + + function s(t) { + return t < 0 ? -1 : t > 0 ? 1 : 0 + } + + function a(t) { + if (t < 0) return f.logDebug("MathEx.isBaseDecimal: argument less zero"), !1; + for (var e = t; e > 1; e /= 10) + if (e % 10 != 0) return !1; + return !0 + } + + function l(t, e, i) { + return e - t <= i + } + + function c(t, e, i) { + return Math.abs(t - e) < i + } + + function h(t) { + return t <= 0 ? (f.logDebug("MathEx.log10: argument less or equal zero"), NaN) : Math.log(t) / Math + .log(10) + } + + function u(t, e) { + return t < e ? -1 : t > e ? 1 : 0 + } + + function d(t, e) { + var i, o; + if (void 0 === e && (e = u), t.length < 1) throw Error("array is empty"); + for (i = t[0], o = 0; o < t.length; ++o) e(t[o], i) < 0 && (i = t[o]); + return i + } + + function p(t, e) { + var i, o; + if (void 0 === e && (e = u), t.length < 1) throw Error("array is empty"); + for (i = t[0], o = 0; o < t.length; ++o) e(t[o], i) > 0 && (i = t[o]); + return i + } + var _, f; + Object.defineProperty(e, "__esModule", { + value: !0 + }), _ = i(7), f = _.getLogger("Common.MathEx"), e.lessThan = o, e.greaterThan = n, e.clamp = r, e + .sign = s, e.isBaseDecimal = a, e.greaterOrEqual = l, e.equal = c, e.log10 = h, e.defComparator = u, + e.min = d, e.max = p + }, , function(t, e, i) { + "use strict"; + + function o(t) { + this.items = t.items, this.height = t.height || t.width, this.width = t.width || t.height, this + ._color = t.color, this._borderColor = t.borderColor, this._vertOffset = t.vertOffset || 0, t + .textCache && (this._textCache = t.textCache, this._textColor = t.textColor, this + ._textVertOffset = this._vertOffset > 0 ? this.height : -this.height, this._textImageWidth = + this._textCache.textImageWidth, this._textImageHeight = this._textCache.textImageHeight) + } + var n = i(8).Point, + r = i(11); + o.prototype.draw = function(t) { + this.drawShape(t), this.drawText(t) + }, o.prototype.drawShape = function(t) { + throw Error("Not implemented") + }, o.prototype.drawText = function(t) { + var e, i, o, n, r, s; + if (this._textCache) + for (e = 0, i = this.items.length; e < i; e++) o = this.items[e], n = o.x, r = o.y + this + ._vertOffset + this._textVertOffset, s = o.style && null != o.style.textColor ? o.style + .textColor : this._textColor, this._textCache.paintTo(t, s, n, r, "center", this + ._vertOffset > 0 ? "top" : "bottom") + }, o.prototype.hitTest = function(t, e) { + var i, o, s, a, l, c, h, u, d, p, _, f, m, g = Math.max(this.height, this.width), + v = this._vertOffset, + y = this._textVertOffset; + for (e = e || r.REGULAR, o = 0; o < this.items.length; ++o) + if (s = this.items[o]) { + if (i = new n(s.x, s.y + v), i.subtract(t).length() <= g) return new r(e, {}); + if (this._textCache && (a = this._textImageWidth / 2, l = s.y + v + y, c = v > 0 ? 0 : - + this._textImageHeight, h = v > 0 ? this._textImageHeight : 0, u = t.x, d = t.y, + p = s.x - a, _ = l + c, f = s.x + a, m = l + h, u > p && u < f && d > _ && d < m + )) return new r(e, {}) + } return null + }, e.PaneRendererAbstractShape = TradingView.PaneRendererAbstractShape = o + }, function(t, e, i) { + "use strict"; + for (var o = { + LineToolFibRetracement: i(808).LineToolFibRetracement, + LineToolFibChannel: i(811).LineToolFibChannel, + LineToolFibSpeedResistanceArcs: i(812).LineToolFibSpeedResistanceArcs, + LineToolProjection: i(813).LineToolProjection, + LineToolTrendBasedFibExtension: i(814).LineToolTrendBasedFibExtension, + LineToolElliott: i(104).LineToolElliott, + LineToolFibCircles: i(815).LineToolFibCircles, + LineToolTrading: i(224), + LineStudyMtp: i(105).LineStudyMtp, + LineToolVertLine: i(816).LineToolVertLine, + LineToolBarsPattern: i(818).LineToolBarsPattern, + LineToolTrendBasedFibTime: i(819).LineToolTrendBasedFibTime, + LineToolFibTimeZone: i(820).LineToolFibTimeZone, + LineToolCircleLines: i(821).LineToolCircleLines, + LineToolDateRange: i(822).LineToolDateRange, + LineToolPriceRange: i(823).LineToolPriceRange, + LineToolDateAndPriceRange: i(824).LineToolDateAndPriceRange, + LineToolParallelChannel: i(825).LineToolParallelChannel, + LineToolTrendAngle: i(826).LineToolTrendAngle, + LineToolTrendLine: i(159).LineToolTrendLine, + LineToolArrowMark: i(129).LineToolArrowMark, + LineToolExecution: i(334).LineToolExecution, + LineToolPitchfan: i(827).LineToolPitchfan, + LineToolGannSquare: i(828).LineToolGannSquare, + LineToolFibSpeedResistanceFan: i(829).LineToolFibSpeedResistanceFan, + LineToolGannComplex: i(830).LineToolGannComplex, + LineToolGannFixed: i(831).LineToolGannFixed, + LineToolGannFan: i(832).LineToolGannFan, + LineToolFibWedge: i(333).LineToolFibWedge, + LineToolPitchfork: i(161).LineToolPitchfork, + LineToolDisjointAngle: i(833).LineToolDisjointAngle, + LineToolFlatBottom: i(834).LineToolFlatBottom, + LineToolIcon: i(835).LineToolIcon, + LineToolRotatedRectangle: i(836).LineToolRotatedRectangle, + LineToolFibSpiral: i(837).LineToolFibSpiral, + LineToolHeadAndShoulders: i(838).LineToolHeadAndShoulders, + LineToolTriangle: i(839).LineToolTriangle, + LineToolTrianglePattern: i(840).LineToolTrianglePattern, + LineTool5PointsPattern: i(336).LineTool5PointsPattern, + LineToolThreeDrivers: i(841).LineToolThreeDrivers, + LineToolABCD: i(842).LineToolABCD, + LineToolRiskReward: i(225).LineToolRiskReward, + LineToolPolyline: i(844).LineToolPolyline, + LineToolPrediction: i(845).LineToolPrediction, + LineToolPriceLabel: i(846).LineToolPriceLabel, + LineToolNote: i(337).LineToolNote, + LineToolNoteAbsolute: i(337).LineToolNoteAbsolute, + LineToolBrush: i(847).LineToolBrush, + LineToolArc: i(848).LineToolArc, + LineToolCallout: i(849).LineToolCallout, + LineToolBalloon: i(850).LineToolBalloon, + LineToolText: i(338).LineToolText, + LineToolHorzLine: i(851).LineToolHorzLine, + LineToolHorzRay: i(852).LineToolHorzRay, + LineToolRectangle: i(853).LineToolRectangle, + LineToolEllipse: i(854).LineToolEllipse, + LineToolTimeCycles: i(855).LineToolTimeCycles, + LineToolSineLine: i(856).LineToolSineLine, + LineToolGhostFeed: i(857).LineToolGhostFeed, + LineToolBezierQuadro: i(858).LineToolBezierQuadro, + LineToolBezierCubic: i(859).LineToolBezierCubic, + LineToolArrow: i(860).LineToolArrow, + LineToolRay: i(861).LineToolRay, + LineToolExtended: i(862).LineToolExtended, + LineToolSchiffPitchfork: i(863).LineToolSchiffPitchfork, + LineToolSchiffPitchfork2: i(864).LineToolSchiffPitchfork2, + LineToolInsidePitchfork: i(865).LineToolInsidePitchfork, + LineToolTextAbsolute: i(338).LineToolTextAbsolute, + LineToolArrowMarkLeft: i(129).LineToolArrowMarkLeft, + LineToolArrowMarkRight: i(129).LineToolArrowMarkRight, + LineToolArrowMarkUp: i(129).LineToolArrowMarkUp, + LineToolArrowMarkDown: i(129).LineToolArrowMarkDown, + LineToolFlagMark: i(866).LineToolFlagMark, + LineToolCypherPattern: i(867).LineToolCypherPattern, + LineToolElliottImpulse: i(104).LineToolElliottImpulse, + LineToolElliottTriangle: i(104).LineToolElliottTriangle, + LineToolElliottTripleCombo: i(104).LineToolElliottTripleCombo, + LineToolElliottCorrection: i(104).LineToolElliottCorrection, + LineToolElliottDoubleCombo: i(104).LineToolElliottDoubleCombo, + LineToolRiskRewardLong: i(225).LineToolRiskRewardLong, + LineToolRiskRewardShort: i(225).LineToolRiskRewardShort, + LineToolPosition: i(868).LineToolPosition, + LineToolOrder: i(869).LineToolOrder + }, n = Object.keys(o), r = n.length; r--;) TradingView[n[r]] = o[n[r]]; + t.exports = o + }, function(t, e, i) { + "use strict"; + (function(e) { + var o = i(411).ExchangeSession, + n = function() { + function t(t, e, i, o) { + return "" === t ? new h(60 * e, i) : "S" === t ? new h(e, i) : new u(i, o, e, n(t, + i)) + } + + function n(t, e) { + switch (t) { + case "D": + return new S(e); + case "W": + return new w(e); + case "M": + return new T(e) + } + return console.error("unknown dwm resolution: " + t), null + } + + function r(t, e, i, o, n) { + var r, s, a, l, c, h, u, d = (new x).init("Etc/UTC", t), + p = "" !== e; + return p ? (s = i * E[e], r = E.D) : (s = 60 * i * 1e3, r = 60 * d.spec + .findSessionEntry(0, 0).length() * 1e3), a = r / s, l = p ? 7 : 7 - d.spec + .weekEndsCount(), c = l * a, o < c ? (h = o / a, n - h * E.D) : (u = o / c, n - + u * E.W) + } + + function s(t, e, i, o) { + if ("number" != typeof i || "number" != typeof e || isNaN(i) || isNaN(e)) + throw Error("Cannot extrapolate from " + e + " to " + i); + return l(t, e, function(t, e) { + return e > i || o && t.length > o + }) + } + + function a(t, e, i) { + return l(t, e, function(t, e) { + return t.length >= i + }) + } + + function l(t, e, i) { + var o, n, r, s, a, l = e; + for (t.moveTo(l), o = [], n = 0, r = 0; !i(o, l);) { + if (n > 5) throw console.trace(["0x10", new Date(e), "->", new Date(l)]), Error( + "Internal error 0x10 while extrapolating."); + if ((s = t.indexOfBar(l)) === I) l = t.startOfBar(0); + else if (s === k) l = t.startOfBar(k); + else { + if ((a = t.startOfBar(s)) !== e) { + if (r && r === a) throw console.trace(["0x11", new Date(e), "->", + new Date(a) + ]), Error("Internal error 0x11 while extrapolating."); + r = a, n = 0, o.push(a) + } + l = t.startOfBar(s + 1) + } + t.moveTo(l), n++ + } + return o + } + + function c(t) { + if (isNaN(t)) return NaN; + var e = this.indexOfBar(t); + return e === k && (this.moveTo(t), e = this.indexOfBar(t)), e < 0 ? NaN : this + .startOfBar(e) + } + + function h(t, e) { + this.period = t, this.session = e, this.sessionStart = Number.MIN_VALUE, this + .sessionEnd = Number.MIN_VALUE + } + + function u(t, e, i, o) { + this.period = i, this.sessionTgt = t, this.sessionSrc = e || t, this.builder = o, + this.periodStart = -Number.MAX_VALUE, this.periodEnd = -Number.MAX_VALUE, this + .periodLastBarStart = -Number.MAX_VALUE + } + + function d(t, e, i) { + var o = M.clone(i); + return e.alignToSessionStart(o, t), M.cal_to_utc(t, o) + } + + function p(t, e) { + var i = M.get_day_of_week(e) - t.firstDayOfWeek(); + return i < 0 ? i + 7 : i + } + + function _(t, e) { + var i = e + t.firstDayOfWeek(); + return i > M.SATURDAY ? i - M.SATURDAY : i + } + + function f(t, e) { + var i = M.get_day_of_year(e) - 1, + o = p(t, e) - i % 7; + return 0 === o ? C(i / 7) : (o >= 0 && (o -= 7), C((o + i) / 7)) + } + + function m(t, e, i) { + var o, n = 0; + for (o = e; o < i; ++o) n += t.isWeekEnd(_(t, o)) ? 1 : 0; + return n + } + + function g(t, e) { + var i = new Date(Date.UTC(e, 11, 31, 23, 59)), + o = M.days_per_year(e) - v(t, i); + return t.isWeekEnd(M.get_day_of_week(i)) && o--, o + } + + function v(t, e) { + var i, o, n = M.get_day_of_year(e) - 1, + r = p(t, e), + s = r - n % 7; + return s < 0 && (s += 7), i = 0, n < 7 - s ? i += m(t, s, r) : (o = 0 === s ? 0 : m( + t, s, 7), i += m(t, 0, r) + o), i + f(t, e) * t.weekEndsCount() + } + + function y() {} + + function b(t) { + this.sessionsSpec = t + } + + function S(t) { + this.session = t + } + + function w(t) { + this.session = t + } + + function T(t) { + this.session = t + } + + function C(t) { + return 0 | t + } + + function x() {} + + function P(t, e, i) { + var o, n, r, s, a = t.length; + if (0 === a) return -1; + for (o = 0, n = a - 1, r = C((o + n) / 2);;) { + if (0 === (s = i(t[r], e)) || s > 0) { + if ((n = r - 1) < o) return r + } else if (o = r + 1, n < o) return r < a - 1 ? r + 1 : -1; + r = C((o + n) / 2) + } + } + + function L(t, e) { + var i = M.utc_to_cal(e.timezone, +t), + o = M.get_day_of_week(i), + n = M.get_minutes_from_midnight(i), + r = e.spec.findSessionEntry(o, n); + return r.isOvernight() && n > r.start() + r.length() && o === r.dayOfWeek() - 1 && ( + o++, n -= 1440), o === r.dayOfWeek() && n >= r.start() && n < r.start() + r + .length() + } + var I = -1, + k = -2, + A = "undefined" != typeof window ? window : e, + M = A.PineJsCalendar ? A.PineJsCalendar : i(50), + E = { + S: 1e3, + D: 864e5, + W: 6048e5, + M: 2592e6 + }; + return h.prototype.alignTime = c, h.prototype.alignTimeIfPossible = function(t) { + var e = this.alignTime(t); + return isNaN(e) ? t : e + }, h.prototype.indexOfBar = function(t) { + return t < this.sessionStart ? I : t >= this.sessionEnd ? k : C(M + .time_seconds_diff(t, this.sessionStart) / this.period) + }, h.prototype.startOfBar = function(t) { + if (t === k) return this.sessionEnd; + if (t < 0) throw Error("Negative offset is not supported"); + return this.sessionStart + M.time_seconds(this.period * t) + }, h.prototype.isLastBar = function(t, e) { + return e >= this.sessionStart + M.time_seconds(this.period * (t + 1) - 1) + }, h.prototype.moveTo = function(t) { + var e = this.session.timezone, + i = M.utc_to_cal(e, t), + o = this.session.spec, + n = o.alignToSessionStart(i, this.session.timezone); + this.sessionStart = M.cal_to_utc(e, i), this.sessionEnd = this.sessionStart + M + .time_minutes(n) + }, u.prototype.alignTime = c, u.prototype.alignTimeIfPossible = function(t) { + return this.tradingDayToSessionStart(t) + }, u.prototype.tradingDayToSessionStart = function(t) { + return this.moveTo(t), this.startOfBar(0) + }, u.prototype.indexOfBar = function(t) { + return t < this.periodStart ? I : t >= this.periodEnd ? k : 0 + }, u.prototype.startOfBar = function(t) { + if (t === k || t > 0) return this.periodEnd; + if (t === I) throw Error("PRE_SESSION is not supported"); + return this.periodStart + }, u.prototype.isLastBar = function(t, e) { + return e >= this.periodLastBarStart + }, u.prototype.moveTo = function(t) { + var e, i, o, n, r, s, a, l, c = M.utc_to_cal(this.sessionSrc.timezone, t); + c = this.sessionSrc.spec.correctTradingDay(c, this.sessionSrc.timezone), e = + this.sessionTgt.timezone, i = this.builder.indexOfPeriod(c, e), o = C(i / + this.period) * this.period, n = M.get_year(c), r = this.sessionTgt.spec, + s = this.builder.startOfPeriod(e, o, n), this.periodStart = d(e, r, s), a = + o + this.period, l = this.builder.startOfPeriod(e, a, n), this.periodEnd = + d(e, r, l), M.add_date(l, -1), this.moveToPrevWorkDay(r, l), this + .periodLastBarStart = d(e, r, l), (this.periodLastBarStart < this + .periodStart || this.periodLastBarStart === this.periodEnd) && (this + .periodLastBarStart = this.periodStart) + }, u.prototype.moveToPrevWorkDay = function(t, e) { + for (; t.isWeekEnd(M.get_day_of_week(e));) M.add_date(e, -1) + }, y.prototype.indexOfPeriod = function(t) { + return M.get_day_of_year(t) - 1 + }, y.prototype.startOfPeriod = function(t, e, i) { + var o = M.get_cal(t, i, M.JANUARY, 1), + n = M.add_days_considering_dst(t, o, e); + return M.utc_to_cal(t, +n) + }, b.prototype.uber = new y, b.prototype.indexOfPeriod = function(t) { + return this.uber.indexOfPeriod(t) - v(this.sessionsSpec, t) + }, b.prototype.startOfPeriod = function(t, e, i) { + function o(t, e) { + this.weekEnds = m(t, e, 7), this.calendarDays = 7 - e, + this.businessDays = this.calendarDays - this.weekEnds + } + + function n(t, e) { + var i, o = 0; + for (i = t; i < 7 && (s.sessionsSpec.isWeekEnd(_(s.sessionsSpec, i)) || !(-- + e < 0)); ++i) o++; + return o + } + + function r(t, e, i) { + var o, n, r, a, l, c, h = 0, + u = i % (7 - s.sessionsSpec.weekEndsCount()); + for (o = 0, n = u - (0 === t ? 0 : e.businessDays); o < 7 && n > 0; ++o) r = + s.sessionsSpec.isWeekEnd(_(s.sessionsSpec, o)), h += r ? 1 : 0, n -= r ? + 0 : 1; + return a = e.weekEnds + h, l = C((i - e.businessDays) / (7 - s.sessionsSpec + .weekEndsCount())), c = a + s.sessionsSpec.weekEndsCount() * l, i + + c + } + var s, a, l, c, h; + return e >= g(this.sessionsSpec, i) && (i++, e = 0), s = this, a = new Date(Date + .UTC(i, M.JANUARY, 1)), l = p(this.sessionsSpec, a), c = new o(this + .sessionsSpec, l), h = e < c.businessDays ? n(l, e) : r(l, c, e), this + .uber.startOfPeriod(t, h, i) + }, S.prototype.indexOfPeriod = function(t) { + return this.builder().indexOfPeriod(t) + }, S.prototype.startOfPeriod = function(t, e, i) { + return this.builder().startOfPeriod(t, e, i) + }, S.prototype.builder = function() { + return this._builder || (this._builder = this.session.spec.hasWeekEnds() ? + new b(this.session.spec) : new y), this._builder + }, w.prototype.indexOfPeriod = function(t, e) { + var i = f(this.session.spec, t); + return 0 === i && t < this.startOfPeriod(e, 0, M.get_year(t)) && (i = -1), i + }, w.prototype.startOfPeriod = function(t, e, i) { + var o, n, r = new Date(Date.UTC(i, M.JANUARY, 1)), + s = p(this.session.spec, r), + a = 0 === s ? 7 * e : 7 * (e + 1) - s, + l = M.get_days_per_year(r); + return a > l ? this.startOfPeriod(t, 0, i + C(a / l)) : (o = M.get_cal(t, i, M + .JANUARY, 1), n = M.add_days_considering_dst(t, o, a), M.utc_to_cal( + t, +n)) + }, T.prototype.indexOfPeriod = function(t) { + return M.get_month(t) + }, T.prototype.startOfPeriod = function(t, e, i) { + var o, n, r, s; + return e < 0 ? (o = C((11 - e) / 12), i -= o, e += 12 * o) : e > M.DECEMBER && ( + i++, e = M.JANUARY), n = M.get_cal_utc(i, e, 1), r = p(this.session + .spec, n), r > 4 && (s = 7 - r, M.add_date(n, s)), n + }, x.prototype.init = function(t, e) { + return this.timezone = "string" == typeof t ? M.get_timezone(t) : t, this.spec = + new o(e), this + }, { + PRE_SESSION: I, + POST_SESSION: k, + LASTBAR_SESSION: -3, + newBarBuilder: t, + Session: x, + alignPeriodsBack: r, + extrapolateBarsFrontByCount: a, + extrapolateBarsFrontToTime: s, + lower_bound: P, + isTradingNow: L, + numberOfFullWeeks: f, + numberOfWeekEndsSinceYearStart: v, + BusinessDaysBuilder: b, + alignExchangeTimeToSessionStartAndReturnUTC: d + } + }(); + t.exports = n + }).call(e, i(78)) + }, function(t, e, i) { + "use strict"; + + function o(t) { + var e = t.className, + i = t.icon, + o = void 0 === i ? "" : i, + r = t.onClick, + s = t.title; + return n.createElement("span", { + title: s, + className: e, + dangerouslySetInnerHTML: { + __html: o + }, + onClick: r + }) + } + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var n = i(2); + e.Icon = o + }, function(t, e, i) { + "use strict"; + + function o(t, e) { + var i = e.edge; + return i.A * t.x + i.B * t.y + i.C > 0 === e.isPositive + } + + function n(t, e, i, o) { + var n = e.add(i).scaled(.5), + r = n.add(o).scaled(.5), + s = l.intersectLineSegments(e, i, r, t); + return null === s && (null === (s = l.intersectLineSegments(i, o, r, t)) && null === (s = l + .intersectLineSegments(o, e, r, t))) + } + + function r(t, e, i) { + return t.x >= e.x && t.x <= i.x && t.y >= e.y && t.y <= i.y + } + + function s(t, e) { + var i, o, n, r = e.length - 1, + s = !1, + a = t.x, + l = t.y; + for (i = 0; i < e.length; i++) o = e[i], n = e[r], (o.y < l && n.y >= l || n.y < l && o.y >= l) && o + .x + (l - o.y) / (n.y - o.y) * (n.x - o.x) < a && (s = !s), r = i; + return s + } + + function a(t, e, i) { + return (t.x - e.x) * (t.x - e.x) + (t.y - e.y) * (t.y - e.y) <= i * i + } + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var l = i(132); + e.pointInHalfplane = o, e.pointInTriangle = n, e.pointInRectangle = r, e.pointInPolygon = s, e + .pointInCircle = a + }, function(t, e, i) { + "use strict"; + + function o() { + return s.replace(/[xy]/g, function(t) { + var e = 16 * Math.random() | 0; + return ("x" === t ? e : 3 & e | 8).toString(16) + }) + } + + function n() { + return r(12) + } + + function r(t) { + var e, i, o = ""; + for (e = 0; e < t; ++e) i = Math.round(Math.random() * (a.length - 1)), o += a[i]; + return o + } + var s, a; + Object.defineProperty(e, "__esModule", { + value: !0 + }), s = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx", a = + "0123456789abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", e.guid = o, e.randomHash = n, e + .randomHashN = r + }, , , function(t, e, i) { + "use strict"; + (function(e) { + function i() { + return /on-features-page=1/i.test(window.location.search) + } + var o = window.TradingView = window.TradingView || {}; + o.className = function(t) { + for (var e in this) + if (o[e] === t) return e; + return null + }, o.isOnFeaturePage = i(), o.wrapUrl = function(t) { + return e.enabled("charting_library_base") && (t = t.replace("/static/", "")), t + }, o.isMobile = function() { + var t = /Android/i.test(navigator.userAgent), + e = /BlackBerry/i.test(navigator.userAgent), + i = /iPhone|iPad|iPod/i.test(navigator.userAgent), + o = /Opera Mini/i.test(navigator.userAgent), + n = t || e || i || o; + return { + Android: function() { + return t + }, + BlackBerry: function() { + return e + }, + iOS: function() { + return i + }, + Opera: function() { + return o + }, + any: function() { + return n + } + } + }(), o.supportTouch = function() { + return Modernizr.touch || o.isMobile.any() + }, o.onWidget = function() { + var t, e, i = ["^widgetembed/?$", "^cmewidgetembed/?$", + "^([0-9a-zA-Z-]+)/widgetembed/?$", "^([0-9a-zA-Z-]+)/widgetstatic/?$", + "^([0-9a-zA-Z-]+)?/?miniwidgetembed/?$", + "^([0-9a-zA-Z-]+)?/?mediumwidgetembed/?$", + "^embed(-static)?/([0-9a-zA-Z]{8})/?$", "^widgetpopup/?$", "^extension/?$", + "^chatwidgetembed/?$", "^ideaswidgetembed/?$", "^ideas-widget/?$", + "^view-idea-widget/([0-9a-zA-Z]{8})/?$", "^user-info-widget/?$", + "^user-info-widget-get/(.+?)?/?$", "^embed-quotes-provider/?$", + "^idea-popup/?$", "^hotlistswidgetembed/?$", "^marketoverviewwidgetembed/?$", + "^([0-9a-zA-Z-]+)/marketoverviewwidgetembed/?$", "^eventswidgetembed/?$", + "^tickerswidgetembed/?$", "^forexcrossrateswidgetembed/?$", + "^forexheatmapwidgetembed/?$", "^marketquoteswidgetembed/?$", + "^screenerwidget/?$", "^cryptomktscreenerwidget/?$", + "^([0-9a-zA-Z-]+)/cryptomktscreenerwidget/?$", + "^([0-9a-zA-Z-]+)/marketquoteswidgetembed/?$" + ], + o = window.location.pathname.replace(/^\//, ""); + for (e = i.length - 1; e >= 0; e--) + if (t = RegExp(i[e]), t.test(o)) return !0; + return !1 + }, o.onOrder = function() { + return "/order/" === window.location.pathname + }, t.exports.CheckMobile = o.isMobile, t.exports.isOnFeaturePage = i, t.exports.onWidget = o + .onWidget, t.exports.supportTouch = o.supportTouch + }).call(e, i(5)) + }, function(t, e, i) { + "use strict"; + Object.defineProperty(e, "__esModule", { + value: !0 + }); + var o = i(584); + e.createDialog = o.createDialog + }, function(t, e, i) { + "use strict"; + Object.defineProperty(e, "__esModule", { + value: !0 + }), i(13), i(12), e.lineToolsInfo = { + LineTool5PointsPattern: { + icon: i(622), + localizedName: $.t("XABCD Pattern") + }, + LineToolABCD: { + icon: i(623), + localizedName: $.t("ABCD Pattern") + }, + LineToolArc: { + icon: i(624), + localizedName: $.t("Arc") + }, + LineToolArrow: { + icon: i(625), + localizedName: $.t("Arrow") + }, + LineToolArrowMarkDown: { + icon: i(626), + localizedName: $.t("Arrow Mark Down") + }, + LineToolArrowMarkLeft: { + icon: i(627), + localizedName: $.t("Arrow Mark Left") + }, + LineToolArrowMarkRight: { + icon: i(628), + localizedName: $.t("Arrow Mark Right") + }, + LineToolArrowMarkUp: { + icon: i(629), + localizedName: $.t("Arrow Mark Up") + }, + LineToolBalloon: { + icon: i(630), + localizedName: $.t("Balloon") + }, + LineToolBarsPattern: { + icon: i(631), + localizedName: $.t("Bars Pattern") + }, + LineToolBezierCubic: { + icon: i(632), + localizedName: $.t("Double Curve") + }, + LineToolBezierQuadro: { + icon: i(633), + localizedName: $.t("Curve") + }, + LineToolBrush: { + icon: i(634), + localizedName: $.t("Brush") + }, + LineToolCallout: { + icon: i(635), + localizedName: $.t("Callout") + }, + LineToolCircleLines: { + icon: i(636), + localizedName: $.t("Cyclic Lines") + }, + LineToolCypherPattern: { + icon: i(637), + localizedName: $.t("Cypher Pattern") + }, + LineToolDateAndPriceRange: { + icon: i(638), + localizedName: $.t("Date and Price Range") + }, + LineToolDateRange: { + icon: i(639), + localizedName: $.t("Date Range") + }, + LineToolDisjointAngle: { + icon: i(640), + localizedName: $.t("Disjoint Angle") + }, + LineToolElliottCorrection: { + icon: i(641), + localizedName: $.t("Elliott Correction Wave (ABC)") + }, + LineToolElliottDoubleCombo: { + icon: i(642), + localizedName: $.t("Elliott Double Combo Wave (WXY)") + }, + LineToolElliottImpulse: { + icon: i(643), + localizedName: $.t("Elliott Impulse Wave (12345)") + }, + LineToolElliottTriangle: { + icon: i(644), + localizedName: $.t("Elliott Triangle Wave (ABCDE)") + }, + LineToolElliottTripleCombo: { + icon: i(645), + localizedName: $.t("Elliott Triple Combo Wave (WXYXZ)") + }, + LineToolEllipse: { + icon: i(646), + localizedName: $.t("Ellipse") + }, + LineToolExtended: { + icon: i(647), + localizedName: $.t("Extended") + }, + LineToolFibChannel: { + icon: i(648), + localizedName: $.t("Fib Channel") + }, + LineToolFibCircles: { + icon: i(649), + localizedName: $.t("Fib Circles") + }, + LineToolFibRetracement: { + icon: i(650), + localizedName: $.t("Fib Retracement") + }, + LineToolFibSpeedResistanceArcs: { + icon: i(651), + localizedName: $.t("Fib Speed Resistance Arcs") + }, + LineToolFibSpeedResistanceFan: { + icon: i(652), + localizedName: $.t("Fib Speed Resistance Fan") + }, + LineToolFibSpiral: { + icon: i(653), + localizedName: $.t("Fib Spiral") + }, + LineToolFibTimeZone: { + icon: i(654), + localizedName: $.t("Fib Time Zone") + }, + LineToolFibWedge: { + icon: i(655), + localizedName: $.t("Fib Wedge") + }, + LineToolFlagMark: { + icon: i(656), + localizedName: $.t("Flag Mark") + }, + LineToolFlatBottom: { + icon: i(657), + localizedName: $.t("Flat Top/Bottom") + }, + LineToolGannComplex: { + icon: i(305), + localizedName: $.t("Gann Square") + }, + LineToolGannFixed: { + icon: i(305), + localizedName: $.t("Gann Square Fixed") + }, + LineToolGannFan: { + icon: i(658), + localizedName: $.t("Gann Fan") + }, + LineToolGannSquare: { + icon: i(659), + localizedName: $.t("Gann Box") + }, + LineToolGhostFeed: { + icon: i(660), + localizedName: $.t("Ghost Feed") + }, + LineToolHeadAndShoulders: { + icon: i(661), + localizedName: $.t("Head and Shoulders") + }, + LineToolHorzLine: { + icon: i(662), + localizedName: $.t("Horizontal Line") + }, + LineToolHorzRay: { + icon: i(663), + localizedName: $.t("Horizontal Ray") + }, + LineToolIcon: { + icon: "icon", + localizedName: $.t("Font Icons") + }, + LineToolInsidePitchfork: { + icon: i(664), + localizedName: $.t("Inside Pitchfork") + }, + LineToolNote: { + icon: i(665), + localizedName: $.t("Note") + }, + LineToolNoteAbsolute: { + icon: i(666), + localizedName: $.t("Anchored Note") + }, + LineToolParallelChannel: { + icon: i(667), + localizedName: $.t("Parallel Channel") + }, + LineToolPitchfan: { + icon: i(668), + localizedName: $.t("Pitchfan") + }, + LineToolPitchfork: { + icon: i(669), + localizedName: $.t("Pitchfork") + }, + LineToolPolyline: { + icon: i(670), + localizedName: $.t("Polyline") + }, + LineToolPrediction: { + icon: i(671), + localizedName: $.t("Forecast") + }, + LineToolPriceLabel: { + icon: i(672), + localizedName: $.t("Price Label") + }, + LineToolPriceRange: { + icon: i(673), + localizedName: $.t("Price Range") + }, + LineToolProjection: { + icon: i(674), + localizedName: $.t("Projection") + }, + LineToolRay: { + icon: i(675), + localizedName: $.t("Ray") + }, + LineToolRectangle: { + icon: i(676), + localizedName: $.t("Rectangle") + }, + LineToolRegressionTrend: { + icon: i(677), + localizedName: $.t("Regression Trend") + }, + LineToolRiskRewardLong: { + icon: i(678), + localizedName: $.t("Long Position") + }, + LineToolRiskRewardShort: { + icon: i(679), + localizedName: $.t("Short Position") + }, + LineToolRotatedRectangle: { + icon: i(680), + localizedName: $.t("Rotated Rectangle") + }, + LineToolSchiffPitchfork: { + icon: i(681), + localizedName: $.t("Modified Schiff Pitchfork") + }, + LineToolSchiffPitchfork2: { + icon: i(682), + localizedName: $.t("Schiff Pitchfork") + }, + LineToolSineLine: { + icon: i(683), + localizedName: $.t("Sine Line") + }, + LineToolText: { + icon: i(684), + localizedName: $.t("Text") + }, + LineToolTextAbsolute: { + icon: i(685), + localizedName: $.t("Anchored Text") + }, + LineToolThreeDrivers: { + icon: i(686), + localizedName: $.t("Three Drives Pattern") + }, + LineToolTimeCycles: { + icon: i(687), + localizedName: $.t("Time Cycles") + }, + LineToolTrendAngle: { + icon: i(688), + localizedName: $.t("Trend Angle") + }, + LineToolTrendBasedFibExtension: { + icon: i(689), + localizedName: $.t("Trend-Based Fib Extension") + }, + LineToolTrendBasedFibTime: { + icon: i(690), + localizedName: $.t("Trend-Based Fib Time") + }, + LineToolTrendLine: { + icon: i(691), + localizedName: $.t("Trend Line") + }, + LineToolTriangle: { + icon: i(692), + localizedName: $.t("Triangle") + }, + LineToolTrianglePattern: { + icon: i(693), + localizedName: $.t("Triangle Pattern") + }, + LineToolVertLine: { + icon: i(694), + localizedName: $.t("Vertical Line") + }, + SyncDrawing: { + icon: i(695), + iconActive: i(696), + localizedName: $.t("Sync drawings to all charts") + }, + arrow: { + icon: i(697), + localizedName: $.t("Arrow") + }, + cursor: { + icon: i(698), + localizedName: $.t("Cross") + }, + dot: { + icon: i(699), + localizedName: $.t("Dot") + }, + drawginmode: { + icon: i(700), + iconActive: i(701), + localizedName: $.t("Stay in Drawing Mode") + }, + eraser: { + icon: i(702), + localizedName: $.t("Eraser") + }, + group: { + icon: i(703), + localizedName: $.t("Show Hidden Tools") + }, + hideAllDrawings: { + icon: i(302), + iconActive: i(704), + localizedName: $.t("Hide All Drawing Tools") + }, + lockAllDrawings: { + icon: i(705), + iconActive: i(706), + localizedName: $.t("Lock All Drawing Tools") + }, + magnet: { + icon: i(707), + localizedName: $.t("Magnet Mode pulls the points of drawings to symbol values") + }, + measure: { + icon: i(708), + localizedName: $.t("Measure (Shift + Click on the chart)") + }, + removeAllDrawingTools: { + icon: i(709), + localizedName: $.t("Remove All Drawing Tools") + }, + showObjectsTree: { + icon: i(710), + localizedName: $.t("Show Objects Tree") + }, + zoom: { + icon: i(711), + localizedName: $.t("Zoom In") + }, + "zoom-out": { + icon: i(712), + localizedName: $.t("Zoom Out") + } + } + }, function(t, e, i) { + "use strict"; + var o, n, r; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(32), n = i(788), r = function() { + function t() { + this._rendererData = { + text: "", + coordinate: 0, + fixedCoordinate: 0, + color: "#FFF", + background: "#000", + visible: !1 + }, this._renderer = new n.PriceAxisViewRenderer(this._rendererData), this + ._invalidated = !0 + } + return t.prototype.text = function() { + return this._rendererData.text + }, t.prototype.background = function() { + return this._rendererData.background + }, t.prototype.color = function() { + return this.generateTextColor(this.background()) + }, t.prototype.generateTextColor = function(t) { + return "black" === o.rgbToBlackWhiteString(o.parseRgb(t), 160) ? "white" : "black" + }, t.prototype.coordinate = function() { + return this._updateRendererDataIfNeeded(), this._rendererData.coordinate + }, t.prototype.floatCoordinate = function() { + return this._updateRendererDataIfNeeded(), this._rendererData.floatCoordinate || this + ._rendererData.coordinate + }, t.prototype.update = function() { + this._invalidated = !0 + }, t.prototype.height = function(t, e) { + return void 0 === e && (e = !1), this._renderer.height(t, e) + }, t.prototype.getFixedCoordinate = function() { + return this._rendererData.fixedCoordinate || 0 + }, t.prototype.setFixedCoordinate = function(t) { + this._rendererData.fixedCoordinate = t + }, t.prototype.isVisible = function() { + return this._rendererData.visible + }, t.prototype.renderer = function() { + return this._updateRendererDataIfNeeded(), this._renderer.setData(this._rendererData), + this._renderer + }, t.prototype._updateRendererDataIfNeeded = function() { + this._invalidated && (this._updateRendererData(this._rendererData), this + ._invalidated = !1) + }, t + }(), e.PriceAxisView = r + }, , , function(t, e, i) { + "use strict"; + + function o(t) { + return s.createElement(t.href ? "a" : "div", t) + } + + function n(t) { + t.stopPropagation() + } + var r, s, a, l, c, h; + Object.defineProperty(e, "__esModule", { + value: !0 + }), r = i(0), s = i(2), a = i(14), l = i(85), c = i(731), h = function(t) { + function e() { + var e = null !== t && t.apply(this, arguments) || this; + return e._handleClick = function(t) { + var i = e.props, + o = i.dontClosePopup, + n = i.isDisabled, + r = i.onClick, + s = i.onClickArg; + n || (r && r(s, t), o || l.globalClosePopupMenu()) + }, e + } + return r.__extends(e, t), e.prototype.render = function() { + var t, e, i = this.props, + r = i.className, + l = i.forceShowHint, + h = i.hint, + u = i.icon, + d = i.isActive, + p = i.isDisabled, + _ = i.isHovered, + f = i.appearAsDisabled, + m = i.label, + g = i.link, + v = i.showToolboxOnHover, + y = i.target, + b = i.toolbox, + S = i.theme, + w = void 0 === S ? c : S; + return s.createElement(o, { + className: a(r, w.item, u && w.withIcon, (t = {}, t[w.isActive] = d, t[w + .isDisabled] = p || f, t[w.hovered] = _, t)), + href: g, + target: y, + onClick: this._handleClick + }, void 0 !== u && s.createElement("div", { + className: w.icon, + dangerouslySetInnerHTML: { + __html: u + } + }), s.createElement("div", { + className: w.labelRow + }, s.createElement("div", { + className: w.label + }, m)), (void 0 !== h || l) && s.createElement("div", { + className: w.hint + }, h), void 0 !== b && s.createElement("div", { + onClick: n, + className: a(w.toolbox, (e = {}, e[w.showOnHover] = v, e)) + }, b)) + }, e + }(s.PureComponent), e.PopupMenuItem = h + }, function(t, e, i) { + "use strict"; + (function(e) { + function o() { + if ("undefined" == typeof tradingService) return null; + var t = tradingService(); + return t && t.connectStatus() === CONNECTSTATUSES.CONNECTED ? t.activeBroker() : null + } + + function n() { + var t = o(); + if (t && t.metainfo().configFlags.supportSymbolSearch) return t.metainfo().symbolSearchId || + t.metainfo().id.toLowerCase() + } + var r = i(122).isIntervalAvailable, + s = i(76), + a = i(764), + l = i(121), + c = i(172).unifiedSpinner, + h = i(144), + u = i(200).regExpEscape, + d = i(765), + p = i(148).isFeatureEnabled, + _ = i(123), + f = function() { + function t(i) { + var o, n, r, s; + if (!(this instanceof t)) throw new TypeError("SymbolSearch is a constructor"); + if (i = i || {}, o = !i.dontUseInputParser && e.enabled( + "symbol_search_parser_mixin") && t.canShowSpreadActions(), this + ._inputParserMixin = o ? new SymbolSearchInputParserMixin(this) : void 0, this + ._inputElement = $(i.input).get(0), !this._inputElement) throw new TypeError( + "options.input must be a DOM element, jQuery object or selector"); + if (this.$list = $(i.list).eq(0), 0 === this.$list.size() && delete this.$list, + void 0 !== i.callback) { + if ("function" != typeof i.callback) throw new TypeError( + "options.callback must be function"); + this._callback = i.callback + } + if (void 0 !== i.onValueChanged) { + if ("function" != typeof i.onValueChanged) throw new TypeError( + "options.onValueChanged must be function"); + this._onValueChanged = i.onValueChanged + } + if (void 0 !== i.onEmptyApply) { + if ("function" != typeof i.onEmptyApply) throw new TypeError( + "options.onEmptyApply must be function"); + this._onEmptyApply = i.onEmptyApply + } + if (i.ignoreInterval && (this._ignoreInterval = !0), t.resetStoredInterval(), i + .hidePro && (this._hidePro = !0), i.allowMultipleSymbols && (this + ._allowMultipleSymbols = !0), void 0 !== i.onParse) { + if ("function" != typeof i.onParse) throw new TypeError( + "options.onParse must be function"); + this._onParse = i.onParse + } + for (this._state = {}, this._resolveViaSymbolSearchId = null, this.acceptEmpty = !!i + .acceptEmpty, $(this._inputElement).data("symbol-search-instance", this), n = + this._boundListener = this._eventListener.bind(this), r = this + .boundTimeoutListener = function(t) { + setTimeout(function() { + n(t) + }, 0) + }, s = 0; s < w.length; s++) w[s].immediate ? $(this._inputElement).on(w[s] + .name, n) : $(this._inputElement).on(w[s].name, r); + this._boundOnKeyDown = this._onKeyDown.bind(this), this._boundOnKeyPress = this + ._onKeyPress.bind(this), $(this._inputElement).on("keydown", this + ._boundOnKeyDown).on("keypress", this._boundOnKeyPress), this + ._eventListener(), i.autoFocus && t.registerAutoFocus(this) + } + + function o(t, e) { + var i, o = ChartApiInstance.supportedSymbolsTypes(); + return n() && (o = o.filter(function(t) { + return "quandl" !== t.value && "economic" !== t.value + })), i = TVSettings.getValue("symboledit.filter"), !o.some(function(t) { + return t.value === i + }) && o.length > 0 && (i = o[0].value), 0 !== o.length && (o.forEach(function( + o) { + var n = o.value, + r = $('').attr("href", "#" + n).text($.t( + o.name)); + n === i && r.addClass("active"), r.on("click", function(i) { + i.preventDefault(), e.find(".type-filter").removeClass( + "active"), $(this).addClass("active"), t + .typeFilter(n), TVSettings.setValue( + "symboledit.filter", n) + }), r.appendTo(e) + }), t.typeFilter(i), !0) + } + + function f(t, i) { + var o, n, r, s = ChartApiInstance.supportedExchangesList(); + if (s = a.displayedExchangesFilter(s), s = a.sortExchangesListByFlagIfNeeded(s), o = + TVSettings.getValue("symboledit.exchangefilter"), + "bovespa" !== TradingView.widgetCustomer) return !s.some(function(t) { + return t.value === o + }) && s.length > 0 && (o = s[0].value), 0 !== s.length && (n = $( + '
').appendTo(i), + r = $("
' + i(596) + $.t( + "NEW") + + '
', + textNotesWidgetItem: '
{{title}}
{{#symbol}}
' + + i(598) + + '{{symbol}}
{{/symbol}}
{{description}}
', + tvDataTable: '{{#columns}}{{/columns}}{{#bodies}}{{#strokes}}{{#cells}}{{/cells}}{{/strokes}}{{/bodies}}
{{{label}}}
{{#contain}}{{{contain}}}{{/contain}}
', + tvDataTableRow: '{{#columns}}{{#contain}}{{{contain}}}{{/contain}}{{/columns}}', + tvDataTableCell: '{{#contain}}{{{contain}}}{{/contain}}' + } + }, function(t, e, i) { + "use strict"; + + function o(t) { + var e = t.split(":"); + return { + name: e[0], + type: 2 === e.length ? e[1] : null + } + } + + function n(t, e, i, n) { + var r, s, a, l, c, p, _, f, m, g, v, y, b, S, w, T = i.split("."); + if (0 !== T.length && 0 !== T[0].length) { + if (r = o(T[0]), s = r.name, a = r.type, l = null !== a, c = !l || "plot" === a, p = !l || + "band" === a, _ = !l || "area" === a, f = !l || "input" === a, m = c ? d.getPlotIdByTitle(t, + s) : null, g = p ? d.getBandIndexByName(t, s) : null, v = _ ? d.getFilledAreaIdByTitle( + t, s) : null, y = f ? d.getInputByName(t, s) : null, b = e.hasOwnProperty(s), (null !== + m ? 1 : 0) + (null !== g ? 1 : 0) + (null !== v ? 1 : 0) + (null !== y ? 1 : 0) + (b ? + 1 : 0) > 1) return void h.logWarn("Study '" + t.description + + "' has ambiguous identifier '" + s + "'"); + if (S = T[1], null !== m) { + if (1 === T.length) return void h.logWarn("Path of sub-property of '" + s + + "' plot for study '" + t.description + "' must be not empty"); + w = T.slice(1), u.applyPlotProperty(t, e, m, w, n) + } else if (null !== y) u.applyInputValue(e, y, n); + else if (null !== g) { + if (void 0 === S) return void h.logWarn("Property name of '" + s + "' band for study '" + t + .description + "' must be set"); + u.applyBandProperty(e, g, S, n) + } else if (null !== v) { + if (void 0 === S) return void h.logWarn("Property name of '" + s + "' area for study '" + t + .description + "' must be set"); + u.applyFilledAreaProperty(e, v, S, n) + } else b ? u.setRootProperty(e, T, n) : h.logWarn("Study '" + t.description + + "' has no plot or input '" + s + "'") + } + } + + function r(t, e) { + var i, o, r = t.properties(), + s = r.state(); + for (i in e) e.hasOwnProperty(i) && n(t.metaInfo(), s, i, e[i]); + r.merge(s), o = r.precision, void 0 !== o ? o.listeners().fire(o) : r.listeners().fire(r) + } + + function s(t, e, i) { + var o, r, s, a, l; + for (o in t) t.hasOwnProperty(o) && -1 !== (r = o.indexOf(".")) && (s = o.substr(0, r), a = d + .getMetaInfoByDescription(e, s), null !== a ? (l = i(a.id), null !== l ? n(a, l, o.substr( + r + 1), t[o]) : h.logWarn("Cannot apply overrides for study " + s)) : h.logWarn( + "There is no such study " + s)) + } + var a, l, c, h, u, d; + Object.defineProperty(e, "__esModule", { + value: !0 + }), a = i(111), l = i(9), c = i(7), h = c.getLogger("Chart.Model.StudyPropertiesOverrider"), + function(t) { + function e(t) { + return "colorer" === t.type + } + + function i(t, i, o) { + var n, r, s, a; + if (void 0 === t.plots) return null; + for (n = 0, r = t.plots; n < r.length; n++) + if (s = r[n], e(s) && void 0 !== i.palettes && (a = i.palettes[s.palette], s.target === + o && void 0 !== a)) return a; + return null + } + + function o(t, e, i, o, n) { + return void 0 === t.styles ? void h.logWarn("Study does not have styles") : null === e && ! + isNaN(o) && o > 0 ? void h.logWarn("Study plot does not have color #" + o) : ((0 === + o || isNaN(o)) && (l.ensureDefined(t.styles[i]).color = n + "", o = 0), void( + null !== e && (l.ensureDefined(e.colors[o]).color = n + ""))) + } + + function n(t, e, n, r, s) { + var a, l, c, u, p; + if (void 0 === e.styles) return void h.logWarn("Study does not have styles"); + if ("color" === (a = r[0])) return l = i(t, e, n), c = r.length > 1 ? parseInt(r[1]) : NaN, + void o(e, l, n, c, s); + if (void 0 === (u = e.styles[n]) || !u.hasOwnProperty(a)) return void h.logWarn( + "Study plot does not have property '" + a + "'"); + if ("plottype" === a) { + if (void 0 === (p = d[s + ""])) return void h.logWarn( + "Unsupported plot type for plot: " + s); + s = p + } + u[a] = s + } + + function r(t, e, i, o) { + var n, r; + if (void 0 === t.bands) return void h.logWarn("Study does not have bands"); + if (void 0 === (n = t.bands[e]) || !n.hasOwnProperty(i)) return void h.logWarn( + "Study band does not have property '" + i + "'"); + if ("plottype" === i) { + if (void 0 === (r = d[o + ""])) return void h.logWarn( + "Unsupported plot type for band: " + o); + o = r + } + n[i] = o + } + + function s(t, e, i, o) { + if (void 0 === t.filledAreasStyle) return void h.logWarn("Study does not have areas"); + var n = t.filledAreasStyle[e]; + if (void 0 === n || !n.hasOwnProperty(i)) return void h.logWarn( + "Study area does not have property '" + i + "'"); + n[i] = o + } + + function c(t, e, i) { + if (void 0 === t.inputs || !t.inputs.hasOwnProperty(e)) return void h.logWarn( + "Study does not have input '" + e + "'"); + t.inputs[e] = i + } + + function u(t, e, i) { + var o, n, r, s, a; + if (0 !== e.length) { + for (o = t, n = 0, r = e.slice(0, -1); n < r.length && (s = r[n], null != o && t + .hasOwnProperty(s)); n++) o = t[s]; + if (a = e[e.length - 1], null == o || !o.hasOwnProperty(a)) return void h.logWarn( + "Study does not have property " + e.join(".")); + o[a] = i + } + } + var d = { + line: a.PlotType.Line, + histogram: a.PlotType.Histogram, + cross: a.PlotType.Cross, + area: a.PlotType.Area, + columns: a.PlotType.Columns, + circles: a.PlotType.Circles, + line_with_breaks: a.PlotType.LineWithBreaks, + area_with_breaks: a.PlotType.AreaWithBreaks + }; + t.applyPlotProperty = n, t.applyBandProperty = r, t.applyFilledAreaProperty = s, t + .applyInputValue = c, t.setRootProperty = u + }(u || (u = {})), + function(t) { + function e(t, e) { + var i, o, n; + if (void 0 === t.inputs) return null; + for (e = e.toLowerCase(), i = 0, o = t.inputs; i < o.length; i++) + if (n = o[i], n.name.toLowerCase() === e) return n.id; + return null + } + + function i(t, e) { + var i, o, n; + if (void 0 === t.styles) return null; + e = e.toLowerCase(); + for (i in t.styles) + if (o = t.styles[i], n = void 0 !== o && void 0 !== o.title ? o.title : i, n + .toLowerCase() === e) return i; + return null + } + + function o(t, e) { + var i, o, n; + if (void 0 === t.filledAreas) return null; + for (e = e.toLowerCase(), i = 0, o = t.filledAreas; i < o.length; i++) + if (n = o[i], n.title.toLowerCase() === e) return n.id; + return null + } + + function n(t, e) { + if (void 0 === t.bands) return null; + e = e.toLowerCase(); + for (var i = 0; i < t.bands.length; ++i) + if (t.bands[i].name.toLowerCase() === e) return i; + return null + } + + function r(t, e) { + var i, o, n; + for (e = e.toLowerCase(), i = 0, o = t; i < o.length; i++) + if (n = o[i], n.description.toLowerCase() === e || n.shortDescription.toLowerCase() === + e) return n; + return null + } + t.getInputByName = e, t.getPlotIdByTitle = i, t.getFilledAreaIdByTitle = o, t + .getBandIndexByName = n, t.getMetaInfoByDescription = r + }(d || (d = {})), e.applyOverridesToStudy = r, e.applyOverridesToStudyDefaults = s + }, function(t, e, i) { + "use strict"; + + function o(t, e, i) { + var o, n, r, s, a = null, + l = 0; + return i = i || {}, s = function() { + l = !1 === i.leading ? 0 : Date.now(), a = null, r = t.apply(o, n), a || (o = n = null) + }, + function() { + var c, h = Date.now(); + return l || !1 !== i.leading || (l = h), c = e - (h - l), o = this, n = arguments, c <= 0 || + c > e ? (a && (clearTimeout(a), a = null), l = h, r = t.apply(o, n), a || (o = n = + null)) : a || !1 === i.trailing || (a = setTimeout(s, c)), r + } + } + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.default = o, t.exports = e.default + }, function(t, e, i) { + "use strict"; + var o, n, r, s, a, l, c, h, u; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(0), i(43), n = i(2), r = i(14), s = i(59), a = i(85), l = i(151), c = i(722), h = i(392), + u = function(t) { + function e(e) { + var i = t.call(this, e) || this; + return i._toggleDropdown = function(t) { + i.setState({ + isOpened: void 0 !== t ? t : !i.state.isOpened + }) + }, i._handleClose = function() { + i._toggleDropdown(!1) + }, i._getDropdownPosition = function() { + if (!i._control) return { + x: 0, + y: 0 + }; + var t = i._control.getBoundingClientRect(); + return { + x: t.left + t.width + 1, + y: t.top - 6 + } + }, i._handleClickArrow = function() { + i._toggleDropdown() + }, i._handleTouchStart = function() { + i.props.onClickButton(), i._toggleDropdown() + }, i._handlePressStart = function() { + if (Modernizr.touch) i._longPressDelay || i.props.onClickButton(); + else { + if (i._doubleClickDelay) return clearTimeout(i._doubleClickDelay), delete i + ._doubleClickDelay, void i._toggleDropdown(!0); + i._doubleClickDelay = setTimeout(function() { + delete i._doubleClickDelay, i._longPressDelay || i.props + .onClickButton() + }, 175) + } + i._longPressDelay = setTimeout(function() { + delete i._longPressDelay, i._toggleDropdown(!0) + }, 300) + }, i._handlePressEnd = function() { + i._longPressDelay && (clearTimeout(i._longPressDelay), delete i._longPressDelay, i + .state.isOpened ? i._toggleDropdown(!1) : i.state.isOpened || !i.props + .isActive || Modernizr.touch || i._toggleDropdown(!0)) + }, i.state = { + isOpened: !1 + }, i + } + return o.__extends(e, t), e.prototype.render = function() { + var t, e = this, + i = this.props, + o = i.buttonActiveClass, + u = i.buttonClass, + d = i.buttonIcon, + p = i.buttonTitle, + _ = i.children, + f = i.isActive, + m = i.isGrayed, + g = i.onClickWhenGrayed, + v = this.state.isOpened; + return n.createElement("div", { + className: r(c.dropdown, "apply-common-tooltip common-tooltip-vertical", ( + t = {}, t[c.isGrayed] = m, t[c.isActive] = f, t[c.isOpened] = v, + t)), + onClick: m ? g : void 0, + title: p, + "data-tooltip-delay": 1500 + }, n.createElement("div", { + ref: function(t) { + return e._control = t + }, + className: c.control + }, n.createElement("div", { + className: c.buttonWrap, + onMouseDown: m || Modernizr.touch ? void 0 : this._handlePressStart, + onMouseUp: m || Modernizr.touch ? void 0 : this._handlePressEnd, + onClick: !m && Modernizr.touch ? this._handleTouchStart : void 0 + }, n.createElement(l.ToolButton, { + activeClass: o, + className: u, + icon: d, + isActive: f, + isGrayed: m, + isTransparent: !0 + })), !m && !Modernizr.touch && n.createElement("div", { + className: c.arrow, + onClick: this._handleClickArrow + }, n.createElement(s.Icon, { + className: c.arrowIcon, + icon: h + }))), !m && n.createElement(a.PopupMenu, { + doNotCloseOn: this, + isOpened: v, + onClose: this._handleClose, + position: this._getDropdownPosition + }, _)) + }, e + }(n.PureComponent), e.ToolDropdown = u + }, function(t, e) { + t.exports = + '' + }, function(t, e) { + t.exports = + '' + }, function(t, e, i) { + "use strict"; + + function o(t) { + return n.createDialog(Object.assign({}, a, t)) + } + var n, r, s, a; + Object.defineProperty(e, "__esModule", { + value: !0 + }), i(12), n = i(65), r = { + key: 13, + name: "yes", + text: $.t("Yes"), + type: "success" + }, s = { + method: "close", + name: "no", + text: $.t("No"), + type: "default" + }, a = { + actions: [r, s], + actionsWrapTemplate: '
', + content: $.t("Are you sure?"), + contentWrapTemplate: '

', + destroyOnClose: !0, + title: $.t("Confirmation"), + width: 400 + }, e.createConfirmDialog = o + }, function(t, e, i) { + "use strict"; + var o, n, r, s; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(9), n = i(19), + function(t) { + t[t.FromLeft = -1] = "FromLeft", t[t.FromRight = 1] = "FromRight" + }(r = e.TimePointIndexSearchMode || (e.TimePointIndexSearchMode = {})), s = function() { + function t(t) { + this.m_bars = new n.PlotList(t), this.m_nsBars = new n.PlotList(t) + } + return t.prototype.bars = function() { + return this.m_bars + }, t.prototype.nsBars = function() { + return this.m_nsBars + }, t.prototype.size = function() { + return this.m_bars.size() + this.m_nsBars.size() + }, t.prototype.each = function(t) { + this.m_bars.each(t), this.m_nsBars.each(t) + }, t.prototype.clear = function() { + this.m_bars.clear(), this.m_nsBars.clear(), this.lastProjectionPrice = void 0 + }, t.prototype.isEmpty = function() { + return this.m_bars.isEmpty() && this.m_nsBars.isEmpty() + }, t.prototype.first = function() { + return this.m_bars.isEmpty() ? this.m_nsBars.first() : this.m_bars.first() + }, t.prototype.last = function() { + return this.m_nsBars.isEmpty() ? this.m_bars.last() : this.m_nsBars.last() + }, t.prototype.search = function(t, e) { + return this.nsBars().isEmpty() ? this.bars().search(t, e) : this.bars().isEmpty() ? this + .nsBars().search(t, e) : o.ensureNotNull(this.nsBars().firstIndex()) <= t ? this + .nsBars().search(t, e) : this.bars().search(t, e) + }, t.prototype.valueAt = function(t) { + var e = this.search(t); + return null !== e ? e.value : null + }, t.prototype.plotValueToTimePointIndex = function(t, e, i) { + var o, n, s, a; + if (i === r.FromRight) return o = function(i, o) { + var n = o[e]; + return void 0 !== n && null !== n && t >= n + }, null !== (n = this.m_bars.findLast(o)) ? n.index : (s = this.m_nsBars + .findLast(o), + null !== s ? s.index : this.m_bars.firstIndex()); + if (i === r.FromLeft) return a = function(i, o) { + var n = o[e]; + return void 0 !== n && null !== n && t <= n + }, null !== (n = this.m_bars.findFirst(a)) ? n.index : (s = this.m_nsBars + .findFirst(a), null !== s ? s.index : this.m_bars.lastIndex()); + throw Error("plotValueToTimePointIndex: unsupported search mode") + }, t + }(), e.SeriesData = s + }, function(t, e, i) { + "use strict"; + var o, n; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(15), n = function() { + function t(t) { + void 0 === t && (t = 1), this._precision = t + } + return t.prototype.format = function(t) { + var e, i; + return o.isNumber(t) || (t = parseFloat(t)), e = t.toFixed(this._precision), i = Math + .pow(10, -this._precision), Math.max(parseFloat(e), i) + "" + }, t + }(), e.LimitedPrecisionNumericFormatter = n + }, function(t, e) { + t.exports = + '' + }, function(t, e, i) { + "use strict"; + var o, n, r; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(9), n = i(17), i(13), r = function() { + function t(t) { + var e = this; + this._alive = new n, this._body = new n, this._width = new n, this._height = new n, this + ._fullscreen = new n, this._detachable = new n, this._visible = new n, this + ._availWidth = new n, this._availHeight = new n, this._owner = new n, this + ._ownersStack = [], this.owner = this._owner.readonly(), this._bridge = { + alive: this._alive.readonly(), + body: this._body.readonly(), + width: this._width.readonly(), + height: this._height.readonly(), + fullscreen: this._fullscreen.readonly(), + detachable: this._detachable.readonly(), + visible: this._visible.readonly(), + availWidth: this._availWidth.readonly(), + availHeight: this._availHeight.readonly(), + remove: function() { + var t = e._owner.value(); + t && t.remove && t.remove() + }, + negotiateWidth: function(t) { + var i = e._owner.value(); + i && i.negotiateWidth && i.negotiateWidth(t) + }, + negotiateHeight: function(t) { + var i = e._owner.value(); + i && i.negotiateHeight && i.negotiateHeight(t) + }, + requestFullscreen: function() { + var t = e._owner.value(); + t && t.requestFullscreen && t.requestFullscreen() + }, + exitFullscreen: function() { + var t = e._owner.value(); + t && t.exitFullscreen && t.exitFullscreen() + }, + detach: function(t) { + var i = e._owner.value(); + i && i.detach && i.detach(t) + }, + attach: function() { + var t = e._owner.value(); + t && t.attach && t.attach() + } + }, t && this.pushOwner(t) + } + return t.prototype.bridge = function() { + return this._bridge + }, t.prototype.pushOwner = function(t) { + var e, i, o, n; + if (t.alive.value()) { + for (e = 0, i = this._ownersStack; e < i.length; e++) o = i[e], this + ._unsubscribeOwner(o); + n = { + owner: t + }, this._ownersStack.push(n), this._subscribeOwner(n) + } + }, t.prototype._subscribeOwner = function(t) { + var e, i, o = this, + n = t.owner; + t.deathWatcher || (this._alive.setValue(!0), t.deathWatcher = n.alive.spawn(), t + .deathWatcher.subscribe(function(e) { + e || o._deadHandler(t) + })), t.subscriptions || (e = t.subscriptions = [], this._visible.setValue(!1), + i = function(t, i) { + if (t) { + var o = t.spawn(); + e.push(o), o.subscribe(function(t) { + i.setValue(t) + }, { + callWithLast: !0 + }) + } else i.deleteValue() + }, i(n.body, this._body), i(n.width, this._width), i(n.height, this._height), i( + n.fullscreen, this._fullscreen), i(n.detachable, this._detachable), i(n + .availWidth, this._availWidth), + i(n.availHeight, this._availHeight), i(n.visible, this._visible)), this._owner + .setValue(n) + }, t.prototype._unsubscribeOwner = function(t, e) { + var i, o, n; + if (t.subscriptions) { + for (i = 0, o = t.subscriptions; i < o.length; i++) n = o[i], n.unsubscribe(); + t.subscriptions = null + } + e && t.deathWatcher && (t.deathWatcher.unsubscribe(), t.deathWatcher = null) + }, t.prototype._deadHandler = function(t) { + var e, i = this._ownersStack.indexOf(t); + for (o.assert(-1 !== i, "sanitized owner should be in stack"), e = this._ownersStack + .length - 1; e >= i; e--) this._unsubscribeOwner(this._ownersStack[e], !0); + this._ownersStack.length = i, i > 0 ? this._subscribeOwner(this._ownersStack[i - 1]) : ( + this._alive.setValue(!1), this._owner.deleteValue()) + }, t + }(), e.ResizerDetacherState = r + }, function(t, e, i) { + "use strict"; + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.layouts = { + s: { + title: "1 chart", + count: 1, + sizer: function(t, e, i, o) { + return { + width: e.width - o - o, + height: e.height - o - o, + top: o, + left: o + } + } + } + } + }, function(t, e, i) { + "use strict"; + + function o() { + this.backColorers = [] + } + + function n(t) { + o.call(this), this._series = t + } + + function r(t, e) { + o.call(this), this._study = t, this._plotIndex = e + } + var s = i(19).PlotRowSearchMode; + o.prototype.barStyle = function(t, e, i) { + var o, n = {}; + for (o = this.backColorers.length - 1; o >= 0; o--) this.backColorers[o].applyBarStyle(t, e, n, + i); + return this.applyBarStyle(t, e, n, i), n + }, o.prototype.pushBackBarColorer = function(t) { + this.backColorers.push(t) + }, o.prototype.applyBarStyle = function(t, e, i) { + throw Error("This function is supposed to be reimplemented in a subclass") + }, inherit(n, o), n.prototype.applyBarStyle = function(t, e, i, o) { + var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v; + switch (i || (i = {}), i.barColor = null, i.barBorderColor = null, i.barWickColor = null, i + .isBarHollow = null, i.isBarUp = null, i.upColor = null, i.downColor = null, i + .isTwoColorBar = null, n = this._series.properties(), n.style.value()) { + case TradingView.Series.STYLE_LINE: + i.barColor = n.lineStyle.color.value(); + break; + case TradingView.Series.STYLE_AREA: + i.barColor = n.areaStyle.linecolor.value(); + break; + case TradingView.Series.STYLE_BARS: + r = n.barStyle.upColor.value(), s = n.barStyle.downColor.value(), a = r, l = s, c = this + .findBar(t, !1, o), n.barStyle.barColorsOnPrevClose.value() ? (h = this.findPrevBar( + t, !1, o), i.barColor = h[TradingView.CLOSE_PLOT] <= c[TradingView + .CLOSE_PLOT] ? r : s, i.barBorderColor = h[TradingView.CLOSE_PLOT] <= c[ + TradingView.CLOSE_PLOT] ? a : l) : (i.barColor = c[TradingView.OPEN_PLOT] <= c[ + TradingView.CLOSE_PLOT] ? r : s, i.barBorderColor = c[TradingView + .OPEN_PLOT] <= c[TradingView.CLOSE_PLOT] ? a : l); + break; + case TradingView.Series.STYLE_CANDLES: + r = n.candleStyle.upColor.value(), s = n.candleStyle.downColor.value(), a = n + .candleStyle.borderUpColor ? n.candleStyle.borderUpColor.value() : n.candleStyle + .borderColor.value(), l = n.candleStyle.borderDownColor ? n.candleStyle + .borderDownColor.value() : n.candleStyle.borderColor.value(), u = n.candleStyle + .wickUpColor ? n.candleStyle.wickUpColor.value() : n.candleStyle.wickColor.value(), + d = n.candleStyle.wickDownColor ? n.candleStyle.wickDownColor.value() : n + .candleStyle.wickColor.value(), c = this.findBar(t, !1, o), n.candleStyle + .barColorsOnPrevClose.value() ? (h = this.findPrevBar(t, !1, o), + p = h[TradingView.CLOSE_PLOT] <= c[TradingView.CLOSE_PLOT]) : p = c[TradingView + .OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], i.barColor = p ? r : s, i + .barBorderColor = p ? a : l, i.barWickColor = p ? u : d; + break; + case TradingView.Series.STYLE_HOLLOW_CANDLES: + r = n.hollowCandleStyle.upColor.value(), s = n.hollowCandleStyle.downColor.value(), a = + n.hollowCandleStyle.borderUpColor ? n.hollowCandleStyle.borderUpColor.value() : n + .hollowCandleStyle.borderColor.value(), l = n.hollowCandleStyle.borderDownColor ? n + .hollowCandleStyle.borderDownColor.value() : n.hollowCandleStyle.borderColor + .value(), u = n.hollowCandleStyle.wickUpColor ? n.hollowCandleStyle.wickUpColor + .value() : n.hollowCandleStyle.wickColor.value(), d = n.hollowCandleStyle + .wickDownColor ? n.hollowCandleStyle.wickDownColor.value() : n.hollowCandleStyle + .wickColor.value(), c = this.findBar(t, !1, o), h = this.findPrevBar(t, !1, o), h[ + TradingView.CLOSE_PLOT] <= c[TradingView.CLOSE_PLOT] ? (i.barColor = r, i + .barBorderColor = a, i.barWickColor = u) : (i.barColor = s, i.barBorderColor = + l, i.barWickColor = d), c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT] ? + i.isBarHollow = !0 : i.isBarHollow = !1; + break; + case TradingView.Series.STYLE_HEIKEN_ASHI: + r = n.haStyle.upColor.value(), s = n.haStyle.downColor.value(), a = n.haStyle + .borderUpColor.value(), l = n.haStyle.borderDownColor.value(), u = n.haStyle + .wickUpColor.value(), d = n.haStyle.wickDownColor.value(), c = this.findBar(t, e, + o), n.haStyle.barColorsOnPrevClose.value() ? (h = this.findPrevBar(t, e, o), p = + h[ + TradingView.CLOSE_PLOT] <= c[TradingView.CLOSE_PLOT]) : p = c[TradingView + .OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], i.barColor = p ? r : s, i + .barBorderColor = p ? a : l, i.barWickColor = p ? u : d; + break; + case TradingView.Series.STYLE_RENKO: + c = this.findBar(t, e, o), p = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], + r = e ? n.renkoStyle.upColorProjection.value() : n.renkoStyle.upColor.value(), s = + e ? n.renkoStyle.downColorProjection.value() : n.renkoStyle.downColor.value(), a = + e ? n.renkoStyle.borderUpColorProjection.value() : n.renkoStyle.borderUpColor + .value(), l = e ? n.renkoStyle.borderDownColorProjection.value() : n.renkoStyle + .borderDownColor.value(), u = n.renkoStyle.wickUpColor.value(), d = n.renkoStyle + .wickDownColor.value(), i.barColor = p ? r : s, i.barBorderColor = p ? a : l, i + .barWickColor = p ? u : d, i.isBarUp = p; + break; + case TradingView.Series.STYLE_PB: + c = this.findBar(t, e, o), p = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], + r = e ? n.pbStyle.upColorProjection.value() : n.pbStyle.upColor.value(), s = e ? n + .pbStyle.downColorProjection.value() : n.pbStyle.downColor.value(), a = e ? n + .pbStyle.borderUpColorProjection.value() : n.pbStyle.borderUpColor.value(), l = e ? + n.pbStyle.borderDownColorProjection.value() : n.pbStyle.borderDownColor.value(), i + .barColor = p ? r : s, i.barBorderColor = p ? a : l, i.isBarUp = p; + break; + case TradingView.Series.STYLE_KAGI: + i.upColor = e ? n.kagiStyle.upColorProjection.value() : n.kagiStyle.upColor.value(), i + .downColor = e ? n.kagiStyle.downColorProjection.value() : n.kagiStyle.downColor + .value(), _ = null, c = this.findBar(t, e, o), c[TradingView.LOW_PLOT] < c[ + TradingView.ADT_PLOT] && c[TradingView.ADT_PLOT] < c[TradingView.HIGH_PLOT] ? ( + _ = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], + i.isTwoColorBar = !0) : (_ = c[TradingView.OPEN_PLOT] <= c[TradingView + .CLOSE_PLOT] ? c[TradingView.OPEN_PLOT] === c[TradingView.ADT_PLOT] : c[ + TradingView.OPEN_PLOT] !== c[TradingView.ADT_PLOT], i.isTwoColorBar = !1), i + .barColor = _ ? i.upColor : i.downColor, i.isBarUp = c[TradingView.OPEN_PLOT] <= c[ + TradingView.CLOSE_PLOT]; + break; + case TradingView.Series.STYLE_PNF: + c = this.findBar(t, e, o), p = c[TradingView.ADT_PLOT] > 0, r = e ? n.pnfStyle + .upColorProjection.value() : n.pnfStyle.upColor.value(), s = e ? n.pnfStyle + .downColorProjection.value() : n.pnfStyle.downColor.value(), i.isBarUp = p, i + .barColor = p ? r : s; + break; + case TradingView.Series.STYLE_BASELINE: + c = this.findBar(t, e, o), f = n.baselineStyle, m = this._series.priceScale(), g = Math + .round(m.height() * (Math.abs(100 - f.baseLevelPercentage.value()) / 100)), v = m + .coordinateToPrice(g), c[TradingView.CLOSE_PLOT] > v ? i.barColor = n.baselineStyle + .topLineColor.value() : i.barColor = n.baselineStyle.bottomLineColor.value() + } + return i + }, n.prototype.getSeriesBars = function(t) { + return t ? this._series.nsBars() : this._series.bars() + }, n.prototype._findBarFieldValue = function(t, e, i) { + var o = this.getSeriesBars(i).valueAt(t); + if (null !== o) return o[e] + }, n.prototype.findBar = function(t, e, i) { + return i ? i.value : this.getSeriesBars(e).valueAt(t) || [] + }, n.prototype.findPrevBar = function(t, e, i) { + var o, n; + return i && i.previousValue ? i.previousValue : (o = this._series.bars(), n = o._search(t, s + .Exact), null !== n && n > 0 ? this._series.bars()._valueAt(n - 1) : []) + }, inherit(r, o), r.prototype.applyBarStyle = function(t, e, i) { + var o, n, r, s, a, l, c, h, u, d, p, _, f; + return i || (i = {}), e ? i : (o = this._study.properties(), o.visible.value() ? (n = this + ._study.metaInfo(), (r = this._study.data()) && 0 !== r.size() ? (s = n.plots[this + ._plotIndex], this._study.getMinFirstBarIndexForPlot(s.id) > t ? i : (a = o + .styles[s.id], a.visible && !a.visible.value() ? i : (l = this._study + .offset(s.id), null === (c = r.valueAt(t - l)) ? i : null == (h = c[this + ._plotIndex + 1]) ? i : (h = Math.round(h), u = n.plots[this + ._plotIndex].palette, d = o.palettes, p = d[u], _ = n.palettes[ + u].valToIndex ? n.palettes[u].valToIndex[h] : h, f = p.colors[_] + .color.value(), i.barColor = f, i.upColor = f.color, i.downColor = f + .color, i)))) : i) : i) + }, e.SeriesBarColorer = n, e.StudyBarColorer = r + }, function(t, e, i) { + "use strict"; + + function o(t) { + this.items = t.items, this.barSpacing = t.barSpacing, this.colorUp = t.colorup, this.colorDn = t + .colordown, this.colorBorderUp = t.colorBorderUp, this.colorBorderDown = t.colorBorderDown, this + .width = this._calculateWidth(t.barSpacing), this.minHeight = t.minHeight, this.vertOffset = + this._calculateVerticalOffset(t.barSpacing) + } + + function n(t, e, i, o) { + this.x = t, this.y = e, this.height = i, this.isUp = o + } + var r = i(8).Point, + s = i(11); + o.prototype._calculateVerticalOffset = function(t) { + return Math.round((t || 0) / 4) + }, o.prototype._calculateMinHeight = function(t) { + return this.width || this._calculateWidth(t) + }, o.prototype._calculateWidth = function(t) { + var t = t || this.barSpacing; + return Math.round(t / 2) + }, o.prototype.draw = function(t) { + var e, i, o, n, r, s, a, l = this.width, + c = l < 4, + h = Math.max(parseInt(l / 2), 1), + u = Math.round(this.width / 2), + d = Math.round(this.width); + for (t.translate(1, 1), e = 0, i = this.items.length; e < i; e++) o = this.items[e], n = o + .isUp ? -1 : 1, r = Math.abs(o.height), s = o.y - n * this.vertOffset, t.beginPath(), + t.translate(o.x, s), c ? (t.moveTo(0, 0), t.lineTo(-u, -u * n), t.moveTo(0, 0), t.lineTo(u, + -u * n), t.moveTo(0, 0), t.lineTo(0, -r * n), t.moveTo(-u, -r * n), t.lineTo(u, -r * + n), t.lineWidth = h, t.strokeStyle = o.isUp ? this.colorUp : this.colorDn, t + .stroke()) : (t.moveTo(0, 0), r < d ? (t.lineTo(l, -r * n), t.lineTo(-l, -r * n)) : (t + .lineTo(l, -d * n), t.lineTo(u, -d * n), t.lineTo(u, -r * n), t.lineTo(-u, -r * n), + t.lineTo(-u, -d * n), t.lineTo(-l, -d * n)), t.lineTo(0, 0), a = o.isUp ? this + .colorBorderUp : this.colorBorderDown, t.strokeStyle = a, t.stroke(), t.fillStyle = o + .isUp ? this.colorUp : this.colorDn, t.fill()), t.translate(-o.x, -s); + t.translate(-1, -1) + }, o.prototype.hitTest = function(t) { + var e, i, o, n, r, a, l, c, h, u = Math.round(this.width / 2), + d = Math.round(this.width); + for (e = 0; e < this.items.length; ++e) + if ((i = this.items[e]) && void 0 !== i.x && null !== i.x && !TradingView.isNaN(i.x) && + void 0 !== i.y && null !== i.y && !TradingView.isNaN(i.y) && (o = Math.abs(i.height), + n = i.isUp ? -1 : 1, r = o + d, a = i.y - n * this.vertOffset, l = a - n * r, c = i + .x - u, h = i.x + u, c < t.x && t.x < h && (i.isUp ? a < t.y && t.y < l : l < t.y && + t.y < a))) return new s(s.REGULAR); + return null + }, inherit(n, r), e.PaneRendererArrowsUpDown = TradingView.PaneRendererArrowsUpDown = o, e + .PaneRendererArrowsUpDownItem = TradingView.PaneRendererArrowsUpDownItem = n + }, function(t, e, i) { + "use strict"; + + function o(t) { + this._graphics = o.emptyGraphics(), n(!!t, "Study metaInfo is absent!"), this._metaInfo = t + } + var n = i(9).assert, + r = i(7).getLogger("Chart.StudyGraphics"); + o.emptyGraphics = function() { + return { + indexes: [] + } + }, o.prototype.isEmpty = function() { + var t = Object.keys(this._graphics).length > 1; + return 0 === this._graphics.indexes.length && !t + }, o.prototype.graphics = function() { + return this._graphics + }, o.prototype.setGraphics = function(t) { + this._graphics = t, this._postProcessGraphicsData() + }, o.prototype.process = function(t) { + if ("" !== t.d) return t.d.indexes_replace ? void this.replaceIndexes(t) : void(t.d + .graphicsCmds && (this.processEraseCmds(t.d.graphicsCmds.erase), this + .processCreateCmds(t.d.graphicsCmds.create, t.indexes))) + }, o.prototype.replaceIndexes = function(t) { + "" !== t.d && (n(!!t.d.indexes_replace), this._graphics.indexes = t.indexes) + }, o.prototype.processEraseCmds = function(t) { + var e, i, r, s, a; + if (t) + for (n(!!this._graphics, "_graphics object doesn't exist in the study!"), n(!!this._graphics + .indexes, "_graphics.indexes array doesn't exist in the study!"), e = 0; e < t + .length; ++e) + if (i = t[e], "all" === i.action) this._graphics = o.emptyGraphics(); + else { + if ("one" !== i.action) throw Error("Unknown graphics command " + i.action); + for (r in this._graphics[i.type]) s = this._graphics[i.type][r], (a = o + ._findGraphicsObjIndexById(s.data, i.id)) >= 0 && s.data.splice(a, 1) + } + }, o._findGraphicsObjIndexById = function(t, e) { + for (var i = 0; i < t.length; ++i) + if (t[i].id === e) return i; + return -1 + }, o.prototype.processCreateCmds = function(t, e) { + var i, o, r, s, a, l; + if (t) { + n(!!e, "indexes are missing in the study nonseries response!"), n(!!this._graphics, + "_graphics object doesn't exist in the study!"), n(!!this._graphics.indexes, + "_graphics.indexes array doesn't exist in the study!"); + for (i in t) { + n(i in this._metaInfo.graphics, "There is a '" + i + + "' in study response, but it doesn't present in metaInfo!"); + for (o = 0; o < t[i].length; ++o) { + r = t[i][o], s = r.styleId, + n(s in this._metaInfo.graphics[i]), this._graphics[i] || (this._graphics[ + i] = []), a = null; + for (l = 0; l < this._graphics[i].length; ++l) + if (this._graphics[i][l].styleId === s) { + a = this._graphics[i][l]; + break + } null === a && (a = { + styleId: s, + data: [] + }, this._graphics[i].push(a)), a.data = a.data.concat(r.data) + } + } + "nochange" === e || (n(Array.isArray(e)), this._graphics.indexes = e), this + ._postProcessGraphicsData() + } + }, o.prototype._postProcessGraphicsData = function() { + this._graphics && this._splitHHistItems() + }, o.prototype._splitHHistItems = function() { + var t, e, i, n, r, s, a, l, c, h, u, d; + if (void 0 !== this._graphics.hhists) { + for (t in this._graphics.hhists) e = this._graphics.hhists[t], o._sortHHistItemsByPrice(e + .data), i = this._graphics.indexes, e.dataObj = o._splitHHistItemsBySession(e.data, + i); + if (n = this._graphics.hhists[0], r = this._graphics.hhists[1], n && r && n.dataObj && r + .dataObj) + for (s in n.dataObj) + if (a = n.dataObj[s], l = r.dataObj[s], a && l) { + for (c = l[0], h = l[l.length - 1], u = 0; u < a.length; u++) d = a[u], (d + .priceHigh >= c.priceHigh || d.priceLow >= c.priceLow) && (d + .priceHigh <= h.priceHigh || d.priceLow <= h.priceLow) && (d.va = !0); + n.shortDataObj || (n.shortDataObj = {}), n.shortDataObj[s] = a.slice() + } + } + }, o._sortHHistItemsByPrice = function(t) { + t.sort(function(t, e) { + return t.priceLow - e.priceLow + }) + }, o._splitHHistItemsBySession = function(t, e) { + var i, o, n, s = {}; + for (i = 0; i < t.length; ++i) o = t[i], n = e[o.firstBarTime], void 0 !== n ? (n in s || (s[ + n] = []), s[n].push(o)) : r.logError("Cannot find index " + o.firstBarTime + + " in study timescale indexes"); + return s + }, t.exports = o + }, function(t, e, i) { + "use strict"; + + function o() {} + var n = i(9).assert, + r = i(57), + s = i(870); + o.isValid = function(t) { + return !(!r[t] && !s[t]) + }, o.create = function(t, e, i, a, l) { + var c; + return n(o.isValid(t), "Unknown line tool: " + t), c = r[t] || s[t], "LineToolVbPFixed" === t ? + new c(e, i, a, l) : "LineToolRegressionTrend" === t ? new c(e, i, a) : [ + "LineStudyMtpAnalysis", "LineStudyMtpDecisionPoint", "LineStudyMtpRiskReward", + "LineStudyMtpElliotWaveMain", "LineStudyMtpElliotWaveMajor", + "LineStudyMtpElliotWaveMinor", "LineStudyMtpDownWave1OrA", "LineStudyMtpDownWave2OrB", + "LineStudyMtpDownWave3", "LineStudyMtpDownWave4", "LineStudyMtpDownWave5", + "LineStudyMtpDownWaveC", "LineStudyMtpUpWave1OrA", "LineStudyMtpUpWave2OrB", + "LineStudyMtpUpWave3", "LineStudyMtpUpWave4", "LineStudyMtpUpWave5", + "LineStudyMtpUpWaveC" + ].indexOf(t) >= 0 ? new c(e, i, a) : new c(e, i) + }, t.exports = o + }, function(t, e, i) { + "use strict"; + var o, n, r, s, a; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(0), n = i(9), r = i(67), s = i(15), a = function(t) { + function e(e, i) { + var o = t.call(this) || this; + return o._activeBackground = "#0F6DBF", o._background = "#5592C9", o._active = !1, o + ._source = e, o._data = i, o + } + return o.__extends(e, t), e.prototype.setActive = function(t) { + this._active = t + }, e.prototype.setBackground = function(t) { + this._background = t + }, e.prototype._updateRendererData = function(t) { + var e, i, o, r, a, l, c, h; + if (t.visible = !1, e = this._source.model(), e.timeScale() && !e.timeScale() + .isEmpty() && null !== (i = this._source.priceScale()) && !i.isEmpty() && (e + .selectedSource() === this._source || this._source.isForcedDrawPriceAxisLabel() + ) && null !== e.timeScale().visibleBars() && (o = this._source.axisPoints(), r = + this._data.pointIndex, !(o.length <= r) && (a = o[r], + isFinite(a.price)))) { + if (i.isPercent()) { + if (!(l = this._source.ownerSource())) return; + if (c = l.firstValue(), !s.isNumber(c)) return; + a.price = n.ensureNotNull(i.priceRange()).convertToPercent(a.price, c) + } + h = this._active ? this._activeBackground : this._background, this._data + .backgroundProperty && (h = this._data.backgroundProperty.value()), t + .background = h, t.borderColor = "#2E84A6", t.color = this.generateTextColor(h), + t.coordinate = i.priceToCoordinate(a.price), t.text = i.formatter().format(a + .price), t.visible = !0 + } + }, e + }(r.PriceAxisView), e.LineToolPriceAxisView = a + }, function(t, e, i) { + "use strict"; + var o, n; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(32), n = function() { + function t() { + this._text = "", this._background = "#585858", this._coordinate = 0 + } + return t.prototype.text = function() { + return this._text + }, t.prototype.background = function() { + return this._background + }, t.prototype.color = function() { + return "black" === o.rgbToBlackWhiteString(o.parseRgb(this._background), 150) ? + "white" : "black" + }, t.prototype.coordinate = function() { + return this._coordinate + }, t + }(), e.TimeAxisView = n + }, function(t, e, i) { + "use strict"; + + function o() { + this._data = null + } + var n = /[1-9]/g; + o.prototype.setData = function(t) { + this._data = t + }, o.prototype.draw = function(t, e) { + var i, o, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S; + null != this._data && !1 !== this._data.visible && 0 !== this._data.text.length && (t.font = e + .font, (i = Math.round(e.widthCache.measureText(t, this._data.text, n))) <= 0 || (o = e + .paddingHorizontal, r = i + 2 * o, s = r / 2, a = this._data.width, l = this._data + .coordinate, c = Math.floor(l - s) + .5, c < 0 ? (l += Math.abs(0 - c), c = Math + .floor(l - s) + .5) : c + r > a && (l -= Math.abs(a - (c + r)), c = Math.floor( + l - s) + .5), h = c, u = h + r, d = u, p = Math.round(this._data.coordinate + + 1), _ = p, f = .5, m = f + e.borderSize + e.tickLength + e.paddingTop + e + .fontSize + + e.paddingBottom, g = m, v = f, y = v, b = y + e.borderSize + e.tickLength, S = m - e + .baselineOffset - e.paddingBottom, t.fillStyle = this._data.background, t + .lineWidth = 1, t.beginPath(), t.strokeStyle = this._data.color, t.moveTo(c, f), t + .lineTo(h, m), t.lineTo(u, g), t.lineTo(d, v), t.fill(), t.beginPath(), t.moveTo(p, + y), t.lineTo(_, b), t.stroke(), t.textAlign = "left", t.fillStyle = this._data + .color, t.fillText(this._data.text, c + o, S))) + }, t.exports = o + }, function(t, e, i) { + "use strict"; + + function o(t, e) { + this.customization = { + forcePriceAxisLabel: !0, + disableSelection: !0, + disableErasing: !0 + }, n.call(this, t, e) + } + var n = i(1).LineDataSource; + inherit(o, n), o.POINTS_COUNT = 1, o.prototype.pointsCount = function() { + return o.POINTS_COUNT + }, o.prototype.hasContextMenu = function() { + return !1 + }, o.prototype.state = function() { + return null + }, o.prototype.startMoving = function() { + n.prototype.startMoving.apply(this, arguments), this._cursorMoved = !1 + }, o.prototype.endMoving = function() { + n.prototype.endMoving.apply(this, arguments), this._cursorMoved = !1 + }, o.prototype.correctPoints = function(t) { + var e, i, o, n, r; + for (this._currentMovingPoint && this._startMovingPoint ? this._currentMovingPoint.price - this + ._startMovingPoint.price && (this._cursorMoved = !0) : this._cursorMoved = !1, e = this + .priceScale(), i = e.mainSource().base(), o = 1 / i, n = 0; n < t.length; n++) r = t[n], + this._cursorMoved && (r.price = this._currentMovingPoint.price), r.price = o * Math.round(r + .price / o), t[n] = r + }, o.prototype.userEditEnabled = function() { + return !0 + }, + o.prototype.canBeHidden = function() { + return !1 + }, o.prototype.isUserDeletable = function() { + return !1 + }, o.prototype.showInObjectTree = function() { + return !1 + }, o.prototype.getInputsPropertyPage = function() { + return null + }, t.exports = o + }, function(t, e, i) { + "use strict"; + (function(t) { + function o(e, n) { + var r, s, c, d, p, _, f, m, g, v, y = n || new h("linetoolriskreward"); + a.call(this, e, y), this._properties.addExclusion && (this._properties.addExclusion( + "stopLevel"), this._properties.addExclusion("profitLevel")), n.stopLevel || n + .profitLevel || (r = e.timeScale().visibleBars(), s = r.firstBar(), c = r.lastBar(), d = + e.mainSeries().priceRange(s, c), p = e.mainSeries().priceScale(), p.isLog() && (_ = + p.logicalToPrice(d.minValue()), f = p.logicalToPrice(d.maxValue()), d = new t(_, + f)), p.isPercent() && (m = e.mainSeries().firstValue(), _ = p.priceRange() + .convertFromPercent(d.minValue(), m), f = p.priceRange().convertFromPercent(d + .maxValue(), m), d = new t(_, f)), d && !d.isEmpty() && (g = Math.round(.2 * + d.length() * e.mainSeries().base()), y.merge({ + stopLevel: g, + profitLevel: g + }))), v = this, y.stopLevel.listeners().subscribe(this, this.recalculate), y + .stopLevel.listeners().subscribe(null, function() { + v.properties().stopPrice._listeners.fire(v.properties().stopPrice) + }), y.profitLevel.listeners().subscribe(this, this.recalculate), y.profitLevel + .listeners().subscribe(null, function() { + v.properties().targetPrice._listeners.fire(v.properties().targetPrice) + }), y.addChild("entryPrice", new o.PriceProperty(this, 0)), y.addChild("stopPrice", + new o.StopPriceProperty(this)), y.addChild("targetPrice", new o.TargetPriceProperty( + this)), y.addProperty("riskSize", 250), y.addProperty("qty", 0), y.addProperty( + "amountTarget", y.accountSize.value()), y.addProperty("amountStop", y.accountSize + .value()), this._riskInPercentsFormatter = new u(2), this._riskInMoneyFormatter = + new u, y.risk.subscribe(this, this._recalculateRiskSize), y.accountSize.subscribe(this, + this._recalculateRiskSize), y.riskDisplayMode.subscribe(this, this + ._recalculateRisk), y.riskDisplayMode.subscribe(this, this._recalculateRiskSize), y + .entryPrice.subscribe(this, this._recalculateRiskSize), y.stopPrice.subscribe(this, this + ._recalculateRiskSize), y.profitLevel.subscribe(this, this._recalculateRiskSize), y + .stopLevel.subscribe(this, this._recalculateRiskSize), y.qty.subscribe(this, this + ._recalculateRiskSize), "percents" === y.riskDisplayMode.value() && y.risk.value() > + 100 && y.riskDisplayMode.setValueSilently("money"), this._syncStateExclusions = [ + "entryPrice", "stopPrice", "targetPrice", "riskSize", "qty", "amountTarget", + "amountStop", "risk", "accountSize" + ], this.version = o.version, this._entryPriceAxisView = new l(this, { + colorProperty: y.linecolor, + priceProperty: y.entryPrice + }), this._stopPriceAxisView = new l(this, { + colorProperty: y.stopBackground, + priceProperty: y.stopPrice + }), this._profitPriceAxisView = new l(this, { + colorProperty: y.profitBackground, + priceProperty: y.targetPrice + }), i.e(1).then(function(t) { + var e = i(1170).RiskRewardPaneView; + this._setPaneViews([new e(this, this._model)]) + }.bind(this).bind(null, i)).catch(i.oe) + } + + function n(t, e) { + var i, n; + this._constructor = "LineToolRiskRewardShort", i = e || new h("linetoolriskrewardshort"), o + .call(this, t, i), n = this.properties(), + n.entryPrice.subscribe(this, this._recalculateQty), n.stopPrice.subscribe(this, this + ._recalculateQty), n.riskSize.subscribe(this, this._recalculateQty), n.entryPrice + .subscribe(this, this._recalculateAmount), n.profitLevel.subscribe(this, this + ._recalculateAmount), n.stopLevel.subscribe(this, this._recalculateAmount), n + .accountSize.subscribe(this, this._recalculateAmount), n.riskSize.subscribe(this, this + ._recalculateAmount), n.qty.subscribe(this, this._recalculateAmount) + } + + function r(t, e) { + var i, n; + this._constructor = "LineToolRiskRewardLong", i = e || new h("linetoolriskrewardlong"), o + .call(this, t, i), n = this.properties(), n.entryPrice.subscribe(this, this + ._recalculateQty), n.stopPrice.subscribe(this, this._recalculateQty), n.riskSize + .subscribe(this, this._recalculateQty), n.entryPrice.subscribe(this, this + ._recalculateAmount), n.profitLevel.subscribe(this, this._recalculateAmount), n + .stopLevel.subscribe(this, this._recalculateAmount), n.accountSize.subscribe(this, this + ._recalculateAmount), n.riskSize.subscribe(this, this._recalculateAmount), n.qty + .subscribe(this, this._recalculateAmount) + } + var s = i(9).ensureNotNull, + a = i(1).LineDataSource, + l = i(843).LineToolRiskRewardPriceAxisView, + c = i(26), + h = i(6).DefaultProperty, + u = i(89).NumericFormatter, + d = i(3).propertyPages, + p = i(408).RiskRewardPointIndex; + inherit(o, a), o.prototype.riskFormatter = function(t) { + return "percents" === t ? this._riskInPercentsFormatter : this._riskInMoneyFormatter + }, o.prototype.getRiskStep = function(t) { + return "percents" === t ? .01 : 1 + }, o.prototype._roundValue = function(t) { + return parseFloat(t.toFixed(2)) + }, o.prototype._recalculateRisk = function() { + var t = this.properties(), + e = t.riskDisplayMode.value(), + i = t.riskSize.value(), + o = t.accountSize.value(), + n = t.risk.value(); + n = "percents" === e ? this._roundValue(i / o * 100) : this._roundValue(o / 100 * n), + this._riskInChange = !0, t.risk.setValue(this.riskFormatter(e).format(n)), this + ._riskInChange = !1 + }, o.prototype._recalculateRiskSize = function() { + var t, e, i, o; + this._riskInChange || (t = this.properties(), e = t.risk.value(), i = t.riskDisplayMode + .value(), o = t.accountSize.value(), "percents" === i ? t.riskSize.setValue(e / + 100 * o) : e > o ? (t.risk.setValue(o), t.riskSize.setValue(o)) : t.riskSize + .setValue(e)) + }, o.version = 2, o.prototype.i18nCache = { + title: $.t("Risk/Reward") + }, o.prototype.lastBarData = function() { + var t, e, i, o, n, r = this._model.mainSeries().bars().firstIndex(), + a = this._model.mainSeries().bars().lastIndex(); + return null === r || null === a || isNaN(r) || isNaN(a) ? null : (t = this.points(), + 4 === t.length ? (e = t[p.ActualClose], e.index < r ? null : { + closePrice: e.price, + index: Math.min(a, e.index) + }) : (i = t[p.Close], i.index < r ? null : (o = Math.min(a, i.index), n = s(this + ._model.mainSeries().bars().valueAt(o)), { + closePrice: n[TradingView.CLOSE_PLOT], + index: o + }))) + }, o.prototype.migrateVersion = function(t, e, i) { + var o, n, r, s; + 1 === t && this._points.length >= 1 && (o = [], o.push(this._points[0]), n = this + ._points[0], n = { + price: n.price, + index: n.index + 50 + }, o.push(n), this._points[1] && o.push(this._points[1]), this._points[2] && o + .push(this._points[2]), this._points = o, this._timePoint.length >= 1 && ( + r = [], n = this._timePoint[0], r.push(n), s = { + price: n.price, + time_t: n.time_t, + offset: n.offset + 50 + }, r.push(s), + this._timePoint[1] && o.push(this._points[1]), this._timePoint[2] && o.push( + this._points[2]), this._timePoint = r)) + }, o.prototype.checkAlert = function() { + this.recalculate() + }, o.prototype.priceAxisViews = function(t, e) { + return this.isSourceHidden() ? null : e !== this.priceScale() || this._model + .paneForSource(this) !== t ? null : [this._entryPriceAxisView, this + ._stopPriceAxisView, this._profitPriceAxisView + ] + }, o.prototype.updateAllViews = function() { + this.isActualSymbol() && this._properties.visible.value() && (c.hideAllDrawings() + .value() && this.userEditEnabled() || (a.prototype.updateAllViews.call(this), + this._entryPriceAxisView.update(), this._stopPriceAxisView.update(), this + ._profitPriceAxisView.update())) + }, o.prototype.setPoint = function(t, e) { + var i, o = this.priceScale(); + switch (o.isPercent() && (i = this.ownerSource().firstValue(), e.price = o.priceRange() + .convertFromPercent(e.price, i)), t) { + case 0: + e.price = this._roundPrice(e.price), o.isPercent() && (e.price = o.priceRange() + .convertToPercent(e.price, i)), a.prototype.setPoint.call(this, t, e), + this.recalculate(); + break; + case 1: + this.isActualSymbol() && this.properties().stopPrice.setValue(this + .preparseStopPrice(e.price)); + break; + case 2: + this.isActualSymbol() && this.properties().targetPrice.setValue(this + .preparseProfitPrice(e.price)); + break; + case 3: + e.price = this._roundPrice(e.price), o.isPercent() && (e.price = o.priceRange() + .convertToPercent(e.price, i)), a.prototype.setPoint.call(this, 1, e), + this.recalculate() + } + }, o.PriceProperty = function(t, e) { + a.PointPriceProperty.call(this, t, e) + }, inherit(o.PriceProperty, a.PointPriceProperty), o.PriceProperty.prototype.setValue = + function(t) { + var e = this._lineSource.points()[this._pointIndex]; + e.price = parseFloat(t), this._lineSource.setPoint(this._pointIndex, e), this + ._lineSource.recalculate(), this._lineSource._model.updateSource(this._lineSource), + this._listeners.fire(this), this._lineSource.endChanging(), this._lineSource + ._syncMultichartState() + }, o.StopPriceProperty = function(t) { + o.PriceProperty.call(this, t, 1) + }, inherit(o.StopPriceProperty, o.PriceProperty), o.StopPriceProperty.prototype.value = + function() { + var t = this._lineSource.stopPrice(), + e = this._lineSource.ownerSource().formatter(), + i = e.parse(e.format(t)); + return i.price ? i.price : i.value + }, o.StopPriceProperty.prototype.setValue = function(t) { + var e = Math.round(Math.abs(t - this._lineSource.entryPrice()) * this._lineSource._model + .mainSeries().base()); + this._lineSource.properties().stopLevel.setValue(e), this._lineSource.properties() + .stopLevel.listeners().fire(this._lineSource.properties().stopLevel) + }, o.TargetPriceProperty = function(t) { + o.PriceProperty.call(this, t, 2) + }, inherit(o.TargetPriceProperty, o.PriceProperty), o.TargetPriceProperty.prototype.value = + function() { + var t = this._lineSource.profitPrice(), + e = this._lineSource.ownerSource().formatter(), + i = e.parse(e.format(t)); + return i.price ? i.price : i.value + }, o.TargetPriceProperty.prototype.setValue = function(t) { + var e = Math.round(Math.abs(t - this._lineSource.entryPrice()) * this._lineSource._model + .mainSeries().base()); + this._lineSource.properties().profitLevel.setValue(e), this._lineSource.properties() + .profitLevel.listeners().fire(this._lineSource.properties().profitLevel) + }, o.prototype.pointsCount = function() { + return 1 + }, o.prototype.title = function() { + return this.i18nCache.title + }, o.prototype.addPoint = function(t) { + var e, i; + return t.price = this._roundPrice(t.price), a.prototype.addPoint.call(this, t, null, ! + 0), e = { + price: t.price, + index: t.index + 50 + }, a.prototype._addPointIntenal.call(this, e, null, !0), i = this + .calculateActualEntry(t, e), i && (a.prototype._addPointIntenal.call(this, i, null, + !0), (e = this.findClosePoint(i, e)) && a.prototype._addPointIntenal.call( + this, e, null, !0)), this._lastPoint = null, this.normalizePoints(), this + .createServerPoints(), !0 + }, o.prototype._roundPrice = function(t) { + var e = this._model.mainSeries().base(); + return Math.round(t * e) / e + }, o.prototype.recalculate = function() { + var t, e, i, o, n; + this.properties().interval.value() === this._model.mainSeries().interval() && 0 !== this + .points().length && (t = this.properties().targetPrice.value(), e = this + .properties().stopPrice.value(), i = [this._points[0], this._points[1]], o = + this.calculateActualEntry(this.points()[0], this.points()[1]), o && (i.push(o), + (n = this.findClosePoint(o, this.points()[1])) && i.push(n)), this._points = + i, t !== this.properties().targetPrice.value() && this.properties().targetPrice + ._listeners.fire(this.properties().targetPrice), e !== this.properties() + .stopPrice.value() && this.properties().stopPrice._listeners.fire(this + .properties().stopPrice)) + }, o.prototype.start = function() { + a.prototype.start.call(this), this.recalculate() + }, o.prototype.startMoving = function(t) { + t.price = this._roundPrice(t.price), a.prototype.startMoving.call(this, t) + }, o.prototype.move = function(t) { + t.price = this._roundPrice(t.price), a.prototype.move.call(this, t), this.recalculate(), + this._entryPriceAxisView.update() + }, o.prototype.correctPoints = function(t) { + return !!this.isActualSymbol() && a.prototype.correctPoints.call(this, [t[0], t[1]]) + }, o.prototype.entryPrice = function() { + return this.points()[0].price + }, o.prototype.findClosePoint = function(t, e) { + var i, o, n, r = this._model.mainSeries().bars(), + a = s(r.firstIndex()), + l = Math.max(t.index, a), + c = s(r.lastIndex()); + for (i = l; i <= Math.min(c, e.index); i++) + if (o = s(r.valueAt(i)), null != (n = this.checkStopPrice(o))) return { + index: i, + price: n + }; + return null + }, o.prototype.calculateActualEntry = function(t, e) { + var i, o, n = this._model.mainSeries().bars(), + r = s(n.firstIndex()), + a = Math.max(t.index, r), + l = t.price, + c = s(n.lastIndex()); + for (i = a; i <= Math.min(c, e.index); i++) + if (o = s(n.valueAt(i)), o[TradingView.HIGH_PLOT] >= l && o[TradingView.LOW_PLOT] <= + l) return { + index: i, + price: l + }; + return null + }, o.prototype.axisPoints = function() { + var t, e, i; + if (!this._points[p.ActualEntry]) return []; + if (t = this._points[p.ActualEntry], e = null, 4 === this._points.length) e = this + ._points[p.ActualClose]; + else { + if (!(i = this.lastBarData())) return []; + e = { + index: i.index, + price: i.closePrice + } + } + return [t, e] + }, o.prototype.getInputsPropertyPage = function() { + return d.LineToolRiskRewardInputsPropertyPage + }, o.prototype.getStylesPropertyPage = function() { + return d.LineToolRiskRewardStylesPropertyPage + }, inherit(n, o), n.prototype.i18nCache = { + title: $.t("Risk/Reward short") + }, n.prototype._recalculateQty = function() { + var t, e, i, o, n; + 0 !== this.points().length && (t = this.properties(), e = t.entryPrice.value(), i = t + .stopPrice.value(), + o = t.riskSize.value(), n = Math.floor(o / Math.abs(i - e)), t.qty.setValue(n)) + }, n.prototype._recalculateAmount = function() { + var t, e, i, o, n, r, s, a; + 0 !== this.points().length && (t = this.properties(), e = t.accountSize.value(), i = t + .entryPrice.value(), o = t.qty.value(), n = t.stopPrice.value(), r = t + .targetPrice.value(), s = this._roundValue(e + (i - r) * o), a = this + ._roundValue(e - (n - i) * o), t.amountTarget.setValue(s), t.amountStop + .setValue(a)) + }, n.prototype.title = function() { + return this.i18nCache.title + }, n.prototype.stopPrice = function() { + return this.entryPrice() + this.properties().stopLevel.value() / this._model + .mainSeries().base() + }, n.prototype.profitPrice = function() { + return this.entryPrice() - this.properties().profitLevel.value() / this._model + .mainSeries().base() + }, n.prototype.calculatePL = function(t) { + return this.entryPrice() - t + }, n.prototype.preparseStopPrice = function(t) { + t = this._roundPrice(t); + var e = this.entryPrice() + 1 / this._model.mainSeries().base(); + return Math.max(t, e) + }, n.prototype.preparseProfitPrice = function(t) { + t = this._roundPrice(t); + var e = this.entryPrice() - 1 / this._model.mainSeries().base(); + return Math.min(t, e) + }, n.prototype.checkStopPrice = function(t) { + var e = this.stopPrice(), + i = this.profitPrice(); + return t[TradingView.HIGH_PLOT] >= e ? this.stopPrice() : t[TradingView.LOW_PLOT] <= i ? + this.profitPrice() : null + }, r.prototype.i18nCache = { + title: $.t("Risk/Reward long") + }, inherit(r, o), r.prototype._recalculateQty = function() { + var t, e, i, o, n; + 0 !== this.points().length && (t = this.properties(), e = t.entryPrice.value(), i = t + .stopPrice.value(), o = t.riskSize.value(), n = Math.floor(o / Math.abs(e - i)), + t.qty.setValue(n)) + }, r.prototype._recalculateAmount = function() { + var t, e, i, o, n, r, s, a; + 0 !== this.points().length && (t = this.properties(), e = t.accountSize.value(), i = t + .entryPrice.value(), o = t.qty.value(), n = t.stopPrice.value(), r = t + .targetPrice.value(), s = this._roundValue(e + (r - i) * o), a = this + ._roundValue(e - (i - n) * o), t.amountTarget.setValue(s), t.amountStop + .setValue(a)) + }, r.prototype.stopPrice = function() { + return this.entryPrice() - this.properties().stopLevel.value() / this._model + .mainSeries().base() + }, r.prototype.profitPrice = function() { + return this.entryPrice() + this.properties().profitLevel.value() / this._model + .mainSeries().base() + }, r.prototype.calculatePL = function(t) { + return t - this.entryPrice() + }, r.prototype.preparseStopPrice = function(t) { + t = this._roundPrice(t); + var e = this.entryPrice() - 1 / this._model.mainSeries().base(); + return Math.min(t, e) + }, r.prototype.preparseProfitPrice = function(t) { + t = this._roundPrice(t); + var e = this.entryPrice() + 1 / this._model.mainSeries().base(); + return Math.max(t, e) + }, r.prototype.checkStopPrice = function(t) { + var e = this.stopPrice(), + i = this.profitPrice(); + return t[TradingView.LOW_PLOT] <= e ? this.stopPrice() : t[TradingView.HIGH_PLOT] >= i ? + this.profitPrice() : null + }, r.prototype.title = function() { + return this.i18nCache.title + }, e.LineToolRiskReward = o, e.LineToolRiskRewardLong = r, e.LineToolRiskRewardShort = n + }).call(e, i(73)) + }, function(t, e, i) { + "use strict"; + + function o(t, e) { + this._formatter = t, this._maxSize = e || 50, this._actualSize = 0, this._cache = {}, this + ._usageTick = 1, this._oldestTick = 1, this._tick2Labels = {} + } + o.prototype.format = function(t) { + var e, i; + return this._cache[t] ? this._cache[t].string : (this._actualSize === this._maxSize && (e = this + ._tick2Labels[this._oldestTick], delete this._tick2Labels[this._oldestTick], + delete this._cache[e], this._oldestTick++, this._actualSize--), i = this._formatter( + t), this._cache[t] = { + string: i, + tick: this._usageTick + }, this._tick2Labels[this._usageTick] = t, this._actualSize++, this._usageTick++, i) + }, t.exports = o + }, function(t, e, i) { + "use strict"; + + function o(t, e, i) { + a.call(this, t, e, i) + } + + function n(t, e, i) { + o.call(this, t, e, i) + } + + function r(t, e, i) { + o.call(this, t, e, i) + } + + function s(t, e, i) { + o.call(this, t, e, i) + } + var a = i(105).LineStudyMtp; + inherit(o, a), o.prototype.pointsCount = function() { + return 1 + }, o.prototype._studyInputs = function() { + var t, e, i = this.points(); + return i.length < this.pointsCount() ? null : (t = i[0].index, e = this._model.mainSeries() + .bars().valueAt(t), null === e ? null : [this.properties().inputs.displayZoneLabels + .value(), 1e3 * e[TradingView.TIME_PLOT] + ]) + }, inherit(n, o), n.prototype._mtpStudyId = function() { + return "mtp_ew_main" + }, inherit(r, o), r.prototype._mtpStudyId = function() { + return "mtp_ew_major" + }, inherit(s, o), s.prototype._mtpStudyId = function() { + return "mtp_ew_minor" + }, e.LineStudyMtpElliotWaveMinor = s, e.LineStudyMtpElliotWaveMajor = r, e + .LineStudyMtpElliotWaveMain = n, e.LineStudyMtpElliotWave = o + }, function(t, e, i) { + "use strict"; + (function(e) { + function o(t, i, n) { + var r, s; + this.m_timeScale = t, r = i.rightAxisProperties.state(), r.autoScale = !0, this + .m_rightPriceScale = new c(n.properties().scalesProperties, r), s = i.leftAxisProperties + .state(), s.autoScale = !0, this.m_leftPriceScale = new c(n.properties() + .scalesProperties, s), this.m_dataSources = [], this.m_height = 0, this.m_width = 0, + this.m_mainDataSource = null, this._properties = i, this._model = n, this._tagsChanged = + new e, this._leftPriceScaleRatioChanged = new e, this._rightPriceScaleRatioChanged = + new e, this._leftPriceScaleRatioChanged.subscribe(this, this + ._mainSeriesPaneScaleRatioOnChange), this._rightPriceScaleRatioChanged.subscribe( + this, this._mainSeriesPaneScaleRatioOnChange), this.m_timeScale.barSpacingChanged() + .subscribe(this, this._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale + .internalHeightChanged().subscribe(this, this._recalculatePriceScaleByScaleRatio), this + .m_rightPriceScale.internalHeightChanged().subscribe(this, this + ._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale.priceRangeChanged() + .subscribe(this, this._recalculateTimeScaleByLeftScaleRatio), this.m_rightPriceScale + .priceRangeChanged().subscribe(this, this._recalculateTimeScaleByRightScaleRatio), this + .m_leftPriceScale.priceRangeChanged().subscribe(this, this + ._onLeftPriceScaleSetMinMaxPriceRange), this.m_rightPriceScale.priceRangeChanged() + .subscribe(this, this._onRightPriceScaleSetMinMaxPriceRange), this + ._lastLeftPriceScaleRatio = h(this.m_timeScale, this.m_leftPriceScale), this + ._lastRightPriceScaleRatio = h(this.m_timeScale, this.m_rightPriceScale), i.topMargin + .listeners().subscribe(this, o.prototype._updateMargins), i.bottomMargin.listeners() + .subscribe(this, o.prototype._updateMargins), this._updateMargins(), this + ._stretchFactor = o.DEFAULT_STRETCH_FACTOR, this._isInInsertManyDataSourcesState = !1, + this._lastLineDataSourceZOrder = null, + this._maximized = !1, this._isMainPane = !1 + } + var n = i(334).ExecutionsPositionController, + r = i(1).LineDataSource, + s = i(73), + a = i(46).PriceDataSource, + l = i(7).getLogger("Chart.Pane"), + c = i(229), + h = i(160).scaleRatio, + u = i(160).priceRangeByScaleRatio, + d = i(160).barSpacingByScaleRatio; + o.DEFAULT_STRETCH_FACTOR = 1e3, o.PANE_ANIMATION_DURATION = 500, o.sortSourcesPreOrdered = { + "Volume@tv-basicstudies": 0, + ChartEventsSource: 1, + "ESD$TV_DIVIDENDS@tv-scripting": 2, + "ESD$TV_SPLITS@tv-scripting": 3, + "ESD$TV_EARNINGS@tv-scripting": 4, + LineToolOrder: 5, + LineToolPosition: 6, + LineToolExecution: 7 + }, o.prototype.destroy = function() { + var t, e; + for (this._leftPriceScaleRatioChanged.unsubscribe(this, this + ._mainSeriesPaneScaleRatioOnChange), this._rightPriceScaleRatioChanged + .unsubscribe(this, this._mainSeriesPaneScaleRatioOnChange), this.m_rightPriceScale + .priceRangeChanged().unsubscribe(this, this._recalculateTimeScaleByRightScaleRatio), + this.m_leftPriceScale.priceRangeChanged().unsubscribe(this, this + ._recalculateTimeScaleByLeftScaleRatio), this.m_timeScale.barSpacingChanged() + .unsubscribe(this, this._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale + .internalHeightChanged().unsubscribe(this, this._recalculatePriceScaleByScaleRatio), + this.m_rightPriceScale.internalHeightChanged().unsubscribe(this, this + ._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale.priceRangeChanged() + .unsubscribe(this, this._onLeftPriceScaleSetMinMaxPriceRange), this + .m_rightPriceScale.priceRangeChanged().unsubscribe(this, this + ._onRightPriceScaleSetMinMaxPriceRange), this._properties.topMargin.listeners() + .unsubscribe(this, o.prototype._updateMargins), this._properties.bottomMargin + .listeners().unsubscribe(this, o.prototype._updateMargins), t = 0; t < this + .m_dataSources.length; t++) e = this.m_dataSources[t], e.destroy && e.destroy() + }, o.prototype.setPaneSize = function(t) { + var e = { + large: 1, + medium: .6, + small: .3, + tiny: .15 + }; + if (!e[t]) throw Error("Unknown size enum value: " + t); + this._stretchFactor = e[t] * o.DEFAULT_STRETCH_FACTOR + }, o.sortSources = function(t) { + return t.map(function(t) { + var e, i, n = t._constructor; + return isFunction(t.metaInfo) && (n = t.metaInfo().id), i = o + .sortSourcesPreOrdered[n] || 0, e = i > 0 ? 1 / 0 : i < 0 ? -1 / 0 : t + .zorder(), [t, i, e] + }).sort(function(t, e) { + return t[1] - e[1] || t[2] - e[2] + }).map(function(t) { + return t[0] + }) + }, o.prototype._updateMargins = function() { + var t, e, i = .01 * this._properties.topMargin.value(), + o = .01 * this._properties.bottomMargin.value(); + for (this.m_leftPriceScale.setTopMargin(i), this.m_leftPriceScale.setBottomMargin(o), + this.m_rightPriceScale.setTopMargin(i), this.m_rightPriceScale.setBottomMargin(o), + t = 0; t < this.m_dataSources.length; t++)(e = this.m_dataSources[ + t]) instanceof TradingView.Study && this.isOverlay(e) && "Volume" !== e + .metaInfo() + .shortId && e.priceScale() && e.priceScale() !== this.m_leftPriceScale && e + .priceScale() === this.m_rightPriceScale && (e.priceScale().setTopMargin(i), e + .priceScale().setBottomMargin(o), this.recalculatePriceScale(e.priceScale())); + this.recalculatePriceScale(this.m_leftPriceScale), this.recalculatePriceScale(this + .m_rightPriceScale), this.updateAllViews() + }, o.prototype.model = function() { + return this._model + }, o.prototype.width = function() { + return this.m_width + }, + o.prototype.height = function() { + return this.m_height + }, o.prototype.setWidth = function(t) { + this.m_width = t, this.updateAllViews() + }, o.prototype.setHeight = function(t) { + var e, i; + for (this.m_height = t, this.m_leftPriceScale.setHeight(t), this.m_rightPriceScale + .setHeight(t), e = 0; e < this.m_dataSources.length; e++) i = this.m_dataSources[e], + this.isOverlay(i) && i.priceScale() && i.priceScale().setHeight(t); + this.updateAllViews() + }, o.prototype.leftPriceScale = function() { + return this.m_leftPriceScale + }, o.prototype.rightPriceScale = function() { + return this.m_rightPriceScale + }, o.prototype.timeScale = function() { + return this.m_timeScale + }, o.prototype.dataSources = function() { + return this.m_dataSources + }, o.prototype.isOverlay = function(t) { + return t._isOverlay + }, o.prototype._processMainSourceChange = function() { + var t, e, i, n, s, l, c; + if (null === this.m_mainDataSource) + for (e = 0; e < this.m_dataSources.length; e++) + if (i = this.m_dataSources[e], TradingView.isInherited(i.constructor, a) && ! + this.isOverlay(i) && (!i.properties().linkedToSeries || !i.properties() + .linkedToSeries.value())) { + this.m_mainDataSource = i, t = !0; + break + } if (this.m_mainDataSource && t) { + for (n = [], e = 0; e < this.m_dataSources.length; e++) i = this.m_dataSources[e], + TradingView.isInherited(i.constructor, r) && n.push(i); + for (n = o.sortSources(n), e = 0; e < n.length; e++) this.move(n[e], this + .m_mainDataSource.priceScale(), !0) + } else if (!this.m_mainDataSource || this.isOverlay(this.m_mainDataSource) && 0 === this + .nonOverlayPricesSourcesCount()) + for (e = 0; e < this.m_dataSources.length; e++) + if (i = this.m_dataSources[e], TradingView.isInherited(i.constructor, a) && this + .isOverlay(i) && i.showInObjectTree()) { + for (this.m_mainDataSource = i, this.m_rightPriceScale.addDataSource(i), i + .setPriceScale(this.m_rightPriceScale), s = this._model.children(i), c = + 0; c < s.length; c++) l = s[c], this.m_rightPriceScale.addDataSource(l), + l.setPriceScale(this.m_rightPriceScale), l._isOverlay = !1; + this.recalculatePriceScale(this.m_rightPriceScale), i._isOverlay = !1; + break + } + }, o.prototype._newZOrderForLineTool = function() { + var t, e, i, o = null; + for (t = 0; t < this.m_dataSources.length; ++t)(e = this.m_dataSources[ + t]) instanceof r && (i = e.zorder(), (null === o || i > o) && (o = i)); + return null === o && (o = this.getZOrderMinMax().minZOrder - 1), this.m_dataSources + .forEach(function(t) { + t.zorder() > o && t.setZorder(t.zorder() + 1) + }), o + 1 + }, o.prototype.beginInsertManyLineDataSources = function() { + this._isInInsertManyDataSourcesState = !0, this._lastLineDataSourceZOrder = null + }, o.prototype.endInsertManyLineDataSources = function() { + this._isInInsertManyDataSourcesState = !1, this._lastLineDataSourceZOrder = null + }, o.prototype.addDataSource = function(t, e, i) { + var o; + t instanceof r && !i ? (o = null !== this._lastLineDataSourceZOrder ? this + ._lastLineDataSourceZOrder : this._newZOrderForLineTool(), this + ._isInInsertManyDataSourcesState && (this._lastLineDataSourceZOrder = o)) : o = + this.getZOrderMinMax().minZOrder - 1, this.insertDataSource(t, e, o) + }, o.prototype.insertDataSource = function(t, e, i) { + var n, r, s; + this.m_dataSources.push(t), n = !1, t === this._model.mainSeries() ? (this + .m_mainDataSource = t, n = !0) : null === this.m_mainDataSource && (this + .m_mainDataSource = t, n = !0), t._isOverlay = !1, + null !== e || this.canHaveMoreNoScaleSources() || (e = this.rightPriceScale()), + null === e && (r = this.m_rightPriceScale.topMargin(), s = this.m_rightPriceScale + .bottomMargin(), t.metaInfo && "Volume@tv-basicstudies" === t.metaInfo().id && ( + r = .75, s = 0), e = new c(this._model.properties().scalesProperties), e + .setHeight(this.m_height), e.setTopMargin(r), e.setBottomMargin(s), t + ._isOverlay = !0), e.addDataSource(t, this._isInInsertManyDataSourcesState), t + .setPriceScale(e), t.onTagsChanged && t.onTagsChanged().subscribe(this, o.prototype + .onSourceTagsChanged), t.setZorder(i), n && this._processMainSourceChange(), + this._tagsChanged.fire(), TradingView.isInherited(t.constructor, a) && this + .recalculatePriceScale(e), this.invalidateSourcesCache() + }, o.prototype.removeDataSource = function(t, e) { + var i, n = this.m_dataSources.indexOf(t); + if (-1 === n) return void l.logDebug("removeDataSource: invalid data source"); + t._isOverlay = !1, this.m_dataSources.splice(n, 1), t !== this.m_mainDataSource || e || + (this.m_mainDataSource = null), i = null, -1 !== this.m_leftPriceScale.dataSources() + .indexOf(t) ? (this.m_leftPriceScale.removeDataSource(t), i = this + .m_leftPriceScale) : -1 !== this.m_rightPriceScale.dataSources().indexOf(t) && ( + this + .m_rightPriceScale.removeDataSource(t), i = this.m_rightPriceScale), t + .onTagsChanged && t.onTagsChanged().unsubscribe(this, o.prototype + .onSourceTagsChanged), TradingView.isInherited(t.constructor, a) && this + ._processMainSourceChange(), this._tagsChanged.fire(), i && TradingView.isInherited( + t.constructor, a) && this.recalculatePriceScale(i), this + .invalidateSourcesCache() + }, o.prototype.startScalePrice = function(t, e) { + t.startScale(e) + }, o.prototype.scalePriceTo = function(t, e) { + t.scaleTo(e), this.updateAllViews() + }, o.prototype.endScalePrice = function(t) { + t.endScale() + }, o.prototype.startScrollPrice = function(t, e) { + t.startScroll(e) + }, o.prototype.scrollPriceTo = function(t, e) { + t.scrollTo(e), this.updateAllViews() + }, o.prototype.endScrollPrice = function(t) { + t.endScroll() + }, o.prototype.setPriceAutoScale = function(t, e) { + if (t.setAutoScale(e), this.timeScale().isEmpty()) return void t.setPriceRange(null); + this.recalculatePriceScale(t) + }, o.prototype.restorePriceScaleState = function(t, e) { + t.restoreState(e), this.updateAllViews() + }, o.prototype.updateAllViews = function() { + for (var t = 0; t < this.m_dataSources.length; t++) this.m_dataSources[t] + .updateAllViews() + }, o.prototype.defaultPriceScale = function() { + var t = this.m_mainDataSource ? this.m_mainDataSource.priceScale() : this + .rightPriceScale(); + return void 0 === t && (t = new c(this._model.properties().scalesProperties)), t + }, o.prototype._priceScaleIsPrice = function(t) { + var e = t.mainSource(); + return !!e && (!!TradingView.isInherited(e.constructor, TradingView.Series) || !! + TradingView.isInherited(e.constructor, TradingView.Study) && e.metaInfo() + .is_price_study) + }, o.prototype.findSuitableScale = function(t) { + if (TradingView.isInherited(t.constructor, TradingView.Study) && + "Volume@tv-basicstudies" === t.metaInfo().id) return this.m_rightPriceScale + .mainSource() || this.m_leftPriceScale.mainSource() ? null : this + .m_rightPriceScale; + var e = !1; + if (TradingView.isInherited(t.constructor, TradingView.Study) ? e = t.metaInfo() + .is_price_study : TradingView.isInherited(t.constructor, TradingView.Series) && ( + e = !0), e) { + if (this._priceScaleIsPrice(this.m_rightPriceScale)) return this.m_rightPriceScale; + if (this._priceScaleIsPrice(this.m_leftPriceScale)) return this.m_leftPriceScale + } + return this.m_rightPriceScale.mainSource() ? this.m_leftPriceScale.mainSource() ? null : + this.m_leftPriceScale : this.m_rightPriceScale + }, o.prototype.mainDataSource = function() { + return this.m_mainDataSource + }, o.prototype.recalculatePriceScale = function(t) { + var e, i; + t && (e = t.sourcesForAutoscale(), t.isAutoScale() && e && e.length > 0 && !this + .timeScale().isEmpty() && (i = this.timeScale().visibleBars(), t + .recalculatePriceRange(i)), t.updatePaneViews()) + }, o.prototype.resetPriceScale = function(t) { + var e = this.timeScale().visibleBars(); + t.isLockScale() || t.setAutoScale(!0), t.recalculatePriceRange(e), this.updateAllViews() + }, o.prototype.recalculate = function() { + var t, e; + for (this.recalculatePriceScale(this.m_rightPriceScale), this.recalculatePriceScale(this + .m_leftPriceScale), t = 0; t < this.m_dataSources.length; t++) e = this + .m_dataSources[t], !this.isOverlay(e) || e instanceof r || this + .recalculatePriceScale(e.priceScale()); + this.updateAllViews(), this._model.updatePane(this) + }, o.prototype.isEmpty = function() { + return null === this.m_mainDataSource + }, o.prototype.move = function(t, e, i) { + var o = this.m_dataSources.slice(), + n = null !== e; + this.removeDataSource(t, n), this.addDataSource(t, e, i), this.m_dataSources = o, this + .invalidateSourcesCache() + }, o.prototype.dataSourceForId = function(t) { + for (var e = 0; e < this.m_dataSources.length; e++) + if (this.m_dataSources[e].id() === t) return this.m_dataSources[e]; + return null + }, o.prototype.priceScaleForSource = function(t) { + return -1 !== this.rightPriceScale().dataSources().indexOf(t) ? this.rightPriceScale() : + -1 !== this.leftPriceScale().dataSources().indexOf(t) ? this.leftPriceScale() : null + }, o.prototype.sourceById = function(t) { + for (var e = 0; e < this.m_dataSources.length; e++) + if (this.m_dataSources[e].id() === t) return this.m_dataSources[e]; + return null + }, o.prototype.containsMainSeries = function() { + return -1 !== this.m_dataSources.indexOf(this._model.mainSeries()) + }, o.prototype.priceScaleByName = function(t) { + return "left" === t ? this.m_leftPriceScale : "right" === t ? this.m_rightPriceScale : + null + }, o.prototype.priceScaleName = function(t) { + return t === this.m_leftPriceScale ? "left" : t === this.m_rightPriceScale ? "right" : + "" + }, o.prototype.hitTestSources = function() { + var t, e, i, o, n; + if (this._cachedHitTestSources) return this._cachedHitTestSources; + for (t = this.orderedSources(), e = [], i = [this._model.crossHairSource()], o = 0; o < + t.length; o++) n = t[o], TradingView.isInherited(n.constructor, r) ? e.push(n) : i + .push(n); + return this._cachedHitTestSources = i.concat(e), this._cachedHitTestSources + }, o.prototype.orderedSources = function() { + var t, e, i, n; + if (this._cachedOrderedSoruces) return this._cachedOrderedSoruces; + for (t = [], e = 0, i = this.m_dataSources.length; e < i; e++) n = this.m_dataSources[ + e], TradingView.isInherited(n.constructor, r) && !n.isActualSymbol() || t.push( + n); + return t = o.sortSources(t), this._cachedOrderedSoruces = t, t + }, o.prototype.createDrawingsCaches = function() { + n.recreateOrderedByBarsSourcesCache(this) + }, o.prototype.clearDrawingCaches = function() { + n.clearOrderedByBarsSourcesCache() + }, o.prototype.invalidateSourcesCache = function() { + this._cachedOrderedSoruces = null, this._cachedHitTestSources = null, this + .m_leftPriceScale.invalidateSourcesCache(), this.m_rightPriceScale + .invalidateSourcesCache() + }, o.prototype.getZOrderMinMax = function() { + var t, e, i, o, n = this.orderedSources(); + if (0 === n.length) return { + minZOrder: 0, + maxZOrder: 0 + }; + for (t = n[0].zorder(), e = n[0].zorder(), i = 1; i < n.length; i++) o = n[i], o + .zorder() < t && (t = o.zorder()), o.zorder() > e && (e = o.zorder()); + return { + minZOrder: t, + maxZOrder: e + } + }, o.prototype.isZOrderAvailable = function(t) { + var e, i; + for (e = 0; e < this.m_dataSources.length; e++) + if (i = this.m_dataSources[e], i.zorder() === t) return !1; + return !0 + }, o.prototype.sendToBack = function(t) { + var e, i = this.getZOrderMinMax().minZOrder, + o = Math.abs(t.zorder() - i); + for (e = 0; e < o; e++) this.changeZOrder(t, -1) + }, o.prototype.bringToFront = function(t) { + var e, i = this.getZOrderMinMax().maxZOrder, + o = Math.abs(t.zorder() - i); + for (e = 0; e < o; e++) this.changeZOrder(t, 1) + }, o.prototype.changeZOrder = function(t, e) { + var i, o, n, r, s, a = this.orderedSources().filter(function(t) { + return t.showInObjectTree() + }), + l = 0; + for (i = 0, o = a.length; i < o; i++) + if (a[i] === t) { + l = i; + break + } l > 0 && e < 0 ? (n = a[l - 1].zorder(), r = t.zorder(), a[l - 1].setZorder(r), t + .setZorder(n)) : l < a.length - 1 && e > 0 && (s = a[l + 1].zorder(), r = t + .zorder(), a[l + 1].setZorder(r), t.setZorder(s)), this.invalidateSourcesCache() + }, o.prototype.onSourceTagsChanged = function() { + this._tagsChanged.fire() + }, o.prototype.onTagsChanged = function() { + return this._tagsChanged + }, o.prototype.dumpPriceScale = function(t) { + var e, i, o, n = t.dataSources(), + r = []; + for (e = 0; e < n.length; e++) + if (i = n[e].priceAxisViews(this, t)) + for (o = 0; o < i.length; o++) r.push(i[o].dump()); + return r + }, o.prototype.dumpViews = function() { + var t, e, i, o, n, r = {}; + for (r.paneViews = {}, t = this.orderedSources(), e = 0; e < t.length; e++) + if (i = t[e], r.paneViews[e] = [], o = i.paneViews()) + for (n = 0; n < o.size(); n++) r.paneViews[e].push(o.item(e).dump()); + return r.leftAxis = this.dumpPriceScale(this.m_leftPriceScale), r.rightAxis = this + .dumpPriceScale(this.m_rightPriceScale), r + }, o.prototype.clearSeries = function() { + for (var t = this.m_dataSources.length - 1; t >= 0; t--) TradingView.isInherited(this + .m_dataSources[t].constructor, TradingView.Series) && this.m_dataSources.splice( + t, 1) + }, o.prototype.nonOverlayPricesSourcesCount = function() { + return this.m_dataSources.filter(function(t) { + return (!t.properties().linkedToSeries || !t.properties().linkedToSeries + .value()) && (TradingView.isInherited(t.constructor, a) && t + .showInObjectTree() && !t.isNoScale()) + }).length + }, o.prototype.canHaveMoreNoScaleSources = function() { + return this.nonOverlayPricesSourcesCount() > 1 + }, o.prototype.actionNoScaleIsEnabled = function(t) { + return !(!this.isOverlay(t) && TradingView.isInherited(t.constructor, a)) || this + .canHaveMoreNoScaleSources() + }, o.prototype.executionsPositionController = function() { + return this._executionsPositionController || (this._executionsPositionController = + new n(this, this._model.timeScale())), this._executionsPositionController + }, o.prototype.isLast = function() { + var t = this._model.panes(); + return t[t.length - 1] === this + }, + o.prototype.setMaximized = function(t) { + this._maximized = t + }, o.prototype.isMaximized = function() { + return this._maximized + }, o.prototype.isMainPane = function() { + var t = this._model.mainSeries(), + e = !1; + return this.m_dataSources.forEach(function(i) { + e || (e = i === t) + }), this._isMainPane = e, e + }, o.prototype.properties = function() { + return this._properties + }, o.prototype._mainSourceVisiblePriceRange = function(t) { + var e = this.m_timeScale.visibleBars(); + return null !== e ? t.mainSource().priceRange(e.firstBar(), e.lastBar()) : new s(-.5, + .5) + }, o.prototype.applyLeftPriceScaleRatio = function(t) { + this._lastLeftPriceScaleRatio !== t && (this._setNewPriceRangeByScaleRatio(this + .m_leftPriceScale, t, this._mainSourceVisiblePriceRange(this + .m_leftPriceScale), !0, !0), this._tryToApplyNewLeftPriceScaleRatio(h( + this.m_timeScale, this.m_leftPriceScale))) + }, o.prototype.applyRightPriceScaleRatio = function(t) { + this._lastRightPriceScaleRatio !== t && (this._setNewPriceRangeByScaleRatio(this + .m_rightPriceScale, t, this._mainSourceVisiblePriceRange(this + .m_rightPriceScale), !0, !0), this._tryToApplyNewRightPriceScaleRatio(h( + this.m_timeScale, this.m_rightPriceScale))) + }, o.prototype.isLeftPriceScaleLocked = function() { + return !this.m_leftPriceScale.isLog() && this.m_leftPriceScale.isLockScale() + }, o.prototype.isRightPriceScaleLocked = function() { + return !this.m_rightPriceScale.isLog() && this.m_rightPriceScale.isLockScale() + }, o.prototype.leftPriceScaleRatio = function() { + return null === this._lastLeftPriceScaleRatio && (this._lastLeftPriceScaleRatio = h(this + .m_timeScale, this.m_leftPriceScale)), this._lastLeftPriceScaleRatio + }, o.prototype.rightPriceScaleRatio = function() { + return null === this._lastRightPriceScaleRatio && (this._lastRightPriceScaleRatio = h( + this.m_timeScale, this.m_rightPriceScale)), this._lastRightPriceScaleRatio + }, o.prototype._mainSeriesPaneScaleRatioOnChange = function() { + this.isMainPane() && (this._lastLeftPriceScaleRatio = null, this + ._lastRightPriceScaleRatio = null, this._model + .mainSeriesScaleRatioPropertyOnChanged()) + }, o.prototype._applyOldScaleRatioToPriceScale = function(t, e) { + if (this._isRecalculatingScales || null === e || void 0 === e) return !1; + this._isRecalculatingScales = !0, this._setNewPriceRangeByScaleRatio(t, e, this + ._mainSourceVisiblePriceRange(t)), this._isRecalculatingScales = !1 + }, o.prototype._applyOldScaleRatioToTimeScale = function(t, e) { + if (this._isRecalculatingScales || null === e || void 0 === e) return !1; + this._isRecalculatingScales = !0, this._setNewBarSpacingByScaleRatio(t, e), this + ._isRecalculatingScales = !1 + }, o.prototype._tryToApplyNewLeftPriceScaleRatio = function(t) { + if (this._lastLeftPriceScaleRatio === t) return !1; + this._leftPriceScaleRatioChanged.fire(this._lastLeftPriceScaleRatio, t), this + ._lastLeftPriceScaleRatio = t + }, o.prototype._tryToApplyNewRightPriceScaleRatio = function(t) { + if (this._lastRightPriceScaleRatio === t) return !1; + this._rightPriceScaleRatioChanged.fire(this._lastRightPriceScaleRatio, t), this + ._lastRightPriceScaleRatio = t + }, o.prototype._recalculatePriceScaleByScaleRatio = function() { + this.isMainPane() && (this.m_leftPriceScale.mainSource() && (this + .isLeftPriceScaleLocked() && null !== this._lastLeftPriceScaleRatio ? this + ._applyOldScaleRatioToPriceScale(this.m_leftPriceScale, this + ._lastLeftPriceScaleRatio) : this._tryToApplyNewLeftPriceScaleRatio(h( + this.m_timeScale, this.m_leftPriceScale))), this.m_rightPriceScale + .mainSource() && (this.isRightPriceScaleLocked() && null !== this + ._lastRightPriceScaleRatio ? this._applyOldScaleRatioToPriceScale(this + .m_rightPriceScale, this._lastRightPriceScaleRatio) : this + ._tryToApplyNewRightPriceScaleRatio(h(this.m_timeScale, this + .m_rightPriceScale)))) + }, o.prototype._recalculateTimeScaleByLeftScaleRatio = function() { + this.isLeftPriceScaleLocked() && null !== this._lastLeftPriceScaleRatio ? this + ._applyOldScaleRatioToTimeScale(this.m_leftPriceScale, this + ._lastLeftPriceScaleRatio) : this._tryToApplyNewLeftPriceScaleRatio(h(this + .m_timeScale, this.m_leftPriceScale)) + }, o.prototype._recalculateTimeScaleByRightScaleRatio = function() { + this.isRightPriceScaleLocked() && null !== this._lastRightPriceScaleRatio ? this + ._applyOldScaleRatioToTimeScale(this.m_rightPriceScale, this + ._lastRightPriceScaleRatio) : this._tryToApplyNewRightPriceScaleRatio(h(this + .m_timeScale, this.m_rightPriceScale)) + }, o.prototype._setNewPriceRangeByScaleRatio = function(t, e, i, o, n) { + var r = u(t, this.m_timeScale.barSpacing(), e); + t.setPriceRange(null !== r ? r : i, o, n) + }, o.prototype._setMinMaxPriceRange = function(t, e) { + var i = u(t, this.m_timeScale.maxBarSpacing(), e), + o = u(t, this.m_timeScale.minBarSpacing(), e); + null !== i && t.setMaxPriceRange(i), null !== o && t.setMinPriceRange(o) + }, o.prototype._onLeftPriceScaleSetMinMaxPriceRange = function() { + this._setMinMaxPriceRange(this.m_leftPriceScale, this._lastLeftPriceScaleRatio) + }, o.prototype._onRightPriceScaleSetMinMaxPriceRange = function() { + this._setMinMaxPriceRange(this.m_rightPriceScale, this._lastRightPriceScaleRatio) + }, o.prototype._setNewBarSpacingByScaleRatio = function(t, e) { + var i = this.m_timeScale.getValidBarSpacing(d(t, e)); + this.m_timeScale.isValidBarSpacing(i) && this.m_timeScale.setBarSpacing(i) + }, t.exports = o + }).call(e, i(10)) + }, function(t, e, i) { + "use strict"; + (function(e, o) { + function n(t, e) { + if (this.m_base = t, this.m_integralDividers = e, this.m_fractionalDividers = [], c + .isBaseDecimal(this.m_base)) this.m_fractionalDividers = [2, 2.5, 2]; + else + for (var i = this.m_base; 1 !== i;) { + if (i % 2 == 0) this.m_fractionalDividers.push(2), i /= 2; + else { + if (i % 5 != 0) throw new RangeError("unexpected base"); + this.m_fractionalDividers.push(2), this.m_fractionalDividers.push(2.5), i /= 5 + } + if (this.m_fractionalDividers.length > 100) throw Error("something wrong with base") + } + } + + function r(t, e, i) { + this.m_marks = [], this.m_base = e, this.m_priceScale = t, this._formatter = i, i && (this + ._cache = new h(function(t) { + return i.format(t) + })), this._currentFormatBase = 0 + } + + function s(t) { + for (var e = 1; t * e !== Math.round(t * e);) e *= 10; + return e + } + + function a(t, i) { + function n() { + var t, e, i = s.m_dataSources; + for (t = 0; t < i.length; t++) e = i[t], e.priceScaleChanged && e.priceScaleChanged + .fire(s) + } + this._properties = new e(i || l), this._scalesProperties = t, this.m_height = 0, this + ._internalHeightCache = null, this._internalHeightChanged = new o, this.m_priceRange = + null, + this._priceRangeChanged = new o, this.m_dataSources = [], this.m_topMargin = 0, this + .m_bottomMargin = 0, this._studyTopMargin = 0, this._studyBottomMargin = 0, this + .m_scrollStartPoint = null, this.m_scaleStartPoint = null, this.m_maxPriceRange = null, + this.m_minPriceRange = null, this.m_priceRangeSnapshot = null, this + ._invalidatedForRange = { + isValid: !0 + }, this.onMarksChanged = new o, this.m_markBuilder = new r(this, 100, new f(100)), this + ._properties.percentage.listeners().subscribe(this, a.prototype.updateFormatter); + var s = this; + this._properties.log.listeners().subscribe(null, function(t) { + var e, i, o, n; + s.m_priceRange && (e = s.m_priceRange, t.value() ? (i = new g(s._toLog(e + .minValue()), s._toLog(e.maxValue())), s.setPriceRange(i)) : (o = s + ._fromLog(e.minValue()), n = s._fromLog(e.maxValue()), isFinite( + o) && isFinite(n) ? (i = new g(o, n), s.setPriceRange(i)) : s + .properties().autoScale.setValue(!0))) + }), this._properties.percentage.listeners().subscribe(null, function() { + s._properties.autoScale.setValue(!0) + }), this._properties.percentage.listeners().subscribe(null, function() { + var t, e, i; + s._properties.autoScaleDisabled.setValue(s._properties.percentage.value()), t = + s.priceRange(), s.mainSource() && !s.mainSource().model().timeScale() + .isEmpty() && !s.mainSource().data().isEmpty() && s.isLockScale() && t && ( + e = s.mainSource().model().timeScale().visibleBars(), i = s.mainSource() + .data().search(e.firstBar(), _.NearestRight).value[TradingView + .CLOSE_PLOT], null != t && void 0 !== i && (s._properties.percentage + .value() ? s.setPriceRange(t.convertToPercents(i)) : s + .setPriceRange(t.convertFromPercents(i)))) + }), this._properties.lockScale.listeners().subscribe(null, function(t) { + var e = t.value(); + e && (s._properties.autoScale.setValue(!1), s._properties.percentage.setValue(! + 1), s._properties.log.setValue(!1)), s._properties.percentageDisabled + .setValue(e), s._properties.logDisabled.setValue(e) + }), this._sourcesForAutoscale = null, this._sourcesToUpdateViews = null, this + ._hasSeries = !1, this._properties.percentage.listeners().subscribe(null, n), this + ._properties.log.listeners().subscribe(null, n), this._properties.listeners().subscribe( + null, + function() { + s.mainSource() && s.mainSource().model() && s.mainSource().model().fullUpdate() + }) + } + var l, c = i(54), + h = i(226), + u = i(1).LineDataSource, + d = i(46).PriceDataSource, + p = i(77), + _ = i(19).PlotRowSearchMode, + f = i(28).PriceFormatter, + m = i(167).PercentageFormatter, + g = i(73); + n.prototype.TICK_SPAN_EPSILON = 1e-9, n.prototype.tickSpan = function(t, e, i) { + var o, n = 0 === this.m_base ? 0 : 1 / this.m_base, + r = this.TICK_SPAN_EPSILON, + s = Math.pow(10, Math.max(0, Math.ceil(c.log10(t - e)))), + a = 0; + for (a = 0, o = this.m_integralDividers[0]; s > n + r && c.greaterOrEqual(s, n, r) && c + .greaterOrEqual(s, i * o, r) && c.greaterOrEqual(s, 1, r); ++a, o = this + .m_integralDividers[a % this.m_integralDividers.length]) s /= o; + if (s <= n + r && (s = n), s = Math.max(1, s), this.m_fractionalDividers.length > 0 && c + .equal(s, 1, r)) + for (a = 0, o = this.m_fractionalDividers[0]; s > n + r && c.greaterOrEqual(s, i * + o, r); ++a, o = this.m_fractionalDividers[a % this.m_fractionalDividers + .length]) s /= o; + return s + }, r.prototype.TICK_DENSITY = 2.5, r.prototype.base = function() { + return this.m_base + }, r.prototype.setBase = function(t) { + if (t < 0) throw new RangeError("base < 0"); + this.m_base = t + }, + r.prototype.fontHeight = function() { + return this.m_priceScale.fontSize() + }, r.prototype.tickSpan = function(t, e) { + var i, o, r, s, a, l, h; + if (t < e) throw new RangeError("high < low"); + return i = this.m_priceScale.height(), o = this.tickMarkHeight(), r = (t - e) * o / i, + s = new n(this.m_base, [2, 2.5, 2]), a = new n(this.m_base, [2, 2, 2.5]), l = new n( + this.m_base, [2.5, 2, 2]), h = [], h.push(s.tickSpan(t, e, r)), h.push(a + .tickSpan(t, e, r)), h.push(l.tickSpan(t, e, r)), c.min(h) + }, r.prototype.tickMarkHeight = function() { + return Math.ceil(this.fontHeight() * this.TICK_DENSITY) + }, r.prototype.rebuildTickMarks = function() { + var t, e, i, o, n, r, a, l, c, u, d, p, _; + if (null === this.m_priceScale) throw new TypeError("scale is null"); + if (this.m_priceScale.isEmpty()) return void(this.m_marks = []); + if (t = this.m_priceScale.height(), e = this.m_priceScale.coordinateToPrice(t - 1), i = + this.m_priceScale.coordinateToPrice(0), o = i >= e ? 1 : -1, n = Math.max(i, e), r = + Math.min(i, e), i = n, e = r, i !== e) + for (a = this.tickSpan(i, e), l = i % a, l += l < 0 ? a : 0, this.m_marks = [], this + ._formatter || (c = s(a), this._cache && this._currentFormatBase === c || (u = + new f(c), this._cache = new h(function(t) { + return u.format(t) + }))), d = null, p = i - l; p > e; p -= a) _ = this.m_priceScale + .priceToCoordinate(p), null !== d && Math.abs(_ - d) < this.tickMarkHeight() || + (this.m_marks.push({ + coord: _, + label: this._cache.format(p) + }), d = _, this.m_priceScale.isLog() && (a = this.tickSpan(p * o, e))) + }, r.prototype.marks = function() { + return this.m_marks + }, l = { + autoScale: !0, + autoScaleDisabled: !1, + lockScale: !1, + percentage: !1, + percentageDisabled: !1, + log: !1, + logDisabled: !1, + alignLabels: !0 + }, a.prototype.isLog = function() { + return this._properties.log.value() + }, a.prototype.isPercent = function() { + return this._properties.percentage.value() + }, a.prototype.isPercentage = function() { + return this._properties.percentage.value() + }, a.prototype.properties = function() { + return this._properties + }, a.prototype.fontSize = function() { + return this._scalesProperties.fontSize.value() + }, a.prototype.height = function() { + return this.m_height + }, a.prototype.setHeight = function(t) { + this.m_height !== t && (this.m_height = t, this._invalidateInternalHeightCache(), this + ._marksCache = null) + }, a.prototype.topMargin = function() { + return Math.max(this.m_topMargin, this._studyTopMargin) + }, a.prototype.setTopMargin = function(t) { + if (!isNumber(t)) throw new TypeError("invalid margin"); + if (t < 0 || t > 30) throw new RangeError("invalid margin"); + this.m_topMargin !== t && (this.m_topMargin = t, this._invalidateInternalHeightCache(), + this._marksCache = null) + }, a.prototype.bottomMargin = function() { + return Math.max(this.m_bottomMargin, this._studyBottomMargin) + }, a.prototype.setBottomMargin = function(t) { + if (!isNumber(t)) throw new TypeError("invalid margin"); + if (t < 0 || t > 30) throw new RangeError("invalid margin"); + this.m_bottomMargin !== t && (this.m_bottomMargin = t, this + ._invalidateInternalHeightCache(), this._marksCache = null) + }, a.prototype.internalHeight = function() { + if (this._internalHeightCache) return this._internalHeightCache; + var t = this.height() * (1 - this.topMargin() - this.bottomMargin()); + return this._internalHeightCache = t, t + }, a.prototype._invalidateInternalHeightCache = function() { + this._internalHeightCache = null, this._internalHeightChanged.fire() + }, + a.prototype.internalHeightChanged = function() { + return this._internalHeightChanged + }, a.prototype.priceRange = function() { + return this.makeSureItIsValid(), this.m_priceRange + }, a.prototype.priceRangeChanged = function() { + return this._priceRangeChanged + }, a.prototype.setPriceRange = function(t, e, i) { + var o, n, r; + if (!(t instanceof g)) throw new TypeError("incorrect price range"); + return o = this.m_priceRange, !!(e || null === o && null !== t || null !== o && !o + .equals(t)) && (n = null !== this.m_maxPriceRange && this.m_maxPriceRange + .containsStrictly(t), r = null !== this.m_minPriceRange && t.containsStrictly( + this.m_minPriceRange), !(this.isLockScale() && !e && (n || r)) && (this + ._marksCache = null, this.m_priceRange = t, void(i || this + ._priceRangeChanged.fire(o, t)))) + }, a.prototype.isEmpty = function() { + return this.makeSureItIsValid(), 0 === this.m_height || !this.m_priceRange || this + .m_priceRange.isEmpty() + }, a.prototype.invertedCoordinate = function(t) { + return this.height() - 1 - t + }, a._logicalOffset = 4, a._coordOffset = 1e-4, a.prototype.log10 = function(t) { + return Math.log(t) / Math.log(10) + }, a.prototype._toLog = function(t) { + var e, i = Math.abs(t); + return i < 1e-8 ? 0 : (e = this.log10(i + a._coordOffset) + a._logicalOffset, t < 0 ? - + e : e) + }, a.prototype.priceToLogical = function(t) { + return this.isLog() && t ? this._toLog(t) : t + }, a.prototype._fromLog = function(t) { + var e, i = Math.abs(t); + return i < 1e-8 ? 0 : (e = Math.pow(10, i - a._logicalOffset) - a._coordOffset, t < 0 ? + -e : e) + }, a.prototype.logicalToPrice = function(t) { + return this.isLog() ? this._fromLog(t) : t + }, a.prototype.priceToCoordinate = function(t, e) { + var i, o; + return this.makeSureItIsValid(), this.isEmpty() ? 0 : (t = this.priceToLogical(t), i = + this.bottomMargin() * this.height() + (this.internalHeight() - 1) * (t - this + .priceRange().minValue()) / (this.priceRange().maxValue() - this + .priceRange().minValue()), o = this.invertedCoordinate(i), e ? o : Math + .round(o) + ) + }, a.prototype.pricesToCoordinates = function(t) { + this.pricesToCoordinatesEx(t, function(t) { + return t.y + }, function(t, e) { + t.y = e + }) + }, a.prototype.pricesToCoordinatesEx = function(t, e, i) { + var o, n, r, s, a, l, c, h, u; + if (this.makeSureItIsValid(), o = this.bottomMargin() * this.height(), n = this + .priceRange().minValue(), r = this.priceRange().maxValue(), s = this + .internalHeight() - 1, a = s / (r - n), this.isLog()) + for (l = 0; l < t.length; l++) c = e(t[l]), i(t[l], this.priceToLogical(c)); + for (l = 0; l < t.length; l++) c = e(t[l]), TradingView.isNaN(c) || void 0 === c || + null === c || (h = o + a * (c - n), u = this.m_height - 1 - h, i(t[l], Math.round( + u))) + }, a.prototype.pointsArrayToCoordinates = function(t) { + var e, i, o, n, r, s, a, l, c; + if (this.makeSureItIsValid(), e = this.bottomMargin() * this.height(), i = this + .priceRange().minValue(), o = this.priceRange().maxValue(), n = this + .internalHeight() - 1, r = n / (o - i), this.isLog()) + for (s = 0; s < t.length; s++) t[s].y = this.priceToLogical(t[s].y); + for (s = 0; s < t.length; s++) a = t[s].y, TradingView.isNaN(a) || void 0 === a || + null === a || (l = e + r * (a - i), c = this.m_height - 1 - l, t[s].y = Math.round( + c)) + }, a.prototype.pricesArrayToCoordinates = function(t) { + var e, i, o, n, r, s, a, l, c; + if (this.makeSureItIsValid(), e = this.bottomMargin() * this.height(), i = this + .priceRange().minValue(), o = this.priceRange().maxValue(), n = this + .internalHeight() - 1, r = n / (o - i), this.isLog()) + for (s = 0; s < t.length; s++) t[s] = this.priceToLogical(t[s]); + for (s = 0; s < t.length; s++) void 0 !== (a = t[s]) && null !== a && (l = e + r * (a - + i), c = this.m_height - 1 - l, t[s] = Math.round(c)) + }, a.prototype.barPricesToCoordinates = function(t) { + var e, i, o, n, r, s, a, l, c, h, u; + if (this.makeSureItIsValid(), e = t, i = this.bottomMargin() * this.height(), o = this + .priceRange().minValue(), n = this.priceRange().maxValue(), r = this + .internalHeight() - 1, s = r / (n - o), this.isLog()) + for (a = 0; a < e.length; a++) e[a] && (e[a].open = this.priceToLogical(e[a].open), + e[a].high = this.priceToLogical(e[a].high), e[a].low = this.priceToLogical( + e[a].low), e[a].close = this.priceToLogical(e[a].close), e[a] + .additionalPrice && (e[a].additionalPrice = this.priceToLogical(e[a] + .additionalPrice))); + for (a = 0; a < e.length; a++)(l = e[a]) && (c = l.open, h = i + s * (c - o), u = this + .m_height - 1 - h, l.open = Math.round(u), c = l.high, h = i + s * (c - o), u = + this.m_height - 1 - h, l.high = Math.round(u), c = l.low, h = i + s * (c - o), + u = this.m_height - 1 - h, l.low = Math.round(u), c = l.close, h = i + s * (c - + o), u = this.m_height - 1 - h, l.close = Math.round(u), l.additionalPrice && + (c = l.additionalPrice, h = i + s * (c - o), u = this.m_height - 1 - h, l + .additionalPrice = Math.round(u))) + }, a.prototype.coordinateToPrice = function(t) { + var e, i; + return this.makeSureItIsValid(), this.isEmpty() ? 0 : (e = this.invertedCoordinate(t), + i = this.priceRange().minValue() + (this.priceRange().maxValue() - this + .priceRange().minValue()) * ((e - this.bottomMargin() * this.height()) / ( + this.internalHeight() - 1)), this.logicalToPrice(i)) + }, a.prototype.dataSources = function() { + return this.m_dataSources + }, a.prototype.orderedSources = function() { + var t, e, o, n; + if (this._cachedOrderedSoruces) return this._cachedOrderedSoruces; + for (t = [], e = 0; e < this.m_dataSources.length; e++) o = this.m_dataSources[e], + null == o.zorder() && o.setZorder(e + 1), t.push(o); + return n = i(228), t = n.sortSources(t), this._cachedOrderedSoruces = t, this + ._cachedOrderedSoruces + }, a.prototype.invalidateSourcesCache = function() { + this._cachedOrderedSoruces = null + }, a.prototype.hasSeries = function() { + return this._hasSeries + }, a.prototype.addDataSource = function(t, e) { + var i, o; + (e || -1 === this.m_dataSources.indexOf(t)) && (TradingView.isInherited(t.constructor, + p) && (i = t.properties(), !0 !== this._hasSeries && (i.lockScale && (this + ._properties.lockScale.setValue(i.lockScale.value()), i.removeProperty( + "lockScale")), i.pnfStyle.lockScale && i.pnfStyle.removeProperty( + "lockScale")), this._hasSeries = !0), o = this, t.properties().visible + .listeners().subscribe(null, function() { + o._sourcesForAutoscale = null + }), this.m_dataSources.push(t), this._mainSource = void 0, this + ._sourcesForAutoscale = null, this._sourcesToUpdateViews = null, this + .updateFormatter(), this.initScaleProperties(), this.invalidateSourcesCache()) + }, a.prototype.initScaleProperties = function() { + var t = this.isLockScale(); + t && (this.properties().percentage.setValue(!1), this.properties().log.setValue(!1), + this.properties().autoScale.setValue(!1)), this.properties().percentageDisabled + .setValue(t), this.properties().logDisabled.setValue(t), this.properties() + .autoScaleDisabled.setValue(this.properties().percentage.value()), this.properties() + .percentage.value() && this.properties().log.setValue(!1) + }, a.prototype.removeDataSource = function(t) { + var e = this.m_dataSources.indexOf(t); + if (-1 === e) throw Error("source is not attached to scale"); + this.m_dataSources.splice(e, 1), TradingView.isInherited(t.constructor, p) && (this + ._hasSeries = !1), this.mainSource() || this.setAutoScale(!0), this + ._mainSource = void 0, this._sourcesForAutoscale = null, this + ._sourcesToUpdateViews = null, this.updateFormatter(), this.invalidateSourcesCache() + }, a.prototype.isAutoScale = function() { + return this._properties.autoScale.value() && !this.isLockScale() + }, a.prototype.isLockScale = function() { + return this._properties.lockScale.value() + }, a.prototype.setAutoScale = function(t) { + this._properties.autoScale.setValue(t) + }, a.prototype.isScaled = function() { + return "number" == typeof this.m_scaleStartPoint + }, a.prototype.startScale = function(t) { + this.isPercentage() || null === this.m_scaleStartPoint && null === this + .m_priceRangeSnapshot && (this.isEmpty() || (this.m_scaleStartPoint = this + .m_height - t, this.m_priceRangeSnapshot = this.priceRange().clone())) + }, a.prototype.marks = function() { + return this._marksCache ? this._marksCache : (this.m_markBuilder.rebuildTickMarks(), + this._marksCache = this.m_markBuilder.marks(), this.onMarksChanged.fire(), this + ._marksCache) + }, a.prototype.setMaxPriceRange = function(t) { + this.m_maxPriceRange = t + }, a.prototype.setMinPriceRange = function(t) { + this.m_minPriceRange = t + }, a.prototype.scaleTo = function(t) { + var e, i; + this.isPercentage() || null !== this.m_scaleStartPoint && (this.setAutoScale(!1), t = + this.m_height - t, t < 0 && (t = 0), e = (this.m_scaleStartPoint + .2 * (this + .m_height - 1)) / (t + .2 * (this.m_height - 1)), i = this + .m_priceRangeSnapshot.clone(), e = Math.max(e, .1), i.scaleAroundCenter(e), this + .setPriceRange(i)) + }, a.prototype.endScale = function() { + this.isPercentage() || null !== this.m_scaleStartPoint && (this.m_scaleStartPoint = + null, this.m_priceRangeSnapshot = null) + }, a.prototype.startScroll = function(t) { + this.isAutoScale() || null === this.m_scrollStartPoint && null === this + .m_priceRangeSnapshot && (this.isEmpty() || (this.m_scrollStartPoint = t, this + .m_priceRangeSnapshot = this.priceRange().clone())) + }, a.prototype.scrollTo = function(t) { + var e, i, o, n; + this.isAutoScale() || null !== this.m_scrollStartPoint && (e = this.priceRange() + .length() / (this.height() - 1), i = t - this.m_scrollStartPoint, o = i * e, n = + this.m_priceRangeSnapshot.clone(), n.shift(o), this.setPriceRange(n, !0), this + ._marksCache = null) + }, a.prototype.endScroll = function() { + this.isAutoScale() || null !== this.m_scrollStartPoint && (this.m_scrollStartPoint = + null, this.m_priceRangeSnapshot = null) + }, a.prototype.state = function() { + var t = {}; + return t.m_priceRange = this.priceRange() ? this.priceRange().serialize() : null, t + .m_isAutoScale = this.isAutoScale(), t.m_isPercentage = this._properties.percentage + .value(), t.m_isLog = this._properties.log.value(), t.m_isLockScale = this + .isLockScale(), t.m_height = this.m_height, t.m_topMargin = this.m_topMargin, t + .m_bottomMargin = this.m_bottomMargin, t + }, a.prototype.restoreState = function(t) { + var e = t.m_priceRange; + if (void 0 === e) throw new TypeError("invalid state"); + if (void 0 === t.m_isAutoScale) throw new TypeError("invalid state"); + void 0 !== t.m_isPercentage && this._properties.percentage.setValue(t.m_isPercentage), + void 0 !== t.m_isLog && this._properties.log.setValue(t.m_isLog), + void 0 !== t.m_isLockScale && this._properties.lockScale.setValue(t.m_isLockScale), + e ? this.setPriceRange(new g(e), !0) : this.m_priceRange = null, void 0 !== t + .m_height && (this.m_height = Math.max(0, t.m_height)), this.setAutoScale(t + .m_isAutoScale), void 0 !== t.m_topMargin && (this.m_topMargin = t.m_topMargin), + void 0 !== t.m_bottomMargin && (this.m_bottomMargin = t.m_bottomMargin), this + ._mainSource = void 0, this._scaleSeriesOnly = !1 + }, a.prototype.mainSource = function() { + var t, e; + if (void 0 !== this._mainSource) return this._mainSource; + for (t = void 0, e = 0; e < this.m_dataSources.length; e++) { + if (TradingView.isInherited(this.m_dataSources[e].constructor, p)) { + t = this.m_dataSources[e]; + break + }!t && TradingView.isInherited(this.m_dataSources[e].constructor, d) && (t = this + .m_dataSources[e]) + } + return this._mainSource = t, this._mainSource || null + }, a.prototype.formatter = function() { + return this._formatter || this.updateFormatter(), this._formatter + }, a.prototype.updateFormatter = function() { + var t, e; + this._marksCache = null, t = this.mainSource(), e = 100, t && (e = t.base()), this + ._formatter = null, this.properties().percentage.value() ? this._formatter = new m : + this._formatter = t ? t.formatter() : new f(100, 1), this.m_markBuilder = new r( + this, e, this._formatter), this.m_markBuilder.rebuildTickMarks() + }, a.prototype._recalculateSourcesForAutoscale = function() { + var t, e; + this._mainSource && (this._scaleSeriesOnly = this._scalesProperties.scaleSeriesOnly + .value()), t = this._scaleSeriesOnly && this._hasSeries, e = function(e) { + return !!(e.properties().visible.value() || e instanceof p) && (t ? TradingView + .isInherited(e.constructor, p) : TradingView.isInherited(e.constructor, + d)) + }, this._sourcesForAutoscale = this.m_dataSources.filter(e) + }, a.prototype.sourcesForAutoscale = function() { + return this._mainSource && this._scaleSeriesOnly !== this._scalesProperties + .scaleSeriesOnly.value() && (this._sourcesForAutoscale = null), this + ._sourcesForAutoscale || this._recalculateSourcesForAutoscale(), this + ._sourcesForAutoscale + }, a.prototype.recalculatePriceRange = function(t) { + this._invalidatedForRange = { + visibleBars: t, + isValid: !1 + } + }, a.prototype.makeSureItIsValid = function() { + this._invalidatedForRange.isValid || (this._invalidatedForRange.isValid = !0, this + .recalculatePriceRangeImpl()) + }, a.prototype.recalculatePriceRangeImpl = function() { + var t, e, i, o, n, r, s, a, l, c, h = this._invalidatedForRange.visibleBars; + if (null !== h) { + for (t = null, e = this.sourcesForAutoscale(), i = 0, o = 0, n = 0; n < e + .length; n++) r = e[n], r.properties().visible.value() && (s = h.firstBar(), a = + h.lastBar(), l = r.priceRange(s, a), null === t && l ? t = l : l && (t = t + .merge(l)), r.margins && (c = r.margins(), i = Math.max(c[0], i), o = + Math.max(c[1], o))); + (Math.abs(o - this._studyBottomMargin) > .01 || Math.abs(i - this._studyTopMargin) > + .01) && (this._studyBottomMargin = o, this._studyTopMargin = i, this + ._marksCache = null, this._invalidateInternalHeightCache()), t ? (t + .minValue() === t.maxValue() && (t = new g(t.minValue() - .5, t.maxValue() + + .5)), this.setPriceRange(t)) : this.m_priceRange || this.setPriceRange( + new g(-.5, .5)), this._invalidatedForRange.isValid = !0 + } + }, a.prototype.sourcesToUpdateViews = function() { + var t, e; + if (!this._sourcesToUpdateViews) + for (this._sourcesToUpdateViews = [], t = 0; t < this.m_dataSources.length; t++) e = + this.m_dataSources[t], + TradingView.isInherited(e.constructor, u) && !e.isActualSymbol() || this + ._sourcesToUpdateViews.push(e); + return this._sourcesToUpdateViews + }, a.prototype.updatePaneViews = function() { + var t, e = this.sourcesToUpdateViews(); + for (t = 0; t < e.length; t++) e[t].updateAllViews() + }, a.prototype.priceRangeInPrice = function() { + var t, e, i, o, n, r; + return this.isEmpty() ? null : this.isPercent() ? (t = this.mainSource().model() + .timeScale().visibleBars(), e = this.mainSource().data().search(t.firstBar(), _ + .NearestRight).value[TradingView.CLOSE_PLOT], i = this.priceRange() + .convertFromPercents(e), { + from: i.minValue(), + to: i.maxValue() + }) : (o = this.height(), n = this.coordinateToPrice(o - 1), r = this + .coordinateToPrice(0), { + from: n, + to: r + }) + }, t.exports = a + }).call(e, i(25), i(10)) + }, function(t, e, i) { + "use strict"; + + function o(t, e, i) { + this.source = t, this.pane = e, this._rendererFactory = i + } + + function n(t, e) { + this._barWidth = t.barWidth, this._plates = t.plates, this._tooltip = t.tooltip, this._model = e + } + + function r() { + this._layout = [], this._currentId = void 0, this.tooltipHovered = !1 + } + var s = i(8).Point, + a = i(60).pointInCircle, + l = i(11); + o.prototype.update = function() {}, o.prototype.renderer = function() { + return this._rendererFactory(this.source) + }, n.prototype.draw = function(t) { + t.save(); + for (var e = 0; e < this._plates.length; e++) + if (this._plates[e].highlightByAuthor) { + this._highlightByAuthor = !0; + break + } this._plates.forEach(this._drawItem.bind(this, t)), this._tooltip.draw(this._plates.map( + function(t) { + return this._plateTransform(t) + }.bind(this)), t), this._tooltip.endDraw(), t.restore() + }, n.prototype._drawItem = function(t, e) { + t.save(), this._highlightByAuthor && !e.highlightByAuthor && (t.globalAlpha = .4); + var i = this._dotTransform(e); + i.mine ? this._drawTriangle(t, i) : this._drawDot(t, i), t.restore() + }, n.prototype._commonTransform = function(t) { + var e = Math.max(1.4 * t.minSize, this._barWidth + 4), + i = t.y + { + up: -1, + down: 1 + } [t.direction] * (e * (t.order + .6) + .25 * e), + o = TradingView.clone(t.overridedTheme || this.themes[t.theme]); + return o.dotBorderWidth = t.hovered || t.highlightByAuthor ? 4 : 2, { + id: t.id, + theme: o, + themeName: t.theme, + x: Math.round(t.x + 1), + y: Math.round(i), + pinned: t.pinned, + hovered: t.hovered + } + }, n.prototype._dotTransform = function(t) { + var e = this._commonTransform(t); + return e.radius = Math.max(t.minSize / 2, .4 * this._barWidth), e.label = t.label, e + .labelFontColor = t.labelFontColor, e.labelFontSize = Math.ceil(Math.max(10, Math.min(e + .radius, 20))), this._model.updateDotData(t, e) + }, n.prototype._plateTransform = function(t) { + var e = this._commonTransform(t); + return this._model.updatePlateData(t, e) + }, n.THEMES = ["green", "red", "neutral", "yellow", "blue"], n.prototype.themes = { + green: { + border: "#78C143", + background: "#8DDD54" + }, + red: { + border: "#CC4545", + background: "#ED5A5A" + }, + neutral: { + border: "#EAC300", + background: "#FFD400" + }, + yellow: { + border: "#EAC300", + background: "#FFD400" + }, + blue: { + border: "#047ACE", + background: "#0496FF" + } + }, n.prototype._drawTriangle = function(t, e) { + var i, o, n, r; + t.strokeStyle = e.theme.border, t.fillStyle = e.theme.background, t.lineWidth = e.theme + .dotBorderWidth, i = e, o = e.radius, n = Math.cos(Math.PI / 6) * o, r = Math.sin(Math.PI / + 6) * o, t.translate(i.x, i.y), "up" === e.direction && t.rotate(Math.PI), e.public || (t + .lineWidth /= 2), t.beginPath(), t.moveTo(0, -o), t.lineTo(n, r), + t.lineTo(-n, r), t.lineTo(0, -o), t.closePath(), t.stroke(), e.public && t.fill() + }, n.prototype._drawDot = function(t, e) { + t.strokeStyle = e.theme.border, t.fillStyle = e.theme.background, t.lineWidth = e.theme + .dotBorderWidth, t.beginPath(), t.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), t + .closePath(), t.stroke(), t.fill(), e.label && e.radius > 6 && (t.textAlign = "center", t + .textBaseline = "middle", t.font = "bold " + e.labelFontSize + "px Arial", t.fillStyle = + e.labelFontColor, t.fillText(e.label, e.x, e.y)) + }, n.prototype.hitTest = function(t) { + var e, i; + for (i = this._plates.length - 1; i >= 0; --i) + if (e = this._hitTestDot(this._plates[i], t)) return e; + return null + }, n.prototype._hitTestDot = function(t, e) { + var i = this._dotTransform(t), + o = new s(i.x, i.y); + return a(e, o, Math.max(i.radius, 8)) ? new l(l.REGULAR, t) : null + }, r.prototype._createLayout = function() { + throw Error("Child class must override this member") + }, r.prototype._updatePlate = function(t) { + throw Error("Child class must override this member") + }, r.prototype._getContainer = function(t) { + return this._container && this._context === t || (this._context = t, this._container = $(t + .canvas).parent()), this._container + }, r.prototype._plateArrowSize = 14, r.prototype.showPlate = function(t, e) { + var i, o, n, r, s, a, l, c; + this._currentId === t.id && this._layout && 0 !== this._layout.length && null != this._layout[0] + .parentNode || (this._currentId = t.id, this._createLayout(), this._getContainer(e).append( + this._layout), i = this, this._layout.hover(function() { + i.tooltipHovered = !0, $(this).stop(!0).fadeTo(0, 1) + }, function() { + i.tooltipHovered = !1 + })), o = Math.round(t.barWidth / 2), o > 15 && (o = 15), o < 10 && (o = 10), this + ._updatePlate(t), n = e.canvas.getBoundingClientRect(), r = t.x - this._layout + .outerWidth() < this._plateArrowSize, s = n.width - t.x + Math.round(t.barWidth / 2 + o), + r && ( + s -= this._layout.outerWidth() + 2 * this._plateArrowSize), a = n.height, l = 20, c = + 10, this._layout.toggleClass("right", r), this._layout.css({ + top: Math.min(Math.max(t.y, l), a - this._layout.outerHeight() - c), + right: s, + fontSize: o + "px", + display: "block" + }) + }, r.prototype._removeLayout = function() { + this.tooltipHovered || (this._layout.stop(!0), this._layout.remove()) + }, r.prototype._toggleLayout = function(t) { + this._layout.toggle(t) + }, r.prototype.hide = function(t) { + this.tooltipHovered ? this._layout.stop(!0).fadeTo(0, 1) : this._layout.fadeOut(400, + function() { + $(this).remove(), t() + }) + }, r.prototype.setSource = function(t) { + this.source = t + }, e.BarsMarksContainerPaneView = o, e.BarsMarksContainerRenderer = n, e.BarMarkTooltip = r + }, function(t, e, i) { + "use strict"; + var o = {}; + o.renderAttributes = function(t) { + var e, i = ""; + for (e in t) t[e] && (i += " " + e + '="' + t[e] + '"'); + return i + }, o.create = function(t, e) { + var i = $(document.createElement(t)); + return e && (e.html && (i.html(e.html), delete e.html), i.attr(e)), i + }, + o.validAttributes = ["abbr", "accept-charset", "accept", "accesskey", "action", "align", "alink", + "alt", "archive", "axis", "background", "bgcolor", "border", "cellpadding", "cellspacing", + "char", "charoff", "charset", "checked", "cite", "class", "classid", "clear", "code", + "codebase", "codetype", "color", "cols", "colspan", "compact", "content", "coords", "data", + "datetime", "declare", "defer", "dir", "disabled", "enctype", "face", "for", "frame", + "frameborder", "headers", "height", "href", "hreflang", "hspace", "http-equiv", "id", "ismap", + "label", "lang", "language", "link", "longdesc", "marginheight", "marginwidth", "maxlength", + "media", "method", "multiple", "name", "nohref", "noresize", "noshade", "nowrap", "object", + "onblur", "onchange", "onclick", "ondblclick", "onfocus", "onkeydown", "onkeypress", "onkeyup", + "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onreset", + "onselect", "onsubmit", "onunload", "profile", "prompt", "readonly", "rel", "rev", "rows", + "rowspan", "rules", "scheme", "scope", "scrolling", "selected", "shape", "size", "span", "src", + "standby", "start", "style", "summary", "tabindex", "target", "text", "title", "type", "usemap", + "valign", "value", "valuetype", "version", "vlink", "vspace", "width" + ], o.validAttribute = function(t) { + return -1 !== jQuery.inArray(t, o.validAttributes) + }, o.cleanAttributes = function(t) { + return jQuery.each(t, function(e, i) { + o.validAttribute(e) || delete t[e] + }), t + }, t.exports = o + }, function(t, e, i) { + function o(t, e, i, s, a) { + if (!i) return void r.logDebug("Missed undo model"); + n.call(this, t, e, !0, i, s), a ? t.callbacks().subscribe(this, a) : t.callbacks().subscribe(this, o + .prototype.onActionCallback) + } + var n = i(320).Binding, + r = i(7).getLogger("Chart.PropertyPage.ActionBinder"); + inherit(o, n), o.prototype.onActionCallback = function(t) { + this._undoModel.setProperty(this._property, this.value(), this._undoText) + }, o.prototype.value = function() { + return this.control().checked + }, o.prototype.setValue = function(t) { + return this.control().checked = !!t + }, e.ActionBinder = o + }, function(t, e, i) { + "use strict"; + var o = function() { + function t(t) { + switch (t) { + case "c67": + case "m67": + case "c45": + return "copy"; + case "c86": + case "m86": + case "s45": + return "paste"; + case "c88": + case "m88": + case "s46": + return "cut" + } + } + + function e(t) { + var e = []; + return t.shiftKey && e.push("s"), t.ctrlKey && e.push("c"), t.metaKey && e.push("m"), t + .altKey && e.push("a"), e.push(t.keyCode), e.join("") + } + + function i(t) { + var e = $.Event(u + ":" + t); + return $(window).trigger(e, { + AppClipboard: _ + }), e + } + + function o(o) { + var n, r, s; + if ((document.activeElement === document.body || document.activeElement === document + .documentElement) && (n = e(o), r = t(n))) { + if ("keydown" === o.type) d[n] = !0; + else if (d[n]) return; + if (document.getSelection) { + if (!document.getSelection().isCollapsed) return + } else if (document.selection && "None" !== document.selection.type) return; + o.isDefaultPrevented() || (s = i(r), s.isDefaultPrevented() && o.preventDefault()) + } + } + + function n(t) { + t = t.originalEvent || t, t.key === h && i("change") + } + + function r() { + p || ($(document).on("keypress keydown", o), $(window).on("storage", n), p = !0) + } + + function s() { + $(document).off("keypress keydown", o), $(window).off("storage", n), $(window).off(u + + ":copy"), $(window).off(u + ":paste"), $(window).off(u + ":cut"), $(window).off(u + + ":change"), p = !1 + } + + function a() { + try { + return JSON.parse(TVLocalStorage.getItem(h)) + } catch (t) { + return null + } + } + + function l(t) { + if (null == t) return c(); + var e = JSON.stringify(t); + e !== TVLocalStorage.getItem(h) && (TVLocalStorage.setItem(h, e), i("change")) + } + + function c() { + TVLocalStorage.getItem(h) && (TVLocalStorage.removeItem(h), i("change")) + } + var h = "application-clipboard", + u = "appclip", + d = {}, + p = !1, + _ = { + init: r, + set: l, + get: a, + clear: c, + destroy: s + }; + return _ + }(); + t.exports = o + }, function(t, e, i) { + "use strict"; + var o = i(48); + JSServer.studyLibrary = [{ + name: "Accumulation/Distribution", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#808000" + } + }, + precision: 4, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Accumulation/Distribution", + shortDescription: "Accum/Dist", + is_price_study: !1, + inputs: [], + id: "Accumulation/Distribution@tv-basicstudies-1", + scriptIdPart: "", + name: "Accumulation/Distribution" + }, + constructor: function() { + this.f_0 = function(t, e, i, n) { + return o.Std.or(o.Std.and(o.Std.eq(t, e), o.Std.eq(t, i)), o.Std.eq(e, i)) ? + 0 : (2 * t - i - e) / (e - i) * n + }, this.main = function(t, e) { + var i, n, r; + return this._context = t, this._input = e, i = this.f_0(o.Std.close(this + ._context), o.Std.high(this._context), o.Std.low(this._context), + o.Std.volume(this._context)), n = o.Std.cum(i, this._context), r = + n, [r] + } + } + }, { + name: "Accumulative Swing Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#3C78D8" + } + }, + precision: 4, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "ASI", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Accumulative Swing Index", + shortDescription: "ASI", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Limit Move Value", + defval: 10, + type: "float", + min: .1, + max: 1e5 + }], + id: "Accumulative Swing Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Accumulative Swing Index" + }, + constructor: function() { + this.f_0 = function(t, e) { + var i = e.new_var(o.Std.open(e)), + n = e.new_var(o.Std.high(e)), + r = e.new_var(o.Std.low(e)), + s = e.new_var(o.Std.close(e)), + a = o.Std.abs(n - s.get(1)), + l = o.Std.abs(r - s.get(1)), + c = o.Std.abs(n - r), + h = o.Std.abs(s.get(1) - i.get(1)), + u = o.Std.max(a, l), + d = o.Std.iff(a >= o.Std.max(l, c), a - .5 * l + .25 * h, o.Std.iff(l >= + o.Std.max(a, c), l - .5 * a + .25 * h, c + .25 * h)); + return o.Std.iff(0 === d, 0, (s - s.get(1) + .5 * (s - i) + .25 * (s.get( + 1) - i.get(1))) / d * u / t * 50) + }, this.f_1 = function(t, e) { + var i = this.f_0(t, e); + return o.Std.cum(i, e) + }, this.main = function(t, e) { + var i, o; + return this._context = t, this._input = e, i = this._input(0), o = this.f_1( + i, this._context), [o] + } + } + }, { + name: "Advance/Decline", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Advance/Decline", + shortDescription: "AD", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Advance/Decline@tv-basicstudies-1", + scriptIdPart: "", + name: "Advance/Decline" + }, + constructor: function() { + this.f_0 = function(t, e) { + return o.Std.gt(t, e) + }, this.f_1 = function(t, e) { + return o.Std.lt(t, e) + }, this.f_2 = function(t, e) { + return 0 === e ? t : t / e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = this._input(0), n = this.f_0( + o.Std.close(this._context), o.Std.open(this._context)), r = this + ._context.new_var(n), s = o.Std.sum(r, i, this._context), a = this.f_1(o + .Std.close(this._context), o.Std.open(this._context)), l = this + ._context.new_var(a), c = o.Std.sum(l, i, this._context), h = this.f_2( + s, c), u = h, [u] + } + } + }, { + name: "Arnaud Legoux Moving Average", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 9, + in_1: .85, + in_2: 6 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Arnaud Legoux Moving Average", + shortDescription: "ALMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Window Size", + defval: 9, + type: "integer", + min: 0, + max: 5e3 + }, { + id: "in_1", + name: "Offset", + defval: .85, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_2", + name: "Sigma", + defval: 6, + type: "float", + min: -1e12, + max: 1e12 + }], + id: "Arnaud Legoux Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Arnaud Legoux Moving Average" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._input(2), a = this + ._context.new_var(i), l = o.Std.alma(a, n, r, s), [l] + } + } + }, { + name: "Aroon", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF6A00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0094FF" + } + }, + precision: 4, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Aroon", + shortDescription: "Aroon", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Aroon@tv-basicstudies-1", + scriptIdPart: "", + name: "Aroon" + }, + constructor: function() { + this.f_0 = function(t, e) { + return 100 * (t + e) / e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .high(this._context), r = i + 1, s = this._context.new_var(n), a = o.Std + .highestbars(s, r, this._context), l = this.f_0(a, i), c = o.Std.low( + this._context), h = this._context.new_var(c), u = o.Std.lowestbars( + h, r, this._context), d = this.f_0(u, i), p = l, _ = d, [p, _] + } + } + }, { + name: "Average Directional Index", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 14, + in_1: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "ADX", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Average Directional Index", + shortDescription: "ADX", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "ADX Smoothing", + defval: 14, + type: "integer", + min: -1e12, + max: 1e12 + }, { + id: "in_1", + name: "DI Length", + defval: 14, + type: "integer", + min: -1e12, + max: 1e12 + }], + id: "average_directional_Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Average Directional Index" + }, + constructor: function() { + this.f_0 = function(t) { + var e = this._context.new_var(o.Std.high(this._context)), + i = o.Std.change(e), + n = this._context.new_var(o.Std.low(this._context)), + r = -o.Std.change(n), + s = this._context.new_var(o.Std.tr(void 0, this._context)), + a = o.Std.rma(s, t, this._context), + l = this._context.new_var(o.Std.and(o.Std.gt(i, r), o.Std.gt(i, 0)) ? + i : 0), + c = o.Std.fixnan(100 * o.Std.rma(l, t, this._context) / a, this + ._context), + h = this._context.new_var(o.Std.and(o.Std.gt(r, i), o.Std.gt(r, 0)) ? + r : 0); + return [c, o.Std.fixnan(100 * o.Std.rma(h, t, this._context) / a, this + ._context)] + }, this.f_1 = function(t, e) { + var i = this.f_0(t), + n = i[0], + r = i[1], + s = n + r, + a = this._context.new_var(o.Std.abs(n - r) / (o.Std.eq(s, 0) ? 1 : s)); + return [100 * o.Std.rma(a, e, this._context)] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_1(this._input(0), this + ._input(1)) + } + } + }, { + name: "Average True Range", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Average True Range", + shortDescription: "ATR", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Average True Range@tv-basicstudies-1", + scriptIdPart: "", + name: "Average True Range" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s; + return this._context = t, this._input = e, i = this._input(0), n = o.Std.tr( + this._context), r = this._context.new_var(n), s = o.Std.rma(r, i, + this._context), [s] + } + } + }, { + name: "Awesome Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 1, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + palettes: { + palette_0: { + colors: { + 0: { + color: "#FF0000", + width: 1, + style: 0 + }, + 1: { + color: "#008000", + width: 1, + style: 0 + } + } + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + palette: "palette_0", + target: "plot_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Awesome Oscillator", + shortDescription: "AO", + is_price_study: !1, + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + } + } + } + }, + inputs: [], + id: "Awesome Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Awesome Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t - e + }, this.f_1 = function(t) { + return o.Std.le(t, 0) ? 0 : 1 + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d; + return this._context = t, this._input = e, + i = o.Std.hl2(this._context), n = this._context.new_var(i), r = o.Std + .sma(n, 5, this._context), s = this._context.new_var(i), a = o.Std.sma( + s, 34, this._context), l = this.f_0(r, a), c = l, h = this._context + .new_var(l), u = o.Std.change(h), d = this.f_1(u), [c, d] + } + } + }, { + name: "Balance of Power", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Balance of Power", + shortDescription: "Balance of Power", + is_price_study: !1, + inputs: [], + id: "Balance of Power@tv-basicstudies-1", + scriptIdPart: "", + name: "Balance of Power" + }, + constructor: function() { + this.f_0 = function(t, e, i, o) { + return (t - e) / (i - o) + }, this.main = function(t, e) { + return this._context = t, this._input = e, [this.f_0(o.Std.close(this + ._context), o.Std.open(this._context), o.Std.high(this + ._context), o.Std.low(this._context))] + } + } + }, { + name: "Bollinger Bands", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + filledAreasStyle: { + fill_0: { + color: "#000080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Median", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Bollinger Bands", + shortDescription: "BB", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_1", + objBId: "plot_2", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "mult", + defval: 2, + type: "float", + min: .001, + max: 50 + }], + id: "Bollinger Bands@tv-basicstudies-1", + scriptIdPart: "", + name: "Bollinger Bands" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t * e + }, this.f_1 = function(t, e) { + return t + e + }, this.f_2 = function(t, e) { + return t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._context.new_var(i), + a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o + .Std.stdev(l, n, this._context), h = this.f_0(r, c), u = this.f_1(a, h), + d = this.f_2(a, h), p = a, _ = u, f = d, [p, _, f] + } + } + }, { + name: "Bollinger Bands %B", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008080" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 1 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + filledAreasStyle: { + fill_0: { + color: "#008080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Bollinger Bands %B", + shortDescription: "BB %B", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "mult", + defval: 2, + type: "float", + min: .001, + max: 50 + }], + id: "Bollinger Bands %B@tv-basicstudies-1", + scriptIdPart: "", + name: "Bollinger Bands %B" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t * e + }, this.f_1 = function(t, e) { + return t + e + }, this.f_2 = function(t, e) { + return t - e + }, this.f_3 = function(t, e, i) { + return (t - e) / (i - e) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._context.new_var(i), + a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o + .Std.stdev(l, n, this._context), h = this.f_0(r, c), u = this.f_1(a, h), + d = this.f_2(a, h), p = this.f_3(i, d, u), _ = p, [_] + } + } + }, { + name: "Bollinger Bands Width", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 20, + in_1: 2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Bollinger Bands Width", + shortDescription: "BBW", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "mult", + defval: 2, + type: "float", + min: .001, + max: 50 + }], + id: "Bollinger Bands Width@tv-basicstudies-1", + scriptIdPart: "", + name: "Bollinger Bands Width" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t * e + }, this.f_1 = function(t, e) { + return t + e + }, this.f_2 = function(t, e) { + return t - e + }, this.f_3 = function(t, e, i) { + return (t - e) / i + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._context.new_var(i), + a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o + .Std.stdev(l, n, this._context), h = this.f_0(r, c), u = this.f_1(a, h), + d = this.f_2(a, h), p = this.f_3(u, d, a), _ = p, [_] + } + } + }, { + name: "Chaikin Money Flow", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chaikin Money Flow", + shortDescription: "CMF", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Chaikin Money Flow@tv-basicstudies-1", + scriptIdPart: "", + name: "Chaikin Money Flow" + }, + constructor: function() { + this.f_0 = function(t, e, i, n) { + return o.Std.or(o.Std.and(o.Std.eq(t, e), o.Std.eq(t, i)), o.Std.eq(e, i)) ? + 0 : (2 * t - i - e) / (e - i) * n + }, this.f_1 = function(t, e) { + return t / e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = this._input(0), n = this.f_0( + o.Std.close(this._context), o.Std.high(this._context), o.Std.low( + this._context), o.Std.volume(this._context)), r = this._context + .new_var(n), s = o.Std.sum(r, i, this._context), a = o.Std.volume(this + ._context), l = this._context.new_var(a), c = o.Std.sum(l, i, this + ._context), h = this.f_1(s, c), u = h, [u] + } + } + }, { + name: "Chaikin Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 3, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chaikin Oscillator", + shortDescription: "Chaikin Osc", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "short", + defval: 3, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "long", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Chaikin Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Chaikin Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.accdist(this._context), s = this._context.new_var( + r), a = o.Std.ema(s, i, this._context), l = this._context.new_var( + r), c = o.Std.ema(l, n, this._context), h = this.f_0(a, c), u = h, [ + u + ] + } + } + }, { + name: "Chande Kroll Stop", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 10, + in_1: 1, + in_2: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Long", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Short", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chande Kroll Stop", + shortDescription: "Chande Kroll Stop", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "p", + defval: 10, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_1", + name: "x", + defval: 1, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_2", + name: "q", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }], + id: "Chande Kroll Stop@tv-basicstudies-1", + scriptIdPart: "", + name: "Chande Kroll Stop" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return t - e * i + }, this.f_1 = function(t, e, i) { + return t + e * i + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.high(this._context), a = this + ._context.new_var(s), l = o.Std.highest(a, i, this._context), c = o.Std + .atr(i, this._context), h = this.f_0(l, n, c), u = this._context + .new_var(s), d = o.Std.lowest(u, i, this._context), p = this.f_1(d, n, + c), _ = this._context.new_var(h), f = o.Std.highest(_, r, this + ._context), + m = this._context.new_var(p), g = o.Std.lowest(m, r, this._context), v = + g, y = f, [v, y] + } + } + }, { + name: "Chande Momentum Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008080" + } + }, + precision: 4, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Chande Momentum Oscillator", + shortDescription: "ChandeMO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Chande Momentum Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Chande Momentum Oscillator" + }, + constructor: function() { + this.f_0 = function(t) { + return o.Std.ge(t, 0) ? t : 0 + }, this.f_1 = function(t) { + return o.Std.ge(t, 0) ? 0 : -t + }, this.f_2 = function(t, e) { + return 100 * t / e + }, this.f_3 = function(t, e) { + return this.f_2(t - e, t + e) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .close(this._context), r = this._context.new_var(n), s = o.Std.change( + r), a = this.f_0(s), l = this.f_1(s), c = this._context.new_var(a), + h = + o.Std.sum(c, i, this._context), u = this._context.new_var(l), d = o.Std + .sum(u, i, this._context), p = this.f_3(h, d), _ = p, [_] + } + } + }, { + name: "Chop Zone", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 5, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + palettes: { + palette_0: { + colors: { + 0: { + color: "#34dddd", + width: 1, + style: 0 + }, + 1: { + color: "#006400", + width: 1, + style: 0 + }, + 2: { + color: "#98fb98", + width: 1, + style: 0 + }, + 3: { + color: "#00FF00", + width: 1, + style: 0 + }, + 4: { + color: "#8B0000", + width: 1, + style: 0 + }, + 5: { + color: "#FF0000", + width: 1, + style: 0 + }, + 6: { + color: "#FF7F00", + width: 1, + style: 0 + }, + 7: { + color: "#ffc04c", + width: 1, + style: 0 + }, + 8: { + color: "#FFFF00", + width: 1, + style: 0 + } + } + } + }, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + palette: "palette_0", + target: "plot_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Chop Zone", + shortDescription: "Chop Zone", + is_price_study: !1, + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + }, + 2: { + name: "Color 2" + }, + 3: { + name: "Color 3" + }, + 4: { + name: "Color 4" + }, + 5: { + name: "Color 5" + }, + 6: { + name: "Color 6" + }, + 7: { + name: "Color 7" + }, + 8: { + name: "Color 8" + } + }, + valToIndex: { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8 + } + } + }, + inputs: [], + id: "chop_zone@tv-basicstudies-1", + scriptIdPart: "", + name: "Chop Zone" + }, + constructor: function() { + this.f_0 = function() { + var t = o.Std.close(this._context), + e = o.Std.hlc3(this._context), + i = this._context.new_var(o.Std.high(this._context)), + n = o.Std.highest(i, 30, this._context), + r = o.Std.lowest(i, 30, this._context), + s = 25 / (n - r) * r, + a = this._context.new_var(t), + l = this._context.new_var(o.Std.ema(a, 34, this._context)), + c = (l.get(1) - l.get(0)) / e * s, + h = o.Std.sqrt(1 + c * c), + u = o.Std.round(180 * o.Std.acos(1 / h) / 3.141592653589793), + d = o.Std.iff(o.Std.gt(c, 0), -u, u), + p = o.Std.and(o.Std.gt(d, -2.14), o.Std.le(d, -.71)) ? 7 : 8, + _ = o.Std.and(o.Std.gt(d, -3.57), o.Std.le(d, -2.14)) ? 6 : p, + f = o.Std.and(o.Std.gt(d, -5), o.Std.le(d, -3.57)) ? 5 : _, + m = o.Std.le(d, -5) ? 4 : f, + g = o.Std.and(o.Std.lt(d, 2.14), o.Std.ge(d, .71)) ? 3 : m, + v = o.Std.and(o.Std.lt(d, 3.57), o.Std.ge(d, 2.14)) ? 2 : g, + y = o.Std.and(o.Std.lt(d, 5), o.Std.ge(d, 3.57)) ? 1 : v; + return [1, o.Std.ge(d, 5) ? 0 : y] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_0() + } + } + }, { + name: "Choppiness Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 61.8 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 38.2 + }], + filledAreasStyle: { + fill_0: { + color: "#008000", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Choppiness Index", + shortDescription: "CHOP", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Choppiness Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Choppiness Index" + }, + constructor: function() { + this.f_0 = function(t, e, i, n) { + return 100 * o.Std.log10(t / (e - i)) / n + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .atr(1, this._context), r = this._context.new_var(n), s = o.Std.sum(r, + i, this._context), a = o.Std.high(this._context), l = this._context + .new_var(a), c = o.Std.highest(l, i, this._context), h = o.Std.low(this + ._context), u = this._context.new_var(h), d = o.Std.lowest(u, i, + this._context), p = o.Std.log10(i), _ = this.f_0(s, c, d, p), f = _, + [f] + } + } + }, { + name: "Commodity Channel Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#808000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 100 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -100 + }], + filledAreasStyle: { + fill_0: { + color: "#808000", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Commodity Channel Index", + shortDescription: "CCI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Commodity Channel Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Commodity Channel Index" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return (t - e) / (.015 * i) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h; + return this._context = t, this._input = e, i = o.Std.hlc3(this._context), + n = this._input(0), r = this._context.new_var(i), s = o.Std.sma(r, n, + this._context), a = this._context.new_var(i), l = o.Std.dev(a, n, + this._context), c = this.f_0(i, s, l), h = c, [h] + } + } + }, { + name: "Connors RSI", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#800080" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 70 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 30 + }], + filledAreasStyle: { + fill_0: { + color: "#800080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 3, + in_1: 2, + in_2: 100 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "CRSI", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Connors RSI", + shortDescription: "CRSI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "RSI Length", + defval: 3, + type: "integer", + min: 1 + }, { + id: "in_1", + name: "UpDown Length", + defval: 2, + type: "integer", + min: 1 + }, { + id: "in_2", + name: "ROC Length", + defval: 100, + type: "integer", + min: 1 + }], + id: "Connors RSI@tv-basicstudies-1", + scriptIdPart: "", + name: "Connors RSI" + }, + constructor: function() { + this.f_1 = function(t, e, i) { + var n = i.new_var(o.Std.max(o.Std.change(t), 0)); + return o.Std.rma(n, e, i) + }, this.f_2 = function(t, e, i) { + var n = i.new_var(-o.Std.min(o.Std.change(t), 0)); + return o.Std.rma(n, e, i) + }, this.f_3 = function() { + var t = 0; + return function(e) { + var i = e.get(0), + n = e.get(1); + return t = i === n ? 0 : i > n ? o.Std.nz(t) <= 0 ? 1 : o.Std.nz( + t) + 1 : o.Std.nz(t) >= 0 ? -1 : o.Std.nz(t) - 1, this + ._context + .new_var(t) + } + }(), this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._context.new_var(i), r = this._input(0), s = this._input(1), + a = this._input(2), l = o.Std.rsi(this.f_1(n, r, this._context), this + .f_2(n, r, this._context)), c = this.f_3(n), h = o.Std.rsi(this.f_1( + c, s, this._context), this.f_2(c, s, this._context)), u = this + ._context.new_var(o.Std.roc(n, 1)), d = o.Std.percentrank(u, a), p = o + .Std.avg(l, h, d), [p] + } + } + }, { + name: "Coppock Curve", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 10, + in_1: 14, + in_2: 11 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Coppock Curve", + shortDescription: "Coppock Curve", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "WMA Length", + defval: 10, + type: "integer", + min: -1e12, + max: 5e3 + }, { + id: "in_1", + name: "Long RoC Length", + defval: 14, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_2", + name: "Short RoC Length", + defval: 11, + type: "integer", + min: 1, + max: 4999 + }], + id: "Coppock Curve@tv-basicstudies-1", + scriptIdPart: "", + name: "Coppock Curve" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t + e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.close(this._context), a = this + ._context.new_var(s), l = o.Std.roc(a, n), c = this._context.new_var(s), + h = o.Std.roc(c, r), u = this.f_0(l, h), d = this._context.new_var(u), + p = o.Std.wma(d, i, this._context), _ = p, [_] + } + } + }, { + name: "Correlation Coeff", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 4, + trackPrice: !1, + transparency: 40, + visible: !0, + color: "#800080" + } + }, + precision: 4, + inputs: { + in_0: "AAPL", + in_1: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Correlation Coefficient", + shortDescription: "CC", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "sym", + defval: "AAPL", + type: "symbol" + }, { + id: "in_1", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Correlation Coeff@tv-basicstudies-1", + scriptIdPart: "", + name: "Correlation Coeff" + }, + constructor: function() { + this.init = function(t, e) { + this._context = t, this._input = e, this._context.new_sym(this._input(0), o + .Std.period(this._context), o.Std.period(this._context)) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d; + return this._context = t, this._input = e, i = this._context.new_var(this + ._context.symbol.time), this._input(0), o.Std.period(this._context), + n = o.Std.close(this._context), r = this._input(1), this._context + .select_sym(1), s = this._context.new_var(this._context.symbol.time), + a = o.Std.close(this._context), l = this._context.new_var(a), this + ._context.select_sym(0), c = l.adopt(s, i, 0), h = this._context + .new_var(n), u = this._context.new_var(c), d = o.Std.correlation(h, u, + r, this._context), [d] + } + } + }, { + name: "Detrended Price Oscillator", + metainfo: { + _metainfoVersion: 42, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#808000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 21, + in_1: !1 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "DPO", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Detrended Price Oscillator", + shortDescription: "DPO", + is_price_study: !1, + is_hidden_study: !1, + id: "detrended_price_oscillator@tv-basicstudies-1", + bands: [{ + id: "hline_0", + name: "Zero", + isHidden: !1 + }], + inputs: [{ + id: "in_0", + name: "Period", + defval: 21, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "isCentered", + defval: !1, + type: "bool" + }], + scriptIdPart: "", + name: "Detrended Price Oscillator" + }, + constructor: function() { + this.f_0 = function() { + var t = this._input(0), + e = this._input(1), + i = Math.floor(t / 2 + 1), + n = this._context.new_var(o.Std.close(this._context)), + r = this._context.new_var(o.Std.sma(n, t, this._context)), + s = this._context.new_var(o.Std.close(this._context)), + a = s.get(i) - r, + l = o.Std.close(this._context) - r.get(i), + c = e ? a : l, + h = -i; + return [c, e ? h : 0] + }, + this.main = function(t, e) { + this._context = t, this._input = e; + var i = this.f_0(); + return [{ + value: i[0], + offset: i[1] + }] + } + } + }, { + name: "Directional Movement Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF7F00" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 14, + in_1: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "+DI", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "-DI", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "ADX", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Directional Movement", + shortDescription: "DMI", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "DI Length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "ADX Smoothing", + defval: 14, + type: "integer", + min: 1, + max: 50 + }], + id: "Directional Movement Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Directional Movement Index" + }, + constructor: function() { + this.f_0 = function(t) { + return -t + }, this.f_1 = function(t, e) { + return o.Std.and(o.Std.gt(t, e), o.Std.gt(t, 0)) ? t : 0 + }, this.f_2 = function(t, e) { + return 100 * t / e + }, this.f_3 = function(t, e) { + return t + e + }, this.f_4 = function(t, e, i) { + return o.Std.abs(t - e) / (o.Std.eq(i, 0) ? 1 : i) + }, this.f_5 = function(t) { + return 100 * t + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, + L, I, k, A, M, E; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.high(this._context), s = this._context.new_var(r), + a = o.Std.change(s), l = o.Std.low(this._context), c = this._context + .new_var(l), h = o.Std.change(c), u = this.f_0(h), d = o.Std.tr(this + ._context), p = this._context.new_var(d), _ = o.Std.rma(p, i, this + ._context), f = this.f_1(a, u), m = this._context.new_var(f), g = o + .Std.rma(m, i, this._context), v = this.f_2(g, _), y = o.Std.fixnan(v, + this._context), b = this.f_1(u, a), S = this._context.new_var(b), + w = o.Std.rma(S, i, this._context), T = this.f_2(w, _), C = o.Std + .fixnan(T, this._context), x = this.f_3(y, C), P = this.f_4(y, C, x), + L = this._context.new_var(P), I = o.Std.rma(L, n, this._context), k = + this.f_5(I), A = y, M = C, E = k, [A, M, E] + } + } + }, { + name: "Donchian Channels", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF7F00" + } + }, + precision: 4, + filledAreasStyle: { + fill_0: { + color: "#0000FF", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Basis", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Donchian Channels", + shortDescription: "DC", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_1", + objBId: "plot_0", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Donchian Channels@tv-basicstudies-1", + scriptIdPart: "", + name: "Donchian Channels" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .low(this._context), r = this._context.new_var(n), s = o.Std.lowest(r, + i, this._context), a = o.Std.high(this._context), l = this._context + .new_var(a), c = o.Std.highest(l, i, this._context), h = o.Std.avg(c, + s), u = s, d = c, p = h, [u, d, p] + } + } + }, { + name: "Double Exponential Moving Average", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + } + }, + precision: 4, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Double EMA", + shortDescription: "DEMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Double Exponential Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Double Exponential Moving Average" + }, + constructor: function() { + this.f_0 = function(t, e) { + return 2 * t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .close(this._context), r = this._context.new_var(n), s = o.Std.ema(r, i, + this._context), a = this._context.new_var(s), l = o.Std.ema(a, i, + this._context), c = this.f_0(s, l), h = c, [h] + } + } + }, { + name: "Ease of Movement", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#808000" + } + }, + precision: 4, + inputs: { + in_0: 1e4, + in_1: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Ease Of Movement", + shortDescription: "EOM", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Divisor", + defval: 1e4, + type: "integer", + min: 1, + max: 1e9 + }, { + id: "in_1", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Ease of Movement@tv-basicstudies-1", + scriptIdPart: "", + name: "Ease of Movement" + }, + constructor: function() { + this.f_0 = function(t, e, i, o, n) { + return t * e * (i - o) / n + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.hl2(this._context), s = this._context.new_var(r), + a = o.Std.change(s), l = this.f_0(i, a, o.Std.high(this._context), o.Std + .low(this._context), o.Std.volume(this._context)), c = this._context + .new_var(l), h = o.Std.sma(c, n, this._context), u = h, [u] + } + } + }, { + name: "Elders Force Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#800000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 13 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Elder's Force Index", + shortDescription: "EFI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 13, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Elders Force Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Elders Force Index" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t * e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .close(this._context), r = this._context.new_var(n), s = o.Std.change( + r), a = this.f_0(s, o.Std.volume(this._context)), l = this._context + .new_var(a), c = o.Std.ema(l, i, this._context), h = c, [h] + } + } + }, { + name: "EMA Cross", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_2: { + linestyle: 0, + linewidth: 4, + plottype: 3, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 9, + in_1: 26 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Short", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Long", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Crosses", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "EMA Cross", + shortDescription: "EMA Cross", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Short", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Long", + defval: 26, + type: "integer", + min: 1, + max: 2e3 + }], + id: "EMA Cross@tv-basicstudies-1", + scriptIdPart: "", + name: "EMA Cross" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t ? e : o.Std.na() + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.close(this._context), s = this._context.new_var( + r), a = o.Std.ema(s, i, this._context), l = this._context.new_var( + r), + c = o.Std.ema(l, n, this._context), h = a, u = c, d = o.Std.cross(a, c, + this._context), p = this.f_0(d, a), [h, u, p] + } + } + }, { + name: "Envelope", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF7F00" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + filledAreasStyle: { + fill_0: { + color: "#0000FF", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 10, + in_2: !1 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Median", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Envelope", + shortDescription: "Env", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_1", + objBId: "plot_2", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "percent", + defval: 10, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_2", + name: "exponential", + defval: !1, + type: "bool" + }], + id: "Envelope@tv-basicstudies-1", + scriptIdPart: "", + name: "Envelope" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return t ? e : i + }, this.f_1 = function(t, e) { + return t * (1 + e) + }, this.f_2 = function(t, e) { + return t * (1 - e) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._input(2), a = this + ._context.new_var(i), l = o.Std.ema(a, n, this._context), c = this + ._context.new_var(i), h = o.Std.sma(c, n, this._context), u = this.f_0( + s, l, h), d = r / 100, p = this.f_1(u, d), _ = this.f_2(u, d), f = + u, m = p, g = _, [f, m, g] + } + } + }, { + name: "Fisher Transform", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF7F00" + } + }, + precision: 4, + bands: [{ + color: "#FF7F00", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 1.5 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: .75 + }, { + color: "#FF7F00", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -.75 + }, { + color: "#FF7F00", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -1.5 + }], + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Fisher", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_1: { + title: "Trigger", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Fisher Transform", + shortDescription: "Fisher", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Level", + isHidden: !1 + }, { + id: "hline_1", + name: "Level", + isHidden: !1 + }, { + id: "hline_2", + name: "Level", + isHidden: !1 + }, { + id: "hline_3", + name: "Level", + isHidden: !1 + }, { + id: "hline_4", + name: "Level", + isHidden: !1 + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }], + id: "fisher_transform@tv-basicstudies-1", + scriptIdPart: "", + name: "Fisher Transform" + }, + constructor: function() { + this.f_0 = function(t) { + var e = o.Std.lt(t, -.99) ? -.999 : t; + return [o.Std.gt(t, .99) ? .999 : e] + }, this.f_1 = function() { + var t, e, i, n = this._input(0), + r = this._context.new_var(o.Std.hl2(this._context)), + s = o.Std.highest(r, n, this._context), + a = this._context.new_var(o.Std.hl2(this._context)), + l = o.Std.lowest(a, n, this._context), + c = this._context.new_var(), + h = this.f_0(.66 * ((o.Std.hl2(this._context) - l) / o.Std.max(s - l, + .001) - .5) + .67 * o.Std.nz(c.get(1))); + return c.set(h[0]), t = this._context.new_var(), t.set(.5 * o.Std.log((1 + c + .get(0)) / o.Std.max(1 - c.get(0), .001)) + .5 * o.Std.nz(t.get( + 1))), e = t.get(1), i = t.get(0), [i, e] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_1() + } + } + }, { + name: "Historical Volatility", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Historical Volatility", + shortDescription: "HV", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 1e12 + }], + id: "historical_volatility@tv-basicstudies-1", + scriptIdPart: "", + name: "Historical Volatility" + }, + constructor: function() { + this.f_0 = function() { + var t = this._input(0), + e = o.Std.or(o.Std.isintraday(this._context), o.Std.and(o.Std.isdaily( + this._context), o.Std.eq(o.Std.interval(this._context), 1))) ? 1 : + 7, + i = this._context.new_var(o.Std.close(this._context)), + n = this._context.new_var(o.Std.log(o.Std.close(this._context) / i.get( + 1))); + return [100 * o.Std.stdev(n, t, this._context) * o.Std.sqrt(365 / e)] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_0() + } + } + }, { + name: "Hull MA", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Hull Moving Average", + shortDescription: "HMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Hull MA@tv-basicstudies-1", + scriptIdPart: "", + name: "Hull MA" + }, + constructor: function() { + this.f_0 = function(t, e) { + return 2 * t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = n / 2, s = this._context.new_var(i), a = o.Std + .wma(s, r, this._context), l = this._context.new_var(i), c = o.Std.wma( + l, n, this._context), h = this.f_0(a, c), u = o.Std.sqrt(n), d = o + .Std.round(u), p = this._context.new_var(h), _ = o.Std.wma(p, d, this + ._context), f = _, [f] + } + } + }, { + name: "Ichimoku Cloud", + metainfo: { + _metainfoVersion: 42, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0496ff" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#991515" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#459915" + }, + plot_3: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_4: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + palettes: { + palette_0: { + colors: { + 0: { + color: "#008000", + width: 1, + style: 0 + }, + 1: { + color: "#FF0000", + width: 1, + style: 0 + } + } + } + }, + filledAreasStyle: { + fill_0: { + color: "#000080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 9, + in_1: 26, + in_2: 52, + in_3: 26 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }, { + id: "plot_3", + type: "line" + }, { + id: "plot_4", + type: "line" + }, { + id: "plot_5", + palette: "palette_0", + target: "fill_0", + type: "colorer" + }], + styles: { + plot_0: { + title: "Conversion Line", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_1: { + title: "Base Line", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_2: { + title: "Lagging Span", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_3: { + title: "Lead 1", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_4: { + title: "Lead 2", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Ichimoku Cloud", + shortDescription: "Ichimoku", + is_price_study: !0, + is_hidden_study: !1, + id: "Ichimoku Cloud@tv-basicstudies-1", + palettes: { + palette_0: { + colors: { + 0: { + name: "Color 0" + }, + 1: { + name: "Color 1" + } + }, + valToIndex: { + 0: 0, + 1: 1 + } + } + }, + filledAreas: [{ + id: "fill_0", + objAId: "plot_3", + objBId: "plot_4", + type: "plot_plot", + title: "Plots Background", + isHidden: !1, + palette: "palette_0" + }], + inputs: [{ + id: "in_0", + name: "Conversion Line Periods", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "Base Line Periods", + defval: 26, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_2", + name: "Lagging Span 2 Periods", + defval: 52, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_3", + name: "Displacement", + defval: 26, + type: "integer", + min: 1, + max: 1e12 + }], + scriptIdPart: "", + name: "Ichimoku Cloud" + }, + constructor: function() { + this.donchian = function(t) { + var e = this._context.new_var(o.Std.low(this._context)), + i = this._context.new_var(o.Std.high(this._context)); + return o.Std.avg(o.Std.lowest(e, t, this._context), o.Std.highest(i, t, this + ._context)) + }, this.f_1 = function() { + var t = this._input(0), + e = this._input(1), + i = this._input(2), + n = this._input(3), + r = this.donchian(t), + s = this.donchian(e), + a = o.Std.avg(r, s), + l = this.donchian(i); + return [r, s, o.Std.close(this._context), a, l, -n, n, n, o.Std.gt(a, l) ? + 0 : 1 + ] + }, this.main = function(t, e) { + this._context = t, this._input = e; + var i = this.f_1(); + return [i[0], i[1], { + value: i[2], + offset: i[5] + }, { + value: i[3], + offset: i[6] + }, { + value: i[4], + offset: i[7] + }, i[8]] + } + } + }, { + name: "Keltner Channels", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + filledAreasStyle: { + fill_0: { + color: "#0000FF", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: !0, + in_1: 20, + in_2: 1 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Middle", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Keltner Channels", + shortDescription: "KC", + is_price_study: !0, + filledAreas: [{ + id: "fill_0", + objAId: "plot_0", + objBId: "plot_2", + type: "plot_plot", + title: "Plots Background" + }], + inputs: [{ + id: "in_0", + name: "useTrueRange", + defval: !0, + type: "bool" + }, { + id: "in_1", + name: "length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "mult", + defval: 1, + type: "float", + min: -1e12, + max: 1e12 + }], + id: "Keltner Channels@tv-basicstudies-1", + scriptIdPart: "", + name: "Keltner Channels" + }, + constructor: function() { + this.f_0 = function(t, e, i, o) { + return t ? e : i - o + }, this.f_1 = function(t, e, i) { + return t + e * i + }, this.f_2 = function(t, e, i) { + return t - e * i + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._input(2), a = this + ._context.new_var(i), l = o.Std.ema(a, r, this._context), + c = this.f_0(n, o.Std.tr(this._context), o.Std.high(this._context), o + .Std.low(this._context)), h = this._context.new_var(c), u = o.Std + .ema(h, r, this._context), d = this.f_1(l, u, s), p = this.f_2(l, u, s), + _ = d, f = l, m = p, [_, f, m] + } + } + }, { + name: "Klinger Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + } + }, + precision: 4, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Klinger Oscillator", + shortDescription: "Klinger Oscillator", + is_price_study: !1, + inputs: [], + id: "Klinger Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Klinger Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e) { + return o.Std.ge(t, 0) ? e : -e + }, this.f_1 = function(t, e) { + return t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f; + return this._context = t, this._input = e, i = o.Std.hlc3(this._context), + n = this._context.new_var(i), r = o.Std.change(n), s = this.f_0(r, o.Std + .volume(this._context)), a = this._context.new_var(s), l = o.Std + .ema(a, 34, this._context), c = this._context.new_var(s), h = o.Std.ema( + c, 55, this._context), u = this.f_1(l, h), d = this._context + .new_var(u), p = o.Std.ema(d, 13, this._context), _ = u, f = p, [_, f] + } + } + }, { + name: "Know Sure Thing", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 10, + in_1: 15, + in_2: 20, + in_3: 30, + in_4: 10, + in_5: 10, + in_6: 10, + in_7: 15, + in_8: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "KST", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Know Sure Thing", + shortDescription: "KST", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "roclen1", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "roclen2", + defval: 15, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "roclen3", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_3", + name: "roclen4", + defval: 30, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_4", + name: "smalen1", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_5", + name: "smalen2", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_6", + name: "smalen3", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_7", + name: "smalen4", + defval: 15, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_8", + name: "siglen", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Know Sure Thing@tv-basicstudies-1", + scriptIdPart: "", + name: "Know Sure Thing" + }, + constructor: function() { + this.f_0 = function(t, e, i, o) { + return t + 2 * e + 3 * i + 4 * o + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, + L, I, k, A, M, E, D, V, O, R, B, z, F, N, W; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = this._input(3), a = this._input(4), + l = this._input(5), c = this._input(6), h = this._input(7), u = this + ._input(8), d = o.Std.close(this._context), p = i, _ = this._context + .new_var(d), f = o.Std.roc(_, p), m = a, g = this._context.new_var(f), + v = o.Std.sma(g, m, this._context), y = n, b = this._context.new_var(d), + S = o.Std.roc(b, y), w = l, T = this._context.new_var(S), C = o.Std.sma( + T, w, this._context), x = r, P = this._context.new_var(d), L = o.Std + .roc(P, x), I = c, k = this._context.new_var(L), A = o.Std.sma(k, I, + this._context), M = s, E = this._context.new_var(d), D = o.Std.roc( + E, M), V = h, O = this._context.new_var(D), R = o.Std.sma(O, V, this + ._context), B = this.f_0(v, C, A, R), z = this._context.new_var(B), + F = o.Std.sma(z, u, this._context), N = B, W = F, [N, W] + } + } + }, { + name: "Least Squares Moving Average", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 25, + in_1: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Least Squares Moving Average", + shortDescription: "LSMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 25, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "Offset", + defval: 0, + type: "integer", + min: -1e12, + max: 1e12 + }], + id: "Least Squares Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Least Squares Moving Average" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.close(this._context), s = this._context.new_var( + r), a = o.Std.linreg(s, i, n), l = a, [l] + } + } + }, { + name: "Linear Regression Curve", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Linear Regression Curve", + shortDescription: "LRC", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Linear Regression Curve@tv-basicstudies-1", + scriptIdPart: "", + name: "Linear Regression Curve" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._context.new_var(i), s = o.Std.linreg(r, n, + 0), a = s, [a] + } + } + }, { + name: "MA Cross", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_2: { + linestyle: 0, + linewidth: 4, + plottype: 3, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 9, + in_1: 26 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Short", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Long", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Crosses", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "MA Cross", + shortDescription: "MA Cross", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Short", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Long", + defval: 26, + type: "integer", + min: 1, + max: 2e3 + }], + id: "MA Cross@tv-basicstudies-1", + scriptIdPart: "", + name: "MA Cross" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t ? e : o.Std.na() + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.close(this._context), s = this._context.new_var( + r), a = o.Std.sma(s, i, this._context), l = this._context.new_var( + r), + c = o.Std.sma(l, n, this._context), h = a, u = c, d = o.Std.cross(a, c, + this._context), p = this.f_0(d, a), [h, u, p] + } + } + }, { + name: "MA with EMA Cross", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_2: { + linestyle: 0, + linewidth: 4, + plottype: 3, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 10, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "MA", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "EMA", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Crosses", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "MA with EMA Cross", + shortDescription: "MA/EMA Cross", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length MA", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Length EMA", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "MA with EMA Cross@tv-basicstudies-1", + scriptIdPart: "", + name: "MA with EMA Cross" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t ? e : o.Std.na() + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.close(this._context), s = this._context.new_var( + r), a = o.Std.sma(s, i, this._context), l = this._context.new_var( + r), + c = o.Std.ema(l, n, this._context), h = a, u = c, d = o.Std.cross(a, c, + this._context), p = this.f_0(d, a), [h, u, p] + } + } + }, { + name: "Mass Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Mass Index", + shortDescription: "Mass Index", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Mass Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Mass Index" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t - e + }, this.f_1 = function(t, e) { + return t / e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d; + return this._context = t, this._input = e, i = this._input(0), n = this.f_0( + o.Std.high(this._context), o.Std.low(this._context)), + r = this._context.new_var(n), s = o.Std.ema(r, 9, this._context), a = + this._context.new_var(s), l = o.Std.ema(a, 9, this._context), c = this + .f_1(s, l), h = this._context.new_var(c), u = o.Std.sum(h, i, this + ._context), d = u, [d] + } + } + }, { + name: "McGinley Dynamic", + metainfo: { + _metainfoVersion: 42, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "McGinley Dynamic", + shortDescription: "McGinley Dynamic", + is_price_study: !0, + is_hidden_study: !1, + id: "mcginley_dynamic@tv-basicstudies-1", + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 1e12 + }], + scriptIdPart: "", + name: "McGinley Dynamic" + }, + constructor: function() { + this.f_0 = function() { + var t, e = this._input(0), + i = o.Std.close(this._context), + n = this._context.new_var(i), + r = o.Std.ema(n, e, this._context), + s = this._context.new_var(), + a = s.get(1) + (i - s.get(1)) / (e * o.Std.pow(i / s.get(1), 4)); + return s.set(o.Std.na(s.get(1)) ? r : a), t = s.get(0), [t] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_0() + } + } + }, { + name: "Momentum", + metainfo: { + _metainfoVersion: 30, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#808000" + } + }, + precision: 4, + inputs: { + in_0: 10, + in_1: "close" + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Mom", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Momentum", + shortDescription: "Mom", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }], + id: "Momentum@tv-basicstudies-1", + scriptIdPart: "", + name: "Momentum" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a; + return this._context = t, this._input = e, i = this._input(0), n = o.Std[ + this._input(1)](this._context), r = this._context.new_var(n), s = r + .get(i), a = s ? n - s : null, [a] + } + } + }, { + name: "Money Flow", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#459915" + } + }, + precision: 4, + bands: [{ + color: "#c0c0c0", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#c0c0c0", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#9915ff", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Money Flow", + shortDescription: "MFI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Money Flow@tv-basicstudies-1", + scriptIdPart: "", + name: "Money Flow" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return t * (o.Std.le(e, 0) ? 0 : i) + }, this.f_1 = function(t, e, i) { + return t * (o.Std.ge(e, 0) ? 0 : i) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .hlc3(this._context), r = this._context.new_var(n), s = o.Std.change(r), + a = this.f_0(o.Std.volume(this._context), s, n), l = this._context + .new_var(a), c = o.Std.sum(l, i, this._context), h = this.f_1(o.Std + .volume(this._context), s, n), u = this._context.new_var(h), d = o + .Std.sum(u, i, this._context), p = o.Std.rsi(c, d), _ = p, [_] + } + } + }, { + name: "Moving Average", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 9, + in_1: "close", + in_2: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Moving Average", + shortDescription: "MA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "in_2", + name: "Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }], + id: "Moving Average@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l; + return this._context = t, this._input = e, i = o.Std[this._input(1)](this + ._context), n = this._input(0), r = this._input(2), s = this + ._context.new_var(i), a = o.Std.sma(s, n, this._context), l = a, [{ + value: l, + offset: r + }] + } + } + }, { + name: "Moving Average Channel", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#CC0000" + } + }, + precision: 4, + filledAreasStyle: { + fill_0: { + color: "#A2C4C9", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 20, + in_1: 20, + in_2: 0, + in_3: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Upper", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Lower", + histogramBase: 0, + joinPoints: !1 + } + }, + filledAreas: [{ + id: "fill_0", + objAId: "plot_0", + objBId: "plot_1", + type: "plot_plot", + title: "Plots Background" + }], + description: "Moving Average Channel", + shortDescription: "MAC", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Upper Length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "Lower Length", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_2", + name: "Upper Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }, { + id: "in_3", + name: "Lower Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }], + id: "Moving Average Channel@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Channel" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d; + return this._context = t, this._input = e, i = o.Std.high(this._context), + n = o.Std.low(this._context), r = this._input(0), s = this._input(1), + a = this._input(2), l = this._input(3), c = this._context.new_var(i), + h = this._context.new_var(n), u = o.Std.sma(c, r, this._context), d = o + .Std.sma(h, s, this._context), + [{ + value: u, + offset: a + }, { + value: d, + offset: l + }] + } + } + }, { + name: "Moving Average Convergence/Divergence", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 1, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 12, + in_1: 26, + in_3: "close", + in_2: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Histogram", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "MACD", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "MACD", + shortDescription: "MACD", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "fastLength", + defval: 12, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "slowLength", + defval: 26, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_3", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "in_2", + name: "signalLength", + defval: 9, + type: "integer", + min: 1, + max: 50 + }], + id: "Moving Average Convergence/Divergence@tv-basicstudies-1", + scriptIdPart: "", + name: "MACD" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g; + return this._context = t, this._input = e, i = o.Std[this._input(2)](this + ._context), n = this._input(0), r = this._input(1), s = this._input( + 3), a = this._context.new_var(i), l = o.Std.ema(a, n, this + ._context), c = this._context.new_var(i), h = o.Std.ema(c, r, this + ._context), u = this.f_0(l, h), d = this._context.new_var(u), p = o + .Std.ema(d, s, this._context), _ = this.f_0(u, p), f = _, m = u, g = p, + [f, m, g] + } + } + }, { + name: "Moving Average Exponential", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 9, + in_1: "close", + in_2: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Moving Average Exponential", + shortDescription: "EMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "in_2", + name: "Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }], + id: "Moving Average Exponential@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Exponential" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l; + return this._context = t, this._input = e, i = o.Std[this._input(1)](this + ._context), n = this._input(0), r = this._input(2), s = this + ._context.new_var(i), a = o.Std.ema(s, n, this._context), l = a, [{ + value: l, + offset: r + }] + } + } + }, { + name: "Moving Average Weighted", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 9, + in_1: "close", + in_2: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Moving Average Weighted", + shortDescription: "WMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 9, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }, { + id: "in_2", + name: "Offset", + defval: 0, + type: "integer", + min: -1e4, + max: 1e4 + }], + id: "Moving Average Weighted@tv-basicstudies-1", + scriptIdPart: "", + name: "Moving Average Weighted" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l; + return this._context = t, this._input = e, i = o.Std[this._input(1)](this + ._context), n = this._input(0), r = this._input(2), s = this + ._context.new_var(i), a = o.Std.wma(s, n, this._context), l = a, [{ + value: l, + offset: r + }] + } + } + }, { + name: "Net Volume", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Net Volume", + shortDescription: "Net Volume", + is_price_study: !1, + inputs: [], + id: "Net Volume@tv-basicstudies-1", + scriptIdPart: "", + name: "Net Volume" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return o.Std.gt(t, 0) ? e : o.Std.lt(i, 0) ? -e : 0 * e + }, this.main = function(t, e) { + var i, n, r, s, a; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._context.new_var(i), r = o.Std.change(n), s = this.f_0(r, o.Std + .volume(this._context), r), a = s, [a] + } + } + }, { + name: "On Balance Volume", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "On Balance Volume", + shortDescription: "OBV", + is_price_study: !1, + inputs: [], + id: "On Balance Volume@tv-basicstudies-1", + scriptIdPart: "", + name: "On Balance Volume" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return o.Std.gt(t, 0) ? e : o.Std.lt(i, 0) ? -e : 0 * e + }, this.main = function(t, e) { + var i, n, r, s, a, l; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._context.new_var(i), r = o.Std.change(n), s = this.f_0(r, o.Std + .volume(this._context), r), a = o.Std.cum(s, this._context), l = a, + [l] + } + } + }, { + name: "Parabolic SAR", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 3, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: .02, + in_1: .02, + in_2: .2 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Parabolic SAR", + shortDescription: "SAR", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "start", + defval: .02, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_1", + name: "increment", + defval: .02, + type: "float", + min: -1e12, + max: 1e12 + }, { + id: "in_2", + name: "maximum", + defval: .2, + type: "float", + min: -1e12, + max: 1e12 + }], + id: "Parabolic SAR@tv-basicstudies-1", + scriptIdPart: "", + name: "Parabolic SAR" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.sar(i, n, r, this._context), + a = s, [a] + } + } + }, { + name: "Price Channel", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0080" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0080" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0496FF" + } + }, + precision: 4, + inputs: { + in_0: 20, + in_1: 0 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Highprice Line", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Lowprice Line", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Centerprice Line", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Price Channel", + shortDescription: "PC", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Length", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "Offset Length", + defval: 0, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Price Channel@tv-basicstudies-1", + scriptIdPart: "", + name: "Price Channel" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = o.Std.high(this._context), + n = this._context.new_var(i), r = o.Std.low(this._context), s = this + ._context.new_var(r), a = this._input(0), l = this._input(1), c = o.Std + .highest(n, a, this._context), h = o.Std.lowest(s, a, this._context), + u = o.Std.avg(c, h), [{ + value: c, + offset: l + }, { + value: h, + offset: l + }, { + value: u, + offset: l + }] + } + } + }, { + name: "Price Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 10, + in_1: 21 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Price Oscillator", + shortDescription: "PPO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "shortlen", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "longlen", + defval: 21, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Price Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Price Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e) { + return (t - e) / e * 100 + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._context.new_var(i), + a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o + .Std.sma(l, r, this._context), h = this.f_0(a, c), u = h, [u] + } + } + }, { + name: "Price Volume Trend", + metainfo: { + _metainfoVersion: 42, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: {} + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "PVT", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Price Volume Trend", + shortDescription: "PVT", + is_price_study: !1, + is_hidden_study: !1, + id: "price_volume_trend@tv-basicstudies-1", + inputs: [], + scriptIdPart: "", + name: "Price Volume Trend" + }, + constructor: function() { + this.f_0 = function() { + var t = this._context.new_var(o.Std.close(this._context)); + return [o.Std.cum(o.Std.change(t) / t.get(1) * o.Std.volume(this._context), + this._context)] + }, this.main = function(t, e) { + return this._context = t, this._input = e, [this.f_0()[0]] + } + } + }, { + name: "Rate Of Change", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "ROC", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Rate Of Change", + shortDescription: "ROC", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero Line", + isHidden: !1 + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e12 + }], + id: "rate_of_change@tv-basicstudies-1", + scriptIdPart: "", + name: "Rate Of Change" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r; + return this._context = t, this._input = e, i = this._context.new_var(o.Std + .close(this._context)), n = this._input(0), r = 100 * (i.get(0) - i + .get(n)) / i.get(n), [r] + } + } + }, { + name: "Relative Strength Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#800080" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 70 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 30 + }], + filledAreasStyle: { + fill_0: { + color: "#800080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Relative Strength Index", + shortDescription: "RSI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "Length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Relative Strength Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Relative Strength Index" + }, + constructor: function() { + this.f_0 = function(t) { + return o.Std.max(t, 0) + }, this.f_1 = function(t) { + return -o.Std.min(t, 0) + }, this.f_2 = function(t, e) { + return o.Std.eq(t, 0) ? 100 : o.Std.eq(e, 0) ? 0 : 100 - 100 / (1 + e / t) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._context.new_var(i), s = o.Std.change(r), + a = this.f_0(s), l = this._context.new_var(a), c = o.Std.rma(l, n, this + ._context), h = this.f_1(s), u = this._context.new_var(h), d = o.Std + .rma(u, n, this._context), p = this.f_2(d, c), _ = p, [_] + } + } + }, { + name: "Relative Vigor Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "RVGI", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Relative Vigor Index", + shortDescription: "RVGI", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "Length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Relative Vigor Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Relative Vigor Index" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t - e + }, this.f_1 = function(t, e) { + return t / e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v; + return this._context = t, this._input = e, i = this._input(0), n = this.f_0( + o.Std.close(this._context), o.Std.open(this._context)), r = this + ._context.new_var(n), s = o.Std.swma(r, this._context), a = this + ._context.new_var(s), l = o.Std.sum(a, i, this._context), c = this.f_0(o + .Std.high(this._context), o.Std.low(this._context)), h = this + ._context.new_var(c), u = o.Std.swma(h, this._context), d = this + ._context.new_var(u), p = o.Std.sum(d, i, this._context), _ = this.f_1( + l, p), f = this._context.new_var(_), m = o.Std.swma(f, this + ._context), g = _, v = m, [g, v] + } + } + }, { + name: "Relative Volatility Index", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#808000", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Relative Volatility Index", + shortDescription: "RVI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 10, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Relative Volatility Index@tv-basicstudies-1", + scriptIdPart: "", + name: "Relative Volatility Index" + }, + constructor: function() { + this.f_0 = function(t, e) { + return o.Std.le(t, 0) ? 0 : e + }, this.f_1 = function(t, e) { + return o.Std.gt(t, 0) ? 0 : e + }, this.f_2 = function(t, e) { + return t / (t + e) * 100 + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .close(this._context), r = this._context.new_var(n), s = o.Std.stdev(r, + i, this._context), a = this._context.new_var(n), l = o.Std.change( + a), c = this.f_0(l, s), h = this._context.new_var(c), u = o.Std.ema( + h, + 14, this._context), d = this.f_1(l, s), p = this._context.new_var( + d), _ = o.Std.ema(p, 14, this._context), f = this.f_2(u, _), m = f, + [m] + } + } + }, { + name: "SMI Ergodic Indicator/Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF7F00" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 1, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 5, + in_1: 20, + in_2: 5 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Indicator", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Signal", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Oscillator", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "SMI Ergodic Indicator/Oscillator", + shortDescription: "SMIIO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "shortlen", + defval: 5, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "longlen", + defval: 20, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "siglen", + defval: 5, + type: "integer", + min: 1, + max: 2e3 + }], + id: "SMI Ergodic Indicator/Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "SMI Ergodic Indicator/Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e) { + return t - e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.close(this._context), a = this + ._context.new_var(s), l = o.Std.tsi(a, i, n, this._context), c = this + ._context.new_var(l), h = o.Std.ema(c, r, this._context), u = this.f_0( + l, h), d = l, p = h, _ = u, [d, p, _] + } + } + }, { + name: "Smoothed Moving Average", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 7, + in_1: "close" + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Smoothed Moving Average", + shortDescription: "SMMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "Length", + defval: 7, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "Source", + defval: "close", + type: "source", + options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"] + }], + id: "smoothed_moving_average@tv-basicstudies-1", + scriptIdPart: "", + name: "Smoothed Moving Average" + }, + constructor: function() { + this.f_0 = function() { + var t, e = this._input(0), + i = o.Std[this._input(1)](this._context), + n = this._context.new_var(i), + r = o.Std.sma(n, e, this._context), + s = this._context.new_var(), + a = (s.get(1) * (e - 1) + i) / e; + return s.set(o.Std.na(s.get(1)) ? r : a), t = s.get(0), [t] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_0() + } + } + }, { + name: "Stochastic", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#800080", + transparency: 75, + visible: !0 + } + }, + inputs: { + in_0: 14, + in_1: 1, + in_2: 3 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "%K", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "%D", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Stochastic", + shortDescription: "Stoch", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "smoothK", + defval: 1, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_2", + name: "smoothD", + defval: 3, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Stochastic@tv-basicstudies-1", + scriptIdPart: "", + name: "Stochastic" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.close(this._context), a = o + .Std.high(this._context), l = o.Std.low(this._context), c = this + ._context.new_var(s), h = this._context.new_var(a), u = this._context + .new_var(l), d = o.Std.stoch(c, h, u, i, this._context), p = this + ._context.new_var(d), _ = o.Std.sma(p, n, this._context), f = this + ._context.new_var(_), m = o.Std.sma(f, r, this._context), g = _, v = m, + [g, v] + } + } + }, { + name: "Stochastic RSI", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 80 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 20 + }], + filledAreasStyle: { + fill_0: { + color: "#800080", + transparency: 80, + visible: !0 + } + }, + inputs: { + in_0: 14, + in_1: 14, + in_2: 3, + in_3: 3 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "%K", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "%D", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Stochastic RSI", + shortDescription: "Stoch RSI", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "lengthRSI", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_1", + name: "lengthStoch", + defval: 14, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_2", + name: "smoothK", + defval: 3, + type: "integer", + min: 1, + max: 1e4 + }, { + id: "in_3", + name: "smoothD", + defval: 3, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Stochastic RSI@tv-basicstudies-1", + scriptIdPart: "", + name: "Stochastic RSI" + }, + constructor: function() { + this.f_1 = function(t, e, i) { + var n = i.new_var(o.Std.max(o.Std.change(t), 0)); + return o.Std.rma(n, e, i) + }, this.f_2 = function(t, e, i) { + var n = i.new_var(-o.Std.min(o.Std.change(t), 0)); + return o.Std.rma(n, e, i) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._input(1), s = this._input(2), a = this + ._input(3), l = this._context.new_var(i), c = o.Std.rsi(this.f_1(l, n, + this._context), this.f_2(l, n, this._context)), h = this._context + .new_var(c), u = this._context.new_var(c), + d = this._context.new_var(c), p = o.Std.stoch(h, u, d, r, this + ._context), _ = this._context.new_var(p), f = o.Std.sma(_, s, this + ._context), m = this._context.new_var(f), g = o.Std.sma(m, a, this + ._context), v = f, y = g, [v, y] + } + } + }, { + name: "TRIX", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#800000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 18 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "TRIX", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "TRIX", + shortDescription: "TRIX", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 18, + type: "integer", + min: 1, + max: 2e3 + }], + id: "TRIX@tv-basicstudies-1", + scriptIdPart: "", + name: "TRIX" + }, + constructor: function() { + this.f_0 = function(t) { + return o.Std.log(t) + }, this.f_1 = function(t) { + return 1e4 * t + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _; + return this._context = t, this._input = e, i = this._input(0), n = this.f_0( + o.Std.close(this._context)), r = this._context.new_var(n), s = o.Std + .ema(r, i, this._context), a = this._context.new_var(s), l = o.Std.ema( + a, i, this._context), c = this._context.new_var(l), h = o.Std.ema(c, + i, this._context), u = this._context.new_var(h), d = o.Std.change( + u), p = this.f_1(d), _ = p, [_] + } + } + }, { + name: "Triple EMA", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + } + }, + precision: 4, + inputs: { + in_0: 9 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Triple EMA", + shortDescription: "TEMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "length", + defval: 9, + type: "integer", + min: 1, + max: 1e4 + }], + id: "Triple EMA@tv-basicstudies-1", + scriptIdPart: "", + name: "Triple EMA" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return 3 * (t - e) + i + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .close(this._context), r = this._context.new_var(n), s = o.Std.ema(r, i, + this._context), a = this._context.new_var(s), l = o.Std.ema(a, i, + this._context), c = this._context.new_var(l), h = o.Std.ema(c, i, + this._context), u = this.f_0(s, l, h), d = u, [d] + } + } + }, { + name: "True Strength Indicator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 25, + in_1: 13, + in_2: 13 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "True Strength Indicator", + shortDescription: "True Strength Indicator", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "long", + defval: 25, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_1", + name: "short", + defval: 13, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_2", + name: "siglen", + defval: 13, + type: "integer", + min: 1, + max: 4999 + }], + id: "True Strength Indicator@tv-basicstudies-1", + scriptIdPart: "", + name: "True Strength Indicator" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l, c, h; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.close(this._context), a = this + ._context.new_var(s), l = o.Std.tsi(a, n, i, this._context), c = l, h = + this._context.new_var(c), [c, o.Std.ema(h, r, this._context)] + } + } + }, { + name: "Ultimate Oscillator", + metainfo: { + _metainfoVersion: 41, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 7, + in_1: 14, + in_2: 28 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "UO", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Ultimate Oscillator", + shortDescription: "UO", + is_price_study: !1, + inputs: [{ + id: "in_0", + name: "length7", + defval: 7, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_1", + name: "length14", + defval: 14, + type: "integer", + min: 1, + max: 1e12 + }, { + id: "in_2", + name: "length28", + defval: 28, + type: "integer", + min: 1, + max: 1e12 + }], + id: "ultimate_oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Ultimate Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + var n = this._context.new_var(t), + r = this._context.new_var(e); + return [o.Std.sum(n, i, this._context) / o.Std.sum(r, i, this._context)] + }, this.f_1 = function() { + var t = this._input(0), + e = this._input(1), + i = this._input(2), + n = this._context.new_var(o.Std.close(this._context)), + r = o.Std.max(o.Std.high(this._context), n.get(1)), + s = this._context.new_var(o.Std.close(this._context)), + a = o.Std.min(o.Std.low(this._context), s.get(1)), + l = o.Std.close(this._context) - a, + c = r - a, + h = this.f_0(l, c, t), + u = this.f_0(l, c, e), + d = this.f_0(l, c, i); + return [100 * (4 * h[0] + 2 * u[0] + d[0]) / 7] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_1() + } + } + }, { + name: "VWAP", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: 0, + transparency: 0, + visible: !0, + color: "#3A6CA8" + } + }, + precision: 4 + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "VWAP", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "VWAP", + shortDescription: "VWAP", + is_price_study: !0, + inputs: [], + id: "VWAP@tv-basicstudies-1", + scriptIdPart: "", + name: "VWAP" + }, + constructor: function() { + this.f_1 = function(t) { + t.hist = null, t.add_hist() + }, this.init = function(t, e) { + this._isNewSession = o.Std.createNewSessionCheck(t) + }, this.main = function(t, e) { + var i, n, r, s; + return this._context = t, this._input = e, i = t.new_var(), n = t.new_var(), + this._context.symbol.time && (r = this._context.symbol.time, this + ._isNewSession(r) && (this.f_1(i), this.f_1(n))), i.set(o.Std.nz(i + .get(1)) + o.Std.hlc3(this._context) * o.Std.volume(this + ._context)), n.set(o.Std.nz(n.get(1)) + o.Std.volume(this + ._context)), s = i.get(0) / n.get(0), [s] + } + } + }, { + name: "VWMA", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + } + }, + precision: 4, + inputs: { + in_0: 20 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "VWMA", + shortDescription: "VWMA", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "len", + defval: 20, + type: "integer", + min: 1, + max: 1e4 + }], + id: "VWMA@tv-basicstudies-1", + scriptIdPart: "", + name: "VWMA" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a; + return this._context = t, this._input = e, i = o.Std.close(this._context), + n = this._input(0), r = this._context.new_var(i), s = o.Std.vwma(r, n, + this._context), a = s, [a] + } + } + }, { + name: "Volume Oscillator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: 0 + }], + inputs: { + in_0: 5, + in_1: 10 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Volume Oscillator", + shortDescription: "Volume Osc", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "Zero" + }], + inputs: [{ + id: "in_0", + name: "shortlen", + defval: 5, + type: "integer", + min: 1, + max: 4999 + }, { + id: "in_1", + name: "longlen", + defval: 10, + type: "integer", + min: 1, + max: 4999 + }], + id: "Volume Oscillator@tv-basicstudies-1", + scriptIdPart: "", + name: "Volume Oscillator" + }, + constructor: function() { + this.f_0 = function(t, e) { + return 100 * (t - e) / e + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = o.Std.volume(this._context), s = this._context.new_var( + r), a = o.Std.ema(s, i, this._context), l = this._context.new_var( + r), c = o.Std.ema(l, n, this._context), h = this.f_0(a, c), u = h, [ + u + ] + } + } + }, { + name: "Vortex Indicator", + metainfo: { + _metainfoVersion: 42, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + } + }, + precision: 4, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }], + styles: { + plot_0: { + title: "VI +", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + }, + plot_1: { + title: "VI -", + histogramBase: 0, + joinPoints: !1, + isHidden: !1 + } + }, + description: "Vortex Indicator", + shortDescription: "VI", + is_price_study: !1, + is_hidden_study: !1, + id: "vortex_indicator@tv-basicstudies-1", + inputs: [{ + id: "in_0", + name: "Period", + defval: 14, + type: "integer", + min: 2, + max: 1e12 + }], + scriptIdPart: "", + name: "Vortex Indicator" + }, + constructor: function() { + this.f_0 = function() { + var t = this._input(0), + e = this._context.new_var(o.Std.low(this._context)), + i = this._context.new_var(o.Std.abs(o.Std.high(this._context) - e.get( + 1))), + n = o.Std.sum(i, t, this._context), + r = this._context.new_var(o.Std.high(this._context)), + s = this._context.new_var(o.Std.abs(o.Std.low(this._context) - r.get( + 1))), + a = o.Std.sum(s, t, this._context), + l = this._context.new_var(o.Std.atr(1, this._context)), + c = o.Std.sum(l, t, this._context); + return [n / c, a / c] + }, this.main = function(t, e) { + return this._context = t, this._input = e, this.f_0() + } + } + }, { + name: "Willams %R", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#000080" + } + }, + precision: 4, + bands: [{ + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -20 + }, { + color: "#808080", + linestyle: 2, + linewidth: 1, + visible: !0, + value: -80 + }], + filledAreasStyle: { + fill_0: { + color: "#000080", + transparency: 90, + visible: !0 + } + }, + inputs: { + in_0: 14 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }], + styles: { + plot_0: { + title: "Plot", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Williams %R", + shortDescription: "%R", + is_price_study: !1, + bands: [{ + id: "hline_0", + name: "UpperLimit" + }, { + id: "hline_1", + name: "LowerLimit" + }], + filledAreas: [{ + id: "fill_0", + objAId: "hline_0", + objBId: "hline_1", + type: "hline_hline", + title: "Hlines Background" + }], + inputs: [{ + id: "in_0", + name: "length", + defval: 14, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Willams %R@tv-basicstudies-1", + scriptIdPart: "", + name: "Willams %R" + }, + constructor: function() { + this.f_0 = function(t, e, i) { + return 100 * (t - e) / (e - i) + }, this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u; + return this._context = t, this._input = e, i = this._input(0), n = o.Std + .high(this._context), r = this._context.new_var(n), s = o.Std.highest(r, + i, this._context), a = o.Std.low(this._context), l = this._context + .new_var(a), c = o.Std.lowest(l, i, this._context), h = this.f_0(o.Std + .close(this._context), s, c), u = h, [u] + } + } + }, { + name: "Williams Alligator", + metainfo: { + _metainfoVersion: 27, + isTVScript: !1, + isTVScriptStub: !1, + is_hidden_study: !1, + defaults: { + styles: { + plot_0: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#0000FF" + }, + plot_1: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#FF0000" + }, + plot_2: { + linestyle: 0, + linewidth: 1, + plottype: 0, + trackPrice: !1, + transparency: 35, + visible: !0, + color: "#008000" + } + }, + precision: 4, + inputs: { + in_0: 21, + in_1: 13, + in_2: 8 + } + }, + plots: [{ + id: "plot_0", + type: "line" + }, { + id: "plot_1", + type: "line" + }, { + id: "plot_2", + type: "line" + }], + styles: { + plot_0: { + title: "Jaw", + histogramBase: 0, + joinPoints: !1 + }, + plot_1: { + title: "Teeth", + histogramBase: 0, + joinPoints: !1 + }, + plot_2: { + title: "Lips", + histogramBase: 0, + joinPoints: !1 + } + }, + description: "Williams Alligator", + shortDescription: "Alligator", + is_price_study: !0, + inputs: [{ + id: "in_0", + name: "jawLength", + defval: 21, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_1", + name: "teethLength", + defval: 13, + type: "integer", + min: 1, + max: 2e3 + }, { + id: "in_2", + name: "lipsLength", + defval: 8, + type: "integer", + min: 1, + max: 2e3 + }], + id: "Williams Alligator@tv-basicstudies-1", + scriptIdPart: "", + name: "Williams Alligator" + }, + constructor: function() { + this.main = function(t, e) { + var i, n, r, s, a, l, c, h, u, d, p, _, f; + return this._context = t, this._input = e, i = this._input(0), n = this + ._input(1), r = this._input(2), s = o.Std.hl2(this._context), a = this + ._context.new_var(s), l = o.Std.ema(a, i, this._context), c = this + ._context.new_var(s), h = o.Std.ema(c, n, this._context), u = this + ._context.new_var(s), d = o.Std.ema(u, r, this._context), p = l, _ = h, + f = d, [{ + value: p, + offset: 8 + }, { + value: _, + offset: 5 + }, { + value: f, + offset: 3 + }] + } + } + }, { + name: "Williams Fractals", + metainfo: { + _metainfoVersion: 42, + isTVScript: !1, + isTVScriptStub: !1, + defaults: { + styles: { + plot_0: { + plottype: "shape_triangle_down", + visible: !0, + location: "BelowBar", + transparency: 0, + color: "#800000" + }, + plot_1: { + plottype: "shape_triangle_up", + visible: !0, + location: "AboveBar", + transparency: 0, + color: "#808000" + } + }, + precision: 4, + inputs: { + in_0: 2 + } + }, + plots: [{ + id: "plot_0", + type: "shapes" + }, { + id: "plot_1", + type: "shapes" + }], + styles: { + plot_0: { + title: "Down fractals", + isHidden: !1 + }, + plot_1: { + title: "Up fractals", + isHidden: !1 + } + }, + description: "Williams Fractal", + shortDescription: "Fractals", + is_price_study: !0, + is_hidden_study: !1, + id: "Williams Fractals@tv-basicstudies-1", + inputs: [{ + id: "in_0", + name: "Periods", + defval: 2, + type: "integer", + min: 2, + max: 1e12 + }], + scriptIdPart: "", + name: "Williams Fractals", + isCustomIndicator: !0 + }, + constructor: function() { + this.f_0 = function() { + var t = this._input(0), + e = this._context.new_var(o.Std.high(this._context)), + i = o.Std.or(o.Std.and(o.Std.and(o.Std.lt(e.get(t + 2), e.get(t)), o.Std + .lt(e.get(t + 1), e.get(t))), o.Std.and(o.Std.lt(e.get(t - + 1), e.get(t)), o.Std.lt(e.get(t - 2), e.get(t)))), o.Std.or(o + .Std.or(o.Std.and(o.Std.lt(e.get(t + 3), e.get(t)), o.Std.and(o + .Std.and(o.Std.lt(e.get(t + 2), e.get(t)), o.Std.eq( + e.get(t + 1), e.get(t))), o.Std.and(o.Std.lt(e + .get(t - 1), e.get(t)), o.Std.lt(e.get(t - + 2), e.get(t))))), o.Std.and(o.Std.and(o.Std.lt(e + .get(t + 4), e.get(t)), o.Std.lt(e.get(t + 3), e + .get(t))), o.Std.and(o.Std.and(o.Std.eq(e.get(t + + 2), e.get(t)), o.Std.le(e.get(t + 1), e.get( + t))), o.Std.and(o.Std.lt(e.get(t - 1), e.get( + t)), o.Std.lt(e.get(t - 2), e.get(t)))))), o.Std.or(o.Std + .and(o.Std.and(o.Std.lt(e.get(t + 5), e.get(t)), o.Std.and(o + .Std.lt(e.get(t + 4), e.get(t)), o.Std.eq(e.get( + t + 3), e.get(t)))), o.Std.and(o.Std.and(o.Std + .eq(e.get(t + 2), e.get(t)), o.Std.le(e.get(t + + 1), e.get(t))), o.Std.and(o.Std.lt(e.get(t - + 1), e.get(t)), o.Std.lt(e.get(t - 2), e.get( + t))))), o.Std.and(o.Std.and(o.Std.and(o.Std.lt(e.get(t + + 6), e.get(t)), o.Std.lt(e.get(t + 5), e.get( + t))), o.Std.and(o.Std.eq(e.get(t + 4), e.get( + t)), o.Std.le(e.get(t + 3), e.get(t)))), o.Std.and(o + .Std.and(o.Std.eq(e.get(t + 2), e.get(t)), o.Std.le( + e.get(t + 1), e.get(t))), o.Std.and(o.Std.lt(e + .get(t - 1), e.get(t)), o.Std.lt(e.get(t - + 2), e.get(t)))))))), + n = this._context.new_var(o.Std.low(this._context)); + return [o.Std.or(o.Std.and(o.Std.and(o.Std.gt(n.get(t + 2), n.get(t)), o.Std + .gt(n.get(t + 1), n.get(t))), o.Std.and(o.Std.gt(n.get( + t - 1), n.get(t)), o.Std.gt(n.get(t - 2), n.get(t)))), o.Std + .or(o.Std.or(o.Std.and(o.Std.gt(n.get(t + 3), n.get(t)), o.Std + .and(o.Std.and(o.Std.gt(n.get(t + 2), n.get(t)), o + .Std.eq(n.get(t + 1), n.get(t))), o.Std.and( + o.Std.gt(n.get(t - 1), n.get(t)), o.Std.gt(n + .get(t - 2), n.get(t))))), o.Std.and(o.Std + .and(o.Std.gt(n.get(t + 4), n.get(t)), o.Std.gt(n + .get(t + 3), n.get(t))), o.Std.and(o.Std.and(o + .Std.eq(n.get(t + 2), n.get(t)), o.Std.ge(n + .get(t + 1), n.get(t))), o.Std.and(o.Std + .gt(n.get(t - 1), n.get(t)), o.Std.gt(n.get( + t - 2), n.get(t)))))), o.Std.or(o.Std.and(o.Std + .and(o.Std.gt(n.get(t + 5), n.get(t)), o.Std.and(o + .Std.gt(n.get(t + 4), n.get(t)), o.Std.eq(n + .get(t + 3), n.get(t)))), o.Std.and(o.Std + .and(o.Std.eq(n.get(t + 2), n.get(t)), o.Std.ge( + n.get(t + 1), n.get(t))), o.Std.and(o.Std + .gt(n.get(t - 1), n.get(t)), o.Std.gt(n.get( + t - 2), n.get(t))))), o.Std.and(o.Std + .and(o.Std.and(o.Std.gt(n.get(t + 6), n.get(t)), o + .Std.gt(n.get(t + 5), n.get(t))), o.Std.and( + o.Std.eq(n.get(t + 4), n.get(t)), o.Std.ge(n + .get(t + 3), n.get(t)))), o.Std.and(o.Std + .and(o.Std.eq(n.get(t + 2), n.get(t)), o.Std.ge( + n.get(t + 1), n.get(t))), o.Std.and(o.Std + .gt(n.get(t - 1), n.get(t)), o.Std.gt(n.get( + t - 2), n.get(t)))))))), i] + }, this.main = function(t, e) { + this._context = t, this._input = e; + var i = this.f_0(); + return [{ + value: i[0], + offset: -2 + }, { + value: i[1], + offset: -2 + }] + } + } + }] + }, function(t, e, i) { + "use strict"; + var o, n, r, s, a, l, c, h; + Object.defineProperty(e, "__esModule", { + value: !0 + }), o = i(0), n = i(2), r = i(39), s = i(14), a = i(85), l = i(368), c = i(1025), h = function(t) { + function e(e) { + var i = t.call(this, e) || this; + return i._handleClick = function() { + i._handleToggleDropdown() + }, i._handleToggleDropdown = function(t) { + var e = i.state.isOpened, + o = "boolean" == typeof t ? t : !e; + i.setState({ + isOpened: o + }) + }, i._handleClose = function() { + i._handleToggleDropdown(!1) + }, i._getDropdownPosition = function() { + var t = r.findDOMNode(i).getBoundingClientRect(); + return { + x: t.left + (i.props.directionHorz === a.DirectionHorz.ToLeft ? t.width : 0), + y: t.bottom + 2 + } + }, i.state = { + isOpened: !1 + }, i + } + return o.__extends(e, t), e.prototype.render = function() { + var t, e = this.props, + i = e.id, + o = e.arrow, + r = e.children, + h = e.content, + u = e.directionHorz, + d = e.isDisabled, + p = e.minWidth, + _ = e.title, + f = e.className, + m = this.state.isOpened, + g = s(f, c.button, "apply-common-tooltip", (t = {}, t[c.isDisabled] = d, t[c + .isOpened] = m, t)); + return n.createElement("div", { + id: i, + className: g, + onClick: d ? void 0 : this._handleClick, + title: _ + }, h, o && n.createElement("div", { + className: c.arrow + }, n.createElement("div", { + className: c.arrowWrap + }, n.createElement(l.ToolWidgetCaret, { + dropped: m + }))), n.createElement(a.PopupMenu, { + closeOnClickOutside: this.props.closeOnClickOutside, + directionHorz: u, + doNotCloseOn: this, + isOpened: m, + minWidth: p, + onClose: this._handleClose, + position: this._getDropdownPosition + }, r)) + }, e.defaultProps = { + arrow: !0, + closeOnClickOutside: !0 + }, e + }(n.PureComponent), e.ToolWidgetMenu = h + }, function(t, e, i) { + "use strict"; + + function o(t) { + var e = t.className, + i = n.__rest(t, ["className"]); + return r.createElement(a.ToolWidgetButton, n.__assign({}, i, { + className: s(e, l.button) + })) + } + var n, r, s, a, l; + Object.defineProperty(e, "__esModule", { + value: !0 + }), n = i(0), r = i(2), s = i(14), a = i(103), + l = i(1033), e.ToolWidgetIconButton = o + }, function(t, e, i) { + "use strict"; + + function o(t, e, i) { + var o, n, r, s, a; + for (void 0 === i && (i = {}), o = Object.assign({}, e), n = 0, r = Object.keys(e); n < r + .length; n++) s = r[n], (a = i[s] || s) in t && (o[s] = [t[a], e[s]].join(" ")); + return o + } + Object.defineProperty(e, "__esModule", { + value: !0 + }), e.weakComposeClasses = o + }, function(t, e, i) { + "use strict"; + (function(t) { + function o(t, e) { + this._model = e, this._bindings = [], this._property = t, this.supportThemeSwitcher = !1 + } + + function n(t) { + return t.toUpperCase() + } + + function r(t) { + return function(e) { + return e < t ? t : e + } + } + + function s(t) { + return function(e) { + return e > t ? t : e + } + } + + function a(t) { + return function(e) { + var i = parseInt(e, 10); + return M(i) ? t : i + } + } + + function l(t) { + var e = new B; + return function(i) { + var o = e.parse(i); + return M(o) ? t : o + } + } + + function c(t) { + var e = new B; + return function(i) { + var o = e.parse(i); + return M(o) ? t() : o + } + } + + function h(t, e) { + var i = new z(e); + return function(e) { + var o = i.format(e); + return M(o) ? t : o + } + } + + function u() { + return function(t) { + for (var e = t, i = t.replace(/[^\u0000-\u007F]/, ""); i.length !== e.length;) e = + i, i = e.replace(/[^\u0000-\u007F]/, ""); + return i + } + } + + function d(t) { + return function(e) { + return 0 === e.length ? t : e + } + } + + function p(t, e, i, o, n, r, s) { + W.call(this, t, e, o, n, r), this._transformFunction = i, this._setter = s, this + ._attachToControl(t, o) + } + + function _(t, e, i, o, n) { + p.call(this, t, e, l(e.value()), i, o, n), this.addFormatter(function(t) { + return (new B).format(t) + }) + } + + function f(t, e, i, o, n, r) { + this._subControlIds = e, W.call(this, t, i, o, n, r), this._forEachSubControl(function(t) { + this._attachToControl(t, o) + }) + } + + function m(t, e, i, o, n, r, s) { + this._model = o, this._mainSeries = r, this._toIntTransformer = a(s), this._disabled = !1, W + .call(this, t, e, i, o, n); + var l = this; + i && t.change(function() { + l.setValueToProperty(l.value()) + }), this._mainSeries.onBarReceived().subscribe(this, function() { + l.setValue(this.property().value()) + }) + } + + function g(t, e, i, o, n) { + W.call(this, t, e, i, o, n), i && t.on("accept-symbol", function(t, e) { + this.setValueToProperty(e) + }.bind(this)) + } + + function v(t, e, i, o, n, r, s, a) { + W.call(this, t, e, o, n, r), this._transformFunction = i, this._propertyChangedHook = a, + this._setter = s; + var l = this; + o && t.change(function() { + l._setter ? l._setter.call(l, l.value()) : l.setValueToProperty(l.value()) + }) + } + + function y(t, e) { + W.call(this, t, e) + } + + function b(t, e, i, o, n, r) { + if (!t.is(":checkbox, :radio")) return new w(t, e, i, o, n); + W.call(this, t, e, i, o, n), this._setter = r; + var s = this; + i && t.change(function() { + s._setter ? s._setter.call(s, s.value()) : s.setValueToProperty(s.value()) + }) + } + + function S(t, e, i, o, n, r) { + W.call(this, t, e, i, o, n), this._inverted = !0 === r + } + + function w(t, e, i, o, n) { + W.call(this, t, e, i, o, n); + var r = this; + i && t.click(function() { + var t = $(this).toggleClass("active").hasClass("active"); + r.setValueToProperty(t) + }) + } + + function T(t, e, i, o, n, r) { + var s, a; + s = t.is("input") ? t : t.find("input"), W.call(this, s, e, i, o, n), this + ._transparencyProperty = r, this.applyOldTransparency(), a = this, i && s.change( + function() { + a.setValueToProperty(a.value()) + }) + } + + function C(e, i, o, n, r, s) { + function a(t, e) { + var i = c.control().slider("option", "min"), + o = c.control().slider("option", "max"), + n = c._property.value(); + (i <= n && n <= o || i < e.value && e.value < o) && c.setValueToProperty(e.value) + } + + function l(t, e) { + c.setValueToProperty(e.value) + } + isNumber(i.value()) || (H.logWarn( + "Property cannot be binded to control, bad value (expect number): " + i.value() + ), i = new t), W.call(this, e, i, o, n, r); + var c = this; + o && (s ? (e.bind("slidechange", a), e.bind("slide", a)) : (e.bind("slidechange", l), e + .bind("slide", l))), e.bind("slidestart", function(t, e) { + n.beginUndoMacro(r) + }), e.bind("slidestop", function(t, e) { + n.endUndoMacro() + }) + } + + function x(t, e, i, o, n, r) { + b.call(this, t, e, o, n, r), this._intervalProperty = i, this._intervalProperty.listeners() + .subscribe(this, this.onIntervalChanged), this.onIntervalChanged() + } + + function P(t, e, i, o, n) { + this._control = t, this._wv = e, this._transformFunction = i, this._undoModel = o, this + ._undoText = n, this._attachToControl(this._control), this._setValueBinded = this + .setValue.bind(this) + } + + function L(t, e, i, o, n, r) { + this._not = !!r, P.apply(this, arguments) + } + + function I(t, e, i, o, n, r, s, a) { + this._propFrom = e[0], this._propTo = e[1], this._control = t, this._applyOnFly = o, this + ._undoModel = n, this._undoText = s, this._properties = e, this._inputsText = r, this + ._transformers = i; + var l = this; + t.slider({ + range: !0, + min: i[0], + max: i[1], + values: [l._propFrom.value(), l._propTo.value()] + }), this.$rangeHandleFrom = $(t.find(".ui-slider-handle")[0]).addClass("from"), this + .$rangeHandleTo = $(t.find(".ui-slider-handle")[1]).addClass("to"), this.setValue(this + ._propFrom, 0), this.setValue(this._propTo, 1), a && ($(a).on("change", function( + t) { + $(this).is(":checked") ? (l._control.slider("enable"), $(l._inputsText[0]) + .prop("disabled", !1), $(l._inputsText[1]).prop("disabled", !1)) : ( + l._control.slider("disable"), $(l._inputsText[0]).prop("disabled", ! + 0), $(l._inputsText[1]).prop("disabled", !0)) + }), $(a).is(":checked") ? (l._control.slider("enable"), $(l._inputsText[0]).prop( + "disabled", !1), $(l._inputsText[1]).prop("disabled", !1)) : (l._control.slider( + "disable"), $(l._inputsText[0]).prop("disabled", !0), $(l._inputsText[1]) + .prop("disabled", !0))), r && ($(r[0]).val(this._control.slider("values", 0)), $(r[ + 1]).val(this._control.slider("values", 1)), t.slider({ + slide: function(t, e) { + $(r[0]).val(e.values[0]), $(r[1]).val(e.values[1]) + } + }), $(r).each(function() { + $(this).on("keydown", function(t) { + parseInt($(r[0]).val()) < l._transformers[0] ? $(r[0]).val(l + ._transformers[0]) : parseInt($(r[1]).val()) > l + ._transformers[1] && $(r[1]).val(l._transformers[1]), -1 !== + $.inArray(t.keyCode, [46, 8, 9, 27, 13, 110, 190]) || 65 === + t.keyCode && !0 === t.ctrlKey || 67 === t.keyCode && !0 === + t.ctrlKey || 88 === t.keyCode && !0 === t.ctrlKey || t + .keyCode >= 35 && t.keyCode <= 39 || (t.shiftKey || t + .keyCode < 48 || t.keyCode > 57) && (t.keyCode < 96 || t + .keyCode > 105) && t.preventDefault() + }) + }), $(r[0]).on("keyup", function(t) { + parseInt($(this).val()) < l._transformers[0] ? $(this).val(l._transformers[ + 0]) : parseInt($(this).val()) > l._transformers[1] && $(this).val(l + ._transformers[1]), parseInt($(this).val()) > parseInt($(r[1]) + .val()) && $(this).val(r[1].val()), l._control.slider("values", 0, + $( + this).val()), I.prototype.setValueToProperty.call(l, l._control + .slider("values"), "from") + }), $(r[1]).on("keyup", function(t) { + parseInt($(this).val()) < l._transformers[0] ? $(this).val(l._transformers[ + 0]) : parseInt($(this).val()) > l._transformers[1] && $(this).val(l + ._transformers[1]), + parseInt($(this).val()) < $(r[0]).val() && $(this).val(r[0].val()), l + ._control.slider("values", 1, $(this).val()), I.prototype + .setValueToProperty.call(l, l._control.slider("values"), "to") + })), this._propFrom.listeners().subscribe(this, I.prototype.propertyChanged), this + ._propTo.listeners().subscribe(this, I.prototype.propertyChanged), o && t.on("slide", + function(t, e) { + l.setValueToProperty(l._control.slider("values"), e.handle) + }), t.slider({ + stop: function(t, e) { + r && ($(r[0]).val(l._control.slider("values", 0)), $(r[1]).val(l + ._control.slider("values", 1))), l.setValueToProperty(l._control + .slider("values"), e.handle) + }, + start: function(t, e) { + r && ($(r[0]).val(l._control.slider("values", 0)), $(r[1]).val(l + ._control.slider("values", 1))), l.setValueToProperty(l._control + .slider("values"), e.handle) + } + }) + } + + function k(t, e, i, o, n, r) { + W.call(this, t, e, i, o, n), this._separator = r || " "; + var s = this; + i && t.change(function() { + s.setValueToProperty(s.value()) + }) + } + var A, M, E, D, V, O, R, B, z, F, N, W, H; + i(384), A = i(9).ensureNotNull, M = i(198).isNaN, E = i(32), D = E.rgba, V = E.rgbaToString, O = + E.parseRgb, R = i(212).TimePointIndexSearchMode, B = i(89).NumericFormatter, z = i(213) + .LimitedPrecisionNumericFormatter, F = i(30), N = i(372).addColorPicker, W = i(320).Binding, + H = i(7).getLogger("Chart.PropertyPage"), o.prototype.model = function() { + return this._model + }, o.prototype.bindControl = function(t) { + return this._bindings.push(t), t + }, o.prototype.unbindControl = function(t) { + var e = this._bindings.indexOf(t); - 1 !== e && this._bindings.splice(e, 1) + }, o.prototype.loadData = function() { + var t, e, i; + for (t = 0; t < this._bindings.length; t++) e = this._bindings[t], e.properties ? (i = e + .properties(), e.setValue(i[0], 0), e.setValue(i[1], 1)) : e.property && (e + .transparencyProperty && e.transparencyProperty() ? e.applyOldTransparency() : e + .setValue(e.property().value())) + }, o.prototype.saveData = function() { + var t, e; + for (this._model.beginUndoMacro(), t = 0; t < this._bindings.length; t++) e = this + ._bindings[t], e.changed() && this._model.setProperty(e.property(), e.value()); + this._model.endUndoMacro() + }, o.prototype.createColorPicker = function(t) { + return N(null, t) + }, o.prototype.createTextEditor = function(t, e) { + var i = {}; + return t && (i.width = t), e && (i.height = e), $(document.createElement("textarea")) + .css(i).addClass("tv-control-input") + }, o.prototype.createCombo = function(t) { + var e = $(document.createElement("select")), + i = t.reduce(function(t, e) { + return t.add($(document.createElement("option")).prop({ + value: e, + text: e + })) + }, $()); + return e.append(i) + }, o.prototype.createKeyCombo = function(t) { + var e = $(document.createElement("select")); + return $.each(t || [], function(t, i) { + $(document.createElement("option")).prop({ + value: t, + text: i + }).appendTo(e) + }), e + }, o.prototype.createFontEditor = function(t) { + var e = t || TradingView.factoryDefaults("chartproperties.editorFontsList"); + return this.createCombo(e) + }, o.prototype.createFontSizeEditor = function(t) { + var e = t || [10, 11, 12, 14, 16, 20, 24, 28, 32, 40]; + return this.createCombo(e).addClass("tv-select-container-fontsize") + }, o.prototype.createSeriesMinTickEditor = function() { + var t, e, i, o, n = "", $(n) + }, o.prototype.createPrecisionEditor = function() { + var t, e = "", $(e) + }, o.prototype.createLabeledCell = function(t, e, i) { + var o, n, r, s, a = null; + return "number" == typeof t.valueOf() ? (a = t, o = e, n = i) : (o = t, n = e), o += "", + r = this._labelToId(o), s = $(""), $("