@deephaven/code-studio 0.60.0 → 0.60.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/assets/{AppRoot-4e766647.js → AppRoot-18896503.js} +4 -4
- package/build/assets/AppRoot-18896503.js.map +1 -0
- package/build/assets/{ControlType-aed38d2a.js → ControlType-b3af9d6b.js} +2 -2
- package/build/assets/{ControlType-aed38d2a.js.map → ControlType-b3af9d6b.js.map} +1 -1
- package/build/assets/{FontBootstrap-03312de4.js → FontBootstrap-84eb96bb.js} +2 -2
- package/build/assets/{FontBootstrap-03312de4.js.map → FontBootstrap-84eb96bb.js.map} +1 -1
- package/build/assets/{IrisGrid-95f2b562.js → IrisGrid-79707acb.js} +2 -2
- package/build/assets/{IrisGrid-95f2b562.js.map → IrisGrid-79707acb.js.map} +1 -1
- package/build/assets/{IrisGridModelFactory-83f4e8e3.js → IrisGridModelFactory-7ea0ea8b.js} +2 -2
- package/build/assets/{IrisGridModelFactory-83f4e8e3.js.map → IrisGridModelFactory-7ea0ea8b.js.map} +1 -1
- package/build/assets/{StyleGuideRoot-f74fbaec.js → StyleGuideRoot-d479ad58.js} +2 -2
- package/build/assets/{StyleGuideRoot-f74fbaec.js.map → StyleGuideRoot-d479ad58.js.map} +1 -1
- package/build/assets/{index-e5c706d4.js → index-6dcb396d.js} +2 -2
- package/build/assets/{index-e5c706d4.js.map → index-6dcb396d.js.map} +1 -1
- package/build/assets/{index-8f18b8a1.js → index-9a3f9a77.js} +2 -2
- package/build/assets/{index-8f18b8a1.js.map → index-9a3f9a77.js.map} +1 -1
- package/build/assets/{index-aeb6c8aa.js → index-ecb1b990.js} +2 -2
- package/build/assets/{index-aeb6c8aa.js.map → index-ecb1b990.js.map} +1 -1
- package/build/assets/{usePlugins-ed18184b.js → usePlugins-a7862f22.js} +2 -2
- package/build/assets/{usePlugins-ed18184b.js.map → usePlugins-a7862f22.js.map} +1 -1
- package/build/assets/{useUser-2b2d3085.js → useUser-48184119.js} +2 -2
- package/build/assets/{useUser-2b2d3085.js.map → useUser-48184119.js.map} +1 -1
- package/build/index.html +1 -1
- package/package.json +31 -31
- package/build/assets/AppRoot-4e766647.js.map +0 -1
package/build/assets/{IrisGridModelFactory-83f4e8e3.js.map → IrisGridModelFactory-7ea0ea8b.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridModelFactory-83f4e8e3.js","sources":["../../../components/dist/CardFlip.js","../../../chart/dist/FigureChartModel.js","../../../chart/dist/ChartModelFactory.js","../../../chart/dist/isFigureChartModel.js","../../../iris-grid/dist/MissingKeyError.js","../../../iris-grid/dist/IrisGridTableModelTemplate.js","../../../iris-grid/dist/IrisGridTableModel.js","../../../iris-grid/dist/EmptyIrisGridModel.js","../../../iris-grid/dist/IrisGridPartitionedTableModel.js","../../../iris-grid/dist/IrisGridTreeTableModel.js","../../../iris-grid/dist/IrisGridProxyModel.js","../../../iris-grid/dist/IrisGridModelFactory.js"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport \"./CardFlip.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nfunction CardFlip(_ref) {\n var {\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId\n } = _ref;\n var getComponent = key => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n var front = useRef(null);\n var transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n var transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n useEffect(function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n var refObj = front.current;\n return function cleanupListener() {\n if (refObj != null) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n }, [transitionStart]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped\n }),\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"card-flip--back\",\n children: getComponent(0)\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: front,\n className: \"card-flip--front\",\n onTransitionEnd: transitionEnd,\n children: getComponent(1)\n })]\n });\n}\nexport default CardFlip;\n//# sourceMappingURL=CardFlip.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport Log from '@deephaven/log';\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nvar log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n /**\n * @param dh JSAPI instance\n * @param figure The figure object created by the API\n * @param theme The theme for the figure\n * @param settings Chart settings\n */\n constructor(dh, figure, theme) {\n var _this;\n var settings = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super(dh);\n _this = this;\n _defineProperty(this, \"chartUtils\", void 0);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"figure\", void 0);\n _defineProperty(this, \"settings\", void 0);\n _defineProperty(this, \"theme\", void 0);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"layout\", void 0);\n _defineProperty(this, \"seriesDataMap\", void 0);\n _defineProperty(this, \"pendingSeries\", void 0);\n _defineProperty(this, \"oneClicks\", void 0);\n _defineProperty(this, \"filterColumnMap\", void 0);\n _defineProperty(this, \"lastFilter\", void 0);\n _defineProperty(this, \"isConnected\", void 0);\n _defineProperty(this, \"seriesToProcess\", void 0);\n _defineProperty(this, \"addPendingSeries\", debounce(() => {\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var {\n pendingSeries\n } = this;\n var _loop = function _loop() {\n var _chart$showLegend;\n var series = pendingSeries[i];\n var chart = _this.figure.charts.find(c => c.series.includes(series));\n _this.addSeries(series, axisTypeMap, (_chart$showLegend = chart === null || chart === void 0 ? void 0 : chart.showLegend) !== null && _chart$showLegend !== void 0 ? _chart$showLegend : null);\n series.subscribe();\n // We'll get an update with the data after subscribing\n };\n for (var i = 0; i < pendingSeries.length; i += 1) {\n _loop();\n }\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE));\n _defineProperty(this, \"getTimeZone\", memoize((columnType, formatter) => {\n if (formatter != null) {\n var dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return undefined;\n }));\n _defineProperty(this, \"getValueTranslator\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.unwrapValue(value, timeZone);\n }));\n _defineProperty(this, \"getValueParser\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.wrapValue(value, columnType, timeZone);\n }));\n _defineProperty(this, \"getRangeParser\", memoize((columnType, formatter) => range => {\n var [rangeStart, rangeEnd] = range;\n var valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }));\n _defineProperty(this, \"getAxisRangeParser\", memoize((chart, formatter) => axis => {\n var source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n return range => range;\n }));\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n var template = {\n data: {},\n layout: this.chartUtils.makeDefaultLayout(theme)\n };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent'\n },\n template\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n // Assume figure is connected to start\n\n close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n getDefaultTitle() {\n if (this.figure.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n var _this$figure$charts$;\n return (_this$figure$charts$ = this.figure.charts[0].title) !== null && _this$figure$charts$ !== void 0 ? _this$figure$charts$ : '';\n }\n return '';\n }\n initAllSeries() {\n var _this2 = this;\n this.oneClicks = [];\n this.filterColumnMap.clear();\n var {\n charts\n } = this.figure;\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var activeSeriesNames = [];\n this.seriesToProcess = new Set();\n var _loop2 = function _loop2() {\n var chart = charts[i];\n for (var j = 0; j < chart.series.length; j += 1) {\n var series = chart.series[j];\n activeSeriesNames.push(series.name);\n _this2.addSeries(series, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n var {\n axes,\n title\n } = chart;\n if (title != null && title.length > 0 && (charts.length > 1 || _this2.figure.title != null)) {\n var xAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.X);\n var yAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn('Chart title provided, but unknown how to map to the correct axes for this chart type', chart);\n } else {\n var _axisTypeMap$get$find, _axisTypeMap$get, _axisTypeMap$get$find2, _axisTypeMap$get2;\n var xAxisIndex = ((_axisTypeMap$get$find = (_axisTypeMap$get = axisTypeMap.get(xAxis.type)) === null || _axisTypeMap$get === void 0 ? void 0 : _axisTypeMap$get.findIndex(a => a === xAxis)) !== null && _axisTypeMap$get$find !== void 0 ? _axisTypeMap$get$find : 0) + 1;\n var yAxisIndex = ((_axisTypeMap$get$find2 = (_axisTypeMap$get2 = axisTypeMap.get(yAxis.type)) === null || _axisTypeMap$get2 === void 0 ? void 0 : _axisTypeMap$get2.findIndex(a => a === yAxis)) !== null && _axisTypeMap$get$find2 !== void 0 ? _axisTypeMap$get$find2 : 0) + 1;\n var annotation = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: \"x\".concat(xAxisIndex, \" domain\"),\n yref: \"y\".concat(yAxisIndex, \" domain\")\n };\n if (_this2.layout.annotations == null) {\n _this2.layout.annotations = [annotation];\n } else {\n _this2.layout.annotations.push(annotation);\n }\n }\n }\n };\n for (var i = 0; i < charts.length; i += 1) {\n _loop2();\n }\n\n // Remove any series that no longer exist\n var allSeriesNames = [...this.seriesDataMap.keys()];\n var inactiveSeriesNames = allSeriesNames.filter(seriesName => activeSeriesNames.indexOf(seriesName) < 0);\n for (var _i = 0; _i < inactiveSeriesNames.length; _i += 1) {\n var seriesName = inactiveSeriesNames[_i];\n this.seriesDataMap.delete(seriesName);\n }\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(series, axisTypeMap, showLegend) {\n var {\n dh\n } = this;\n var seriesData = this.chartUtils.makeSeriesDataFromSeries(series, axisTypeMap, ChartUtils.getSeriesVisibility(series.name, this.settings), this.theme, showLegend);\n this.seriesDataMap.set(series.name, seriesData);\n this.seriesToProcess.add(series.name);\n this.data = [...this.seriesDataMap.values()];\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend = this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE ? showLegend !== null && showLegend !== void 0 ? showLegend : undefined : false;\n if (series.oneClick != null) {\n var {\n oneClick\n } = series;\n var {\n columns\n } = oneClick;\n for (var i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n this.oneClicks.push(oneClick);\n }\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n subscribe(callback) {\n super.subscribe(callback);\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n unsubscribe(callback) {\n super.unsubscribe(callback);\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n subscribeFigure() {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n this.figure.subscribe(this.isDownsamplingDisabled ? this.dh.plot.DownsampleOptions.DISABLE : this.dh.plot.DownsampleOptions.DEFAULT);\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n unsubscribeFigure() {\n this.figure.unsubscribe();\n }\n startListeningFigure() {\n var {\n dh\n } = this;\n this.figure.addEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.addEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n stopListeningFigure() {\n var {\n dh\n } = this;\n this.figure.removeEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n\n /** Gets the parser for a value with the provided column type */\n\n /**\n * Gets the range parser for a particular column type\n */\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n this.fireDownsampleStart(event.detail);\n }\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n this.fireDownsampleFinish(event.detail);\n }\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n this.fireDownsampleFail(event.detail);\n }\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n this.fireDownsampleNeeded(event.detail);\n }\n handleFigureUpdated(event) {\n var {\n detail: figureUpdateEvent\n } = event;\n var {\n series: seriesArray\n } = figureUpdateEvent;\n log.debug2('handleFigureUpdated', seriesArray);\n for (var i = 0; i < seriesArray.length; i += 1) {\n var series = seriesArray[i];\n log.debug2('handleFigureUpdated updating series', series.name);\n var {\n sources\n } = series;\n for (var j = 0; j < sources.length; j += 1) {\n var source = sources[j];\n var {\n columnType,\n type\n } = source;\n var valueTranslator = this.getValueTranslator(columnType, this.formatter);\n var dataArray = figureUpdateEvent.getArray(series, type, valueTranslator);\n this.setDataArrayForSeries(series, type, dataArray);\n }\n this.seriesToProcess.delete(series.name);\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n var {\n data\n } = this;\n this.fireUpdate(data);\n }\n handleRequestFailed(event) {\n log.error('Request failed', event);\n this.fireError([\"\".concat(event.detail)]);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n setFormatter(formatter) {\n super.setFormatter(formatter);\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n setDownsamplingDisabled(isDownsamplingDisabled) {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n this.resubscribe();\n }\n handleFigureDisconnected(event) {\n log.debug('Figure disconnected', event);\n this.isConnected = false;\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n this.fireDisconnect();\n }\n handleFigureReconnected(event) {\n log.debug('Figure reconnected', event);\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n this.fireReconnect();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n handleFigureSeriesAdded(event) {\n var {\n detail: series\n } = event;\n log.debug('handleFigureSeriesAdded', series);\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n setDimensions(rect) {\n super.setDimensions(rect);\n this.updateAxisPositions();\n }\n setTitle(title) {\n var _match$length, _match;\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n var subtitleCount = (_match$length = (_match = (title !== null && title !== void 0 ? title : '').match(/<br>/g)) === null || _match === void 0 ? void 0 : _match.length) !== null && _match$length !== void 0 ? _match$length : 0;\n var margin = ChartUtils.DEFAULT_MARGIN.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = {\n t: margin\n };\n }\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = _objectSpread({}, this.layout.title);\n this.layout.title.text = title;\n this.layout.title.pad = _objectSpread({}, this.layout.title.pad);\n this.layout.title.pad.t = ChartUtils.DEFAULT_TITLE_PADDING.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n getPlotWidth() {\n var _this$layout$margin$l, _this$layout$margin, _this$layout$margin$r, _this$layout$margin2;\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n return Math.max(this.rect.width - ((_this$layout$margin$l = (_this$layout$margin = this.layout.margin) === null || _this$layout$margin === void 0 ? void 0 : _this$layout$margin.l) !== null && _this$layout$margin$l !== void 0 ? _this$layout$margin$l : 0) - ((_this$layout$margin$r = (_this$layout$margin2 = this.layout.margin) === null || _this$layout$margin2 === void 0 ? void 0 : _this$layout$margin2.r) !== null && _this$layout$margin$r !== void 0 ? _this$layout$margin$r : 0), 0);\n }\n getPlotHeight() {\n var _this$layout$margin$t, _this$layout$margin3, _this$layout$margin$b, _this$layout$margin4;\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n return Math.max(this.rect.height - ((_this$layout$margin$t = (_this$layout$margin3 = this.layout.margin) === null || _this$layout$margin3 === void 0 ? void 0 : _this$layout$margin3.t) !== null && _this$layout$margin$t !== void 0 ? _this$layout$margin$t : 0) - ((_this$layout$margin$b = (_this$layout$margin4 = this.layout.margin) === null || _this$layout$margin4 === void 0 ? void 0 : _this$layout$margin4.b) !== null && _this$layout$margin$b !== void 0 ? _this$layout$margin$b : 0), 0);\n }\n updateAxisPositions() {\n var plotWidth = this.getPlotWidth();\n var plotHeight = this.getPlotHeight();\n this.chartUtils.updateFigureAxes(this.layout, this.figure, this.theme, chart => this.getAxisRangeParser(chart, this.formatter), plotWidth, plotHeight);\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\n if (!this.formatter) {\n return;\n }\n var axisFormats = this.chartUtils.getAxisFormats(this.figure, this.formatter);\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\"Assigning \".concat(axisLayoutProperty), this.layout[axisLayoutProperty], axisFormat);\n var props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(\"Ignoring null layout.\".concat(axisLayoutProperty));\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n var property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series) {\n var {\n dh\n } = this;\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n var {\n xLow,\n xHigh\n } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n var width = [];\n for (var i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE || plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR || plotStyle === dh.plot.SeriesPlotStyle.BAR) {\n var {\n x,\n xLow: _xLow,\n xHigh: _xHigh,\n y,\n yLow,\n yHigh\n } = seriesData;\n if (_xLow && _xHigh && _xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(x, _xLow, _xHigh, this.theme);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh, this.theme);\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n var {\n ids,\n labels\n } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n getData() {\n return this.data;\n }\n getLayout() {\n return this.layout;\n }\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n isFilterRequired() {\n return this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) != null;\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\n var _this3 = this;\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n log.debug('setFilter', filterMap);\n var _loop3 = function _loop3() {\n var oneClick = _this3.oneClicks[i];\n var {\n columns\n } = oneClick;\n // Need to get all the keys in case a filter was removed\n var keys = new Set([...filterMap.keys(), ..._this3.lastFilter.keys()]);\n keys.forEach(key => {\n var value = filterMap.get(key);\n if (_this3.lastFilter.get(key) !== value && columns.find(column => column.name === key) != null) {\n oneClick.setValueForColumn(key, value);\n }\n });\n };\n for (var i = 0; i < this.oneClicks.length; i += 1) {\n _loop3();\n }\n this.lastFilter = new Map(filterMap);\n }\n setFigure(figure) {\n this.close();\n this.figure = figure;\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n updateSettings(settings) {\n this.settings = settings;\n }\n}\n_defineProperty(FigureChartModel, \"ADD_SERIES_DEBOUNCE\", 50);\nexport default FigureChartModel;\n//# sourceMappingURL=FigureChartModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport ChartUtils from \"./ChartUtils.js\";\nimport FigureChartModel from \"./FigureChartModel.js\";\nclass ChartModelFactory {\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @param theme The theme for the figure\n * @returns The ChartModel Promise representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModelFromSettings(dh, settings, table, theme) {\n return _asyncToGenerator(function* () {\n var figure = yield ChartModelFactory.makeFigureFromSettings(dh, settings, table);\n return new FigureChartModel(dh, figure, theme, settings);\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The Figure created with the settings provided\n */\n static makeFigureFromSettings(dh, settings, table) {\n return _asyncToGenerator(function* () {\n // Copy the table first and then re-apply the filters from the original table\n // When we add table linking we'll want to listen to the original table and update\n // the copied table with any changes that occur.\n // The table gets owned by the Figure that gets created, which closes the table\n var tableCopy = yield table.copy();\n tableCopy.applyCustomColumns(table.customColumns);\n tableCopy.applyFilter(table.filter);\n tableCopy.applySort(table.sort);\n return dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, tableCopy));\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param figure The figure to build the model for\n * @param theme The theme for the figure\n * @returns The FigureChartModel representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModel(dh, settings, figure, theme) {\n return _asyncToGenerator(function* () {\n return new FigureChartModel(dh, figure, theme, settings);\n })();\n }\n}\nexport default ChartModelFactory;\n//# sourceMappingURL=ChartModelFactory.js.map","export default function isFigureChartModel(model) {\n return model.setFigure !== undefined;\n}\n//# sourceMappingURL=isFigureChartModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MissingKeyError extends Error {\n constructor(rowIndex, columnName) {\n super(\"\".concat(columnName, \" can't be empty (on pending row \").concat(rowIndex + 1, \")\"));\n _defineProperty(this, \"isMissingKey\", true);\n _defineProperty(this, \"rowIndex\", void 0);\n _defineProperty(this, \"columnName\", void 0);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\nexport default MissingKeyError;\n//# sourceMappingURL=MissingKeyError.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport MissingKeyError from \"./MissingKeyError.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nvar log = Log.module('IrisGridTableModelTemplate');\nvar SET_VIEWPORT_THROTTLE = 150;\nvar APPLY_VIEWPORT_THROTTLE = 0;\nexport function isIrisGridTableModelTemplate(model) {\n return model.table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate extends IrisGridModel {\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n throw new Error('Method not implemented.');\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get customColumns() {\n return [];\n }\n set customColumns(customColumns) {\n throw new Error('Method not implemented.');\n }\n get formatColumns() {\n return [];\n }\n set formatColumns(formatColumns) {\n throw new Error('Method not implemented.');\n }\n updateFrozenColumns(columns) {\n throw new Error('Method not implemented.');\n }\n get rollupConfig() {\n throw new Error('Method not implemented.');\n }\n set rollupConfig(rollupConfig) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n throw new Error('Method not implemented.');\n }\n set selectDistinctColumns(names) {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var _this$layoutHints$col, _this$layoutHints;\n var _formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"irisFormatter\", void 0);\n _defineProperty(this, \"inputTable\", void 0);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"viewport\", void 0);\n _defineProperty(this, \"viewportData\", void 0);\n _defineProperty(this, \"formattedStringData\", void 0);\n _defineProperty(this, \"pendingStringData\", void 0);\n _defineProperty(this, \"isSaveInProgress\", void 0);\n _defineProperty(this, \"totalsTable\", void 0);\n _defineProperty(this, \"totalsTablePromise\", void 0);\n _defineProperty(this, \"totals\", void 0);\n _defineProperty(this, \"totalsDataMap\", void 0);\n _defineProperty(this, \"pendingNewDataMap\", void 0);\n _defineProperty(this, \"pendingNewRowCount\", 0);\n _defineProperty(this, \"_columnHeaderGroupMap\", new Map());\n _defineProperty(this, \"columnHeaderParentMap\", new Map());\n _defineProperty(this, \"_columnHeaderMaxDepth\", null);\n _defineProperty(this, \"_columnHeaderGroups\", []);\n _defineProperty(this, \"_movedColumns\", null);\n _defineProperty(this, \"getMemoizedInitialMovedColumns\", memoize(layoutHints => {\n var _layoutHints$columnGr;\n if (!layoutHints) {\n return [];\n }\n var movedColumns = [];\n var {\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr !== void 0 ? _layoutHints$columnGr : []);\n var moveColumn = (name, toIndex) => {\n var modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\n throw new Error(\"Unknown layout hint column: \".concat(name));\n }\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n var moveGroup = (name, toIndex) => {\n var group = groupMap.get(name);\n if (group == null) {\n throw new Error(\"Unknown layout hint group: \".concat(name));\n }\n var visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n var {\n frontColumns = [],\n backColumns = [],\n frozenColumns = []\n } = layoutHints;\n if (frontColumns.length || backColumns.length || frozenColumns.length) {\n var usedColumns = new Set();\n var frontIndex = 0;\n frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n var backIndex = this.columnMap.size - 1;\n backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n var layoutHintColumnGroups = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups;\n if (layoutHintColumnGroups) {\n var columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n columnGroups.forEach(group => {\n var firstChildName = group.children[0];\n var rightModelIndex = this.getColumnIndexByName(firstChildName);\n var rightVisibleIndex;\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(rightModelIndex, movedColumns);\n } else {\n var firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\"Unknown column \".concat(firstChildName, \" in group \").concat(group.name));\n }\n var visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n for (var i = 1; i < group.children.length; i += 1) {\n var childName = group.children[i];\n var childGroup = groupMap.get(childName);\n var childColumn = this.getColumnIndexByName(childName);\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n var isBeforeGroup = childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;\n moveGroup(childName, moveToIndex);\n rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;\n var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;\n moveColumn(childName, _moveToIndex);\n rightVisibleIndex = _moveToIndex;\n }\n }\n });\n }\n this._movedColumns = movedColumns;\n return movedColumns;\n }));\n _defineProperty(this, \"getMemoizedInitialColumnHeaderGroups\", memoize(layoutHints => {\n var _layoutHints$columnGr2;\n return IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr2 = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr2 !== void 0 ? _layoutHints$columnGr2 : []).groups;\n }));\n _defineProperty(this, \"getMemoizedColumnMap\", memoize(tableColumns => {\n var columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }));\n _defineProperty(this, \"getColumnIndicesByNameMap\", memoize(columns => {\n var indices = new Map();\n columns.forEach((_ref, i) => {\n var {\n name\n } = _ref;\n return indices.set(name, i);\n });\n return indices;\n }));\n _defineProperty(this, \"setViewport\", throttle((top, bottom, columns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n var {\n viewport\n } = this;\n if (viewport != null && viewport.top === top && viewport.bottom === bottom && viewport.columns === columns) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n this.viewport = {\n top,\n bottom,\n columns\n };\n log.debug2('setViewport', this.viewport);\n this.applyViewport();\n }, SET_VIEWPORT_THROTTLE));\n _defineProperty(this, \"applyViewport\", throttle(() => {\n if (!this.viewport) {\n return;\n }\n log.debug2('applyViewport', this.viewport);\n var {\n top,\n bottom,\n columns\n } = this.viewport;\n var [viewportTop, viewportBottom] = this.getCachedViewportRowRange(top, bottom);\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }, APPLY_VIEWPORT_THROTTLE, {\n leading: false\n }));\n _defineProperty(this, \"getCachedFormattedString\", memoizeClear((formatter, value, columnType, columnName, formatOverride) => formatter.getFormattedString(value, columnType, columnName, formatOverride), {\n max: 10000\n }));\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n _defineProperty(this, \"getCachedViewportRowRange\", memoize((top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getCachedPendingErrors\", memoize((pendingDataMap, columns, keyColumnCount) => {\n var map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n var {\n data: rowData\n } = row;\n for (var i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n var _map$get;\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n (_map$get = map.get(rowIndex)) === null || _map$get === void 0 ? void 0 : _map$get.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }));\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.dh = dh;\n this.irisFormatter = _formatter;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n this.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(this, (_this$layoutHints$col = (_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.columnGroups) !== null && _this$layoutHints$col !== void 0 ? _this$layoutHints$col : []).groups;\n }\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n startListening() {\n super.startListening();\n var {\n dh\n } = this;\n this.table.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.addEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n this.applyViewport();\n }\n stopListening() {\n super.stopListening();\n var {\n dh\n } = this;\n this.table.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.closeSubscription();\n }\n addTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n removeTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n }\n handleTableDisconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n handleTableReconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleRequestFailed(event) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event));\n }\n handleCustomColumnsChanged() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get rowCount() {\n var _this$totals$operatio, _this$totals, _this$totals$operatio2;\n return (\n // Table size can be negative if the table isn't ready yet\n Math.max(this.table.size, 0) + this.pendingNewRowCount + ((_this$totals$operatio = (_this$totals = this.totals) === null || _this$totals === void 0 ? void 0 : (_this$totals$operatio2 = _this$totals.operationOrder) === null || _this$totals$operatio2 === void 0 ? void 0 : _this$totals$operatio2.length) !== null && _this$totals$operatio !== void 0 ? _this$totals$operatio : 0)\n );\n }\n get pendingDataErrors() {\n var _this$inputTable$keyC, _this$inputTable;\n return this.getCachedPendingErrors(this.pendingNewDataMap, this.columns, (_this$inputTable$keyC = (_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keyColumns.length) !== null && _this$inputTable$keyC !== void 0 ? _this$inputTable$keyC : 0);\n }\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n this.pendingNewDataMap = map;\n this.pendingNewRowCount = Math.max(this.pendingNewRowCount, this.maxPendingDataRow);\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n }\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0 ? Math.max(...this.pendingNewDataMap.keys()) + 1 : 0;\n }\n get columnCount() {\n return this.columns.length;\n }\n get floatingBottomRowCount() {\n var _this$totals$operatio3, _this$totals2, _this$totals2$operati;\n return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio3 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 ? void 0 : (_this$totals2$operati = _this$totals2.operationOrder) === null || _this$totals2$operati === void 0 ? void 0 : _this$totals2$operati.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0;\n }\n get floatingTopRowCount() {\n var _this$totals$operatio4, _this$totals3, _this$totals3$operati;\n return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio4 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 ? void 0 : (_this$totals3$operati = _this$totals3.operationOrder) === null || _this$totals3$operati === void 0 ? void 0 : _this$totals3$operati.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0 : 0;\n }\n get isChartBuilderAvailable() {\n return true;\n }\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n clearPendingValue(x, y) {\n var column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n textValueForCell(x, y) {\n var _this$pendingStringDa, _this$formattedString;\n // First check if there's any pending values we should read from\n if (((_this$pendingStringDa = this.pendingStringData[x]) === null || _this$pendingStringDa === void 0 ? void 0 : _this$pendingStringDa[y]) !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {\n var _value = this.valueForCell(x, y);\n if (_value === null) {\n return null;\n }\n if (_value === undefined) {\n return undefined;\n }\n var _column = this.sourceColumn(x, y);\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, _column.name, _column.type);\n var formatOverride;\n if (!hasCustomColumnFormat) {\n var formatForCell = this.formatForCell(x, y);\n if ((formatForCell === null || formatForCell === void 0 ? void 0 : formatForCell.formatString) != null) {\n formatOverride = formatForCell;\n }\n }\n var text = this.displayString(_value, _column.type, _column.name, formatOverride);\n this.cacheFormattedValue(x, y, text);\n }\n return this.formattedStringData[x][y];\n }\n textForCell(x, y) {\n var _this$columns$x;\n var text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (text === null) {\n return 'null';\n }\n if (text === '') {\n return 'empty';\n }\n }\n return text !== null && text !== void 0 ? text : '';\n }\n truncationCharForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type) && this.formatter.truncateNumbersWithPound) {\n return '#';\n }\n return undefined;\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value: _value2\n } = data;\n if (_value2 == null || _value2 === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (_value2 != null) {\n var _column2 = this.sourceColumn(x, y);\n if (TableUtils.isDateType(_column2.type) || _column2.name === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(_column2.type)) {\n if (_value2 > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if (_value2 < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n return theme.textColor;\n }\n backgroundColorForCell(x, y, theme) {\n var _this$formatForCell$b, _this$formatForCell;\n return (_this$formatForCell$b = (_this$formatForCell = this.formatForCell(x, y)) === null || _this$formatForCell === void 0 ? void 0 : _this$formatForCell.backgroundColor) !== null && _this$formatForCell$b !== void 0 ? _this$formatForCell$b : null;\n }\n textAlignForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n dataBarOptionsForCell(column, row, theme) {\n var _positiveColor, _negativeColor, _format$color, _markerColor;\n var format = this.formatForCell(column, row);\n assertNotNull(format);\n var {\n axis,\n direction,\n max,\n min,\n valuePlacement,\n value,\n marker\n } = format.formatDataBar;\n var {\n positiveColor,\n negativeColor,\n markerColor,\n opacity\n } = format.formatDataBar;\n positiveColor = (_positiveColor = positiveColor) !== null && _positiveColor !== void 0 ? _positiveColor : theme.positiveBarColor;\n negativeColor = (_negativeColor = negativeColor) !== null && _negativeColor !== void 0 ? _negativeColor : theme.negativeBarColor;\n var databarColor = (_format$color = format.color) !== null && _format$color !== void 0 ? _format$color : value >= 0 ? positiveColor : negativeColor;\n if (databarColor.includes(',')) {\n databarColor = databarColor.split(',');\n }\n markerColor = (_markerColor = markerColor) !== null && _markerColor !== void 0 ? _markerColor : theme.markerBarColor;\n opacity = valuePlacement.toLowerCase() === 'overlap' ? 0.5 : opacity;\n var databarOptions = {\n axis: axis.toLowerCase(),\n direction: direction.toUpperCase(),\n columnMax: max,\n columnMin: min,\n opacity,\n color: databarColor,\n valuePlacement: valuePlacement.toLowerCase(),\n value,\n markers: [{\n value: marker,\n color: markerColor\n }]\n };\n return databarOptions;\n }\n renderTypeForCell(column, row) {\n var format = this.formatForCell(column, row);\n return (format === null || format === void 0 ? void 0 : format.formatDataBar) != null ? 'dataBar' : 'text';\n }\n textForColumnHeader(x) {\n var _header$displayName;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return (_header$displayName = header === null || header === void 0 ? void 0 : header.displayName) !== null && _header$displayName !== void 0 ? _header$displayName : header === null || header === void 0 ? void 0 : header.name;\n }\n colorForColumnHeader(x) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n var _column$color;\n return (_column$color = column.color) !== null && _column$color !== void 0 ? _column$color : null;\n }\n return null;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n var group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n var _this$columnAtDepth$n, _this$columnAtDepth;\n return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');\n }\n columnAtDepth(x) {\n var _this$columns$x2;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (depth === 0) {\n return this.columns[x];\n }\n var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;\n var group = this.columnHeaderParentMap.get(columnName);\n if (!group) {\n return undefined;\n }\n var currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n if (group.depth === depth) {\n return group;\n }\n return undefined;\n }\n textForRowFooter(y) {\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns() {\n var _this$layoutHints2;\n return this.getMemoizedInitialMovedColumns((_this$layoutHints2 = this.layoutHints) !== null && _this$layoutHints2 !== void 0 ? _this$layoutHints2 : undefined);\n }\n get initialColumnHeaderGroups() {\n var _this$layoutHints3;\n return this.getMemoizedInitialColumnHeaderGroups((_this$layoutHints3 = this.layoutHints) !== null && _this$layoutHints3 !== void 0 ? _this$layoutHints3 : undefined);\n }\n get columnMap() {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n get columnHeaderMaxDepth() {\n var _this$_columnHeaderMa;\n return (_this$_columnHeaderMa = this._columnHeaderMaxDepth) !== null && _this$_columnHeaderMa !== void 0 ? _this$_columnHeaderMa : 1;\n }\n set columnHeaderMaxDepth(depth) {\n this._columnHeaderMaxDepth = depth;\n }\n get columnHeaderGroupMap() {\n return this._columnHeaderGroupMap;\n }\n get columnHeaderGroups() {\n return this._columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n var {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, groups !== null && groups !== void 0 ? groups : this.initialColumnHeaderGroups);\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n }\n row(y) {\n var _this$totals$operatio5, _this$totals4, _this$totals4$operati, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2, _this$viewportData2$r;\n var totalsRowCount = (_this$totals$operatio5 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 ? void 0 : (_this$totals4$operati = _this$totals4.operationOrder) === null || _this$totals4$operati === void 0 ? void 0 : _this$totals4$operati.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;\n var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;\n var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];\n assertNotNull(operation);\n return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;\n }\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n var _this$pendingNewDataM;\n return (_this$pendingNewDataM = this.pendingNewDataMap.get(pendingRow)) !== null && _this$pendingNewDataM !== void 0 ? _this$pendingNewDataM : null;\n }\n var offset = (_this$viewportData$of = (_this$viewportData = this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset) !== null && _this$viewportData$of !== void 0 ? _this$viewportData$of : 0;\n var viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return (_this$viewportData$ro = (_this$viewportData2 = this.viewportData) === null || _this$viewportData2 === void 0 ? void 0 : (_this$viewportData2$r = _this$viewportData2.rows) === null || _this$viewportData2$r === void 0 ? void 0 : _this$viewportData2$r[viewportY]) !== null && _this$viewportData$ro !== void 0 ? _this$viewportData$ro : null;\n }\n\n /**\n * Retrieve the source column for given coordinates.\n * - Retrieve the totals column if this is a totals row\n * - Retrieve the source column if it's a proxied column\n * - Otherwise return the column at the given index\n * @param column Column index to get the source column from\n * @param row Row index to get the source column from\n */\n sourceColumn(column, row) {\n var totalsRow = this.totalsRow(row);\n if (totalsRow != null) {\n var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;\n var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];\n var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;\n var tableColumn = this.columns[column];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n var totalsColumn = (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(col => {\n var _this$totals9;\n return col.name === \"\".concat(tableColumn.name, \"__\").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.operationOrder.length) === 1) && col.name === tableColumn.name;\n });\n if (totalsColumn != null) {\n return totalsColumn;\n }\n // There may be cases were the totals table doesn't have a column, such as when there's a virtual column\n }\n\n return this.columns[column];\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n var _this$totals$operatio6, _this$totals10, _this$totals10$operat, _this$totals$showOnTo2, _this$totals11;\n var totalsRowCount = (_this$totals$operatio6 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : (_this$totals10$operat = _this$totals10.operationOrder) === null || _this$totals10$operat === void 0 ? void 0 : _this$totals10$operat.length) !== null && _this$totals$operatio6 !== void 0 ? _this$totals$operatio6 : 0;\n var showOnTop = (_this$totals$showOnTo2 = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;\n var totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n var pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n dataForCell(x, y) {\n var _this$row;\n return (_this$row = this.row(y)) === null || _this$row === void 0 ? void 0 : _this$row.data.get(x);\n }\n formatForCell(x, y) {\n var _this$dataForCell;\n return (_this$dataForCell = this.dataForCell(x, y)) === null || _this$dataForCell === void 0 ? void 0 : _this$dataForCell.format;\n }\n valueForCell(x, y) {\n var data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n var _data$value;\n return (_data$value = data.value) !== null && _data$value !== void 0 ? _data$value : null;\n }\n return undefined;\n }\n copyViewportData(data) {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n copyTotalsData(totalsData) {\n var _this$totals$defaultO2,\n _this$totals12,\n _this$totals13,\n _this = this;\n if (totalsData == null) {\n log.warn('invalid data!');\n return;\n }\n var {\n columns,\n rows\n } = totalsData;\n if (rows.length !== 1) {\n log.error('Unexpected number of rows received for totals table, ignoring update');\n return;\n }\n var dataMap = new Map();\n var row = rows[0];\n var defaultOperation = (_this$totals$defaultO2 = (_this$totals12 = this.totals) === null || _this$totals12 === void 0 ? void 0 : _this$totals12.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;\n var operationMap = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.operationMap;\n var _loop = function _loop() {\n var _operationMap$name$, _operationMap$name;\n var column = columns[c];\n var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 ? void 0 : (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, {\n data: new Map()\n });\n }\n var {\n data: rowData\n } = dataMap.get(operation);\n var columnIndex = _this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n };\n for (var c = 0; c < columns.length; c += 1) {\n _loop();\n }\n log.debug2('copyTotalsData', dataMap);\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data) {\n var newData = {\n offset: data.offset,\n rows: []\n };\n var {\n columns\n } = data;\n for (var r = 0; r < data.rows.length; r += 1) {\n var _row = data.rows[r];\n var newRow = this.extractViewportRow(_row, columns);\n newData.rows.push(newRow);\n }\n return newData;\n }\n extractViewportRow(row, columns) {\n var data = new Map();\n for (var c = 0; c < columns.length; c += 1) {\n var _column3 = columns[c];\n var index = this.getColumnIndexByName(_column3.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(_column3),\n format: row.getFormat(_column3)\n });\n }\n return {\n data\n };\n }\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n get filter() {\n return this.table.filter;\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n get formatter() {\n return this.irisFormatter;\n }\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n displayString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n return this.getCachedFormattedString(this.formatter, value, columnType, columnName, formatOverride);\n }\n get sort() {\n return this.table.sort;\n }\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.totalsTable.close();\n }\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n\n /**\n * Applies the current viewport to the underlying table.\n */\n\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(viewportTop, viewportBottom, columns);\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n snapshot(ranges) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n var consolidateRanges = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : true;\n if (_this2.subscription == null) {\n throw new Error('No subscription available');\n }\n var consolidated = consolidateRanges ? GridRange.consolidate(ranges) : ranges;\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(\"Invalid snapshot ranges \".concat(ranges));\n }\n\n // Need to separate out the floating ranges as they're from a different source\n var topFloatingRowsSet = new Set();\n var tableRanges = [];\n var bottomFloatingRowsSet = new Set();\n for (var i = 0; i < consolidated.length; i += 1) {\n var range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (var r = range.startRow; r <= range.endRow && r < _this2.floatingTopRowCount; r += 1) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (range.endRow >= _this2.floatingTopRowCount && range.startRow <= _this2.floatingTopRowCount + _this2.table.size) {\n tableRanges.push(new GridRange(range.startColumn, Math.min(Math.max(0, range.startRow - _this2.floatingTopRowCount)), range.endColumn, Math.min(Math.max(0, range.endRow - _this2.floatingTopRowCount), _this2.table.size - _this2.floatingTopRowCount)));\n }\n // Get the rows that are in the bottom aggregations section\n for (var _r = Math.max(range.startRow, _this2.floatingTopRowCount + _this2.table.size); _r <= range.endRow && _r < _this2.floatingTopRowCount + _this2.table.size + _this2.floatingBottomRowCount; _r += 1) {\n bottomFloatingRowsSet.add(_r);\n }\n }\n var columns = IrisGridUtils.columnsFromRanges(consolidated, _this2.columns);\n var result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var topFloatingRows = [...topFloatingRowsSet].sort();\n var _loop2 = function* _loop2() {\n var row = topFloatingRows[_i];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i = 0; _i < topFloatingRows.length; _i += 1) {\n yield* _loop2();\n }\n if (tableRanges.length > 0) {\n var rangeSet = _this2.irisGridUtils.rangeSetFromRanges(tableRanges);\n var snapshot = yield _this2.subscription.snapshot(rangeSet, columns);\n result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));\n }\n var bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n var _loop3 = function* _loop3() {\n var row = bottomFloatingRows[_i2];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {\n yield* _loop3();\n }\n return result;\n })();\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n textSnapshot(ranges) {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n var formatValue = _arguments2.length > 2 && _arguments2[2] !== undefined ? _arguments2[2] : value => \"\".concat(value);\n log.debug2('textSnapshot', ranges, includeHeaders);\n var data = yield _this3.snapshot(ranges, includeHeaders, formatValue, false);\n return data.map(row => row.join('\\t')).join('\\n');\n })();\n }\n valuesTable(columns) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var table = null;\n try {\n table = yield _this4.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct(Array.isArray(columns) ? columns : [columns]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n })();\n }\n isColumnMovable(modelIndex, depth) {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName) || !columnName) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnSortable(modelIndex) {\n var _this$columns$modelIn;\n return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;\n }\n isKeyColumn(x) {\n var _this$inputTable$keyC2, _this$inputTable2;\n return x < ((_this$inputTable$keyC2 = (_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.keyColumns.length) !== null && _this$inputTable$keyC2 !== void 0 ? _this$inputTable$keyC2 : 0);\n }\n isRowMovable() {\n return false;\n }\n isEditableRange(range) {\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || !GridRange.isBounded(range)) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n var isPendingRange = this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n if (!(isPendingRange || this.inputTable.keyColumns.length !== 0 && range.startColumn >= this.inputTable.keyColumns.length && range.endColumn >= this.inputTable.keyColumns.length)) {\n return false;\n }\n\n // Editing the aggregations/totals which are floating above/below is not allowed\n if (range.startRow < this.floatingTopRowCount || range.startRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount || range.endRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount) {\n return false;\n }\n return true;\n }\n isDeletableRange(range) {\n return this.inputTable != null && range.startRow != null && range.endRow != null && range.startRow >= this.floatingTopRowCount && range.startRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount && range.endRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount;\n }\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(null, this.floatingTopRowCount, null, this.floatingTopRowCount + this.table.size - 1);\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(null, this.floatingTopRowCount + this.table.size, null, this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1);\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForCell(x, y, text) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return _this5.setValueForRanges([new GridRange(x, y, x, y)], text);\n })();\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForRanges(ranges, text) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.isEditableRanges(ranges)) {\n throw new Error(\"Uneditable ranges \".concat(ranges));\n }\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n var columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n var formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n var column = _this6.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n var _value3 = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n formattedText[x] = _value3 != null ? _this6.displayString(_value3, column.type, column.name) : null;\n }\n _this6.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_this6.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, {\n data: new Map()\n });\n }\n var column = _this6.columns[columnIndex];\n var row = newDataMap.get(rowIndex);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n if (value != null) {\n newRowData.set(columnIndex, {\n value\n });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n _this6.pendingDataMap = newDataMap;\n }\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this6$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this6.snapshot(tableRanges.map(range => {\n var _range$startRow, _range$endRow;\n return new GridRange(null, (_range$startRow = range === null || range === void 0 ? void 0 : range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : null, null, (_range$endRow = range === null || range === void 0 ? void 0 : range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : null);\n }));\n var newRows = data.map(row => {\n var newRow = {};\n for (var c = 0; c < _this6.columns.length; c += 1) {\n newRow[_this6.columns[c].name] = row[c];\n }\n columnSet.forEach(column => {\n newRow[column.name] = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n });\n return newRow;\n });\n var result = yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.addRows(newRows);\n log.debug('setValueForRanges(', ranges, ',', text, ') set tableRanges', tableRanges, 'result', result);\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n var cellText = formattedText[x];\n assertNotNull(cellText);\n _this6.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n _this6.clearPendingValue(x, y);\n });\n }\n })();\n }\n setValues() {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var edits = _arguments3.length > 0 && _arguments3[0] !== undefined ? _arguments3[0] : [];\n log.debug('setValues(', edits, ')');\n if (!edits.every(edit => {\n var _edit$column, _edit$row;\n return _this7.isEditableRange(GridRange.makeCell((_edit$column = edit.column) !== null && _edit$column !== void 0 ? _edit$column : edit.x, (_edit$row = edit.row) !== null && _edit$row !== void 0 ? _edit$row : edit.y));\n })) {\n throw new Error(\"Uneditable ranges \".concat(edits));\n }\n try {\n var newDataMap = new Map(_this7.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n var _edit$column2, _edit$row2;\n var {\n text\n } = edit;\n var x = (_edit$column2 = edit.column) !== null && _edit$column2 !== void 0 ? _edit$column2 : edit.x;\n var y = (_edit$row2 = edit.row) !== null && _edit$row2 !== void 0 ? _edit$row2 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n var pendingRow = _this7.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, {\n data: new Map()\n });\n }\n var _row2 = newDataMap.get(pendingRow);\n assertNotNull(_row2);\n var {\n data: rowData\n } = _row2;\n var newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, {\n value\n });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, _objectSpread(_objectSpread({}, _row2), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n _this7.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n _this7.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n var rowEditMap = edits.reduce((rowMap, edit) => {\n var _edit$row3, _rowMap$get;\n var y = (_edit$row3 = edit.row) !== null && _edit$row3 !== void 0 ? _edit$row3 : edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n (_rowMap$get = rowMap.get(y)) === null || _rowMap$get === void 0 ? void 0 : _rowMap$get.push(edit);\n return rowMap;\n }, new Map());\n var ranges = GridRange.consolidate(edits.map(edit => {\n var _edit$column3, _edit$row4;\n return GridRange.makeCell((_edit$column3 = edit.column) !== null && _edit$column3 !== void 0 ? _edit$column3 : edit.x, (_edit$row4 = edit.row) !== null && _edit$row4 !== void 0 ? _edit$row4 : edit.y);\n }));\n var tableAreaRange = _this7.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this7$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this7.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n }));\n var newRows = data.map((row, dataIndex) => {\n var rowIndex = null;\n var r = dataIndex;\n for (var i = 0; i < tableRanges.length; i += 1) {\n var range = tableRanges[i];\n assertNotNull(range);\n var rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n var newRow = {};\n for (var c = 0; c < _this7.columns.length; c += 1) {\n newRow[_this7.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n var rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n var _edit$column4;\n var column = _this7.columns[(_edit$column4 = edit.column) !== null && _edit$column4 !== void 0 ? _edit$column4 : edit.x];\n newRow[column.name] = _this7.tableUtils.makeValue(column.type, edit.text, _this7.formatter.timeZone);\n });\n }\n return newRow;\n });\n log.info('setValues setting tableRanges', tableRanges);\n var result = yield (_this7$inputTable = _this7.inputTable) === null || _this7$inputTable === void 0 ? void 0 : _this7$inputTable.addRows(newRows);\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n var _edit$column5, _edit$row5;\n var {\n text\n } = edit;\n var x = (_edit$column5 = edit.column) !== null && _edit$column5 !== void 0 ? _edit$column5 : edit.x;\n var y = (_edit$row5 = edit.row) !== null && _edit$row5 !== void 0 ? _edit$row5 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n _this7.clearPendingValue(edit.column, edit.row);\n });\n }\n })();\n }\n commitPending() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n try {\n var _this8$inputTable, _this8$viewport$botto, _this8$viewport;\n _this8.isSaveInProgress = true;\n var newRows = [];\n _this8.pendingNewDataMap.forEach(row => {\n var newRow = {};\n row.data.forEach((_ref2, columnIndex) => {\n var {\n value\n } = _ref2;\n var column = _this8.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n var result = yield (_this8$inputTable = _this8.inputTable) === null || _this8$inputTable === void 0 ? void 0 : _this8$inputTable.addRows(newRows);\n log.debug('commitPending()', _this8.pendingNewDataMap, 'result', result);\n _this8.pendingNewDataMap = new Map();\n _this8.pendingNewRowCount = Math.max(0, ((_this8$viewport$botto = (_this8$viewport = _this8.viewport) === null || _this8$viewport === void 0 ? void 0 : _this8$viewport.bottom) !== null && _this8$viewport$botto !== void 0 ? _this8$viewport$botto : 0) - _this8.table.size);\n _this8.formattedStringData = [];\n _this8.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n } finally {\n _this8.isSaveInProgress = false;\n }\n })();\n }\n editValueForCell(x, y) {\n return this.textValueForCell(x, y);\n }\n delete(ranges) {\n return _asyncToGenerator(function* () {\n throw new Error('Delete not implemented');\n })();\n }\n isValidForCell(x, y, value) {\n try {\n var _column4 = this.columns[x];\n this.tableUtils.makeValue(_column4.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n_defineProperty(IrisGridTableModelTemplate, \"ROW_BUFFER_PAGES\", 1);\nexport default IrisGridTableModelTemplate;\n//# sourceMappingURL=IrisGridTableModelTemplate.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTableModel');\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"userFrozenColumns\", void 0);\n _defineProperty(this, \"customColumnList\", void 0);\n _defineProperty(this, \"formatColumnList\", void 0);\n _defineProperty(this, \"initialFilters\", []);\n _defineProperty(this, \"getMemoizedFrontColumns\", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : []));\n _defineProperty(this, \"getMemoizedBackColumns\", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : []));\n _defineProperty(this, \"getMemoizedFrozenColumns\", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {\n var _ref;\n return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : [];\n }));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize(columns => new Set(columns.map((_, index) => index))));\n _defineProperty(this, \"getCachedPartitionColumns\", memoize(columns => columns.filter(column => column.isPartitionColumn)));\n this.customColumnList = [];\n this.formatColumnList = [];\n this.initialFilters = table.filter;\n }\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get frontColumns() {\n var _this$layoutHints;\n return this.getMemoizedFrontColumns((_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.frontColumns);\n }\n get backColumns() {\n var _this$layoutHints2;\n return this.getMemoizedBackColumns((_this$layoutHints2 = this.layoutHints) === null || _this$layoutHints2 === void 0 ? void 0 : _this$layoutHints2.backColumns);\n }\n get frozenColumns() {\n var _this$layoutHints3;\n return this.getMemoizedFrozenColumns((_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.frozenColumns, this.userFrozenColumns);\n }\n get layoutHints() {\n return this.table.layoutHints;\n }\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n get description() {\n return this.table.description;\n }\n get customColumns() {\n return this.customColumnList;\n }\n set customColumns(customColumns) {\n log.debug2('set customColumns', customColumns, this.customColumnList, customColumns === this.customColumnList);\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n get formatColumns() {\n return this.formatColumnList;\n }\n set formatColumns(formatColumns) {\n log.debug2('set formatColumns', formatColumns, this.formatColumnList, formatColumns === this.formatColumnList);\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table\n }));\n }\n get partitionColumns() {\n return this.getCachedPartitionColumns(this.columns);\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.valuesTable(_this.partitionColumns);\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var t = yield _this2.table.copy();\n t.applyFilter([]);\n return t;\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n log.debug('getting partition table for partitions', partitions);\n var partitionFilters = [];\n for (var i = 0; i < _this3.partitionColumns.length; i += 1) {\n var partition = partitions[i];\n var partitionColumn = _this3.partitionColumns[i];\n var partitionFilter = _this3.tableUtils.makeFilterRawValue(partitionColumn.type, partition);\n partitionFilters.push(partitionColumn.filter().eq(partitionFilter));\n }\n var t = yield _this3.table.copy();\n t.applyFilter([..._this3.initialFilters, ...partitionFilters]);\n return t;\n })();\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter([...this.initialFilters, ...filter]);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n get isPartitionRequired() {\n return this.table.isUncoalesced && this.isValuesTableAvailable;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n export() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.table.freeze();\n })();\n }\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n isColumnMovable(modelIndex) {\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName)) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n delete(ranges) {\n var _superprop_getPendingDataMap = () => super.pendingDataMap,\n _superprop_setPendingDataMap = _value => super.pendingDataMap = _value,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var _this5$inputTable;\n if (!_this5.isDeletableRanges(ranges)) {\n throw new Error(\"Undeletable ranges \".concat(ranges));\n }\n assertNotNull(_this5.inputTable);\n var {\n keyColumns\n } = _this5.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n var pendingAreaRange = _this5.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this5.floatingTopRowCount + _this5.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_superprop_getPendingDataMap());\n for (var i = 0; i < pendingRanges.length; i += 1) {\n var pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (var r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n _superprop_setPendingDataMap(newDataMap);\n _this5.formattedStringData = [];\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n var tableAreaRange = _this5.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n var [data, deleteTable] = yield Promise.all([\n // Need to get the key values of each row\n _this5.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n // Need to map each key column to it's range so we can pass that into the snapshot function\n return keyColumns.map(keyColumn => {\n var keyIndex = _this5.getColumnIndexByName(keyColumn.name);\n if (keyIndex == null) {\n throw new Error(\"Key column \".concat(keyColumn.name, \" not found\"));\n }\n return new GridRange(keyIndex, range.startRow, keyIndex, range.endRow);\n });\n }).flat()), _this5.table.copy()]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n var filters = data.map(row => {\n var columnFilters = [];\n for (var c = 0; c < keyColumns.length; c += 1) {\n var column = keyColumns[c];\n var value = row[c];\n var filterValue = _this5.tableUtils.makeFilterRawValue(column.type, value);\n var _filter = column.filter().eq(filterValue);\n columnFilters.push(_filter);\n }\n return columnFilters.reduce((agg, curr) => {\n var _agg$and;\n return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;\n });\n });\n var filter = filters.reduce((agg, curr) => {\n var _agg$or;\n return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;\n });\n deleteTable.applyFilter([filter]);\n yield (_this5$inputTable = _this5.inputTable) === null || _this5$inputTable === void 0 ? void 0 : _this5$inputTable.deleteTable(deleteTable);\n deleteTable.close();\n })();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n return _this6.table.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.table.seekRow != null;\n }\n}\nexport default IrisGridTableModel;\n//# sourceMappingURL=IrisGridTableModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nclass EmptyIrisGridModel extends IrisGridModel {\n constructor(dh) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Formatter(dh);\n super(dh);\n _defineProperty(this, \"modelFormatter\", void 0);\n this.modelFormatter = formatter;\n }\n get rowCount() {\n return 0;\n }\n get columnCount() {\n return 0;\n }\n textForCell(column, row) {\n return '';\n }\n textForColumnHeader(column, depth) {\n return undefined;\n }\n get columns() {\n return EMPTY_ARRAY;\n }\n getColumnIndexByName(name) {\n return undefined;\n }\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n formatForCell(column, row) {\n return undefined;\n }\n valueForCell(column, row) {\n return undefined;\n }\n get filter() {\n return EMPTY_ARRAY;\n }\n set filter(filter) {\n // No-op\n }\n get partition() {\n return EMPTY_ARRAY;\n }\n set partition(partition) {\n // No-op\n }\n get partitionColumns() {\n return EMPTY_ARRAY;\n }\n get formatter() {\n return this.modelFormatter;\n }\n set formatter(formatter) {\n this.modelFormatter = formatter;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n get sort() {\n return EMPTY_ARRAY;\n }\n set sort(sort) {\n // No-op\n }\n get customColumns() {\n return EMPTY_ARRAY;\n }\n set customColumns(customColumns) {\n // No-op\n }\n get formatColumns() {\n return EMPTY_ARRAY;\n }\n updateFrozenColumns(columns) {\n // Do nothing\n }\n get rollupConfig() {\n return null;\n }\n set rollupConfig(rollupConfig) {\n // No-op\n }\n get totalsConfig() {\n return null;\n }\n set totalsConfig(totalsConfig) {\n // No-op\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n return EMPTY_ARRAY;\n }\n set selectDistinctColumns(selectDistinctColumns) {\n // No-op\n }\n get pendingDataMap() {\n return EMPTY_MAP;\n }\n set pendingDataMap(map) {\n // No-op\n }\n get pendingRowCount() {\n return 0;\n }\n set pendingRowCount(count) {\n // No-op\n }\n get pendingDataErrors() {\n return EMPTY_MAP;\n }\n commitPending() {\n return Promise.resolve();\n }\n setViewport(top, bottom, columns) {\n // No-op\n }\n snapshot(ranges) {\n return Promise.resolve([]);\n }\n textSnapshot(ranges, includeHeaders, formatValue) {\n return Promise.resolve('');\n }\n valuesTable(columns) {\n throw new Error('Method not implemented.');\n }\n delete(ranges) {\n return Promise.resolve();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n return Promise.resolve(0);\n }\n get columnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n set columnHeaderGroups(groups) {\n // No-op\n }\n get columnHeaderGroupMap() {\n return EMPTY_MAP;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n}\nexport default EmptyIrisGridModel;\n//# sourceMappingURL=EmptyIrisGridModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport EmptyIrisGridModel from \"./EmptyIrisGridModel.js\";\nimport MissingPartitionError, { isMissingPartitionError } from \"./MissingPartitionError.js\";\nclass IrisGridPartitionedTableModel extends EmptyIrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Partitioned table to be used in the model\n * @param formatter The formatter to use when getting formats\n */\n constructor(dh, partitionedTable) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n super(dh, formatter);\n _defineProperty(this, \"partitionedTable\", void 0);\n this.partitionedTable = partitionedTable;\n }\n get isPartitionRequired() {\n return true;\n }\n get isReversible() {\n return false;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n close() {\n this.partitionedTable.close();\n }\n get columns() {\n return this.partitionedTable.columns;\n }\n get partitionColumns() {\n return this.partitionedTable.keyColumns;\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.partitionedTable.getKeyTable();\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.partitionedTable.getMergedTable();\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n var table = yield _this3.partitionedTable.getTable(partitions);\n if (table == null) {\n // TODO: Will be unnecessary with https://github.com/deephaven/deephaven-core/pull/5050\n throw new MissingPartitionError('Partition not found');\n }\n return table;\n } catch (e) {\n if (!isMissingPartitionError(e)) {\n throw new MissingPartitionError('Unable to retrieve partition');\n } else {\n throw e;\n }\n }\n })();\n }\n}\nexport default IrisGridPartitionedTableModel;\n//# sourceMappingURL=IrisGridPartitionedTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTreeTableModel');\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate {\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"virtualColumns\", void 0);\n _defineProperty(this, \"getCachedColumns\", memoize((virtualColumns, tableColumns) => [...virtualColumns, ...tableColumns]));\n _defineProperty(this, \"getCachedGroupColumns\", memoize((virtualColumns, tableGroupedColumns) => [...virtualColumns, ...tableGroupedColumns]));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize((columns, groupedColumns, virtualColumns) => new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).filter(c => !virtualColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)))));\n _defineProperty(this, \"getCachedGroupedColumnSet\", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));\n this.virtualColumns = [{\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n formatRowColor: () => {\n throw new Error('Color not implemented for virtual column');\n }\n }];\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n var viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns, ...columns.filter(c => !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c))];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n textForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n var _value = this.valueForCell(x, y);\n return this.displayString(_value, column.constituentType, column.name);\n }\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {\n return '';\n }\n }\n return super.textForCell(x, y);\n }\n extractViewportRow(row, columns) {\n var {\n isExpanded,\n hasChildren,\n depth\n } = row;\n var extractedRow = super.extractViewportRow(row, columns);\n var modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (var i = 0; i < this.virtualColumns.length; i += 1) {\n var key = i + (depth - 1) + (this.virtualColumns.length - 1);\n var cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n return _objectSpread(_objectSpread({}, extractedRow), {}, {\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth\n });\n }\n snapshot(ranges, includeHeaders, formatValue) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$viewport$column, _this$viewportData;\n assertNotNull(_this.viewport);\n assertNotNull(_this.viewportData);\n var columns = (_this$viewport$column = _this.viewport.columns) !== null && _this$viewport$column !== void 0 ? _this$viewport$column : _this.columns;\n var result = [];\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var viewportRange = new GridRange(0, (_this$viewportData = _this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset, columns.length, _this.viewportData.offset + _this.viewportData.rows.length);\n for (var i = 0; i < ranges.length; i += 1) {\n var intersection = GridRange.intersection(viewportRange, ranges[i]);\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n for (var r = intersection.startRow; r <= intersection.endRow; r += 1) {\n var resultRow = [];\n var viewportRow = _this.viewportData.rows[r - _this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (var c = intersection.startColumn; c <= intersection.endColumn; c += 1) {\n var _viewportRow$data$get;\n assertNotNull(formatValue);\n resultRow.push(formatValue((_viewportRow$data$get = viewportRow.data.get(c)) === null || _viewportRow$data$get === void 0 ? void 0 : _viewportRow$data$get.value, _this.columns[c]));\n }\n result.push(resultRow);\n }\n }\n return result;\n })();\n }\n get columns() {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n get groupedColumns() {\n return this.getCachedGroupColumns(this.virtualColumns, this.table.groupedColumns);\n }\n sourceForCell(column, row) {\n if (column >= this.virtualColumns.length) {\n return {\n column,\n row\n };\n }\n var depth = this.depthForRow(row);\n return {\n column: column + depth,\n row\n };\n }\n sourceColumn(column, row) {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n var depth = this.depthForRow(row);\n return this.columns[column + depth];\n }\n getClearFilterRange(column) {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n get hasExpandableRows() {\n return true;\n }\n get isExpandAllAvailable() {\n return this.table.expandAll !== undefined;\n }\n get isChartBuilderAvailable() {\n return false;\n }\n get isSelectDistinctAvailable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns, this.groupedColumns, this.virtualColumns).has(columnIndex);\n }\n isColumnMovable(column) {\n return column >= this.groupedColumns.length;\n }\n isRowExpandable(y) {\n var _row$hasChildren;\n var row = this.row(y);\n return (_row$hasChildren = row === null || row === void 0 ? void 0 : row.hasChildren) !== null && _row$hasChildren !== void 0 ? _row$hasChildren : false;\n }\n isRowExpanded(y) {\n var _row$isExpanded;\n var row = this.row(y);\n return (_row$isExpanded = row === null || row === void 0 ? void 0 : row.isExpanded) !== null && _row$isExpanded !== void 0 ? _row$isExpanded : false;\n }\n setRowExpanded(y, isExpanded) {\n var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n expandAll() {\n if (this.table.expandAll) {\n this.table.expandAll();\n }\n }\n collapseAll() {\n if (this.table.collapseAll) {\n this.table.collapseAll();\n }\n }\n depthForRow(y) {\n var _row$depth;\n var row = this.row(y);\n return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;\n }\n updateFrozenColumns(columns) {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\nexport default IrisGridTreeTableModel;\n//# sourceMappingURL=IrisGridTreeTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport deepEqual from 'deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport IrisGridTableModel from \"./IrisGridTableModel.js\";\nimport IrisGridPartitionedTableModel from \"./IrisGridPartitionedTableModel.js\";\nimport IrisGridTreeTableModel from \"./IrisGridTreeTableModel.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridProxyModel');\nfunction makeModel(dh, table, formatter, inputTable) {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n if (TableUtils.isPartitionedTable(table)) {\n return new IrisGridPartitionedTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n */\nclass IrisGridProxyModel extends IrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n\n constructor(dh, table) {\n var _this;\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _this = this;\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"originalModel\", void 0);\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"rollup\", void 0);\n _defineProperty(this, \"partition\", void 0);\n _defineProperty(this, \"selectDistinct\", void 0);\n _defineProperty(this, \"currentViewport\", void 0);\n _defineProperty(this, \"textForCell\", function () {\n return _this.model.textForCell(...arguments);\n });\n _defineProperty(this, \"truncationCharForCell\", function () {\n return _this.model.truncationCharForCell(...arguments);\n });\n _defineProperty(this, \"textAlignForCell\", function () {\n return _this.model.textAlignForCell(...arguments);\n });\n _defineProperty(this, \"colorForCell\", function () {\n return _this.model.colorForCell(...arguments);\n });\n _defineProperty(this, \"backgroundColorForCell\", function () {\n return _this.model.backgroundColorForCell(...arguments);\n });\n _defineProperty(this, \"textForColumnHeader\", function () {\n return _this.model.textForColumnHeader(...arguments);\n });\n _defineProperty(this, \"colorForColumnHeader\", function () {\n return _this.model.colorForColumnHeader(...arguments);\n });\n _defineProperty(this, \"textForRowHeader\", function () {\n return _this.model.textForRowHeader(...arguments);\n });\n _defineProperty(this, \"textForRowFooter\", function () {\n return _this.model.textForRowFooter(...arguments);\n });\n _defineProperty(this, \"isRowMovable\", function () {\n return _this.model.isRowMovable(...arguments);\n });\n _defineProperty(this, \"isColumnMovable\", function () {\n return _this.model.isColumnMovable(...arguments);\n });\n _defineProperty(this, \"isRowExpandable\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpandable(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpanded(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"setRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.setRowExpanded(...arguments);\n }\n throw Error('Function setRowExpanded does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"expandAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.expandAll();\n }\n throw Error('Function expandAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"collapseAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.collapseAll();\n }\n throw Error('Function collapseAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"depthForRow\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.depthForRow(...arguments);\n }\n return 0;\n // throw Error('Function depthForRow does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"getColumnHeaderGroup\", function () {\n return _this.model.getColumnHeaderGroup(...arguments);\n });\n _defineProperty(this, \"getColumnHeaderParentGroup\", function () {\n return _this.model.getColumnHeaderParentGroup(...arguments);\n });\n _defineProperty(this, \"sourceForCell\", function () {\n return _this.model.sourceForCell(...arguments);\n });\n _defineProperty(this, \"getClearFilterRange\", function () {\n return _this.model.getClearFilterRange(...arguments);\n });\n _defineProperty(this, \"formatForCell\", function () {\n return _this.model.formatForCell(...arguments);\n });\n _defineProperty(this, \"valueForCell\", function () {\n return _this.model.valueForCell(...arguments);\n });\n _defineProperty(this, \"renderTypeForCell\", function () {\n return _this.model.renderTypeForCell(...arguments);\n });\n _defineProperty(this, \"dataBarOptionsForCell\", function () {\n return _this.model.dataBarOptionsForCell(...arguments);\n });\n _defineProperty(this, \"displayString\", function () {\n return _this.model.displayString(...arguments);\n });\n _defineProperty(this, \"isEditableRange\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isEditableRange(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isFilterable\", function () {\n return _this.model.isFilterable(...arguments);\n });\n _defineProperty(this, \"setViewport\", (top, bottom, columns) => {\n this.currentViewport = {\n top,\n bottom,\n columns\n };\n this.model.setViewport(top, bottom, columns);\n });\n _defineProperty(this, \"snapshot\", function () {\n return _this.model.snapshot(...arguments);\n });\n _defineProperty(this, \"textSnapshot\", function () {\n return _this.model.textSnapshot(...arguments);\n });\n _defineProperty(this, \"valuesTable\", function () {\n return _this.model.valuesTable(...arguments);\n });\n _defineProperty(this, \"editValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.editValueForCell(...arguments);\n }\n return '';\n });\n _defineProperty(this, \"setValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForCell(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValueForRanges\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForRanges(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValues\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValues(...arguments);\n }\n return Promise.resolve();\n });\n _defineProperty(this, \"isValidForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isValidForCell(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"delete\", function () {\n return _this.model.delete(...arguments);\n });\n _defineProperty(this, \"commitPending\", function () {\n return _this.model.commitPending(...arguments);\n });\n this.handleModelEvent = this.handleModelEvent.bind(this);\n var model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.partition = null;\n this.selectDistinct = [];\n }\n close() {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n handleModelEvent(event) {\n log.debug2('handleModelEvent', event);\n var {\n detail,\n type\n } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, {\n detail\n }));\n }\n setModel(model) {\n log.debug('setModel', model);\n var oldModel = this.model;\n var {\n columns: oldColumns\n } = oldModel;\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n this.model = model;\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n if (oldColumns !== model.columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns\n }));\n } else if (this.currentViewport != null) {\n // If the columns haven't changed, the current viewport should still valid, and needs to be set on the new model\n var {\n top,\n bottom,\n columns\n } = this.currentViewport;\n model.setViewport(top, bottom, columns);\n }\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table\n }));\n }\n }\n setNextModel(modelPromise) {\n log.debug2('setNextModel');\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => model.close());\n this.modelPromise.then(model => {\n this.modelPromise = null;\n this.setModel(model);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n startListening() {\n super.startListening();\n this.addListeners(this.model);\n }\n stopListening() {\n super.stopListening();\n this.removeListeners(this.model);\n }\n addListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n removeListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n get rowCount() {\n return this.model.rowCount;\n }\n get columnCount() {\n return this.model.columnCount;\n }\n get floatingTopRowCount() {\n return this.model.floatingTopRowCount;\n }\n get floatingBottomRowCount() {\n return this.model.floatingBottomRowCount;\n }\n get floatingLeftColumnCount() {\n return this.model.floatingLeftColumnCount;\n }\n get floatingRightColumnCount() {\n return this.model.floatingRightColumnCount;\n }\n isColumnFrozen(x) {\n return this.model.isColumnFrozen(x);\n }\n isColumnSortable(index) {\n return this.model.isColumnSortable(index);\n }\n get hasExpandableRows() {\n if (isExpandableGridModel(this.model)) {\n return this.model.hasExpandableRows;\n }\n return false;\n }\n get isExpandAllAvailable() {\n if (isExpandableGridModel(this.model)) {\n var _this$model$isExpandA;\n return (_this$model$isExpandA = this.model.isExpandAllAvailable) !== null && _this$model$isExpandA !== void 0 ? _this$model$isExpandA : false;\n }\n return false;\n }\n get isExportAvailable() {\n return this.model.isExportAvailable;\n }\n get isColumnStatisticsAvailable() {\n return this.model.isColumnStatisticsAvailable;\n }\n get isValuesTableAvailable() {\n return this.model.isValuesTableAvailable;\n }\n get isCustomColumnsAvailable() {\n return this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0);\n }\n get isFormatColumnsAvailable() {\n return this.model.isFormatColumnsAvailable;\n }\n get isChartBuilderAvailable() {\n return this.model.isChartBuilderAvailable;\n }\n get isRollupAvailable() {\n return (this.originalModel.isRollupAvailable || this.rollup != null) && this.selectDistinct.length === 0;\n }\n get isSelectDistinctAvailable() {\n return (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null;\n }\n get isTotalsAvailable() {\n return this.model.isTotalsAvailable;\n }\n get isReversible() {\n return this.model.isReversible;\n }\n get columns() {\n return this.model.columns;\n }\n get initialMovedColumns() {\n return this.model.initialMovedColumns;\n }\n get initialMovedRows() {\n return this.model.initialMovedRows;\n }\n get layoutHints() {\n return this.model.layoutHints;\n }\n get frontColumns() {\n return this.model.frontColumns;\n }\n get backColumns() {\n return this.model.backColumns;\n }\n get frozenColumns() {\n return this.model.frozenColumns;\n }\n get columnHeaderGroups() {\n return this.model.columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n this.model.columnHeaderGroups = groups;\n }\n get initialColumnHeaderGroups() {\n return this.model.initialColumnHeaderGroups;\n }\n get columnHeaderGroupMap() {\n return this.model.columnHeaderGroupMap;\n }\n get columnHeaderMaxDepth() {\n return this.model.columnHeaderMaxDepth;\n }\n updateFrozenColumns(columns) {\n return this.model.updateFrozenColumns(columns);\n }\n get originalColumns() {\n return this.originalModel.columns;\n }\n get groupedColumns() {\n return this.model.groupedColumns;\n }\n get partitionColumns() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n return [];\n }\n return this.originalModel.partitionColumns;\n }\n get description() {\n return this.model.description;\n }\n get filter() {\n return this.model.filter;\n }\n set filter(filter) {\n this.model.filter = filter;\n }\n get partitionConfig() {\n if (!isPartitionedGridModelProvider(this.originalModel) || !this.originalModel.isPartitionRequired) {\n return null;\n }\n return this.partition;\n }\n set partitionConfig(partitionConfig) {\n if (!this.isPartitionRequired) {\n throw new Error('Partitions are not available');\n }\n log.debug('set partitionConfig', partitionConfig);\n this.partition = partitionConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (partitionConfig != null && isPartitionedGridModelProvider(this.originalModel)) {\n if (partitionConfig.mode === 'keys') {\n modelPromise = this.originalModel.partitionKeysTable().then(table => makeModel(this.dh, table, this.formatter));\n } else if (partitionConfig.mode === 'merged') {\n modelPromise = this.originalModel.partitionMergedTable().then(table => makeModel(this.dh, table, this.formatter));\n } else {\n modelPromise = this.originalModel.partitionTable(partitionConfig.partitions).then(table => makeModel(this.dh, table, this.formatter));\n }\n }\n this.setNextModel(modelPromise);\n }\n partitionKeysTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionKeysTable();\n }\n partitionMergedTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionMergedTable();\n }\n partitionTable(partitions) {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionTable(partitions);\n }\n get formatter() {\n return this.model.formatter;\n }\n set formatter(formatter) {\n this.model.formatter = formatter;\n }\n get sort() {\n return this.model.sort;\n }\n set sort(sort) {\n this.model.sort = sort;\n }\n get customColumns() {\n return this.model.customColumns;\n }\n set customColumns(customColumns) {\n this.model.customColumns = customColumns;\n }\n get formatColumns() {\n return this.model.formatColumns;\n }\n set formatColumns(formatColumns) {\n this.model.formatColumns = formatColumns;\n }\n get rollupConfig() {\n return this.rollup;\n }\n set rollupConfig(rollupConfig) {\n log.debug('set rollupConfig', rollupConfig);\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n this.rollup = rollupConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && rollupConfig != null) {\n modelPromise = this.originalModel.table.rollup(rollupConfig).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get selectDistinctColumns() {\n return this.selectDistinct;\n }\n set selectDistinctColumns(columnNames) {\n log.debug('set selectDistinctColumns', columnNames);\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n if (columnNames === this.selectDistinctColumns || columnNames.length === 0 && this.selectDistinctColumns.length === 0) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n this.selectDistinct = columnNames;\n var selectDistinctColumns = columnNames.map(name => this.originalColumns.find(column => column.name === name)).filter(column => column != null);\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && selectDistinctColumns.length > 0) {\n modelPromise = this.originalModel.table.selectDistinct(selectDistinctColumns).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get table() {\n if (isIrisGridTableModelTemplate(this.model)) {\n return this.model.table;\n }\n return undefined;\n }\n get totalsConfig() {\n return this.model.totalsConfig;\n }\n set totalsConfig(totalsConfig) {\n this.model.totalsConfig = totalsConfig;\n }\n get isFilterRequired() {\n return this.originalModel.isFilterRequired;\n }\n get isPartitionRequired() {\n return isPartitionedGridModelProvider(this.originalModel) ? this.originalModel.isPartitionRequired : false;\n }\n get isEditable() {\n return isEditableGridModel(this.model) && this.model.isEditable;\n }\n export() {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'export' property\");\n }\n return this.model.export();\n }\n columnStatistics(column) {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'columnStatistics' function\");\n }\n return this.model.columnStatistics(column);\n }\n get pendingDataMap() {\n return this.model.pendingDataMap;\n }\n set pendingDataMap(map) {\n this.model.pendingDataMap = map;\n }\n get pendingRowCount() {\n return this.model.pendingRowCount;\n }\n set pendingRowCount(count) {\n this.model.pendingRowCount = count;\n }\n get pendingDataErrors() {\n return this.model.pendingDataErrors;\n }\n getColumnIndexByName(name) {\n return this.model.getColumnIndexByName(name);\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.model.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.model.isSeekRowAvailable;\n }\n}\nexport default IrisGridProxyModel;\n//# sourceMappingURL=IrisGridProxyModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridProxyModel from \"./IrisGridProxyModel.js\";\n/**\n * Factory to create an IrisGridDataModel based on a table or tree table, whatever is passed in.\n */\nclass IrisGridModelFactory {\n /**\n * @param table The Table or TreeTable object to create the model with\n * @param formatter The formatter to use\n * @returns An IrisGridModel that uses the table provided\n */\n static makeModel(dh, table) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var formatter = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : new Formatter(dh);\n var inputTable = null;\n if (!TableUtils.isTreeTable(table) && !TableUtils.isPartitionedTable(table) && table.hasInputTable) {\n inputTable = yield table.inputTable();\n }\n return new IrisGridProxyModel(dh, table, formatter, inputTable);\n })();\n }\n}\nexport default IrisGridModelFactory;\n//# sourceMappingURL=IrisGridModelFactory.js.map"],"names":["CardFlip","_ref","className","isFlipped","children","dataTestId","getComponent","key","front","useRef","transitionStart","useCallback","event","transitionEnd","useEffect","refObj","_jsxs","classNames","_jsx","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","_defineProperty","obj","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","log","Log","FigureChartModel","ChartModel","dh","figure","theme","_this","settings","debounce","axisTypeMap","ChartUtils","pendingSeries","_loop","_chart$showLegend","series","chart","c","memoize","columnType","formatter","dataFormatter","timeZone","range","rangeStart","rangeEnd","valueParser","axis","template","_this$figure$charts$","_this2","charts","activeSeriesNames","_loop2","j","axes","title","xAxis","yAxis","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","a","yAxisIndex","annotation","allSeriesNames","inactiveSeriesNames","seriesName","_i","showLegend","seriesData","oneClick","columns","callback","figureUpdateEvent","seriesArray","sources","type","valueTranslator","dataArray","data","isDownsamplingDisabled","rect","_match$length","_match","subtitleCount","margin","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","plotWidth","plotHeight","axisFormats","axisFormat","axisLayoutProperty","props","sourceType","name","plotStyle","property","set","xLow","xHigh","width","x","_xLow","_xHigh","y","yLow","yHigh","ids","labels","filterMap","_this3","_loop3","column","FigureChartModel$1","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","err","ChartModelFactory","table","tableCopy","ChartModelFactory$1","isFigureChartModel","model","MissingKeyError","rowIndex","columnName","MissingKeyError$1","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","IrisGridTableModelTemplate","IrisGridModel","startRow","valueType","insensitive","contains","isBackwards","customColumns","formatColumns","rollupConfig","names","_this$layoutHints$col","_this$layoutHints","_formatter","Formatter","inputTable","layoutHints","_layoutHints$columnGr","movedColumns","groupMap","IrisGridUtils","moveColumn","toIndex","modelIndex","visibleIndex","GridUtils","moveGroup","group","visibleRange","frontColumns","backColumns","frozenColumns","usedColumns","frontIndex","backIndex","layoutHintColumnGroups","columnGroups","b","firstChildName","rightModelIndex","rightVisibleIndex","firstChildGroup","childName","childGroup","childColumn","isBeforeGroup","moveToIndex","_isBeforeGroup","_moveToIndex","_layoutHints$columnGr2","tableColumns","columnMap","col","indices","throttle","top","bottom","viewport","viewportTop","viewportBottom","memoizeClear","formatOverride","FormatterUtils","viewHeight","pendingDataMap","keyColumnCount","map","row","rowData","_map$get","TableUtils","totalsTable","EventShimCustomEvent","_this$totals$operatio","_this$totals","_this$totals$operatio2","_this$inputTable$keyC","_this$inputTable","columnIndex","count","_this$totals$operatio3","_this$totals2","_this$totals2$operati","_this$totals$operatio4","_this$totals3","_this$totals3$operati","text","_this$pendingStringDa","_this$formattedString","_value","_column","hasCustomColumnFormat","formatForCell","_this$columns$x","pendingRow","format","_value2","assertNotNull","_column2","_this$formatForCell$b","_this$formatForCell","_positiveColor","_negativeColor","_format$color","_markerColor","direction","max","min","valuePlacement","marker","positiveColor","negativeColor","markerColor","opacity","databarColor","databarOptions","_header$displayName","depth","header","isColumnHeaderGroup","_column$color","_this$columnAtDepth$n","_this$columnAtDepth","_this$columns$x2","currentDepth","totalsRow","_this$layoutHints2","_this$layoutHints3","_this$_columnHeaderMa","groups","newGroups","maxDepth","parentMap","_this$totals$operatio5","_this$totals4","_this$totals4$operati","_this$totals$showOnTo","_this$totals5","_this$viewportData$of","_this$viewportData","_this$viewportData$ro","_this$viewportData2","_this$viewportData2$r","totalsRowCount","showOnTop","_this$totals6","_this$totalsDataMap$g","_this$totalsDataMap","operation","_this$pendingNewDataM","offset","viewportY","_this$totals7","_this$totals$defaultO","_this$totals8","_this$totalsTable","defaultOperation","AggregationOperation","tableColumn","totalsColumn","_this$totals9","_this$totals$operatio6","_this$totals10","_this$totals10$operat","_this$totals$showOnTo2","_this$totals11","_this$row","_this$dataForCell","_data$value","totalsData","_this$totals$defaultO2","_this$totals12","_this$totals13","rows","dataMap","operationMap","_operationMap$name$","_operationMap$name","newData","r","_row","newRow","_column3","index","filter","sort","totalsConfig","PromiseUtils","ranges","_arguments","includeHeaders","formatValue","consolidateRanges","consolidated","GridRange","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","_r","result","topFloatingRows","rangeSet","snapshot","bottomFloatingRows","_i2","_arguments2","_this4","_this$columns$modelIn","_this$inputTable$keyC2","_this$inputTable2","isPendingRange","_this5","_this6","columnSet","formattedText","_value3","pendingAreaRange","pendingRanges","newDataMap","newRowData","tableAreaRange","_this6$inputTable","_range$startRow","_range$endRow","newRows","cellText","_arguments3","_this7","edits","edit","_edit$column","_edit$row","_edit$column2","_edit$row2","_row2","rowEditMap","rowMap","_edit$row3","_rowMap$get","_edit$column3","_edit$row4","_this7$inputTable","dataIndex","rangeRowCount","rowEdits","_edit$column4","_edit$column5","_edit$row5","_this8","_this8$inputTable","_this8$viewport$botto","_this8$viewport","_ref2","_column4","IrisGridTableModelTemplate$1","IrisGridTableModel","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","partitions","partitionFilters","partition","partitionColumn","partitionFilter","t","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_this5$inputTable","keyColumns","pendingRange","deleteTable","keyColumn","keyIndex","filters","columnFilters","filterValue","_filter","agg","curr","_agg$and","_agg$or","IrisGridTableModel$1","EmptyIrisGridModel","EMPTY_ARRAY","selectDistinctColumns","EMPTY_MAP","EmptyIrisGridModel$1","IrisGridPartitionedTableModel","partitionedTable","MissingPartitionError","e","isMissingPartitionError","IrisGridPartitionedTableModel$1","IrisGridTreeTableModel","virtualColumns","tableGroupedColumns","groupedColumns","c1","c2","viewportColumns","isExpanded","hasChildren","extractedRow","modifiedData","cellData","_this$viewport$column","viewportRange","intersection","resultRow","viewportRow","_viewportRow$data$get","_row$hasChildren","_row$isExpanded","expandDescendants","_row$depth","IrisGridTreeTableModel$1","makeModel","IrisGridProxyModel","isExpandableGridModel","isEditableGridModel","detail","oldModel","oldColumns","modelPromise","events","_this$model$isExpandA","isPartitionedGridModelProvider","partitionConfig","deepEqual","columnNames","IrisGridProxyModel$1","IrisGridModelFactory","IrisGridModelFactory$1"],"mappings":"6YAaA,SAASA,GAASC,EAAM,CACtB,GAAI,CACF,UAAAC,EACA,UAAAC,EACA,SAAAC,EACA,cAAeC,CAChB,EAAGJ,EACAK,EAAeC,GAAO,CACxB,GAAIH,EAAS,SAAW,EACtB,MAAM,IAAI,MAAM,0CAA0C,EAE5D,OAAOA,EAASG,CAAG,CACvB,EACMC,EAAQC,UAAO,IAAI,EACnBC,EAAkBC,GAAW,YAACC,GAAS,CACrCA,EAAM,SAAWA,EAAM,eACzB,SAAS,KAAK,UAAU,IAAI,wBAAwB,CAEvD,EAAE,CAAE,CAAA,EACDC,EAAgBF,GAAW,YAACC,GAAS,CACnCA,EAAM,SAAWA,EAAM,eACzB,SAAS,KAAK,UAAU,OAAO,wBAAwB,CAE1D,EAAE,CAAE,CAAA,EACLE,OAAAA,GAAS,UAAC,UAA+C,CACvD,GAAI,CAACN,EAAM,QAAS,MAAM,MAAM,eAAe,EAC/CA,EAAM,QAAQ,iBAAiB,kBAAmBE,CAAe,EACjE,IAAIK,EAASP,EAAM,QACnB,OAAO,UAA2B,CAChC,GAAIO,GAAU,KACZ,OAAOA,EAAO,oBAAoB,kBAAmBL,CAAe,CAE5E,CACA,EAAK,CAACA,CAAe,CAAC,EACAM,GAAAA,KAAM,MAAO,CAC/B,UAAWC,GAAWf,EAAW,CAC/B,wBAAyBC,EACzB,uBAAwB,CAACA,CAC/B,CAAK,EACD,cAAeE,EACf,SAAU,CAAca,GAAI,IAAC,MAAO,CAClC,UAAW,kBACX,SAAUZ,EAAa,CAAC,CAC9B,CAAK,EAAgBY,GAAI,IAAC,MAAO,CAC3B,IAAKV,EACL,UAAW,mBACX,gBAAiBK,EACjB,SAAUP,EAAa,CAAC,CAC9B,CAAK,CAAC,CACN,CAAG,CACH,CC/DA,SAASa,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUrB,EAAK,CAAEsB,EAAgBH,EAAQnB,EAAKqB,EAAOrB,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBmB,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUrB,EAAK,CAAE,OAAO,eAAemB,EAAQnB,EAAK,OAAO,yBAAyBqB,EAAQrB,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAOmB,CAAS,CAC1f,SAASG,EAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAQzX,IAAII,EAAMC,GAAI,OAAO,kBAAkB,EAKvC,MAAMC,WAAyBC,EAAW,CAOxC,YAAYC,EAAIC,EAAQC,EAAO,CAC7B,IAAIC,EACAC,EAAW,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAA,EACnF,MAAMJ,CAAE,EACRG,EAAQ,KACRjB,EAAgB,KAAM,aAAc,MAAM,EAC1CA,EAAgB,KAAM,KAAM,MAAM,EAClCA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,WAAY,MAAM,EACxCA,EAAgB,KAAM,QAAS,MAAM,EACrCA,EAAgB,KAAM,OAAQ,MAAM,EACpCA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,YAAa,MAAM,EACzCA,EAAgB,KAAM,kBAAmB,MAAM,EAC/CA,EAAgB,KAAM,aAAc,MAAM,EAC1CA,EAAgB,KAAM,cAAe,MAAM,EAC3CA,EAAgB,KAAM,kBAAmB,MAAM,EAC/CA,EAAgB,KAAM,mBAAoBmB,GAAS,IAAM,CAavD,QAZIC,EAAcC,EAAW,eAAe,KAAK,MAAM,EACnD,CACF,cAAAC,CACD,EAAG,KACAC,EAAQ,UAAiB,CAC3B,IAAIC,EACAC,EAASH,EAAcxB,CAAC,EACxB4B,EAAQT,EAAM,OAAO,OAAO,KAAKU,GAAKA,EAAE,OAAO,SAASF,CAAM,CAAC,EACnER,EAAM,UAAUQ,EAAQL,GAAcI,EAAkEE,GAAM,cAAgB,MAAQF,IAAsB,OAASA,EAAoB,IAAI,EAC7LC,EAAO,UAAS,CAExB,EACe3B,EAAI,EAAGA,EAAIwB,EAAc,OAAQxB,GAAK,EAC7CyB,IAEF,KAAK,cAAgB,EAC3B,EAAOX,GAAiB,mBAAmB,CAAC,EACxCZ,EAAgB,KAAM,cAAe4B,GAAQ,CAACC,EAAYC,IAAc,CACtE,GAAIA,GAAa,KAAM,CACrB,IAAIC,EAAgBD,EAAU,uBAAuBD,CAAU,EAC/D,GAAIE,GAAiB,KACnB,OAAOA,EAAc,UAExB,CAEF,CAAA,CAAC,EACF/B,EAAgB,KAAM,qBAAsB4B,GAAQ,CAACC,EAAYC,IAAc,CAC7E,IAAIE,EAAW,KAAK,YAAYH,EAAYC,CAAS,EACrD,OAAO5B,GAAS,KAAK,WAAW,YAAYA,EAAO8B,CAAQ,CAC5D,CAAA,CAAC,EACFhC,EAAgB,KAAM,iBAAkB4B,GAAQ,CAACC,EAAYC,IAAc,CACzE,IAAIE,EAAW,KAAK,YAAYH,EAAYC,CAAS,EACrD,OAAO5B,GAAS,KAAK,WAAW,UAAUA,EAAO2B,EAAYG,CAAQ,CACtE,CAAA,CAAC,EACFhC,EAAgB,KAAM,iBAAkB4B,GAAQ,CAACC,EAAYC,IAAcG,GAAS,CAClF,GAAI,CAACC,EAAYC,CAAQ,EAAIF,EACzBG,EAAc,KAAK,eAAeP,EAAYC,CAAS,EAC3D,OAAAI,EAAaE,EAAYF,CAAU,EACnCC,EAAWC,EAAYD,CAAQ,EACxB,CAACD,EAAYC,CAAQ,CAC7B,CAAA,CAAC,EACFnC,EAAgB,KAAM,qBAAsB4B,GAAQ,CAACF,EAAOI,IAAcO,GAAQ,CAChF,IAAItC,EAASsB,EAAW,iBAAiBK,EAAOW,CAAI,EACpD,OAAItC,GAAU,KACL,KAAK,eAAeA,EAAO,WAAY+B,CAAS,EAElDG,GAASA,CACjB,CAAA,CAAC,EACF,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,yBAA2B,KAAK,yBAAyB,KAAK,IAAI,EACvE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EACrE,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,uBAAyB,KAAK,uBAAuB,KAAK,IAAI,EACnE,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,GAAKnB,EACV,KAAK,WAAa,IAAIO,EAAWP,CAAE,EACnC,KAAK,OAASC,EACd,KAAK,SAAWG,EAChB,KAAK,MAAQF,EACb,KAAK,KAAO,GACZ,IAAIsB,EAAW,CACb,KAAM,CAAE,EACR,OAAQ,KAAK,WAAW,kBAAkBtB,CAAK,CACrD,EACI,KAAK,OAAS,CACZ,KAAM,CACJ,KAAMD,EAAO,KACb,QAASA,EAAO,KAChB,QAAS,aACV,EACD,SAAAuB,CACN,EACI,KAAK,cAAgB,IAAI,IACzB,KAAK,cAAgB,GACrB,KAAK,UAAY,GACjB,KAAK,gBAAkB,IAAI,IAC3B,KAAK,WAAa,IAAI,IACtB,KAAK,YAAc,GACnB,KAAK,gBAAkB,IAAI,IAC3B,KAAK,SAAS,KAAK,gBAAiB,CAAA,EACpC,KAAK,cAAa,EAClB,KAAK,oBAAmB,EACxB,KAAK,qBAAoB,CAC1B,CAID,OAAQ,CACN,KAAK,OAAO,QACZ,KAAK,iBAAiB,SACtB,KAAK,oBAAmB,CACzB,CACD,iBAAkB,CAChB,GAAI,KAAK,OAAO,OAAS,MAAQ,KAAK,OAAO,MAAM,OAAS,EAC1D,OAAO,KAAK,OAAO,MAErB,GAAI,KAAK,OAAO,OAAO,SAAW,EAAG,CACnC,IAAIC,EACJ,OAAQA,EAAuB,KAAK,OAAO,OAAO,CAAC,EAAE,SAAW,MAAQA,IAAyB,OAASA,EAAuB,EAClI,CACD,MAAO,EACR,CACD,eAAgB,CACd,IAAIC,EAAS,KACb,KAAK,UAAY,GACjB,KAAK,gBAAgB,QACrB,GAAI,CACF,OAAAC,CACN,EAAQ,KAAK,OACLrB,EAAcC,EAAW,eAAe,KAAK,MAAM,EACnDqB,EAAoB,CAAA,EACxB,KAAK,gBAAkB,IAAI,IA0C3B,QAzCIC,EAAS,UAAkB,CAE7B,QADIjB,EAAQe,EAAO3C,CAAC,EACX8C,EAAI,EAAGA,EAAIlB,EAAM,OAAO,OAAQkB,GAAK,EAAG,CAC/C,IAAInB,EAASC,EAAM,OAAOkB,CAAC,EAC3BF,EAAkB,KAAKjB,EAAO,IAAI,EAClCe,EAAO,UAAUf,EAAQL,EAAaM,EAAM,UAAU,CACvD,CAGD,GAAI,CACF,KAAAmB,EACA,MAAAC,CACD,EAAGpB,EACJ,GAAIoB,GAAS,MAAQA,EAAM,OAAS,IAAML,EAAO,OAAS,GAAKD,EAAO,OAAO,OAAS,MAAO,CAC3F,IAAIO,EAAQF,EAAK,KAAKR,GAAQA,EAAK,OAASG,EAAO,GAAG,KAAK,SAAS,CAAC,EACjEQ,EAAQH,EAAK,KAAKR,GAAQA,EAAK,OAASG,EAAO,GAAG,KAAK,SAAS,CAAC,EACrE,GAAIO,GAAS,MAAQC,GAAS,KAC5BtC,EAAI,KAAK,uFAAwFgB,CAAK,MACjG,CACL,IAAIuB,EAAuBC,EAAkBC,EAAwBC,EACjEC,IAAeJ,GAAyBC,EAAmB9B,EAAY,IAAI2B,EAAM,IAAI,KAAO,MAAQG,IAAqB,OAAS,OAASA,EAAiB,UAAUI,GAAKA,IAAMP,CAAK,KAAO,MAAQE,IAA0B,OAASA,EAAwB,GAAK,EACrQM,IAAeJ,GAA0BC,EAAoBhC,EAAY,IAAI4B,EAAM,IAAI,KAAO,MAAQI,IAAsB,OAAS,OAASA,EAAkB,UAAUE,GAAKA,IAAMN,CAAK,KAAO,MAAQG,IAA2B,OAASA,EAAyB,GAAK,EAC3QK,EAAa,CACf,MAAO,SACP,EAAG,GACH,EAAG,EACH,OAAQ,GACR,KAAMV,EACN,UAAW,GAEX,KAAM,IAAI,OAAOO,EAAY,SAAS,EACtC,KAAM,IAAI,OAAOE,EAAY,SAAS,CAClD,EACcf,EAAO,OAAO,aAAe,KAC/BA,EAAO,OAAO,YAAc,CAACgB,CAAU,EAEvChB,EAAO,OAAO,YAAY,KAAKgB,CAAU,CAE5C,CACF,CACP,EACa1D,EAAI,EAAGA,EAAI2C,EAAO,OAAQ3C,GAAK,EACtC6C,IAMF,QAFIc,EAAiB,CAAC,GAAG,KAAK,cAAc,KAAM,CAAA,EAC9CC,EAAsBD,EAAe,OAAOE,GAAcjB,EAAkB,QAAQiB,CAAU,EAAI,CAAC,EAC9FC,EAAK,EAAGA,EAAKF,EAAoB,OAAQE,GAAM,EAAG,CACzD,IAAID,EAAaD,EAAoBE,CAAE,EACvC,KAAK,cAAc,OAAOD,CAAU,CACrC,CACF,CAQD,UAAUlC,EAAQL,EAAayC,EAAY,CACzC,GAAI,CACF,GAAA/C,CACD,EAAG,KACAgD,EAAa,KAAK,WAAW,yBAAyBrC,EAAQL,EAAaC,EAAW,oBAAoBI,EAAO,KAAM,KAAK,QAAQ,EAAG,KAAK,MAAOoC,CAAU,EAcjK,GAbA,KAAK,cAAc,IAAIpC,EAAO,KAAMqC,CAAU,EAC9C,KAAK,gBAAgB,IAAIrC,EAAO,IAAI,EACpC,KAAK,KAAO,CAAC,GAAG,KAAK,cAAc,OAAM,CAAE,EACvCA,EAAO,YAAcX,EAAG,KAAK,gBAAgB,YAC/C,KAAK,OAAO,QAAU,QACbW,EAAO,YAAcX,EAAG,KAAK,gBAAgB,MACtD,KAAK,OAAO,aAAeO,EAAW,gBAAgB,KAAK,QAAQ,GAMrE,KAAK,OAAO,WAAa,KAAK,KAAK,OAAS,GAAKI,EAAO,YAAcX,EAAG,KAAK,gBAAgB,IAAM+C,GAA4D,OAAY,GACxKpC,EAAO,UAAY,KAAM,CAO3B,OANI,CACF,SAAAsC,CACD,EAAGtC,EACA,CACF,QAAAuC,CACD,EAAGD,EACKjE,EAAI,EAAGA,EAAIkE,EAAQ,OAAQlE,GAAK,EACvC,KAAK,gBAAgB,IAAIkE,EAAQlE,CAAC,EAAE,KAAMkE,EAAQlE,CAAC,CAAC,EAEtD,KAAK,UAAU,KAAKiE,CAAQ,CAC7B,CACD,KAAK,oBAAmB,CACzB,CAID,UAAUE,EAAU,CAClB,MAAM,UAAUA,CAAQ,EACpB,KAAK,UAAU,SAAW,IAE5B,KAAK,cAAa,EAClB,KAAK,gBAAe,EAEvB,CACD,YAAYA,EAAU,CACpB,MAAM,YAAYA,CAAQ,EACtB,KAAK,UAAU,SAAW,GAC5B,KAAK,kBAAiB,CAEzB,CACD,iBAAkB,CAChB,GAAI,CAAC,KAAK,YAAa,CACrBvD,EAAI,MAAM,sDAAsD,EAChE,MACD,CACD,KAAK,OAAO,UAAU,KAAK,uBAAyB,KAAK,GAAG,KAAK,kBAAkB,QAAU,KAAK,GAAG,KAAK,kBAAkB,OAAO,EAC/H,KAAK,OAAO,OAAO,OAAS,IAC9BA,EAAI,MAAM,mBAAoB,KAAK,OAAO,MAAM,EAChD,KAAK,UAAU,KAAK,OAAO,MAAM,EAEpC,CACD,mBAAoB,CAClB,KAAK,OAAO,aACb,CACD,sBAAuB,CACrB,GAAI,CACF,GAAAI,CACD,EAAG,KACJ,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,cAAe,KAAK,mBAAmB,EACnF,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,mBAAoB,KAAK,uBAAuB,EAC5F,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,iBAAkB,KAAK,wBAAwB,EAC3F,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,gBAAiB,KAAK,uBAAuB,EACzF,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,wBAAyB,KAAK,qBAAqB,EAC/F,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,yBAA0B,KAAK,sBAAsB,EACjG,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,uBAAwB,KAAK,oBAAoB,EAC7F,KAAK,OAAO,iBAAiBA,EAAG,KAAK,OAAO,uBAAwB,KAAK,sBAAsB,EAC/F,KAAK,OAAO,iBAAiBA,EAAG,OAAO,qBAAsB,KAAK,mBAAmB,CACtF,CACD,qBAAsB,CACpB,GAAI,CACF,GAAAA,CACD,EAAG,KACJ,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,cAAe,KAAK,mBAAmB,EACtF,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,mBAAoB,KAAK,uBAAuB,EAC/F,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,iBAAkB,KAAK,wBAAwB,EAC9F,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,gBAAiB,KAAK,uBAAuB,EAC5F,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,wBAAyB,KAAK,qBAAqB,EAClG,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,yBAA0B,KAAK,sBAAsB,EACpG,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,uBAAwB,KAAK,oBAAoB,EAChG,KAAK,OAAO,oBAAoBA,EAAG,KAAK,OAAO,uBAAwB,KAAK,sBAAsB,EAClG,KAAK,OAAO,oBAAoBA,EAAG,OAAO,qBAAsB,KAAK,mBAAmB,CACzF,CAYD,sBAAsB/B,EAAO,CAC3B2B,EAAI,MAAM,qBAAsB3B,CAAK,EACrC,KAAK,oBAAoBA,EAAM,MAAM,CACtC,CACD,uBAAuBA,EAAO,CAC5B2B,EAAI,MAAM,sBAAuB3B,CAAK,EACtC,KAAK,qBAAqBA,EAAM,MAAM,CACvC,CACD,qBAAqBA,EAAO,CAC1B2B,EAAI,MAAM,oBAAqB3B,CAAK,EACpC,KAAK,mBAAmBA,EAAM,MAAM,CACrC,CACD,uBAAuBA,EAAO,CAC5B2B,EAAI,KAAK,oBAAqB3B,CAAK,EACnC,KAAK,qBAAqBA,EAAM,MAAM,CACvC,CACD,oBAAoBA,EAAO,CACzB,GAAI,CACF,OAAQmF,CACT,EAAGnF,EACA,CACF,OAAQoF,CACT,EAAGD,EACJxD,EAAI,OAAO,sBAAuByD,CAAW,EAC7C,QAAS,EAAI,EAAG,EAAIA,EAAY,OAAQ,GAAK,EAAG,CAC9C,IAAI1C,EAAS0C,EAAY,CAAC,EAC1BzD,EAAI,OAAO,sCAAuCe,EAAO,IAAI,EAI7D,OAHI,CACF,QAAA2C,CACD,EAAG3C,EACKmB,EAAI,EAAGA,EAAIwB,EAAQ,OAAQxB,GAAK,EAAG,CAC1C,IAAI7C,EAASqE,EAAQxB,CAAC,EAClB,CACF,WAAAf,EACA,KAAAwC,CACD,EAAGtE,EACAuE,EAAkB,KAAK,mBAAmBzC,EAAY,KAAK,SAAS,EACpE0C,EAAYL,EAAkB,SAASzC,EAAQ4C,EAAMC,CAAe,EACxE,KAAK,sBAAsB7C,EAAQ4C,EAAME,CAAS,CACnD,CACD,KAAK,gBAAgB,OAAO9C,EAAO,IAAI,EACvC,KAAK,YAAYA,CAAM,CACxB,CACG,KAAK,gBAAgB,OAAS,GAChC,KAAK,iBAAgB,EAEvB,GAAI,CACF,KAAA+C,CACD,EAAG,KACJ,KAAK,WAAWA,CAAI,CACrB,CACD,oBAAoBzF,EAAO,CACzB2B,EAAI,MAAM,iBAAkB3B,CAAK,EACjC,KAAK,UAAU,CAAC,GAAG,OAAOA,EAAM,MAAM,CAAC,CAAC,CACzC,CAKD,aAAc,CACR,KAAK,UAAU,OAAS,IAC1B,KAAK,kBAAiB,EACtB,KAAK,gBAAe,EAEvB,CACD,aAAa+C,EAAW,CACtB,MAAM,aAAaA,CAAS,EAC5B,KAAK,oBAAmB,EAIxB,KAAK,YAAW,CACjB,CACD,wBAAwB2C,EAAwB,CAC9C,MAAM,wBAAwBA,CAAsB,EACpD,KAAK,YAAW,CACjB,CACD,yBAAyB1F,EAAO,CAC9B2B,EAAI,MAAM,sBAAuB3B,CAAK,EACtC,KAAK,YAAc,GACf,KAAK,UAAU,OAAS,GAC1B,KAAK,kBAAiB,EAExB,KAAK,eAAc,CACpB,CACD,wBAAwBA,EAAO,CAC7B2B,EAAI,MAAM,qBAAsB3B,CAAK,EACrC,KAAK,YAAc,GAGnB,KAAK,cAAa,EAClB,KAAK,cAAa,EACd,KAAK,UAAU,OAAS,GAC1B,KAAK,gBAAe,CAEvB,CACD,wBAAwBA,EAAO,CAC7B,GAAI,CACF,OAAQ0C,CACT,EAAG1C,EACJ2B,EAAI,MAAM,0BAA2Be,CAAM,EAC3C,KAAK,cAAc,KAAKA,CAAM,EAC9B,KAAK,iBAAgB,CACtB,CACD,cAAciD,EAAM,CAClB,MAAM,cAAcA,CAAI,EACxB,KAAK,oBAAmB,CACzB,CACD,SAAS5B,EAAO,CACd,IAAI6B,EAAeC,EACnB,MAAM,SAAS9B,CAAK,EAIpB,IAAI+B,GAAiBF,GAAiBC,GAAU9B,GAA6C,IAAI,MAAM,OAAO,KAAO,MAAQ8B,IAAW,OAAS,OAASA,EAAO,UAAY,MAAQD,IAAkB,OAASA,EAAgB,EAC5NG,EAASzD,EAAW,eAAe,EAAIwD,EAAgBxD,EAAW,qBAClE,KAAK,OAAO,OACd,KAAK,OAAO,OAAO,EAAIyD,EAEvB,KAAK,OAAO,OAAS,CACnB,EAAGA,CACX,EAEQ,OAAO,KAAK,OAAO,OAAU,SAC/B,KAAK,OAAO,MAAQhC,GAEpB,KAAK,OAAO,MAAQlD,GAAc,CAAE,EAAE,KAAK,OAAO,KAAK,EACvD,KAAK,OAAO,MAAM,KAAOkD,EACzB,KAAK,OAAO,MAAM,IAAMlD,GAAc,GAAI,KAAK,OAAO,MAAM,GAAG,EAC/D,KAAK,OAAO,MAAM,IAAI,EAAIyB,EAAW,sBAAsB,EAAIwD,EAAgBxD,EAAW,qBAAuB,GAEpH,CACD,cAAe,CACb,IAAI0D,EAAuBC,EAAqBC,EAAuBC,EACvE,MAAI,CAAC,KAAK,MAAQ,CAAC,KAAK,KAAK,MACpB,EAEF,KAAK,IAAI,KAAK,KAAK,QAAUH,GAAyBC,EAAsB,KAAK,OAAO,UAAY,MAAQA,IAAwB,OAAS,OAASA,EAAoB,KAAO,MAAQD,IAA0B,OAASA,EAAwB,KAAOE,GAAyBC,EAAuB,KAAK,OAAO,UAAY,MAAQA,IAAyB,OAAS,OAASA,EAAqB,KAAO,MAAQD,IAA0B,OAASA,EAAwB,GAAI,CAAC,CACle,CACD,eAAgB,CACd,IAAIE,EAAuBC,EAAsBC,EAAuBC,EACxE,MAAI,CAAC,KAAK,MAAQ,CAAC,KAAK,KAAK,OACpB,EAEF,KAAK,IAAI,KAAK,KAAK,SAAWH,GAAyBC,EAAuB,KAAK,OAAO,UAAY,MAAQA,IAAyB,OAAS,OAASA,EAAqB,KAAO,MAAQD,IAA0B,OAASA,EAAwB,KAAOE,GAAyBC,EAAuB,KAAK,OAAO,UAAY,MAAQA,IAAyB,OAAS,OAASA,EAAqB,KAAO,MAAQD,IAA0B,OAASA,EAAwB,GAAI,CAAC,CACte,CACD,qBAAsB,CACpB,IAAIE,EAAY,KAAK,eACjBC,EAAa,KAAK,gBACtB,KAAK,WAAW,iBAAiB,KAAK,OAAQ,KAAK,OAAQ,KAAK,MAAO9D,GAAS,KAAK,mBAAmBA,EAAO,KAAK,SAAS,EAAG6D,EAAWC,CAAU,CACtJ,CAKD,qBAAsB,CACpB,GAAK,KAAK,UAGV,KAAIC,EAAc,KAAK,WAAW,eAAe,KAAK,OAAQ,KAAK,SAAS,EAC5EA,EAAY,QAAQ,CAACC,EAAYC,IAAuB,CACtDjF,EAAI,MAAM,aAAa,OAAOiF,CAAkB,EAAG,KAAK,OAAOA,CAAkB,EAAGD,CAAU,EAC9F,IAAIE,EAAQ,KAAK,OAAOD,CAAkB,EACtCC,GAAS,KACX,OAAO,OAAOA,EAAOF,CAAU,EAE/BhF,EAAI,MAAM,wBAAwB,OAAOiF,CAAkB,CAAC,CAEpE,CAAK,EACF,CAQD,sBAAsBlE,EAAQoE,EAAYtB,EAAW,CACnD,GAAI,CACF,KAAAuB,EACA,UAAAC,CACD,EAAGtE,EACAqC,EAAa,KAAK,cAAc,IAAIgC,CAAI,EACxCE,EAAW,KAAK,WAAW,kBAAkBD,EAAWF,CAAU,EAClE/B,GACFmC,GAAInC,EAAYkC,EAAUzB,CAAS,CAEtC,CAQD,YAAY9C,EAAQ,CAClB,GAAI,CACF,GAAAX,CACD,EAAG,KACA,CACF,KAAAgF,EACA,UAAAC,CACD,EAAGtE,EACAqC,EAAa,KAAK,cAAc,IAAIgC,CAAI,EAC5C,GAAIhC,GAAc,MAGlB,GAAIiC,IAAcjF,EAAG,KAAK,gBAAgB,UAAW,CACnD,GAAI,CACF,KAAAoF,EACA,MAAAC,CACD,EAAGrC,EACJ,GAAIoC,GAAQC,GAASD,EAAK,SAAWC,EAAM,OAAQ,CAEjD,QADIC,EAAQ,CAAA,EACHtG,EAAI,EAAGA,EAAIoG,EAAK,OAAQpG,GAAK,EACpCsG,EAAM,KAAKD,EAAMrG,CAAC,EAAIoG,EAAKpG,CAAC,CAAC,EAE/BgE,EAAW,MAAQsC,CACpB,CACP,SAAeL,IAAcjF,EAAG,KAAK,gBAAgB,MAAQiF,IAAcjF,EAAG,KAAK,gBAAgB,WAAaiF,IAAcjF,EAAG,KAAK,gBAAgB,IAAK,CACrJ,GAAI,CACF,EAAAuF,EACA,KAAMC,EACN,MAAOC,EACP,EAAAC,EACA,KAAAC,EACA,MAAAC,CACD,EAAG5C,EACAwC,GAASC,GAAUD,IAAUD,IAC/BvC,EAAW,QAAUzC,EAAW,mBAAmBgF,EAAGC,EAAOC,EAAQ,KAAK,KAAK,GAE7EE,GAAQC,GAASD,IAASD,IAC5B1C,EAAW,QAAUzC,EAAW,mBAAmBmF,EAAGC,EAAMC,EAAO,KAAK,KAAK,EAEhF,SAAUX,IAAcjF,EAAG,KAAK,gBAAgB,QAAS,CACxD,GAAI,CACF,IAAA6F,EACA,OAAAC,CACD,EAAG9C,EACA6C,IAAQ,QAAaC,IAAW,SAGlC9C,EAAW,OAAS6C,EAEvB,EACF,CACD,SAAU,CACR,OAAO,KAAK,IACb,CACD,WAAY,CACV,OAAO,KAAK,MACb,CACD,oBAAqB,CACnB,OAAO,IAAI,IAAI,KAAK,eAAe,CACpC,CACD,kBAAmB,CACjB,OAAO,KAAK,UAAU,KAAK5C,GAAYA,EAAS,0BAA0B,GAAK,IAChF,CAMD,UAAU8C,EAAW,CACnB,IAAIC,EAAS,KACb,GAAI,KAAK,UAAU,SAAW,EAAG,CAC/BpG,EAAI,KAAK,2CAA2C,EACpD,MACD,CACDA,EAAI,MAAM,YAAamG,CAAS,EAehC,QAdIE,EAAS,UAAkB,CAC7B,IAAIhD,EAAW+C,EAAO,UAAU,CAAC,EAC7B,CACF,QAAA9C,CACD,EAAGD,EAEAtE,EAAO,IAAI,IAAI,CAAC,GAAGoH,EAAU,OAAQ,GAAGC,EAAO,WAAW,KAAI,CAAE,CAAC,EACrErH,EAAK,QAAQf,GAAO,CAClB,IAAIwB,EAAQ2G,EAAU,IAAInI,CAAG,EACzBoI,EAAO,WAAW,IAAIpI,CAAG,IAAMwB,GAAS8D,EAAQ,KAAKgD,GAAUA,EAAO,OAAStI,CAAG,GAAK,MACzFqF,EAAS,kBAAkBrF,EAAKwB,CAAK,CAE/C,CAAO,CACP,EACa,EAAI,EAAG,EAAI,KAAK,UAAU,OAAQ,GAAK,EAC9C6G,IAEF,KAAK,WAAa,IAAI,IAAIF,CAAS,CACpC,CACD,UAAU9F,EAAQ,CAChB,KAAK,MAAK,EACV,KAAK,OAASA,EACd,KAAK,SAAS,KAAK,gBAAiB,CAAA,EACpC,KAAK,cAAa,EAClB,KAAK,oBAAmB,EACxB,KAAK,qBAAoB,EACrB,KAAK,UAAU,OAAS,GAC1B,KAAK,gBAAe,CAEvB,CACD,eAAeG,EAAU,CACvB,KAAK,SAAWA,CACjB,CACH,CACAlB,EAAgBY,GAAkB,sBAAuB,EAAE,EAC3D,MAAAqG,GAAerG,GClnBf,SAASsG,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CAGrY,MAAMS,EAAkB,CAiBtB,OAAO,sBAAsBjH,EAAII,EAAU8G,EAAOhH,EAAO,CACvD,OAAO0G,GAAkB,WAAa,CACpC,IAAI3G,EAAS,MAAMgH,GAAkB,uBAAuBjH,EAAII,EAAU8G,CAAK,EAC/E,OAAO,IAAIpH,GAAiBE,EAAIC,EAAQC,EAAOE,CAAQ,CACxD,CAAA,GACF,CAeD,OAAO,uBAAuBJ,EAAII,EAAU8G,EAAO,CACjD,OAAON,GAAkB,WAAa,CAKpC,IAAIO,EAAY,MAAMD,EAAM,OAC5B,OAAAC,EAAU,mBAAmBD,EAAM,aAAa,EAChDC,EAAU,YAAYD,EAAM,MAAM,EAClCC,EAAU,UAAUD,EAAM,IAAI,EACvBlH,EAAG,KAAK,OAAO,OAAO,IAAIO,EAAWP,CAAE,EAAE,mBAAmBI,EAAU+G,CAAS,CAAC,CACxF,CAAA,GACF,CAkBD,OAAO,UAAUnH,EAAII,EAAUH,EAAQC,EAAO,CAC5C,OAAO0G,GAAkB,WAAa,CACpC,OAAO,IAAI9G,GAAiBE,EAAIC,EAAQC,EAAOE,CAAQ,CACxD,CAAA,GACF,CACH,CACA,MAAAgH,GAAeH,GC7EA,SAASI,GAAmBC,EAAO,CAChD,OAAOA,EAAM,YAAc,MAC7B,CCFA,SAASpI,GAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CACzX,MAAM+H,WAAwB,KAAM,CAClC,YAAYC,EAAUC,EAAY,CAChC,MAAM,GAAG,OAAOA,EAAY,kCAAkC,EAAE,OAAOD,EAAW,EAAG,GAAG,CAAC,EACzFtI,GAAgB,KAAM,eAAgB,EAAI,EAC1CA,GAAgB,KAAM,WAAY,MAAM,EACxCA,GAAgB,KAAM,aAAc,MAAM,EAC1C,KAAK,SAAWsI,EAChB,KAAK,WAAaC,CACnB,CACH,CACA,MAAAC,GAAeH,GCbf,SAAS/I,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUrB,EAAK,CAAEsB,EAAgBH,EAAQnB,EAAKqB,EAAOrB,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBmB,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUrB,EAAK,CAAE,OAAO,eAAemB,EAAQnB,EAAK,OAAO,yBAAyBqB,EAAQrB,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAOmB,CAAS,CAC1f,SAASqH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,EAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAAStH,EAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAczX,IAAII,EAAMC,GAAI,OAAO,4BAA4B,EAC7C8H,GAAwB,IACxBC,GAA0B,EACvB,SAASC,GAA6BP,EAAO,CAClD,OAAOA,EAAM,QAAU,MACzB,CAMA,MAAMQ,WAAmCC,CAAc,CACrD,QAAQC,EAAU9B,EAAQ+B,EAAW7I,EAAO8I,EAAaC,EAAUC,EAAa,CAC9E,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,QAAS,CACP,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,iBAAiBlC,EAAQ,CACvB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,eAAgB,CAClB,MAAO,EACR,CACD,IAAI,cAAcmC,EAAe,CAC/B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,eAAgB,CAClB,MAAO,EACR,CACD,IAAI,cAAcC,EAAe,CAC/B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,oBAAoBpF,EAAS,CAC3B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,cAAe,CACjB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,aAAaqF,EAAc,CAC7B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,uBAAwB,CAC1B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,sBAAsBC,EAAO,CAC/B,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CAMD,IAAI,SAAU,CACZ,OAAO,KAAK,MAAM,OACnB,CAWD,YAAYxI,EAAIkH,EAAO,CACrB,IAAIuB,EAAuBC,EACvBC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAIC,EAAU5I,CAAE,EACjG6I,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAM7I,CAAE,EACRd,EAAgB,KAAM,KAAM,MAAM,EAClCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,aAAc,MAAM,EAC1CA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,aAAc,MAAM,EAC1CA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,QAAS,MAAM,EACrCA,EAAgB,KAAM,WAAY,MAAM,EACxCA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,sBAAuB,MAAM,EACnDA,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,mBAAoB,MAAM,EAChDA,EAAgB,KAAM,cAAe,MAAM,EAC3CA,EAAgB,KAAM,qBAAsB,MAAM,EAClDA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,qBAAsB,CAAC,EAC7CA,EAAgB,KAAM,wBAAyB,IAAI,GAAK,EACxDA,EAAgB,KAAM,wBAAyB,IAAI,GAAK,EACxDA,EAAgB,KAAM,wBAAyB,IAAI,EACnDA,EAAgB,KAAM,sBAAuB,CAAA,CAAE,EAC/CA,EAAgB,KAAM,gBAAiB,IAAI,EAC3CA,EAAgB,KAAM,iCAAkC4B,EAAQgI,GAAe,CAC7E,IAAIC,EACJ,GAAI,CAACD,EACH,MAAO,GAET,IAAIE,EAAe,CAAA,EACf,CACF,SAAAC,CACR,EAAUC,EAAc,wBAAwB,MAAOH,EAAkFD,GAAY,gBAAkB,MAAQC,IAA0B,OAASA,EAAwB,CAAA,CAAE,EAClOI,EAAa,CAACnE,EAAMoE,IAAY,CAClC,IAAIC,EAAa,KAAK,qBAAqBrE,CAAI,EAC/C,GAAIqE,GAAc,KAChB,MAAM,IAAI,MAAM,+BAA+B,OAAOrE,CAAI,CAAC,EAE7D,IAAIsE,EAAeC,GAAU,gBAAgBF,EAAYL,CAAY,EACrEA,EAAeO,GAAU,SAASD,EAAcF,EAASJ,CAAY,CAC7E,EACUQ,EAAY,CAACxE,EAAMoE,IAAY,CACjC,IAAIK,EAAQR,EAAS,IAAIjE,CAAI,EAC7B,GAAIyE,GAAS,KACX,MAAM,IAAI,MAAM,8BAA8B,OAAOzE,CAAI,CAAC,EAE5D,IAAI0E,EAAeD,EAAM,gBAAgBT,CAAY,EACrDA,EAAeO,GAAU,UAAUG,EAAcN,EAASJ,CAAY,CAC9E,EACU,CACF,aAAAW,EAAe,CAAE,EACjB,YAAAC,EAAc,CAAE,EAChB,cAAAC,EAAgB,CAAE,CACnB,EAAGf,EACJ,GAAIa,EAAa,QAAUC,EAAY,QAAUC,EAAc,OAAQ,CACrE,IAAIC,EAAc,IAAI,IAClBC,EAAa,EACjBF,EAAc,QAAQ7E,GAAQ,CAC5B,GAAI8E,EAAY,IAAI9E,CAAI,EACtB,MAAM,IAAI,MAAM,8CAA8C,OAAOA,CAAI,CAAC,EAE5EmE,EAAWnE,EAAM+E,CAAU,EAC3BA,GAAc,CACxB,CAAS,EACDJ,EAAa,QAAQ3E,GAAQ,CAC3B,GAAI8E,EAAY,IAAI9E,CAAI,EACtB,MAAM,IAAI,MAAM,8CAA8C,OAAOA,CAAI,CAAC,EAE5EmE,EAAWnE,EAAM+E,CAAU,EAC3BA,GAAc,CACxB,CAAS,EACD,IAAIC,EAAY,KAAK,UAAU,KAAO,EACtCJ,EAAY,QAAQ5E,GAAQ,CAC1B,GAAI8E,EAAY,IAAI9E,CAAI,EACtB,MAAM,IAAI,MAAM,8CAA8C,OAAOA,CAAI,CAAC,EAE5EmE,EAAWnE,EAAMgF,CAAS,EAC1BA,GAAa,CACvB,CAAS,CACF,CACD,IAAIC,EAAmFnB,GAAY,aACnG,GAAImB,EAAwB,CAC1B,IAAIC,EAAe,CAAC,GAAGjB,EAAS,OAAQ,CAAA,EACxCiB,EAAa,KAAK,CAAC1H,EAAG2H,IAAM3H,EAAE,MAAQ2H,EAAE,KAAK,EAC7CD,EAAa,QAAQT,GAAS,CAC5B,IAAIW,EAAiBX,EAAM,SAAS,CAAC,EACjCY,EAAkB,KAAK,qBAAqBD,CAAc,EAC1DE,EACJ,GAAID,GAAmB,KACrBC,EAAoBf,GAAU,gBAAgBc,EAAiBrB,CAAY,MACtE,CACL,IAAIuB,EAAkBtB,EAAS,IAAImB,CAAc,EACjD,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,kBAAkB,OAAOH,EAAgB,YAAY,EAAE,OAAOX,EAAM,IAAI,CAAC,EAE3F,IAAIC,EAAea,EAAgB,gBAAgBvB,CAAY,EAE/D,CAAG,CAAAsB,CAAiB,EAAIZ,CACzB,CACD,QAAS1K,EAAI,EAAGA,EAAIyK,EAAM,SAAS,OAAQzK,GAAK,EAAG,CACjD,IAAIwL,EAAYf,EAAM,SAASzK,CAAC,EAC5ByL,EAAaxB,EAAS,IAAIuB,CAAS,EACnCE,GAAc,KAAK,qBAAqBF,CAAS,EACrD,GAAIC,EAAY,CAGd,IAAIE,GAAgBF,EAAW,gBAAgBzB,CAAY,EAAE,CAAC,EAAIsB,EAC9DM,GAAcD,GAAgBL,EAAoBG,EAAW,aAAa,OAAS,EAAIH,EAAoB,EAC/Gd,EAAUgB,EAAWI,EAAW,EAChCN,EAAoBM,GAAcH,EAAW,aAAa,OAAS,CACjF,SAAuBC,IAAe,KAAM,CAC9B,IAAIG,GAAiBtB,GAAU,gBAAgBmB,GAAa1B,CAAY,EAAIsB,EACxEQ,GAAeD,GAAiBP,EAAoBA,EAAoB,EAC5EnB,EAAWqB,EAAWM,EAAY,EAClCR,EAAoBQ,EACrB,CACF,CACX,CAAS,CACF,CACD,YAAK,cAAgB9B,EACdA,CACR,CAAA,CAAC,EACF9J,EAAgB,KAAM,uCAAwC4B,EAAQgI,GAAe,CACnF,IAAIiC,EACJ,OAAO7B,EAAc,wBAAwB,MAAO6B,EAAmFjC,GAAY,gBAAkB,MAAQiC,IAA2B,OAASA,EAAyB,EAAE,EAAE,MAC/O,CAAA,CAAC,EACF7L,EAAgB,KAAM,uBAAwB4B,EAAQkK,GAAgB,CACpE,IAAIC,EAAY,IAAI,IACpB,OAAAD,EAAa,QAAQE,GAAOD,EAAU,IAAIC,EAAI,KAAMA,CAAG,CAAC,EACjDD,CACR,CAAA,CAAC,EACF/L,EAAgB,KAAM,4BAA6B4B,EAAQoC,GAAW,CACpE,IAAIiI,EAAU,IAAI,IAClB,OAAAjI,EAAQ,QAAQ,CAAC5F,EAAM0B,IAAM,CAC3B,GAAI,CACF,KAAAgG,CACD,EAAG1H,EACJ,OAAO6N,EAAQ,IAAInG,EAAMhG,CAAC,CAClC,CAAO,EACMmM,CACR,CAAA,CAAC,EACFjM,EAAgB,KAAM,cAAekM,GAAS,CAACC,EAAKC,EAAQpI,IAAY,CACtE,GAAIoI,EAASD,EAAK,CAChBzL,EAAI,MAAM,mBAAoByL,EAAKC,CAAM,EACzC,MACD,CACD,GAAI,CACF,SAAAC,CACD,EAAG,KACJ,GAAIA,GAAY,MAAQA,EAAS,MAAQF,GAAOE,EAAS,SAAWD,GAAUC,EAAS,UAAYrI,EAAS,CAC1GtD,EAAI,OAAO,8BAA+B2L,CAAQ,EAClD,MACD,CACD,KAAK,SAAW,CACd,IAAAF,EACA,OAAAC,EACA,QAAApI,CACR,EACMtD,EAAI,OAAO,cAAe,KAAK,QAAQ,EACvC,KAAK,cAAa,CACxB,EAAO+H,EAAqB,CAAC,EACzBzI,EAAgB,KAAM,gBAAiBkM,GAAS,IAAM,CACpD,GAAK,KAAK,SAGVxL,CAAAA,EAAI,OAAO,gBAAiB,KAAK,QAAQ,EACzC,GAAI,CACF,IAAAyL,EACA,OAAAC,EACA,QAAApI,CACR,EAAU,KAAK,SACL,CAACsI,EAAaC,CAAc,EAAI,KAAK,0BAA0BJ,EAAKC,CAAM,EAC9E,KAAK,sBAAsBE,EAAaC,EAAgBvI,CAAO,EAChE,EAAE0E,GAAyB,CAC1B,QAAS,EACV,CAAA,CAAC,EACF1I,EAAgB,KAAM,2BAA4BwM,GAAa,CAAC1K,EAAW5B,EAAO2B,EAAY0G,EAAYkE,IAAmB3K,EAAU,mBAAmB5B,EAAO2B,EAAY0G,EAAYkE,CAAc,EAAG,CACxM,IAAK,GACN,CAAA,CAAC,EACFzM,EAAgB,KAAM,kCAAmCwM,GAAaE,GAAe,4BAA6B,CAChH,IAAK,GACN,CAAA,CAAC,EACF1M,EAAgB,KAAM,4BAA6B4B,EAAQ,CAACuK,EAAKC,IAAW,CAC1E,IAAIO,EAAaP,EAASD,EACtBG,EAAc,KAAK,IAAI,EAAGH,EAAMQ,EAAa/D,GAA2B,gBAAgB,EACxF2D,EAAiBH,EAASO,EAAa/D,GAA2B,iBACtE,MAAO,CAAC0D,EAAaC,CAAc,CACpC,CAAA,CAAC,EACFvM,EAAgB,KAAM,yBAA0B4B,EAAQ,CAACgL,EAAgB5I,EAAS6I,IAAmB,CACnG,IAAIC,EAAM,IAAI,IACd,OAAAF,EAAe,QAAQ,CAACG,EAAKzE,IAAa,CAIxC,OAHI,CACF,KAAM0E,CACP,EAAGD,EACKjN,EAAI,EAAGA,EAAI+M,EAAgB/M,GAAK,EACvC,GAAI,CAACkN,EAAQ,IAAIlN,CAAC,EAAG,CACnB,IAAImN,EACCH,EAAI,IAAIxE,CAAQ,GACnBwE,EAAI,IAAIxE,EAAU,CAAA,CAAE,GAErB2E,EAAWH,EAAI,IAAIxE,CAAQ,KAAO,MAAQ2E,IAAa,QAAkBA,EAAS,KAAK,IAAI5E,GAAgBC,EAAUtE,EAAQlE,CAAC,EAAE,IAAI,CAAC,CACvI,CAEX,CAAO,EACMgN,CACR,CAAA,CAAC,EACF,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,EAC3D,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,2BAA6B,KAAK,2BAA2B,KAAK,IAAI,EAC3E,KAAK,GAAKhM,EACV,KAAK,cAAgB2I,EACrB,KAAK,cAAgB,IAAIO,EAAclJ,CAAE,EACzC,KAAK,WAAa6I,EAClB,KAAK,aAAe,KACpB,KAAK,MAAQ3B,EACb,KAAK,WAAa,IAAIkF,EAAWpM,CAAE,EACnC,KAAK,SAAW,KAChB,KAAK,aAAe,KACpB,KAAK,oBAAsB,GAC3B,KAAK,kBAAoB,GACzB,KAAK,iBAAmB,GACxB,KAAK,YAAc,KACnB,KAAK,mBAAqB,KAC1B,KAAK,OAAS,KACd,KAAK,cAAgB,KAKrB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,mBAAqB,EAC1B,KAAK,mBAAqBkJ,EAAc,wBAAwB,MAAOT,GAAyBC,EAAoB,KAAK,eAAiB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,gBAAkB,MAAQD,IAA0B,OAASA,EAAwB,CAAE,CAAA,EAAE,MACtS,CACD,OAAQ,CACN,KAAK,MAAM,QACP,KAAK,cAAgB,MACvB,KAAK,YAAY,QAEf,KAAK,qBAAuB,MAC9B,KAAK,mBAAmB,QAE3B,CACD,gBAAiB,CACf,MAAM,eAAc,EACpB,GAAI,CACF,GAAAzI,CACD,EAAG,KACJ,KAAK,MAAM,iBAAiBA,EAAG,MAAM,iBAAkB,KAAK,qBAAqB,EACjF,KAAK,MAAM,iBAAiBA,EAAG,MAAM,gBAAiB,KAAK,oBAAoB,EAC/E,KAAK,MAAM,iBAAiBA,EAAG,MAAM,cAAe,KAAK,iBAAiB,EAC1E,KAAK,MAAM,iBAAiBA,EAAG,OAAO,qBAAsB,KAAK,mBAAmB,EACpF,KAAK,MAAM,iBAAiBA,EAAG,MAAM,2BAA4B,KAAK,0BAA0B,EAC5F,KAAK,aAAe,MACtB,KAAK,mBAAmB,KAAK,WAAW,EAE1C,KAAK,cAAa,CACnB,CACD,eAAgB,CACd,MAAM,cAAa,EACnB,GAAI,CACF,GAAAA,CACD,EAAG,KACJ,KAAK,MAAM,oBAAoBA,EAAG,MAAM,iBAAkB,KAAK,qBAAqB,EACpF,KAAK,MAAM,oBAAoBA,EAAG,MAAM,gBAAiB,KAAK,oBAAoB,EAClF,KAAK,MAAM,oBAAoBA,EAAG,MAAM,cAAe,KAAK,iBAAiB,EAC7E,KAAK,MAAM,oBAAoBA,EAAG,OAAO,qBAAsB,KAAK,mBAAmB,EACvF,KAAK,MAAM,oBAAoBA,EAAG,MAAM,2BAA4B,KAAK,0BAA0B,EAC/F,KAAK,aAAe,MACtB,KAAK,sBAAsB,KAAK,WAAW,EAE7C,KAAK,kBAAiB,CACvB,CACD,mBAAmBqM,EAAa,CAC9B,GAAI,CACF,GAAArM,CACD,EAAG,KACJqM,EAAY,iBAAiBrM,EAAG,MAAM,cAAe,KAAK,kBAAkB,EAG5EqM,EAAY,YAAY,EAAG,CAAC,CAC7B,CACD,sBAAsBA,EAAa,CACjC,GAAI,CACF,GAAArM,CACD,EAAG,KACJqM,EAAY,oBAAoBrM,EAAG,MAAM,cAAe,KAAK,kBAAkB,CAChF,CACD,uBAAwB,CACtB,KAAK,cAAc,IAAIsM,EAAqBvE,EAAc,MAAM,UAAU,CAAC,CAC5E,CACD,sBAAuB,CACrB,KAAK,cAAc,IAAIuE,EAAqBvE,EAAc,MAAM,SAAS,CAAC,CAC3E,CACD,kBAAkB9J,EAAO,CACvB,KAAK,iBAAiBA,EAAM,MAAM,EAClC,KAAK,cAAc,IAAIqO,EAAqBvE,EAAc,MAAM,OAAO,CAAC,CACzE,CACD,mBAAmB9J,EAAO,CACxB,KAAK,eAAeA,EAAM,MAAM,EAChC,KAAK,cAAc,IAAIqO,EAAqBvE,EAAc,MAAM,OAAO,CAAC,CACzE,CACD,oBAAoB9J,EAAO,CACzB,KAAK,cAAc,IAAIqO,EAAqBvE,EAAc,MAAM,eAAgB9J,CAAK,CAAC,CACvF,CACD,4BAA6B,CAC3B,KAAK,cAAc,IAAIqO,EAAqBvE,EAAc,MAAM,gBAAiB,CAC/E,OAAQ,KAAK,OACd,CAAA,CAAC,CACH,CACD,IAAI,UAAW,CACb,IAAIwE,EAAuBC,EAAcC,EACzC,OAEE,KAAK,IAAI,KAAK,MAAM,KAAM,CAAC,EAAI,KAAK,qBAAuBF,GAAyBC,EAAe,KAAK,UAAY,MAAQA,IAAiB,SAAmBC,EAAyBD,EAAa,kBAAoB,MAAQC,IAA2B,OAAvG,OAAyHA,EAAuB,UAAY,MAAQF,IAA0B,OAASA,EAAwB,EAExX,CACD,IAAI,mBAAoB,CACtB,IAAIG,EAAuBC,EAC3B,OAAO,KAAK,uBAAuB,KAAK,kBAAmB,KAAK,SAAUD,GAAyBC,EAAmB,KAAK,cAAgB,MAAQA,IAAqB,OAAS,OAASA,EAAiB,WAAW,UAAY,MAAQD,IAA0B,OAASA,EAAwB,CAAC,CACvS,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,iBACb,CACD,IAAI,eAAeV,EAAK,CAClBA,IAAQ,KAAK,oBAGjBA,EAAI,QAAQ,CAACC,EAAKzE,IAAa,CAC7B,GAAI,CAAC0B,EAAc,aAAa1B,CAAQ,EACtC,MAAM,IAAI,MAAM,oBAAoB,OAAOA,CAAQ,CAAC,EAEtD,GAAI,CACF,KAAA9D,CACD,EAAGuI,EACJvI,EAAK,QAAQ,CAACtE,EAAOwN,IAAgB,CACnC,GAAI,CAAC1D,EAAc,aAAa0D,CAAW,EACzC,MAAM,IAAI,MAAM,uBAAuB,OAAOA,CAAW,CAAC,CAEpE,CAAO,CACP,CAAK,EACD,KAAK,kBAAoBZ,EACzB,KAAK,mBAAqB,KAAK,IAAI,KAAK,mBAAoB,KAAK,iBAAiB,EAClF,KAAK,oBAAsB,GAC3B,KAAK,cAAc,IAAIM,EAAqBvE,EAAc,MAAM,oBAAoB,CAAC,EACtF,CACD,IAAI,iBAAkB,CACpB,OAAO,KAAK,kBACb,CACD,IAAI,gBAAgB8E,EAAO,CACrBA,IAAU,KAAK,qBAGnB,KAAK,mBAAqB,KAAK,IAAI,EAAGA,EAAO,KAAK,iBAAiB,EACnE,KAAK,cAAc,IAAIP,EAAqBvE,EAAc,MAAM,OAAO,CAAC,EACzE,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,kBAAkB,KAAO,EAAI,KAAK,IAAI,GAAG,KAAK,kBAAkB,KAAM,CAAA,EAAI,EAAI,CAC3F,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,QAAQ,MACrB,CACD,IAAI,wBAAyB,CAC3B,IAAI+E,EAAwBC,EAAeC,EAC3C,OAAO,KAAK,QAAU,MAAQ,KAAK,OAAO,UAAY,GAAKF,GAA0BC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,SAAmBC,EAAwBD,EAAc,kBAAoB,MAAQC,IAA0B,OAAtG,OAAwHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAAyB,CACzX,CACD,IAAI,qBAAsB,CACxB,IAAIG,EAAwBC,EAAeC,EAC3C,OAAO,KAAK,QAAU,MAAQ,KAAK,OAAO,YAAaF,GAA0BC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,SAAmBC,EAAwBD,EAAc,kBAAoB,MAAQC,IAA0B,OAAtG,OAAwHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAA6B,CACzX,CACD,IAAI,yBAA0B,CAC5B,MAAO,EACR,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,gBAAkB,IACrC,CACD,IAAI,YAAa,CACf,MAAO,CAAC,KAAK,kBAAoB,KAAK,YAAc,IACrD,CACD,oBAAoB1H,EAAGG,EAAG0H,EAAM,CAC1B,KAAK,oBAAoB7H,CAAC,GAAK,OACjC,KAAK,oBAAoBA,CAAC,EAAI,IAEhC,KAAK,oBAAoBA,CAAC,EAAEG,CAAC,EAAI0H,CAClC,CACD,kBAAkB7H,EAAGG,EAAG0H,EAAM,CACxB,KAAK,kBAAkB7H,CAAC,GAAK,OAC/B,KAAK,kBAAkBA,CAAC,EAAI,IAE9B,KAAK,kBAAkBA,CAAC,EAAEG,CAAC,EAAI0H,CAChC,CACD,kBAAkB7H,EAAGG,EAAG,CACtB,IAAIQ,EAAS,KAAK,kBAAkBX,CAAC,EACjCW,GAAU,MACZ,OAAOA,EAAOR,CAAC,CAElB,CACD,iBAAiBH,EAAGG,EAAG,CACrB,IAAI2H,EAAuBC,EAE3B,KAAMD,EAAwB,KAAK,kBAAkB9H,CAAC,KAAO,MAAQ8H,IAA0B,OAAS,OAASA,EAAsB3H,CAAC,KAAO,OAC7I,OAAO,KAAK,kBAAkBH,CAAC,EAAEG,CAAC,EAIpC,KAAM4H,EAAwB,KAAK,oBAAoB/H,CAAC,KAAO,MAAQ+H,IAA0B,OAAS,OAASA,EAAsB5H,CAAC,KAAO,OAAW,CAC1J,IAAI6H,EAAS,KAAK,aAAahI,EAAGG,CAAC,EACnC,GAAI6H,IAAW,KACb,OAAO,KAET,GAAIA,IAAW,OACb,OAEF,IAAIC,EAAU,KAAK,aAAajI,EAAGG,CAAC,EAChC+H,EAAwB,KAAK,gCAAgC,KAAK,UAAWD,EAAQ,KAAMA,EAAQ,IAAI,EACvG7B,EACJ,GAAI,CAAC8B,EAAuB,CAC1B,IAAIC,EAAgB,KAAK,cAAcnI,EAAGG,CAAC,EACwBgI,GAAc,cAAiB,OAChG/B,EAAiB+B,EAEpB,CACD,IAAIN,EAAO,KAAK,cAAcG,EAAQC,EAAQ,KAAMA,EAAQ,KAAM7B,CAAc,EAChF,KAAK,oBAAoBpG,EAAGG,EAAG0H,CAAI,CACpC,CACD,OAAO,KAAK,oBAAoB7H,CAAC,EAAEG,CAAC,CACrC,CACD,YAAYH,EAAGG,EAAG,CAChB,IAAIiI,EACAP,EAAO,KAAK,iBAAiB7H,EAAGG,CAAC,EACrC,GAAI0H,GAAQ,MAAQ,KAAK,YAAY7H,CAAC,EAAG,CACvC,IAAIqI,EAAa,KAAK,WAAWlI,CAAC,EAClC,GAAIkI,GAAc,MAAQ,KAAK,eAAe,IAAIA,CAAU,EAE1D,MAAO,GAEV,CACD,GAAIxB,EAAW,YAAYuB,EAAkB,KAAK,QAAQpI,CAAC,KAAO,MAAQoI,IAAoB,OAAS,OAASA,EAAgB,IAAI,EAAG,CACrI,GAAIP,IAAS,KACX,MAAO,OAET,GAAIA,IAAS,GACX,MAAO,OAEV,CACD,OAAOA,GAA0C,EAClD,CACD,sBAAsB7H,EAAG,CACvB,IAAIW,EAAS,KAAK,QAAQX,CAAC,EACvB,CACF,KAAAhC,CACD,EAAG2C,EACJ,GAAIkG,EAAW,aAAa7I,CAAI,GAAK,KAAK,UAAU,yBAClD,MAAO,GAGV,CACD,aAAagC,EAAGG,EAAGxF,EAAO,CACxB,IAAIwD,EAAO,KAAK,YAAY6B,EAAGG,CAAC,EAChC,GAAIhC,EAAM,CACR,GAAI,CACF,OAAAmK,EACA,MAAOC,CACR,EAAGpK,EACJ,GAAIoK,GAAW,MAAQA,IAAY,GACjC,OAAAC,EAAc7N,EAAM,eAAe,EAC5BA,EAAM,gBAEf,GAAI2N,GAAUA,EAAO,MACnB,OAAOA,EAAO,MAEhB,GAAI,KAAK,aAAanI,CAAC,EAErB,OAAAqI,EAAc7N,EAAM,gBAAgB,EAC7BA,EAAM,iBAIf,GAAI4N,GAAW,KAAM,CACnB,IAAIE,EAAW,KAAK,aAAazI,EAAGG,CAAC,EACrC,GAAI0G,EAAW,WAAW4B,EAAS,IAAI,GAAKA,EAAS,OAAS,OAC5D,OAAAD,EAAc7N,EAAM,SAAS,EACtBA,EAAM,UAEf,GAAIkM,EAAW,aAAa4B,EAAS,IAAI,EACvC,OAAIF,EAAU,GACZC,EAAc7N,EAAM,mBAAmB,EAChCA,EAAM,qBAEX4N,EAAU,GACZC,EAAc7N,EAAM,mBAAmB,EAChCA,EAAM,sBAEf6N,EAAc7N,EAAM,eAAe,EAC5BA,EAAM,gBAEhB,CACP,SAAe,KAAK,aAAawF,CAAC,GAAK,KAAK,YAAYH,CAAC,EACnD,OAAAwI,EAAc7N,EAAM,cAAc,EAC3BA,EAAM,eAEf,OAAOA,EAAM,SACd,CACD,uBAAuBqF,EAAGG,EAAGxF,EAAO,CAClC,IAAI+N,EAAuBC,EAC3B,OAAQD,GAAyBC,EAAsB,KAAK,cAAc3I,EAAGG,CAAC,KAAO,MAAQwI,IAAwB,OAAS,OAASA,EAAoB,mBAAqB,MAAQD,IAA0B,OAASA,EAAwB,IACpP,CACD,iBAAiB1I,EAAG,CAClB,IAAIW,EAAS,KAAK,QAAQX,CAAC,EACvB,CACF,KAAAhC,CACD,EAAG2C,EACJ,OAAIkG,EAAW,aAAa7I,CAAI,EACvB,QAEL6I,EAAW,WAAW7I,CAAI,GAAK2C,EAAO,OAAS,OAC1C,SAEF,MACR,CACD,sBAAsBA,EAAQ+F,EAAK/L,EAAO,CACxC,IAAIiO,EAAgBC,EAAgBC,EAAeC,EAC/CT,EAAS,KAAK,cAAc3H,EAAQ+F,CAAG,EAC3C8B,EAAcF,CAAM,EACpB,GAAI,CACF,KAAAtM,EACA,UAAAgN,EACA,IAAAC,EACA,IAAAC,EACA,eAAAC,EACA,MAAAtP,EACA,OAAAuP,CACN,EAAQd,EAAO,cACP,CACF,cAAAe,EACA,cAAAC,EACA,YAAAC,EACA,QAAAC,CACN,EAAQlB,EAAO,cACXe,GAAiBT,EAAiBS,KAAmB,MAAQT,IAAmB,OAASA,EAAiBjO,EAAM,iBAChH2O,GAAiBT,EAAiBS,KAAmB,MAAQT,IAAmB,OAASA,EAAiBlO,EAAM,iBAChH,IAAI8O,GAAgBX,EAAgBR,EAAO,SAAW,MAAQQ,IAAkB,OAASA,EAAgBjP,GAAS,EAAIwP,EAAgBC,EAClIG,EAAa,SAAS,GAAG,IAC3BA,EAAeA,EAAa,MAAM,GAAG,GAEvCF,GAAeR,EAAeQ,KAAiB,MAAQR,IAAiB,OAASA,EAAepO,EAAM,eACtG6O,EAAUL,EAAe,YAAW,IAAO,UAAY,GAAMK,EAC7D,IAAIE,EAAiB,CACnB,KAAM1N,EAAK,YAAa,EACxB,UAAWgN,EAAU,YAAa,EAClC,UAAWC,EACX,UAAWC,EACX,QAAAM,EACA,MAAOC,EACP,eAAgBN,EAAe,YAAa,EAC5C,MAAAtP,EACA,QAAS,CAAC,CACR,MAAOuP,EACP,MAAOG,CACf,CAAO,CACP,EACI,OAAOG,CACR,CACD,kBAAkB/I,EAAQ+F,EAAK,CAC7B,IAAI4B,EAAS,KAAK,cAAc3H,EAAQ+F,CAAG,EAC3C,OAAwD4B,GAAO,eAAkB,KAAO,UAAY,MACrG,CACD,oBAAoBtI,EAAG,CACrB,IAAI2J,EACAC,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC5EC,EAAS,KAAK,cAAc7J,EAAG4J,CAAK,EACxC,OAAIE,GAAoBD,CAAM,EACrBA,EAAO,MAAQ,GAAKA,EAAO,MAE5BF,EAAsEE,GAAO,eAAiB,MAAQF,IAAwB,OAASA,EAAsEE,GAAO,IAC7N,CACD,qBAAqB7J,EAAG,CACtB,IAAI4J,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAC5EjJ,EAAS,KAAK,cAAcX,EAAG4J,CAAK,EACxC,GAAIE,GAAoBnJ,CAAM,EAAG,CAC/B,IAAIoJ,EACJ,OAAQA,EAAgBpJ,EAAO,SAAW,MAAQoJ,IAAkB,OAASA,EAAgB,IAC9F,CACD,OAAO,IACR,CACD,qBAAqBjG,EAAY8F,EAAO,CACtC,IAAI1F,EAAQ,KAAK,cAAcJ,EAAY8F,CAAK,EAChD,GAAIE,GAAoB5F,CAAK,EAC3B,OAAOA,CAGV,CACD,2BAA2BJ,EAAY8F,EAAO,CAC5C,IAAII,EAAuBC,EAC3B,OAAO,KAAK,sBAAsB,KAAKD,GAAyBC,EAAsB,KAAK,cAAcnG,EAAY8F,CAAK,KAAO,MAAQK,IAAwB,OAAS,OAASA,EAAoB,QAAU,MAAQD,IAA0B,OAASA,EAAwB,EAAE,CACvR,CACD,cAAchK,EAAG,CACf,IAAIkK,EACAN,EAAQ,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,EAChF,GAAIA,IAAU,EACZ,OAAO,KAAK,QAAQ5J,CAAC,EAEvB,IAAIkC,GAAcgI,EAAmB,KAAK,QAAQlK,CAAC,KAAO,MAAQkK,IAAqB,OAAS,OAASA,EAAiB,KACtHhG,EAAQ,KAAK,sBAAsB,IAAIhC,CAAU,EACrD,GAAKgC,EAIL,SADIiG,EAAejG,EAAM,MAClBiG,EAAeP,GAAO,CAE3B,GADA1F,EAAQ,KAAK,sBAAsB,IAAIA,EAAM,IAAI,EAC7C,CAACA,EACH,OAEFiG,EAAejG,EAAM,KACtB,CACD,GAAIA,EAAM,QAAU0F,EAClB,OAAO1F,EAGV,CACD,iBAAiB/D,EAAG,CAClB,IAAIiK,EAAY,KAAK,UAAUjK,CAAC,EAChC,OAAIiK,GAAa,MAAQ,KAAK,OACrB,KAAK,OAAO,eAAeA,CAAS,EAEtC,EACR,CAID,IAAI,qBAAsB,CACxB,IAAIC,EACJ,OAAO,KAAK,gCAAgCA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAASA,EAAqB,MAAS,CAC9J,CACD,IAAI,2BAA4B,CAC9B,IAAIC,EACJ,OAAO,KAAK,sCAAsCA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAASA,EAAqB,MAAS,CACpK,CACD,IAAI,WAAY,CACd,OAAO,KAAK,qBAAqB,KAAK,MAAM,OAAO,CACpD,CACD,IAAI,sBAAuB,CACzB,IAAIC,EACJ,OAAQA,EAAwB,KAAK,yBAA2B,MAAQA,IAA0B,OAASA,EAAwB,CACpI,CACD,IAAI,qBAAqBX,EAAO,CAC9B,KAAK,sBAAwBA,CAC9B,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,qBACb,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,mBACb,CACD,IAAI,mBAAmBY,EAAQ,CAC7B,GAAIA,IAAW,KAAK,oBAGpB,IAAI,CACF,OAAQC,EACR,SAAAC,EACA,UAAAC,EACA,SAAAjH,CACD,EAAGC,EAAc,wBAAwB,KAAM6G,GAAgD,KAAK,yBAAyB,EAC9H,KAAK,oBAAsBC,EAC3B,KAAK,qBAAuBC,EAC5B,KAAK,sBAAwBC,EAC7B,KAAK,sBAAwBjH,EAC9B,CACD,IAAIvD,EAAG,CACL,IAAIyK,EAAwBC,EAAeC,EAAuBC,EAAuBC,EAAeC,EAAuBC,EAAoBC,EAAuBC,EAAqBC,EAC3LC,GAAkBV,GAA0BC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,SAAmBC,EAAwBD,EAAc,kBAAoB,MAAQC,IAA0B,OAAtG,OAAwHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAAyB,EAC/UW,GAAaR,GAAyBC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,aAAe,MAAQD,IAA0B,OAASA,EAAwB,GACnNX,EAAY,KAAK,UAAUjK,CAAC,EAChC,GAAIiK,GAAa,KAAM,CACrB,IAAIoB,EAAeC,EAAuBC,EACtCC,GAAaH,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,eAAepB,CAAS,EACpI,OAAA5B,EAAcmD,CAAS,GACfF,GAAyBC,EAAsB,KAAK,iBAAmB,MAAQA,IAAwB,OAAS,OAASA,EAAoB,IAAIC,CAAS,KAAO,MAAQF,IAA0B,OAASA,EAAwB,IAC7O,CACD,IAAIpD,EAAa,KAAK,WAAWlI,CAAC,EAClC,GAAIkI,GAAc,KAAM,CACtB,IAAIuD,EACJ,OAAQA,EAAwB,KAAK,kBAAkB,IAAIvD,CAAU,KAAO,MAAQuD,IAA0B,OAASA,EAAwB,IAChJ,CACD,IAAIC,GAAUZ,GAAyBC,EAAqB,KAAK,gBAAkB,MAAQA,IAAuB,OAAS,OAASA,EAAmB,UAAY,MAAQD,IAA0B,OAASA,EAAwB,EAClOa,GAAaP,EAAYpL,EAAImL,EAAiBnL,GAAK0L,EACvD,OAAQV,GAAyBC,EAAsB,KAAK,gBAAkB,MAAQA,IAAwB,SAAmBC,EAAwBD,EAAoB,QAAU,MAAQC,IAA0B,OAAlG,OAAoHA,EAAsBS,CAAS,KAAO,MAAQX,IAA0B,OAASA,EAAwB,IACrV,CAUD,aAAaxK,EAAQ+F,EAAK,CACxB,IAAI0D,EAAY,KAAK,UAAU1D,CAAG,EAClC,GAAI0D,GAAa,KAAM,CACrB,IAAI2B,EAAeC,EAAuBC,EAAeC,EACrDP,GAAaI,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,eAAe3B,CAAS,EAChI+B,GAAoBH,GAAyBC,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,oBAAsB,MAAQD,IAA0B,OAASA,EAAwBI,GAAqB,IACtPC,EAAc,KAAK,QAAQ1L,CAAM,EAKjC2L,GAAgBJ,EAAoB,KAAK,eAAiB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,QAAQ,KAAKvG,GAAO,CAClJ,IAAI4G,EACJ,OAAO5G,EAAI,OAAS,GAAG,OAAO0G,EAAY,KAAM,IAAI,EAAE,OAAOV,CAAS,IAAMA,IAAcQ,KAAsBI,EAAgB,KAAK,UAAY,MAAQA,IAAkB,OAAS,OAASA,EAAc,eAAe,UAAY,IAAM5G,EAAI,OAAS0G,EAAY,IAC7Q,CAAO,EACD,GAAIC,GAAgB,KAClB,OAAOA,CAGV,CAED,OAAO,KAAK,QAAQ3L,CAAM,CAC3B,CAQD,UAAUR,EAAG,CACX,IAAIqM,EAAwBC,EAAgBC,EAAuBC,EAAwBC,EACvFtB,GAAkBkB,GAA0BC,EAAiB,KAAK,UAAY,MAAQA,IAAmB,SAAmBC,EAAwBD,EAAe,kBAAoB,MAAQC,IAA0B,OAAvG,OAAyHA,EAAsB,UAAY,MAAQF,IAA2B,OAASA,EAAyB,EAClVjB,GAAaoB,GAA0BC,EAAiB,KAAK,UAAY,MAAQA,IAAmB,OAAS,OAASA,EAAe,aAAe,MAAQD,IAA2B,OAASA,EAAyB,GACzNvC,EAAYmB,EAAYpL,EAAIA,EAAI,KAAK,MAAM,KAC/C,OAAIiK,GAAa,GAAKA,EAAYkB,EACzBlB,EAEF,IACR,CAQD,WAAWjK,EAAG,CACZ,IAAIkI,EAAalI,EAAI,KAAK,oBAAsB,KAAK,MAAM,KAC3D,OAAIkI,GAAc,GAAKA,EAAa,KAAK,mBAChCA,EAEF,IACR,CAOD,YAAYlI,EAAG,CACb,OAAO,KAAK,UAAUA,CAAC,GAAK,IAC7B,CAOD,aAAaA,EAAG,CACd,OAAO,KAAK,WAAWA,CAAC,GAAK,IAC9B,CACD,YAAYH,EAAGG,EAAG,CAChB,IAAI0M,EACJ,OAAQA,EAAY,KAAK,IAAI1M,CAAC,KAAO,MAAQ0M,IAAc,OAAS,OAASA,EAAU,KAAK,IAAI7M,CAAC,CAClG,CACD,cAAcA,EAAGG,EAAG,CAClB,IAAI2M,EACJ,OAAQA,EAAoB,KAAK,YAAY9M,EAAGG,CAAC,KAAO,MAAQ2M,IAAsB,OAAS,OAASA,EAAkB,MAC3H,CACD,aAAa9M,EAAGG,EAAG,CACjB,IAAIhC,EAAO,KAAK,YAAY6B,EAAGG,CAAC,EAMhC,GAAIhC,EAAM,CACR,IAAI4O,EACJ,OAAQA,EAAc5O,EAAK,SAAW,MAAQ4O,IAAgB,OAASA,EAAc,IACtF,CAEF,CACD,iBAAiB5O,EAAM,CACrB,GAAIA,GAAQ,KAAM,CAChB9D,EAAI,KAAK,eAAe,EACxB,MACD,CACD,KAAK,aAAe,KAAK,oBAAoB8D,CAAI,EACjD,KAAK,oBAAsB,EAC5B,CACD,eAAe6O,EAAY,CACzB,IAAIC,EACFC,EACAC,EACAvS,EAAQ,KACV,GAAIoS,GAAc,KAAM,CACtB3S,EAAI,KAAK,eAAe,EACxB,MACD,CACD,GAAI,CACF,QAAAsD,EACA,KAAAyP,CACD,EAAGJ,EACJ,GAAII,EAAK,SAAW,EAAG,CACrB/S,EAAI,MAAM,sEAAsE,EAChF,MACD,CAuBD,QAtBIgT,EAAU,IAAI,IACd3G,EAAM0G,EAAK,CAAC,EACZjB,GAAoBc,GAA0BC,EAAiB,KAAK,UAAY,MAAQA,IAAmB,OAAS,OAASA,EAAe,oBAAsB,MAAQD,IAA2B,OAASA,EAAyBb,GAAqB,IAC5PkB,GAAgBH,EAAiB,KAAK,UAAY,MAAQA,IAAmB,OAAS,OAASA,EAAe,aAC9GjS,EAAQ,UAAiB,CAC3B,IAAIqS,EAAqBC,EACrB7M,EAAShD,EAAQrC,CAAC,EAClB,CAACmE,EAAMkM,GAAa4B,EAAsBD,GAAiB,OAA4CE,EAAqBF,EAAa7N,CAAI,KAAO,MAAQ+N,IAAuB,OAAtF,OAAwGA,EAAmB,CAAC,KAAO,MAAQD,IAAwB,OAASA,EAAsBpB,CAAgB,EAAIxL,EAAO,KAAK,MAAM,IAAI,EACxU0M,EAAQ,IAAI1B,CAAS,GACxB0B,EAAQ,IAAI1B,EAAW,CACrB,KAAM,IAAI,GACpB,CAAS,EAEH,GAAI,CACF,KAAMhF,CACd,EAAU0G,EAAQ,IAAI1B,CAAS,EACrBtE,EAAczM,EAAM,QAAQ,UAAU+K,GAAOA,EAAI,OAASlG,CAAI,EAClEkH,EAAQ,IAAIU,EAAa,CACvB,MAAOX,EAAI,IAAI/F,CAAM,EACrB,OAAQ+F,EAAI,UAAU/F,CAAM,CACpC,CAAO,CACP,EACarF,EAAI,EAAGA,EAAIqC,EAAQ,OAAQrC,GAAK,EACvCJ,IAEFb,EAAI,OAAO,iBAAkBgT,CAAO,EACpC,KAAK,cAAgBA,EACrB,KAAK,oBAAsB,EAC5B,CAMD,qBAAqB5N,EAAM,CACzB,OAAO,KAAK,0BAA0B,KAAK,OAAO,EAAE,IAAIA,CAAI,CAC7D,CAKD,oBAAoBtB,EAAM,CAQxB,QAPIsP,EAAU,CACZ,OAAQtP,EAAK,OACb,KAAM,CAAE,CACd,EACQ,CACF,QAAAR,CACD,EAAGQ,EACKuP,EAAI,EAAGA,EAAIvP,EAAK,KAAK,OAAQuP,GAAK,EAAG,CAC5C,IAAIC,EAAOxP,EAAK,KAAKuP,CAAC,EAClBE,EAAS,KAAK,mBAAmBD,EAAMhQ,CAAO,EAClD8P,EAAQ,KAAK,KAAKG,CAAM,CACzB,CACD,OAAOH,CACR,CACD,mBAAmB/G,EAAK/I,EAAS,CAE/B,QADIQ,EAAO,IAAI,IACN7C,EAAI,EAAGA,EAAIqC,EAAQ,OAAQrC,GAAK,EAAG,CAC1C,IAAIuS,EAAWlQ,EAAQrC,CAAC,EACpBwS,EAAQ,KAAK,qBAAqBD,EAAS,IAAI,EACnDrF,EAAcsF,CAAK,EACnB3P,EAAK,IAAI2P,EAAO,CACd,MAAOpH,EAAI,IAAImH,CAAQ,EACvB,OAAQnH,EAAI,UAAUmH,CAAQ,CACtC,CAAO,CACF,CACD,MAAO,CACL,KAAA1P,CACN,CACG,CACD,mBAAoB,CAClB9D,EAAI,OAAO,oBAAqB,KAAK,YAAY,EAC7C,KAAK,eACP,KAAK,aAAa,QAClB,KAAK,aAAe,MAEtB,KAAK,YAAY,SACjB,KAAK,cAAc,QACpB,CACD,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACnB,CACD,IAAI,OAAO0T,EAAQ,CACjB,KAAK,kBAAiB,EACtB,KAAK,MAAM,YAAYA,CAAM,EAC7B,KAAK,cAAa,CACnB,CACD,IAAI,WAAY,CACd,OAAO,KAAK,aACb,CACD,IAAI,UAAUtS,EAAW,CACvB,KAAK,cAAgBA,EACrB,KAAK,oBAAsB,GAC3B,KAAK,cAAc,IAAIsL,EAAqBvE,EAAc,MAAM,iBAAiB,CAAC,CACnF,CACD,cAAc3I,EAAO2B,EAAY,CAC/B,IAAI0G,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACjFkE,EAAiB,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAC3D,OAAO,KAAK,yBAAyB,KAAK,UAAWvM,EAAO2B,EAAY0G,EAAYkE,CAAc,CACnG,CACD,IAAI,MAAO,CACT,OAAO,KAAK,MAAM,IACnB,CACD,IAAI,KAAK4H,EAAM,CACb,KAAK,kBAAiB,EACtB,KAAK,MAAM,UAAUA,CAAI,EACzB,KAAK,cAAa,CACnB,CACD,IAAI,aAAaC,EAAc,CAE7B,GADA5T,EAAI,MAAM,mBAAoB4T,CAAY,EACtCA,IAAiB,KAAK,OAU1B,IANA,KAAK,OAASA,EACd,KAAK,oBAAsB,GACvB,KAAK,oBAAsB,MAC7B,KAAK,mBAAmB,SAE1B,KAAK,eAAe,IAAI,EACpBA,GAAgB,KAAM,CACxB,KAAK,cAAc,IAAIlH,EAAqBvE,EAAc,MAAM,OAAO,CAAC,EACxE,MACD,CACD,KAAK,mBAAqB0L,GAAa,eAAe,KAAK,MAAM,eAAeD,CAAY,EAAGtM,GAASA,EAAM,MAAO,CAAA,EACrH,KAAK,mBAAmB,KAAKmF,GAAe,CAC1C,KAAK,mBAAqB,KAC1B,KAAK,eAAeA,CAAW,CACrC,CAAK,EAAE,MAAMrF,GAAO,CACVyM,GAAa,WAAWzM,CAAG,IAG/BpH,EAAI,MAAM,iCAAkCoH,CAAG,EAC/C,KAAK,mBAAqB,KAC1B,KAAK,cAAc,IAAIsF,EAAqBvE,EAAc,MAAM,eAAgB,CAC9E,OAAQf,CACT,CAAA,CAAC,EACR,CAAK,EACF,CACD,eAAeqF,EAAa,CAC1BzM,EAAI,MAAM,iBAAkByM,CAAW,EACnC,KAAK,cAAgB,OACnB,KAAK,cAAgB,GACvB,KAAK,sBAAsB,KAAK,WAAW,EAE7C,KAAK,YAAY,SAEnB,KAAK,YAAcA,EACnB,KAAK,cAAgB,KACjB,KAAK,cAAgB,GAAK,KAAK,aAAe,MAChD,KAAK,mBAAmB,KAAK,WAAW,CAE3C,CAMD,sBAAsBb,EAAaC,EAAgBvI,EAAS,CAC1DtD,EAAI,OAAO,wBAAyB4L,EAAaC,EAAgBvI,CAAO,EACpE,KAAK,cAAgB,MACvBtD,EAAI,OAAO,iDAAiD,EAC5D,KAAK,aAAe,KAAK,MAAM,YAAY4L,EAAaC,EAAgBvI,CAAO,IAE/EtD,EAAI,OAAO,mDAAmD,EAC9D,KAAK,aAAa,YAAY4L,EAAaC,EAAgBvI,CAAO,EAErE,CACD,SAASwQ,EAAQ,CACf,IAAIC,EAAa,UACfjS,EAAS,KACX,OAAOkF,EAAkB,WAAa,CACpC,IAAIgN,EAAiBD,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI,GACxFE,EAAcF,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAIvU,GAASA,EAC9F0U,EAAoBH,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI,GAC/F,GAAIjS,EAAO,cAAgB,KACzB,MAAM,IAAI,MAAM,2BAA2B,EAE7C,IAAIqS,EAAeD,EAAoBE,EAAU,YAAYN,CAAM,EAAIA,EACvE,GAAI,CAACxK,EAAc,sBAAsB6K,CAAY,EACnD,MAAM,IAAI,MAAM,2BAA2B,OAAOL,CAAM,CAAC,EAO3D,QAHIO,EAAqB,IAAI,IACzBC,EAAc,CAAA,EACdC,EAAwB,IAAI,IACvBnV,EAAI,EAAGA,EAAI+U,EAAa,OAAQ/U,GAAK,EAAG,CAC/C,IAAImC,EAAQ4S,EAAa/U,CAAC,EAC1B+O,EAAc5M,EAAM,MAAM,EAC1B4M,EAAc5M,EAAM,QAAQ,EAE5B,QAAS8R,EAAI9R,EAAM,SAAU8R,GAAK9R,EAAM,QAAU8R,EAAIvR,EAAO,oBAAqBuR,GAAK,EACrFgB,EAAmB,IAAIhB,CAAC,EAItB9R,EAAM,QAAUO,EAAO,qBAAuBP,EAAM,UAAYO,EAAO,oBAAsBA,EAAO,MAAM,MAC5GwS,EAAY,KAAK,IAAIF,EAAU7S,EAAM,YAAa,KAAK,IAAI,KAAK,IAAI,EAAGA,EAAM,SAAWO,EAAO,mBAAmB,CAAC,EAAGP,EAAM,UAAW,KAAK,IAAI,KAAK,IAAI,EAAGA,EAAM,OAASO,EAAO,mBAAmB,EAAGA,EAAO,MAAM,KAAOA,EAAO,mBAAmB,CAAC,CAAC,EAG1P,QAAS0S,EAAK,KAAK,IAAIjT,EAAM,SAAUO,EAAO,oBAAsBA,EAAO,MAAM,IAAI,EAAG0S,GAAMjT,EAAM,QAAUiT,EAAK1S,EAAO,oBAAsBA,EAAO,MAAM,KAAOA,EAAO,uBAAwB0S,GAAM,EACvMD,EAAsB,IAAIC,CAAE,CAE/B,CACD,IAAIlR,EAAUgG,EAAc,kBAAkB6K,EAAcrS,EAAO,OAAO,EACtE2S,EAAS,CAAA,EACTT,GACFS,EAAO,KAAKnR,EAAQ,IAAIrC,GAAKA,EAAE,IAAI,CAAC,EAetC,QAbIyT,EAAkB,CAAC,GAAGL,CAAkB,EAAE,KAAI,EAC9CpS,EAAS,WAAmB,CAC9B,IAAIoK,EAAMqI,EAAgBxR,CAAE,EACxBoJ,EAAUhJ,EAAQ,IAAIgD,GAAU,CAClC,IAAImN,EAAQ3R,EAAO,qBAAqBwE,EAAO,IAAI,EACnD,OAAA6H,EAAcsF,CAAK,EACZQ,EAAYnS,EAAO,aAAa2R,EAAOpH,CAAG,EAAG/F,CAAM,CACpE,CAAS,EACG0N,GACF1H,EAAQ,KAAKxK,EAAO,iBAAiBuK,CAAG,CAAC,EAE3CoI,EAAO,KAAKnI,CAAO,CAC3B,EACepJ,EAAK,EAAGA,EAAKwR,EAAgB,OAAQxR,GAAM,EAClD,MAAOjB,EAAM,EAEf,GAAIqS,EAAY,OAAS,EAAG,CAC1B,IAAIK,EAAW7S,EAAO,cAAc,mBAAmBwS,CAAW,EAC9DM,EAAW,MAAM9S,EAAO,aAAa,SAAS6S,EAAUrR,CAAO,EACnEmR,EAAO,KAAK,GAAGG,EAAS,KAAK,IAAItI,GAAWhJ,EAAQ,IAAIgD,GAAU2N,EAAY3H,EAAQ,IAAIhG,CAAM,EAAGA,CAAM,CAAC,CAAC,CAAC,CAC7G,CAcD,QAbIuO,EAAqB,CAAC,GAAGN,CAAqB,EAAE,KAAI,EACpDlO,EAAS,WAAmB,CAC9B,IAAIgG,EAAMwI,EAAmBC,CAAG,EAC5BxI,EAAUhJ,EAAQ,IAAIgD,GAAU,CAClC,IAAImN,EAAQ3R,EAAO,qBAAqBwE,EAAO,IAAI,EACnD,OAAA6H,EAAcsF,CAAK,EACZQ,EAAYnS,EAAO,aAAa2R,EAAOpH,CAAG,EAAG/F,CAAM,CACpE,CAAS,EACG0N,GACF1H,EAAQ,KAAKxK,EAAO,iBAAiBuK,CAAG,CAAC,EAE3CoI,EAAO,KAAKnI,CAAO,CAC3B,EACewI,EAAM,EAAGA,EAAMD,EAAmB,OAAQC,GAAO,EACxD,MAAOzO,EAAM,EAEf,OAAOoO,CACR,CAAA,GACF,CASD,aAAaX,EAAQ,CACnB,IAAIiB,EAAc,UAChB3O,EAAS,KACX,OAAOY,EAAkB,WAAa,CACpC,IAAIgN,EAAiBe,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI,GAC3Fd,EAAcc,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAIvV,GAAS,GAAG,OAAOA,CAAK,EACpHQ,EAAI,OAAO,eAAgB8T,EAAQE,CAAc,EACjD,IAAIlQ,EAAO,MAAMsC,EAAO,SAAS0N,EAAQE,EAAgBC,EAAa,EAAK,EAC3E,OAAOnQ,EAAK,IAAIuI,GAAOA,EAAI,KAAK,GAAI,CAAC,EAAE,KAAK;AAAA,CAAI,CACjD,CAAA,GACF,CACD,YAAY/I,EAAS,CACnB,IAAI0R,EAAS,KACb,OAAOhO,EAAkB,WAAa,CACpC,IAAIM,EAAQ,KACZ,GAAI,CACF,OAAAA,EAAQ,MAAM0N,EAAO,MAAM,KAAI,EAC/B1N,EAAM,YAAY,CAAA,CAAE,EACpBA,EAAM,UAAU,CAAA,CAAE,EACXA,EAAM,eAAe,MAAM,QAAQhE,CAAO,EAAIA,EAAU,CAACA,CAAO,CAAC,CAChF,QAAgB,CAENgE,GAAM,MAAK,CAEd,CACF,CAAA,GACF,CACD,gBAAgBmC,EAAY8F,EAAO,CACjC,GAAI9F,EAAa,GAAKA,GAAc,KAAK,YACvC,MAAO,GAIT,GAAI8F,EAAQ,EACV,MAAO,GAET,IAAI1H,EAAa,KAAK,QAAQ4B,CAAU,EAAE,KAC1C,OAAI,KAAK,aAAa,SAAS5B,CAAU,GAAK,KAAK,YAAY,SAASA,CAAU,GAAK,KAAK,cAAc,SAASA,CAAU,GAAK,CAACA,EAC1H,GAEF,CAAC,KAAK,YAAY4B,CAAU,CACpC,CACD,iBAAiBA,EAAY,CAC3B,IAAIwL,EACJ,OAAQA,EAAwB,KAAK,QAAQxL,CAAU,EAAE,cAAgB,MAAQwL,IAA0B,OAASA,EAAwB,EAC7I,CACD,YAAYtP,EAAG,CACb,IAAIuP,EAAwBC,EAC5B,OAAOxP,IAAMuP,GAA0BC,EAAoB,KAAK,cAAgB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,WAAW,UAAY,MAAQD,IAA2B,OAASA,EAAyB,EAC/O,CACD,cAAe,CACb,MAAO,EACR,CACD,gBAAgB3T,EAAO,CAErB,GAAI,KAAK,YAAc,MAAQ,CAAC6S,EAAU,UAAU7S,CAAK,EACvD,MAAO,GAOT,IAAI6T,EAAiB,KAAK,aAAa7T,EAAM,QAAQ,GAAK,KAAK,aAAaA,EAAM,MAAM,EAMxF,MALI,IAAE6T,GAAkB,KAAK,WAAW,WAAW,SAAW,GAAK7T,EAAM,aAAe,KAAK,WAAW,WAAW,QAAUA,EAAM,WAAa,KAAK,WAAW,WAAW,SAKvKA,EAAM,SAAW,KAAK,qBAAuBA,EAAM,UAAY,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,iBAAmBA,EAAM,QAAU,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,gBAI3M,CACD,iBAAiBA,EAAO,CACtB,OAAO,KAAK,YAAc,MAAQA,EAAM,UAAY,MAAQA,EAAM,QAAU,MAAQA,EAAM,UAAY,KAAK,qBAAuBA,EAAM,SAAW,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,iBAAmBA,EAAM,OAAS,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,eAC1R,CACD,iBAAiBuS,EAAQ,CACvB,OAAOA,EAAO,MAAMvS,GAAS,KAAK,gBAAgBA,CAAK,CAAC,CACzD,CACD,kBAAkBuS,EAAQ,CACxB,OAAOA,EAAO,MAAMvS,GAAS,KAAK,iBAAiBA,CAAK,CAAC,CAC1D,CAKD,mBAAoB,CAClB,OAAO,IAAI6S,EAAU,KAAM,KAAK,oBAAqB,KAAM,KAAK,oBAAsB,KAAK,MAAM,KAAO,CAAC,CAC1G,CAKD,qBAAsB,CACpB,OAAO,IAAIA,EAAU,KAAM,KAAK,oBAAsB,KAAK,MAAM,KAAM,KAAM,KAAK,oBAAsB,KAAK,MAAM,KAAO,KAAK,mBAAqB,CAAC,CACtJ,CASD,gBAAgBzO,EAAGG,EAAG0H,EAAM,CAC1B,IAAI6H,EAAS,KACb,OAAOrO,EAAkB,WAAa,CAEpC,OAAOqO,EAAO,kBAAkB,CAAC,IAAIjB,EAAUzO,EAAGG,EAAGH,EAAGG,CAAC,CAAC,EAAG0H,CAAI,CAClE,CAAA,GACF,CAQD,kBAAkBsG,EAAQtG,EAAM,CAC9B,IAAI8H,EAAS,KACb,OAAOtO,EAAkB,WAAa,CACpC,GAAI,CAACsO,EAAO,iBAAiBxB,CAAM,EACjC,MAAM,IAAI,MAAM,qBAAqB,OAAOA,CAAM,CAAC,EAErD,GAAI,CAEF,IAAIyB,EAAY,IAAI,IAIhBC,EAAgB,CAAA,EACpBpB,EAAU,YAAYN,EAAQ,CAACnO,EAAGG,IAAM,CACtC,IAAIQ,EAASgP,EAAO,QAAQ3P,CAAC,EAE7B,GADA4P,EAAU,IAAIjP,CAAM,EAChBkP,EAAc7P,CAAC,IAAM,OAAW,CAClC,IAAI8P,EAAUH,EAAO,WAAW,UAAUhP,EAAO,KAAMkH,EAAM8H,EAAO,UAAU,QAAQ,EACtFE,EAAc7P,CAAC,EAAI8P,GAAW,KAAOH,EAAO,cAAcG,EAASnP,EAAO,KAAMA,EAAO,IAAI,EAAI,IAChG,CACDgP,EAAO,kBAAkB3P,EAAGG,EAAG0P,EAAc7P,CAAC,CAAC,CACzD,CAAS,EAGD,IAAI+P,EAAmBJ,EAAO,sBAC1BK,EAAgB7B,EAAO,IAAIvS,GAAS6S,EAAU,aAAasB,EAAkBnU,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAAE,IAAIA,IAC1H4M,EAAc5M,CAAK,EACZ6S,EAAU,OAAO7S,EAAO,EAAG,EAAE+T,EAAO,oBAAsBA,EAAO,MAAM,KAAK,EACpF,EACD,GAAIK,EAAc,OAAS,EAAG,CAC5B,IAAIC,EAAa,IAAI,IAAIN,EAAO,iBAAiB,EACjDlB,EAAU,YAAYuB,EAAe,CAAC3I,EAAapF,IAAa,CACzDgO,EAAW,IAAIhO,CAAQ,GAC1BgO,EAAW,IAAIhO,EAAU,CACvB,KAAM,IAAI,GAC1B,CAAe,EAEH,IAAItB,EAASgP,EAAO,QAAQtI,CAAW,EACnCX,EAAMuJ,EAAW,IAAIhO,CAAQ,EACjCuG,EAAc9B,CAAG,EACjB,GAAI,CACF,KAAMC,CACP,EAAGD,EACAwJ,EAAa,IAAI,IAAIvJ,CAAO,EAC5B9M,EAAQ8V,EAAO,WAAW,UAAUhP,EAAO,KAAMkH,EAAM8H,EAAO,UAAU,QAAQ,EAChF9V,GAAS,KACXqW,EAAW,IAAI7I,EAAa,CAC1B,MAAAxN,CAChB,CAAe,EAEDqW,EAAW,OAAO7I,CAAW,EAE3B6I,EAAW,KAAO,EACpBD,EAAW,IAAIhO,EAAU1I,GAAcA,GAAc,GAAImN,CAAG,EAAG,GAAI,CACjE,KAAMwJ,CACP,CAAA,CAAC,EAEFD,EAAW,OAAOhO,CAAQ,CAExC,CAAW,EACD0N,EAAO,eAAiBM,CACzB,CACDN,EAAO,cAAc,IAAI5I,EAAqBvE,EAAc,MAAM,OAAO,CAAC,EAC1E,IAAI2N,EAAiBR,EAAO,oBACxBhB,EAAcR,EAAO,IAAIvS,GAAS6S,EAAU,aAAa0B,EAAgBvU,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAClH,GAAI+S,EAAY,OAAS,EAAG,CAC1B,IAAIyB,EAEAjS,EAAO,MAAMwR,EAAO,SAAShB,EAAY,IAAI/S,GAAS,CACxD,IAAIyU,EAAiBC,EACrB,OAAO,IAAI7B,EAAU,MAAO4B,EAAgEzU,GAAM,YAAc,MAAQyU,IAAoB,OAASA,EAAkB,KAAM,MAAOC,EAA8D1U,GAAM,UAAY,MAAQ0U,IAAkB,OAASA,EAAgB,IAAI,CAC5T,CAAA,CAAC,EACEC,EAAUpS,EAAK,IAAIuI,GAAO,CAE5B,QADIkH,EAAS,CAAA,EACJtS,EAAI,EAAGA,EAAIqU,EAAO,QAAQ,OAAQrU,GAAK,EAC9CsS,EAAO+B,EAAO,QAAQrU,CAAC,EAAE,IAAI,EAAIoL,EAAIpL,CAAC,EAExC,OAAAsU,EAAU,QAAQjP,GAAU,CAC1BiN,EAAOjN,EAAO,IAAI,EAAIgP,EAAO,WAAW,UAAUhP,EAAO,KAAMkH,EAAM8H,EAAO,UAAU,QAAQ,CAC5G,CAAa,EACM/B,CACnB,CAAW,EACGkB,EAAS,MAAOsB,EAAoBT,EAAO,cAAgB,MAAQS,IAAsB,OAAS,OAASA,EAAkB,QAAQG,CAAO,EAChJlW,EAAI,MAAM,qBAAsB8T,EAAQ,IAAKtG,EAAM,oBAAqB8G,EAAa,SAAUG,CAAM,CACtG,CAKDL,EAAU,YAAYN,EAAQ,CAACnO,EAAGG,IAAM,CACtC,IAAIqQ,EAAWX,EAAc7P,CAAC,EAC9BwI,EAAcgI,CAAQ,EACtBb,EAAO,oBAAoB3P,EAAGG,EAAGqQ,CAAQ,CACnD,CAAS,CACF,OAAQ/O,EAAK,CACZpH,EAAI,MAAM,uBAAwB8T,EAAQtG,EAAMpG,CAAG,CAC3D,QAAgB,CACRgN,EAAU,YAAYN,EAAQ,CAACnO,EAAGG,IAAM,CACtCwP,EAAO,kBAAkB3P,EAAGG,CAAC,CACvC,CAAS,CACF,CACF,CAAA,GACF,CACD,WAAY,CACV,IAAIsQ,EAAc,UAChBC,EAAS,KACX,OAAOrP,EAAkB,WAAa,CACpC,IAAIsP,EAAQF,EAAY,OAAS,GAAKA,EAAY,CAAC,IAAM,OAAYA,EAAY,CAAC,EAAI,CAAA,EAEtF,GADApW,EAAI,MAAM,aAAcsW,EAAO,GAAG,EAC9B,CAACA,EAAM,MAAMC,GAAQ,CACvB,IAAIC,EAAcC,EAClB,OAAOJ,EAAO,gBAAgBjC,EAAU,UAAUoC,EAAeD,EAAK,UAAY,MAAQC,IAAiB,OAASA,EAAeD,EAAK,GAAIE,EAAYF,EAAK,OAAS,MAAQE,IAAc,OAASA,EAAYF,EAAK,CAAC,CAAC,CAChO,CAAO,EACC,MAAM,IAAI,MAAM,qBAAqB,OAAOD,CAAK,CAAC,EAEpD,GAAI,CACF,IAAIV,EAAa,IAAI,IAAIS,EAAO,iBAAiB,EAGjDC,EAAM,QAAQC,GAAQ,CACpB,IAAIG,EAAeC,EACf,CACF,KAAAnJ,CACD,EAAG+I,EACA5Q,GAAK+Q,EAAgBH,EAAK,UAAY,MAAQG,IAAkB,OAASA,EAAgBH,EAAK,EAC9FzQ,GAAK6Q,EAAaJ,EAAK,OAAS,MAAQI,IAAe,OAASA,EAAaJ,EAAK,EAClFjQ,EAAS+P,EAAO,QAAQ1Q,CAAC,EACzBnG,EAAQ6W,EAAO,WAAW,UAAU/P,EAAO,KAAMkH,EAAM6I,EAAO,UAAU,QAAQ,EAChFb,EAAgBhW,GAAS,KAAO6W,EAAO,cAAc7W,EAAO8G,EAAO,KAAMA,EAAO,IAAI,EAAI,KAC5F+P,EAAO,kBAAkB1Q,EAAGG,EAAG0P,CAAa,EAG5C,IAAIxH,EAAaqI,EAAO,WAAWvQ,CAAC,EACpC,GAAIkI,GAAc,KAAM,CACjB4H,EAAW,IAAI5H,CAAU,GAC5B4H,EAAW,IAAI5H,EAAY,CACzB,KAAM,IAAI,GAC1B,CAAe,EAEH,IAAI4I,EAAQhB,EAAW,IAAI5H,CAAU,EACrCG,EAAcyI,CAAK,EACnB,GAAI,CACF,KAAMtK,CACP,EAAGsK,EACAf,EAAa,IAAI,IAAIvJ,CAAO,EAC5B9M,GAAS,KACXqW,EAAW,IAAIlQ,EAAG,CAChB,MAAAnG,CAChB,CAAe,EAEDqW,EAAW,OAAOlQ,CAAC,EAEjBkQ,EAAW,KAAO,EACpBD,EAAW,IAAI5H,EAAY9O,GAAcA,GAAc,GAAI0X,CAAK,EAAG,GAAI,CACrE,KAAMf,CACP,CAAA,CAAC,EAEFD,EAAW,OAAO5H,CAAU,CAE/B,CACX,CAAS,EACDqI,EAAO,eAAiBT,EAGxBS,EAAO,cAAc,IAAI3J,EAAqBvE,EAAc,MAAM,OAAO,CAAC,EAG1E,IAAI0O,EAAaP,EAAM,OAAO,CAACQ,EAAQP,IAAS,CAC9C,IAAIQ,EAAYC,EACZlR,GAAKiR,EAAaR,EAAK,OAAS,MAAQQ,IAAe,OAASA,EAAaR,EAAK,EACtF,OAAKO,EAAO,IAAIhR,CAAC,GACfgR,EAAO,IAAIhR,EAAG,CAAA,CAAE,GAEjBkR,EAAcF,EAAO,IAAIhR,CAAC,KAAO,MAAQkR,IAAgB,QAAkBA,EAAY,KAAKT,CAAI,EAC1FO,CACjB,EAAW,IAAI,GAAK,EACRhD,EAASM,EAAU,YAAYkC,EAAM,IAAIC,GAAQ,CACnD,IAAIU,EAAeC,EACnB,OAAO9C,EAAU,UAAU6C,EAAgBV,EAAK,UAAY,MAAQU,IAAkB,OAASA,EAAgBV,EAAK,GAAIW,EAAaX,EAAK,OAAS,MAAQW,IAAe,OAASA,EAAaX,EAAK,CAAC,CACvM,CAAA,CAAC,EACET,EAAiBO,EAAO,oBACxB/B,EAAcR,EAAO,IAAIvS,GAAS6S,EAAU,aAAa0B,EAAgBvU,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAClH,GAAI+S,EAAY,OAAS,EAAG,CAC1B,IAAI6C,EAEArT,EAAO,MAAMuS,EAAO,SAAS/B,EAAY,IAAI/S,IAC/C4M,EAAc5M,CAAK,EACZ,IAAI6S,EAAU,KAAM7S,EAAM,SAAU,KAAMA,EAAM,MAAM,EAC9D,CAAC,EACE2U,EAAUpS,EAAK,IAAI,CAACuI,EAAK+K,IAAc,CAGzC,QAFIxP,EAAW,KACXyL,EAAI+D,EACChY,EAAI,EAAGA,EAAIkV,EAAY,OAAQlV,GAAK,EAAG,CAC9C,IAAImC,EAAQ+S,EAAYlV,CAAC,EACzB+O,EAAc5M,CAAK,EACnB,IAAI8V,EAAgBjD,EAAU,SAAS,CAAC7S,CAAK,CAAC,EAC9C,GAAI8R,EAAIgE,EAAe,CACrBlJ,EAAc5M,EAAM,QAAQ,EAC5BqG,EAAWrG,EAAM,SAAW8R,EAC5B,KACD,CACDA,GAAKgE,CACN,CAED,QADI9D,EAAS,CAAA,EACJ,EAAI,EAAG,EAAI8C,EAAO,QAAQ,OAAQ,GAAK,EAC9C9C,EAAO8C,EAAO,QAAQ,CAAC,EAAE,IAAI,EAAIhK,EAAI,CAAC,EAExC8B,EAAcvG,CAAQ,EACtB,IAAI0P,EAAWT,EAAW,IAAIjP,CAAQ,EACtC,OACE0P,GAAS,QAAQf,GAAQ,CACvB,IAAIgB,EACAjR,EAAS+P,EAAO,SAASkB,EAAgBhB,EAAK,UAAY,MAAQgB,IAAkB,OAASA,EAAgBhB,EAAK,CAAC,EACvHhD,EAAOjN,EAAO,IAAI,EAAI+P,EAAO,WAAW,UAAU/P,EAAO,KAAMiQ,EAAK,KAAMF,EAAO,UAAU,QAAQ,CACnH,CAAe,EAEI9C,CACnB,CAAW,EACDvT,EAAI,KAAK,gCAAiCsU,CAAW,EACrD,IAAIG,EAAS,MAAO0C,EAAoBd,EAAO,cAAgB,MAAQc,IAAsB,OAAS,OAASA,EAAkB,QAAQjB,CAAO,EAChJlW,EAAI,KAAK,4BAA6BsU,EAAa,UAAWG,CAAM,CACrE,CAMD6B,EAAM,QAAQC,GAAQ,CACpB,IAAIiB,EAAeC,EACf,CACF,KAAAjK,CACD,EAAG+I,EACA5Q,GAAK6R,EAAgBjB,EAAK,UAAY,MAAQiB,IAAkB,OAASA,EAAgBjB,EAAK,EAC9FzQ,GAAK2R,EAAalB,EAAK,OAAS,MAAQkB,IAAe,OAASA,EAAalB,EAAK,EAClFjQ,EAAS+P,EAAO,QAAQ1Q,CAAC,EACzBnG,EAAQ6W,EAAO,WAAW,UAAU/P,EAAO,KAAMkH,EAAM6I,EAAO,UAAU,QAAQ,EAChFb,EAAgBhW,GAAS,KAAO6W,EAAO,cAAc7W,EAAO8G,EAAO,KAAMA,EAAO,IAAI,EAAI,KAC5F+P,EAAO,oBAAoB1Q,EAAGG,EAAG0P,CAAa,CACxD,CAAS,CACT,QAAgB,CACRc,EAAM,QAAQC,GAAQ,CACpBF,EAAO,kBAAkBE,EAAK,OAAQA,EAAK,GAAG,CACxD,CAAS,CACF,CACF,CAAA,GACF,CACD,eAAgB,CACd,IAAImB,EAAS,KACb,OAAO1Q,EAAkB,WAAa,CACpC,GAAI0Q,EAAO,kBAAkB,MAAQ,EACnC,MAAM,IAAI,MAAM,8BAA8B,EAEhD,GAAI,CACF,IAAIC,EAAmBC,EAAuBC,EAC9CH,EAAO,iBAAmB,GAC1B,IAAIxB,EAAU,CAAA,EACdwB,EAAO,kBAAkB,QAAQrL,GAAO,CACtC,IAAIkH,EAAS,CAAA,EACblH,EAAI,KAAK,QAAQ,CAACyL,EAAO9K,IAAgB,CACvC,GAAI,CACF,MAAAxN,CACD,EAAGsY,EACAxR,EAASoR,EAAO,QAAQ1K,CAAW,EACvCuG,EAAOjN,EAAO,IAAI,EAAI9G,CAClC,CAAW,EACD0W,EAAQ,KAAK3C,CAAM,CAC7B,CAAS,EACD,IAAIkB,EAAS,MAAOkD,EAAoBD,EAAO,cAAgB,MAAQC,IAAsB,OAAS,OAASA,EAAkB,QAAQzB,CAAO,EAChJlW,EAAI,MAAM,kBAAmB0X,EAAO,kBAAmB,SAAUjD,CAAM,EACvEiD,EAAO,kBAAoB,IAAI,IAC/BA,EAAO,mBAAqB,KAAK,IAAI,IAAKE,GAAyBC,EAAkBH,EAAO,YAAc,MAAQG,IAAoB,OAAS,OAASA,EAAgB,UAAY,MAAQD,IAA0B,OAASA,EAAwB,GAAKF,EAAO,MAAM,IAAI,EAC7QA,EAAO,oBAAsB,GAC7BA,EAAO,cAAc,IAAIhL,EAAqBvE,EAAc,MAAM,oBAAoB,CAAC,CAC/F,QAAgB,CACRuP,EAAO,iBAAmB,EAC3B,CACF,CAAA,GACF,CACD,iBAAiB/R,EAAGG,EAAG,CACrB,OAAO,KAAK,iBAAiBH,EAAGG,CAAC,CAClC,CACD,OAAOgO,EAAQ,CACb,OAAO9M,EAAkB,WAAa,CACpC,MAAM,IAAI,MAAM,wBAAwB,CACzC,CAAA,GACF,CACD,eAAerB,EAAGG,EAAGtG,EAAO,CAC1B,GAAI,CACF,IAAIuY,EAAW,KAAK,QAAQpS,CAAC,EAC7B,YAAK,WAAW,UAAUoS,EAAS,KAAMvY,EAAO,KAAK,UAAU,QAAQ,EAChE,EACR,MAAW,CACV,MAAO,EACR,CACF,CACH,CACAF,EAAgB4I,GAA4B,mBAAoB,CAAC,EACjE,MAAA8P,GAAe9P,GC/iDf,SAAS1B,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,EAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAAStH,EAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CASzX,IAAII,EAAMC,GAAI,OAAO,oBAAoB,EAMzC,MAAMgY,WAA2B/P,EAA2B,CAO1D,YAAY9H,EAAIkH,EAAO,CACrB,IAAIlG,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAI4H,EAAU5I,CAAE,EAChG6I,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAM7I,EAAIkH,EAAOlG,EAAW6H,CAAU,EACtC3J,EAAgB,KAAM,oBAAqB,MAAM,EACjDA,EAAgB,KAAM,mBAAoB,MAAM,EAChDA,EAAgB,KAAM,mBAAoB,MAAM,EAChDA,EAAgB,KAAM,iBAAkB,CAAA,CAAE,EAC1CA,EAAgB,KAAM,0BAA2B4B,EAAQgX,GAA2BA,GAAmG,CAAA,CAAE,CAAC,EAC1L5Y,EAAgB,KAAM,yBAA0B4B,EAAQiX,GAA0BA,GAAgG,CAAA,CAAE,CAAC,EACrL7Y,EAAgB,KAAM,2BAA4B4B,EAAQ,CAACkX,EAA0BC,IAAsB,CACzG,IAAI3a,EACJ,OAAQA,EAAO2a,GAAiFD,KAA8B,MAAQ1a,IAAS,OAASA,EAAO,CAAA,CAChK,CAAA,CAAC,EACF4B,EAAgB,KAAM,+BAAgC4B,EAAQoC,GAAW,IAAI,IAAIA,EAAQ,IAAI,CAACgV,EAAG7E,IAAUA,CAAK,CAAC,CAAC,CAAC,EACnHnU,EAAgB,KAAM,4BAA6B4B,EAAQoC,GAAWA,EAAQ,OAAOgD,GAAUA,EAAO,iBAAiB,CAAC,CAAC,EACzH,KAAK,iBAAmB,GACxB,KAAK,iBAAmB,GACxB,KAAK,eAAiBgB,EAAM,MAC7B,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,QAAU,IAC7B,CACD,IAAI,6BAA8B,CAChC,OAAO,KAAK,MAAM,qBAAuB,IAC1C,CACD,IAAI,wBAAyB,CAC3B,OAAO,KAAK,MAAM,gBAAkB,MAAQ,KAAK,MAAM,MAAQ,IAChE,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,QAAU,IAC7B,CACD,IAAI,2BAA4B,CAC9B,OAAO,KAAK,MAAM,gBAAkB,IACrC,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,oBAAsB,IACzC,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,oBAAsB,IACzC,CACD,IAAI,cAAe,CACjB,IAAIwB,EACJ,OAAO,KAAK,yBAAyBA,EAAoB,KAAK,eAAiB,MAAQA,IAAsB,OAAS,OAASA,EAAkB,YAAY,CAC9J,CACD,IAAI,aAAc,CAChB,IAAIkH,EACJ,OAAO,KAAK,wBAAwBA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAAS,OAASA,EAAmB,WAAW,CAC/J,CACD,IAAI,eAAgB,CAClB,IAAIC,EACJ,OAAO,KAAK,0BAA0BA,EAAqB,KAAK,eAAiB,MAAQA,IAAuB,OAAS,OAASA,EAAmB,cAAe,KAAK,iBAAiB,CAC3L,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,yBAA0B,CAC5B,OAAO,KAAK,cAAc,MAC3B,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,gBACb,CACD,IAAI,cAAcxH,EAAe,CAE/B,GADAzI,EAAI,OAAO,oBAAqByI,EAAe,KAAK,iBAAkBA,IAAkB,KAAK,gBAAgB,EACzG,KAAK,iBAAiB,SAAW,GAAKA,EAAc,SAAW,EAAG,CACpEzI,EAAI,MAAM,oCAAoC,EAC9C,KAAK,iBAAmByI,EACxB,MACD,CACD,GAAI,KAAK,mBAAqBA,EAAe,CAC3CzI,EAAI,MAAM,2BAA2B,EACrC,MACD,CACD,KAAK,kBAAiB,EACtB,KAAK,iBAAmByI,EACxB,KAAK,MAAM,mBAAmB,CAAC,GAAGA,EAAe,GAAG,KAAK,aAAa,CAAC,EACvE,KAAK,cAAa,CACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,gBACb,CACD,IAAI,cAAcC,EAAe,CAE/B,GADA1I,EAAI,OAAO,oBAAqB0I,EAAe,KAAK,iBAAkBA,IAAkB,KAAK,gBAAgB,EACzG,KAAK,iBAAiB,SAAW,GAAKA,EAAc,SAAW,EAAG,CACpE1I,EAAI,MAAM,oCAAoC,EAC9C,KAAK,iBAAmB0I,EACxB,MACD,CACD,GAAI,KAAK,mBAAqBA,EAAe,CAC3C1I,EAAI,MAAM,2BAA2B,EACrC,MACD,CACD,KAAK,kBAAiB,EACtB,KAAK,iBAAmB0I,EACxB,KAAK,MAAM,mBAAmB,CAAC,GAAG,KAAK,cAAe,GAAGA,CAAa,CAAC,EACvE,KAAK,cAAa,CACnB,CACD,oBAAoBpF,EAAS,CAC3B,KAAK,kBAAoBA,EACzB,KAAK,cAAc,IAAIoJ,EAAqBvE,EAAc,MAAM,cAAe,CAC7E,OAAQ,KAAK,KACd,CAAA,CAAC,CACH,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,0BAA0B,KAAK,OAAO,CACnD,CACD,oBAAqB,CACnB,IAAI5H,EAAQ,KACZ,OAAOyG,EAAkB,WAAa,CACpC,OAAOzG,EAAM,YAAYA,EAAM,gBAAgB,CAChD,CAAA,GACF,CACD,sBAAuB,CACrB,IAAIuB,EAAS,KACb,OAAOkF,EAAkB,WAAa,CACpC,IAAI,EAAI,MAAMlF,EAAO,MAAM,KAAI,EAC/B,SAAE,YAAY,CAAA,CAAE,EACT,CACR,CAAA,GACF,CACD,eAAeyW,EAAY,CACzB,IAAInS,EAAS,KACb,OAAOY,EAAkB,WAAa,CACpChH,EAAI,MAAM,yCAA0CuY,CAAU,EAE9D,QADIC,EAAmB,CAAA,EACd,EAAI,EAAG,EAAIpS,EAAO,iBAAiB,OAAQ,GAAK,EAAG,CAC1D,IAAIqS,EAAYF,EAAW,CAAC,EACxBG,EAAkBtS,EAAO,iBAAiB,CAAC,EAC3CuS,EAAkBvS,EAAO,WAAW,mBAAmBsS,EAAgB,KAAMD,CAAS,EAC1FD,EAAiB,KAAKE,EAAgB,OAAQ,EAAC,GAAGC,CAAe,CAAC,CACnE,CACD,IAAIC,EAAI,MAAMxS,EAAO,MAAM,KAAI,EAC/B,OAAAwS,EAAE,YAAY,CAAC,GAAGxS,EAAO,eAAgB,GAAGoS,CAAgB,CAAC,EACtDI,CACR,CAAA,GACF,CACD,IAAI,OAAOlF,EAAQ,CACjB,KAAK,kBAAiB,EACtB,KAAK,MAAM,YAAY,CAAC,GAAG,KAAK,eAAgB,GAAGA,CAAM,CAAC,EAC1D,KAAK,cAAa,CACnB,CACD,IAAI,aAAaE,EAAc,CAE7B,GADA5T,EAAI,MAAM,mBAAoB4T,CAAY,EACtCA,IAAiB,KAAK,OAU1B,IANA,KAAK,OAASA,EACd,KAAK,oBAAsB,GACvB,KAAK,oBAAsB,MAC7B,KAAK,mBAAmB,SAE1B,KAAK,eAAe,IAAI,EACpBA,GAAgB,KAAM,CACxB,KAAK,cAAc,IAAIlH,EAAqBvE,EAAc,MAAM,OAAO,CAAC,EACxE,MACD,CACD,KAAK,mBAAqB0L,GAAa,eAAe,KAAK,MAAM,eAAeD,CAAY,EAAGtM,GAASA,EAAM,MAAO,CAAA,EACrH,KAAK,mBAAmB,KAAKmF,GAAe,CAC1C,KAAK,mBAAqB,KAC1B,KAAK,eAAeA,CAAW,CACrC,CAAK,EAAE,MAAMrF,GAAO,CACVyM,GAAa,WAAWzM,CAAG,IAG/BpH,EAAI,MAAM,iCAAkCoH,CAAG,EAC/C,KAAK,mBAAqB,KAC1B,KAAK,cAAc,IAAIsF,EAAqBvE,EAAc,MAAM,eAAgB,CAC9E,OAAQf,CACT,CAAA,CAAC,EACR,CAAK,EACF,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,qBAAsB,CACxB,OAAO,KAAK,MAAM,eAAiB,KAAK,sBACzC,CACD,aAAa4F,EAAa,CACxB,OAAO,KAAK,6BAA6B,KAAK,OAAO,EAAE,IAAIA,CAAW,CACvE,CACD,QAAS,CACP,IAAIgI,EAAS,KACb,OAAOhO,EAAkB,WAAa,CACpC,OAAOgO,EAAO,MAAM,QACrB,CAAA,GACF,CACD,iBAAiB1O,EAAQ,CACvB,OAAO,KAAK,MAAM,oBAAoBA,CAAM,CAC7C,CACD,gBAAgBmD,EAAY,CAC1B,IAAI5B,EAAa,KAAK,QAAQ4B,CAAU,EAAE,KAC1C,OAAI,KAAK,aAAa,SAAS5B,CAAU,GAAK,KAAK,YAAY,SAASA,CAAU,GAAK,KAAK,cAAc,SAASA,CAAU,EACpH,GAEF,CAAC,KAAK,YAAY4B,CAAU,CACpC,CACD,eAAeA,EAAY,CACzB,OAAO,KAAK,cAAc,SAAS,KAAK,QAAQA,CAAU,EAAE,IAAI,CACjE,CACD,OAAOqK,EAAQ,CACb,IAAI+E,EAA+B,IAAM,MAAM,eAC7CC,EAA+BnL,GAAU,MAAM,eAAiBA,EAChE0H,EAAS,KACX,OAAOrO,EAAkB,WAAa,CACpC,IAAI+R,EACJ,GAAI,CAAC1D,EAAO,kBAAkBvB,CAAM,EAClC,MAAM,IAAI,MAAM,sBAAsB,OAAOA,CAAM,CAAC,EAEtD3F,EAAckH,EAAO,UAAU,EAC/B,GAAI,CACF,WAAA2D,CACR,EAAU3D,EAAO,WACX,GAAI2D,EAAW,SAAW,EACxB,MAAM,IAAI,MAAM,kCAAkC,EAEpD,IAAItD,EAAmBL,EAAO,sBAC1BM,EAAgB7B,EAAO,IAAIvS,GAAS6S,EAAU,aAAasB,EAAkBnU,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAAE,IAAIA,IAC1H4M,EAAc5M,CAAK,EACZ6S,EAAU,OAAO7S,EAAO,EAAG,EAAE8T,EAAO,oBAAsBA,EAAO,MAAM,KAAK,EACpF,EACD,GAAIM,EAAc,OAAS,EAAG,CAE5B,QADIC,EAAa,IAAI,IAAIiD,EAA8B,CAAA,EAC9CzZ,EAAI,EAAGA,EAAIuW,EAAc,OAAQvW,GAAK,EAAG,CAChD,IAAI6Z,EAAetD,EAAcvW,CAAC,EAClC+O,EAAc8K,EAAa,QAAQ,EACnC9K,EAAc8K,EAAa,MAAM,EACjC,QAAS5F,EAAI4F,EAAa,SAAU5F,GAAK4F,EAAa,OAAQ5F,GAAK,EACjEuC,EAAW,OAAOvC,CAAC,CAEtB,CACDyF,EAA6BlD,CAAU,EACvCP,EAAO,oBAAsB,GAC7BA,EAAO,cAAc,IAAI3I,EAAqBvE,EAAc,MAAM,oBAAoB,CAAC,EACvFkN,EAAO,cAAc,IAAI3I,EAAqBvE,EAAc,MAAM,OAAO,CAAC,CAC3E,CACD,IAAI2N,EAAiBT,EAAO,oBACxBf,EAAcR,EAAO,IAAIvS,GAAS6S,EAAU,aAAa0B,EAAgBvU,CAAK,CAAC,EAAE,OAAOA,GAASA,GAAS,IAAI,EAClH,GAAI,EAAA+S,EAAY,QAAU,GAG1B,IAAI,CAACxQ,EAAMoV,CAAW,EAAI,MAAM,QAAQ,IAAI,CAE5C7D,EAAO,SAASf,EAAY,IAAI/S,IAC9B4M,EAAc5M,CAAK,EAEZyX,EAAW,IAAIG,GAAa,CACjC,IAAIC,EAAW/D,EAAO,qBAAqB8D,EAAU,IAAI,EACzD,GAAIC,GAAY,KACd,MAAM,IAAI,MAAM,cAAc,OAAOD,EAAU,KAAM,YAAY,CAAC,EAEpE,OAAO,IAAI/E,EAAUgF,EAAU7X,EAAM,SAAU6X,EAAU7X,EAAM,MAAM,CAC/E,CAAS,EACF,EAAE,KAAI,CAAE,EAAG8T,EAAO,MAAM,KAAM,CAAA,CAAC,EAG5BgE,EAAUvV,EAAK,IAAIuI,GAAO,CAE5B,QADIiN,EAAgB,CAAA,EACX,EAAI,EAAG,EAAIN,EAAW,OAAQ,GAAK,EAAG,CAC7C,IAAI1S,EAAS0S,EAAW,CAAC,EACrBxZ,EAAQ6M,EAAI,CAAC,EACbkN,EAAclE,EAAO,WAAW,mBAAmB/O,EAAO,KAAM9G,CAAK,EACrEga,EAAUlT,EAAO,OAAQ,EAAC,GAAGiT,CAAW,EAC5CD,EAAc,KAAKE,CAAO,CAC3B,CACD,OAAOF,EAAc,OAAO,CAACG,EAAKC,IAAS,CACzC,IAAIC,EACJ,OAAQA,EAAqDF,GAAI,IAAIC,CAAI,KAAO,MAAQC,IAAa,OAASA,EAAWD,CACnI,CAAS,CACT,CAAO,EACGhG,EAAS2F,EAAQ,OAAO,CAACI,EAAKC,IAAS,CACzC,IAAIE,EACJ,OAAQA,EAAoDH,GAAI,GAAGC,CAAI,KAAO,MAAQE,IAAY,OAASA,EAAUF,CAC7H,CAAO,EACDR,EAAY,YAAY,CAACxF,CAAM,CAAC,EAChC,MAAOqF,EAAoB1D,EAAO,cAAgB,MAAQ0D,IAAsB,OAAS,OAASA,EAAkB,YAAYG,CAAW,EAC3IA,EAAY,MAAK,EAClB,CAAA,GACF,CACD,QAAQ9Q,EAAU9B,EAAQ+B,EAAW7I,EAAO8I,EAAaC,EAAUC,EAAa,CAC9E,IAAI8M,EAAS,KACb,OAAOtO,EAAkB,WAAa,CACpC,OAAOsO,EAAO,MAAM,QAAQlN,EAAU9B,EAAQ+B,EAAW7I,EAAO8I,EAAaC,EAAUC,CAAW,CACnG,CAAA,GACF,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,MAAM,SAAW,IAC9B,CACH,CACA,MAAAqR,GAAe5B,GC9Tf,SAAS3Y,GAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAMzX,MAAMka,WAA2B3R,CAAc,CAC7C,YAAY/H,EAAI,CACd,IAAIgB,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAI4H,EAAU5I,CAAE,EACpG,MAAMA,CAAE,EACRd,GAAgB,KAAM,iBAAkB,MAAM,EAC9C,KAAK,eAAiB8B,CACvB,CACD,IAAI,UAAW,CACb,MAAO,EACR,CACD,IAAI,aAAc,CAChB,MAAO,EACR,CACD,YAAYkF,EAAQ+F,EAAK,CACvB,MAAO,EACR,CACD,oBAAoB/F,EAAQiJ,EAAO,CAElC,CACD,IAAI,SAAU,CACZ,OAAOwK,CACR,CACD,qBAAqB3U,EAAM,CAE1B,CACD,IAAI,qBAAsB,CACxB,OAAO2U,CACR,CACD,IAAI,kBAAmB,CACrB,OAAOA,CACR,CACD,IAAI,2BAA4B,CAC9B,OAAOA,CACR,CACD,IAAI,gBAAiB,CACnB,OAAOA,CACR,CACD,cAAczT,EAAQ+F,EAAK,CAE1B,CACD,aAAa/F,EAAQ+F,EAAK,CAEzB,CACD,IAAI,QAAS,CACX,OAAO0N,CACR,CACD,IAAI,OAAOrG,EAAQ,CAElB,CACD,IAAI,WAAY,CACd,OAAOqG,CACR,CACD,IAAI,UAAUtB,EAAW,CAExB,CACD,IAAI,kBAAmB,CACrB,OAAOsB,CACR,CACD,IAAI,WAAY,CACd,OAAO,KAAK,cACb,CACD,IAAI,UAAU3Y,EAAW,CACvB,KAAK,eAAiBA,CACvB,CACD,cAAc5B,EAAO2B,EAAY0G,EAAY,CAC3C,MAAO,EACR,CACD,IAAI,MAAO,CACT,OAAOkS,CACR,CACD,IAAI,KAAKpG,EAAM,CAEd,CACD,IAAI,eAAgB,CAClB,OAAOoG,CACR,CACD,IAAI,cAActR,EAAe,CAEhC,CACD,IAAI,eAAgB,CAClB,OAAOsR,CACR,CACD,oBAAoBzW,EAAS,CAE5B,CACD,IAAI,cAAe,CACjB,OAAO,IACR,CACD,IAAI,aAAaqF,EAAc,CAE9B,CACD,IAAI,cAAe,CACjB,OAAO,IACR,CACD,IAAI,aAAaiL,EAAc,CAE9B,CACD,QAAS,CACP,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,iBAAiBtN,EAAQ,CACvB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,IAAI,uBAAwB,CAC1B,OAAOyT,CACR,CACD,IAAI,sBAAsBC,EAAuB,CAEhD,CACD,IAAI,gBAAiB,CACnB,OAAOC,EACR,CACD,IAAI,eAAe7N,EAAK,CAEvB,CACD,IAAI,iBAAkB,CACpB,MAAO,EACR,CACD,IAAI,gBAAgBa,EAAO,CAE1B,CACD,IAAI,mBAAoB,CACtB,OAAOgN,EACR,CACD,eAAgB,CACd,OAAO,QAAQ,SAChB,CACD,YAAYxO,EAAKC,EAAQpI,EAAS,CAEjC,CACD,SAASwQ,EAAQ,CACf,OAAO,QAAQ,QAAQ,CAAA,CAAE,CAC1B,CACD,aAAaA,EAAQE,EAAgBC,EAAa,CAChD,OAAO,QAAQ,QAAQ,EAAE,CAC1B,CACD,YAAY3Q,EAAS,CACnB,MAAM,IAAI,MAAM,yBAAyB,CAC1C,CACD,OAAOwQ,EAAQ,CACb,OAAO,QAAQ,SAChB,CACD,QAAQ1L,EAAU9B,EAAQ+B,EAAW7I,EAAO8I,EAAaC,EAAUC,EAAa,CAC9E,OAAO,QAAQ,QAAQ,CAAC,CACzB,CACD,IAAI,oBAAqB,CACvB,OAAOuR,CACR,CACD,IAAI,mBAAmB5J,EAAQ,CAE9B,CACD,IAAI,sBAAuB,CACzB,OAAO8J,EACR,CACD,2BAA2BxQ,EAAY8F,EAAO,CAE7C,CACH,CACA,MAAA2K,GAAeJ,GCtKf,SAAStT,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAAStH,GAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAMzX,MAAMua,WAAsCL,EAAmB,CAM7D,YAAY1Z,EAAIga,EAAkB,CAChC,IAAIhZ,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAI4H,EAAU5I,CAAE,EACpG,MAAMA,EAAIgB,CAAS,EACnB9B,GAAgB,KAAM,mBAAoB,MAAM,EAChD,KAAK,iBAAmB8a,CACzB,CACD,IAAI,qBAAsB,CACxB,MAAO,EACR,CACD,IAAI,cAAe,CACjB,MAAO,EACR,CACD,cAAc5a,EAAO2B,EAAY0G,EAAY,CAC3C,MAAO,EACR,CACD,OAAQ,CACN,KAAK,iBAAiB,OACvB,CACD,IAAI,SAAU,CACZ,OAAO,KAAK,iBAAiB,OAC9B,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,iBAAiB,UAC9B,CACD,oBAAqB,CACnB,IAAItH,EAAQ,KACZ,OAAOyG,GAAkB,WAAa,CACpC,OAAOzG,EAAM,iBAAiB,aAC/B,CAAA,GACF,CACD,sBAAuB,CACrB,IAAIuB,EAAS,KACb,OAAOkF,GAAkB,WAAa,CACpC,OAAOlF,EAAO,iBAAiB,gBAChC,CAAA,GACF,CACD,eAAeyW,EAAY,CACzB,IAAInS,EAAS,KACb,OAAOY,GAAkB,WAAa,CACpC,GAAI,CACF,IAAIM,EAAQ,MAAMlB,EAAO,iBAAiB,SAASmS,CAAU,EAC7D,GAAIjR,GAAS,KAEX,MAAM,IAAI+S,GAAsB,qBAAqB,EAEvD,OAAO/S,CACR,OAAQgT,EAAG,CACV,MAAKC,GAAwBD,CAAC,EAGtBA,EAFA,IAAID,GAAsB,8BAA8B,CAIjE,CACF,CAAA,GACF,CACH,CACA,MAAAG,GAAeL,GCxEf,SAAS3T,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAAShI,GAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAW,CAAE,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAE,CAAG,OAAOD,CAAO,CACrV,SAASG,GAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAE,EAAEA,EAAI,EAAIR,GAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUrB,EAAK,CAAEsB,GAAgBH,EAAQnB,EAAKqB,EAAOrB,CAAG,CAAC,CAAI,CAAA,EAAI,OAAO,0BAA4B,OAAO,iBAAiBmB,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,GAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUrB,EAAK,CAAE,OAAO,eAAemB,EAAQnB,EAAK,OAAO,yBAAyBqB,EAAQrB,CAAG,CAAC,CAAE,CAAE,CAAI,CAAC,OAAOmB,CAAS,CAC1f,SAASG,GAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAQzX,IAAII,GAAMC,GAAI,OAAO,wBAAwB,EAC7C,MAAMwa,WAA+BvS,EAA2B,CAG9D,YAAY9H,EAAIkH,EAAO,CACrB,IAAIlG,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAI4H,EAAU5I,CAAE,EAChG6I,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAM7I,EAAIkH,EAAOlG,EAAW6H,CAAU,EACtC3J,GAAgB,KAAM,iBAAkB,MAAM,EAC9CA,GAAgB,KAAM,mBAAoB4B,EAAQ,CAACwZ,EAAgBtP,IAAiB,CAAC,GAAGsP,EAAgB,GAAGtP,CAAY,CAAC,CAAC,EACzH9L,GAAgB,KAAM,wBAAyB4B,EAAQ,CAACwZ,EAAgBC,IAAwB,CAAC,GAAGD,EAAgB,GAAGC,CAAmB,CAAC,CAAC,EAC5Irb,GAAgB,KAAM,+BAAgC4B,EAAQ,CAACoC,EAASsX,EAAgBF,IAAmB,IAAI,KAAsEE,GAAe,OAAU,EAAIA,EAAiBtX,GAAS,OAAOrC,GAAK,CAACyZ,EAAe,SAASzZ,CAAC,CAAC,EAAE,IAAI4Z,GAAMvX,EAAQ,UAAUwX,GAAMD,EAAG,OAASC,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAC9Uxb,GAAgB,KAAM,4BAA6B4B,EAAQ0Z,GAAkB,IAAI,IAAIA,EAAe,IAAIC,GAAM,KAAK,QAAQ,UAAUC,GAAMD,EAAG,OAASC,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAClK,KAAK,eAAiB,CAAC,CACrB,KAAM,kBACN,YAAa,QACb,KAAMtO,EAAW,SAAS,OAC1B,gBAAiBA,EAAW,SAAS,OACrC,kBAAmB,GACnB,WAAY,GACZ,QAAS,GACT,YAAa,aACb,OAAQ,IAAM,CACZ,MAAM,IAAI,MAAM,2CAA2C,CAC5D,EACD,KAAM,IAAM,CACV,MAAM,IAAI,MAAM,qCAAqC,CACtD,EACD,YAAa,IAAM,CACjB,MAAM,IAAI,MAAM,0CAA0C,CAC3D,EACD,eAAgB,IAAM,CACpB,MAAM,IAAI,MAAM,0CAA0C,CAC3D,CACP,CAAK,CACF,CACD,sBAAsBZ,EAAaC,EAAgBvI,EAAS,CAC1D,IAAIyX,EAAkB,CAGtB,GAAG,KAAK,MAAM,eAAgB,GAAGzX,EAAQ,OAAOrC,GAAK,CAAC,KAAK,eAAe,SAASA,CAAC,GAAK,CAAC,KAAK,eAAe,SAASA,CAAC,CAAC,CAAC,EAC1H,KAAK,MAAM,YAAY2K,EAAaC,EAAgBkP,CAAe,CACpE,CACD,YAAYpV,EAAGG,EAAG,CAChB,IAAIQ,EAAS,KAAK,aAAaX,EAAGG,CAAC,EAC/BuG,EAAM,KAAK,IAAIvG,CAAC,EACpB,GAAIuG,GAAO,MAAQ/F,GAAU,KAAM,CACjC,GAAI,CAAC+F,EAAI,aAAe/F,EAAO,iBAAmB,KAAM,CACtD,IAAIqH,EAAS,KAAK,aAAahI,EAAGG,CAAC,EACnC,OAAO,KAAK,cAAc6H,EAAQrH,EAAO,gBAAiBA,EAAO,IAAI,CACtE,CAED,GAAI+F,EAAI,aAAeA,EAAI,OAAS1G,EAAI,GAAK,KAAK,aAAaA,EAAGG,CAAC,IAAM,MAAQ,KAAK,0BAA0B,KAAK,cAAc,EAAE,IAAIH,CAAC,EACxI,MAAO,EAEV,CACD,OAAO,MAAM,YAAYA,EAAGG,CAAC,CAC9B,CACD,mBAAmBuG,EAAK/I,EAAS,CAC/B,GAAI,CACF,WAAA0X,EACA,YAAAC,EACA,MAAA1L,CACD,EAAGlD,EACA6O,EAAe,MAAM,mBAAmB7O,EAAK/I,CAAO,EACpD6X,EAAe,IAAI,IAAID,EAAa,IAAI,EAC5C,GAAID,EACF,QAAS7b,EAAI,EAAGA,EAAI,KAAK,eAAe,OAAQA,GAAK,EAAG,CACtD,IAAIpB,EAAMoB,GAAKmQ,EAAQ,IAAM,KAAK,eAAe,OAAS,GACtD6L,EAAWD,EAAa,IAAInd,CAAG,EAC/Bod,GAAY,KACdpb,GAAI,KAAK,sCAAuCZ,EAAGmQ,EAAOvR,EAAKqO,CAAG,EAElE8O,EAAa,IAAI/b,EAAGgc,CAAQ,CAE/B,CAEH,OAAOlc,GAAcA,GAAc,CAAE,EAAEgc,CAAY,EAAG,CAAA,EAAI,CACxD,KAAMC,EACN,WAAAH,EACA,YAAAC,EACA,MAAA1L,CACN,CAAK,CACF,CACD,SAASuE,EAAQE,EAAgBC,EAAa,CAC5C,IAAI1T,EAAQ,KACZ,OAAOyG,GAAkB,WAAa,CACpC,IAAIqU,EAAuBxK,EAC3B1C,EAAc5N,EAAM,QAAQ,EAC5B4N,EAAc5N,EAAM,YAAY,EAChC,IAAI+C,GAAW+X,EAAwB9a,EAAM,SAAS,WAAa,MAAQ8a,IAA0B,OAASA,EAAwB9a,EAAM,QACxIkU,EAAS,CAAA,EACTT,GAAkB,MAAQA,GAC5BS,EAAO,KAAKnR,EAAQ,IAAIrC,GAAKA,EAAE,IAAI,CAAC,EAGtC,QADIqa,EAAgB,IAAIlH,EAAU,GAAIvD,EAAqBtQ,EAAM,gBAAkB,MAAQsQ,IAAuB,OAAS,OAASA,EAAmB,OAAQvN,EAAQ,OAAQ/C,EAAM,aAAa,OAASA,EAAM,aAAa,KAAK,MAAM,EAChOnB,EAAI,EAAGA,EAAI0U,EAAO,OAAQ1U,GAAK,EAAG,CACzC,IAAImc,EAAenH,EAAU,aAAakH,EAAexH,EAAO1U,CAAC,CAAC,EAClE+O,EAAcoN,CAAY,EAC1BpN,EAAcoN,EAAa,QAAQ,EACnCpN,EAAcoN,EAAa,MAAM,EACjC,QAASlI,EAAIkI,EAAa,SAAUlI,GAAKkI,EAAa,OAAQlI,GAAK,EAAG,CACpE,IAAImI,EAAY,CAAA,EACZC,EAAclb,EAAM,aAAa,KAAK8S,EAAI9S,EAAM,aAAa,MAAM,EACvE4N,EAAcoN,EAAa,WAAW,EACtCpN,EAAcoN,EAAa,SAAS,EACpC,QAASta,EAAIsa,EAAa,YAAata,GAAKsa,EAAa,UAAWta,GAAK,EAAG,CAC1E,IAAIya,EACJvN,EAAc8F,CAAW,EACzBuH,EAAU,KAAKvH,GAAayH,EAAwBD,EAAY,KAAK,IAAIxa,CAAC,KAAO,MAAQya,IAA0B,OAAS,OAASA,EAAsB,MAAOnb,EAAM,QAAQU,CAAC,CAAC,CAAC,CACpL,CACDwT,EAAO,KAAK+G,CAAS,CACtB,CACF,CACD,OAAO/G,CACR,CAAA,GACF,CACD,IAAI,SAAU,CACZ,OAAO,KAAK,iBAAiB,KAAK,eAAgB,MAAM,OAAO,CAChE,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,sBAAsB,KAAK,eAAgB,KAAK,MAAM,cAAc,CACjF,CACD,cAAcnO,EAAQ+F,EAAK,CACzB,GAAI/F,GAAU,KAAK,eAAe,OAChC,MAAO,CACL,OAAAA,EACA,IAAA+F,CACR,EAEI,IAAIkD,EAAQ,KAAK,YAAYlD,CAAG,EAChC,MAAO,CACL,OAAQ/F,EAASiJ,EACjB,IAAAlD,CACN,CACG,CACD,aAAa/F,EAAQ+F,EAAK,CACxB,GAAI/F,GAAU,KAAK,eAAe,OAChC,OAAO,MAAM,aAAaA,EAAQ+F,CAAG,EAEvC,IAAIkD,EAAQ,KAAK,YAAYlD,CAAG,EAChC,OAAO,KAAK,QAAQ/F,EAASiJ,CAAK,CACnC,CACD,oBAAoBjJ,EAAQ,CAC1B,OAAIA,GAAU,KAAK,eAAe,OACzB,MAAM,oBAAoBA,CAAM,EAIlC,CAAC,KAAK,eAAe,OAAQ,KAAK,eAAe,MAAM,CAC/D,CACD,IAAI,mBAAoB,CACtB,MAAO,EACR,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,MAAM,YAAc,MACjC,CACD,IAAI,yBAA0B,CAC5B,MAAO,EACR,CACD,IAAI,2BAA4B,CAC9B,MAAO,EACR,CACD,IAAI,cAAe,CACjB,MAAO,EACR,CACD,aAAa0G,EAAa,CACxB,OAAO,KAAK,6BAA6B,KAAK,QAAS,KAAK,eAAgB,KAAK,cAAc,EAAE,IAAIA,CAAW,CACjH,CACD,gBAAgB1G,EAAQ,CACtB,OAAOA,GAAU,KAAK,eAAe,MACtC,CACD,gBAAgBR,EAAG,CACjB,IAAI6V,EACAtP,EAAM,KAAK,IAAIvG,CAAC,EACpB,OAAQ6V,EAA6DtP,GAAI,eAAiB,MAAQsP,IAAqB,OAASA,EAAmB,EACpJ,CACD,cAAc7V,EAAG,CACf,IAAI8V,EACAvP,EAAM,KAAK,IAAIvG,CAAC,EACpB,OAAQ8V,EAA4DvP,GAAI,cAAgB,MAAQuP,IAAoB,OAASA,EAAkB,EAChJ,CACD,eAAe9V,EAAGkV,EAAY,CAC5B,IAAIa,EAAoB,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GACxF,KAAK,qBACP,KAAK,MAAM,YAAY/V,EAAGkV,EAAYa,CAAiB,EAEvD,KAAK,MAAM,YAAY/V,EAAGkV,CAAU,CAEvC,CACD,WAAY,CACN,KAAK,MAAM,WACb,KAAK,MAAM,WAEd,CACD,aAAc,CACR,KAAK,MAAM,aACb,KAAK,MAAM,aAEd,CACD,YAAYlV,EAAG,CACb,IAAIgW,EACAzP,EAAM,KAAK,IAAIvG,CAAC,EACpB,QAASgW,EAAuDzP,GAAI,SAAW,MAAQyP,IAAe,OAASA,EAAa,GAAK,CAClI,CACD,oBAAoBxY,EAAS,CAC3B,GAAIA,EAAQ,OAAS,EACnB,MAAM,IAAI,MAAM,uCAAuC,CAE1D,CACH,CACA,MAAAyY,GAAetB,GCjOf,SAASjU,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CACrY,SAAStH,EAAgBC,EAAKvB,EAAKwB,EAAO,CAAE,OAAAxB,EAAMyB,GAAezB,CAAG,EAAOA,KAAOuB,EAAO,OAAO,eAAeA,EAAKvB,EAAK,CAAE,MAAOwB,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAM,CAAA,EAAYD,EAAIvB,CAAG,EAAIwB,EAAgBD,CAAM,CAC5O,SAASE,GAAeC,EAAK,CAAE,IAAI1B,EAAM2B,GAAaD,EAAK,QAAQ,EAAG,OAAO,OAAO1B,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAI,CAC3H,SAAS2B,GAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAI,CAAC,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAI,CAazX,IAAII,EAAMC,GAAI,OAAO,oBAAoB,EACzC,SAAS+b,EAAU5b,EAAIkH,EAAOlG,EAAW6H,EAAY,CACnD,OAAIuD,EAAW,YAAYlF,CAAK,EACvB,IAAImT,GAAuBra,EAAIkH,EAAOlG,CAAS,EAEpDoL,EAAW,mBAAmBlF,CAAK,EAC9B,IAAI6S,GAA8B/Z,EAAIkH,EAAOlG,CAAS,EAExD,IAAI6W,GAAmB7X,EAAIkH,EAAOlG,EAAW6H,CAAU,CAChE,CAMA,MAAMgT,WAA2B9T,CAAc,CAQ7C,YAAY/H,EAAIkH,EAAO,CACrB,IAAI/G,EACAa,EAAY,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAAI4H,EAAU5I,CAAE,EAChG6I,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,MAAM7I,CAAE,EACRG,EAAQ,KACRjB,EAAgB,KAAM,KAAM,MAAM,EAClCA,EAAgB,KAAM,gBAAiB,MAAM,EAC7CA,EAAgB,KAAM,QAAS,MAAM,EACrCA,EAAgB,KAAM,eAAgB,MAAM,EAC5CA,EAAgB,KAAM,SAAU,MAAM,EACtCA,EAAgB,KAAM,YAAa,MAAM,EACzCA,EAAgB,KAAM,iBAAkB,MAAM,EAC9CA,EAAgB,KAAM,kBAAmB,MAAM,EAC/CA,EAAgB,KAAM,cAAe,UAAY,CAC/C,OAAOiB,EAAM,MAAM,YAAY,GAAG,SAAS,CACjD,CAAK,EACDjB,EAAgB,KAAM,wBAAyB,UAAY,CACzD,OAAOiB,EAAM,MAAM,sBAAsB,GAAG,SAAS,CAC3D,CAAK,EACDjB,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAOiB,EAAM,MAAM,iBAAiB,GAAG,SAAS,CACtD,CAAK,EACDjB,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOiB,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDjB,EAAgB,KAAM,yBAA0B,UAAY,CAC1D,OAAOiB,EAAM,MAAM,uBAAuB,GAAG,SAAS,CAC5D,CAAK,EACDjB,EAAgB,KAAM,sBAAuB,UAAY,CACvD,OAAOiB,EAAM,MAAM,oBAAoB,GAAG,SAAS,CACzD,CAAK,EACDjB,EAAgB,KAAM,uBAAwB,UAAY,CACxD,OAAOiB,EAAM,MAAM,qBAAqB,GAAG,SAAS,CAC1D,CAAK,EACDjB,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAOiB,EAAM,MAAM,iBAAiB,GAAG,SAAS,CACtD,CAAK,EACDjB,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAOiB,EAAM,MAAM,iBAAiB,GAAG,SAAS,CACtD,CAAK,EACDjB,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOiB,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDjB,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAOiB,EAAM,MAAM,gBAAgB,GAAG,SAAS,CACrD,CAAK,EACDjB,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAI4c,EAAsB3b,EAAM,KAAK,EAC5BA,EAAM,MAAM,gBAAgB,GAAG,SAAS,EAE1C,EACb,CAAK,EACDjB,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAI4c,EAAsB3b,EAAM,KAAK,EAC5BA,EAAM,MAAM,cAAc,GAAG,SAAS,EAExC,EACb,CAAK,EACDjB,EAAgB,KAAM,iBAAkB,UAAY,CAClD,GAAI4c,EAAsB3b,EAAM,KAAK,EACnC,OAAOA,EAAM,MAAM,eAAe,GAAG,SAAS,EAEhD,MAAM,MAAM,8DAA8D,CAChF,CAAK,EACDjB,EAAgB,KAAM,YAAa,IAAM,CACvC,GAAI4c,EAAsB,KAAK,KAAK,EAClC,OAAO,KAAK,MAAM,YAEpB,MAAM,MAAM,yDAAyD,CAC3E,CAAK,EACD5c,EAAgB,KAAM,cAAe,IAAM,CACzC,GAAI4c,EAAsB,KAAK,KAAK,EAClC,OAAO,KAAK,MAAM,cAEpB,MAAM,MAAM,2DAA2D,CAC7E,CAAK,EACD5c,EAAgB,KAAM,cAAe,UAAY,CAC/C,OAAI4c,EAAsB3b,EAAM,KAAK,EAC5BA,EAAM,MAAM,YAAY,GAAG,SAAS,EAEtC,CAEb,CAAK,EACDjB,EAAgB,KAAM,uBAAwB,UAAY,CACxD,OAAOiB,EAAM,MAAM,qBAAqB,GAAG,SAAS,CAC1D,CAAK,EACDjB,EAAgB,KAAM,6BAA8B,UAAY,CAC9D,OAAOiB,EAAM,MAAM,2BAA2B,GAAG,SAAS,CAChE,CAAK,EACDjB,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOiB,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACDjB,EAAgB,KAAM,sBAAuB,UAAY,CACvD,OAAOiB,EAAM,MAAM,oBAAoB,GAAG,SAAS,CACzD,CAAK,EACDjB,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOiB,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACDjB,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOiB,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDjB,EAAgB,KAAM,oBAAqB,UAAY,CACrD,OAAOiB,EAAM,MAAM,kBAAkB,GAAG,SAAS,CACvD,CAAK,EACDjB,EAAgB,KAAM,wBAAyB,UAAY,CACzD,OAAOiB,EAAM,MAAM,sBAAsB,GAAG,SAAS,CAC3D,CAAK,EACDjB,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOiB,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACDjB,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAI6c,EAAoB5b,EAAM,KAAK,EAC1BA,EAAM,MAAM,gBAAgB,GAAG,SAAS,EAE1C,EACb,CAAK,EACDjB,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOiB,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDjB,EAAgB,KAAM,cAAe,CAACmM,EAAKC,EAAQpI,IAAY,CAC7D,KAAK,gBAAkB,CACrB,IAAAmI,EACA,OAAAC,EACA,QAAApI,CACR,EACM,KAAK,MAAM,YAAYmI,EAAKC,EAAQpI,CAAO,CACjD,CAAK,EACDhE,EAAgB,KAAM,WAAY,UAAY,CAC5C,OAAOiB,EAAM,MAAM,SAAS,GAAG,SAAS,CAC9C,CAAK,EACDjB,EAAgB,KAAM,eAAgB,UAAY,CAChD,OAAOiB,EAAM,MAAM,aAAa,GAAG,SAAS,CAClD,CAAK,EACDjB,EAAgB,KAAM,cAAe,UAAY,CAC/C,OAAOiB,EAAM,MAAM,YAAY,GAAG,SAAS,CACjD,CAAK,EACDjB,EAAgB,KAAM,mBAAoB,UAAY,CACpD,OAAI6c,EAAoB5b,EAAM,KAAK,EAC1BA,EAAM,MAAM,iBAAiB,GAAG,SAAS,EAE3C,EACb,CAAK,EACDjB,EAAgB,KAAM,kBAAmB,UAAY,CACnD,OAAI6c,EAAoB5b,EAAM,KAAK,EAC1BA,EAAM,MAAM,gBAAgB,GAAG,SAAS,EAE1C,QAAQ,OAAO,IAAI,MAAM,uBAAuB,CAAC,CAC9D,CAAK,EACDjB,EAAgB,KAAM,oBAAqB,UAAY,CACrD,OAAI6c,EAAoB5b,EAAM,KAAK,EAC1BA,EAAM,MAAM,kBAAkB,GAAG,SAAS,EAE5C,QAAQ,OAAO,IAAI,MAAM,uBAAuB,CAAC,CAC9D,CAAK,EACDjB,EAAgB,KAAM,YAAa,UAAY,CAC7C,OAAI6c,EAAoB5b,EAAM,KAAK,EAC1BA,EAAM,MAAM,UAAU,GAAG,SAAS,EAEpC,QAAQ,SACrB,CAAK,EACDjB,EAAgB,KAAM,iBAAkB,UAAY,CAClD,OAAI6c,EAAoB5b,EAAM,KAAK,EAC1BA,EAAM,MAAM,eAAe,GAAG,SAAS,EAEzC,EACb,CAAK,EACDjB,EAAgB,KAAM,SAAU,UAAY,CAC1C,OAAOiB,EAAM,MAAM,OAAO,GAAG,SAAS,CAC5C,CAAK,EACDjB,EAAgB,KAAM,gBAAiB,UAAY,CACjD,OAAOiB,EAAM,MAAM,cAAc,GAAG,SAAS,CACnD,CAAK,EACD,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,IAAImH,EAAQsU,EAAU5b,EAAIkH,EAAOlG,EAAW6H,CAAU,EACtD,KAAK,GAAK7I,EACV,KAAK,cAAgBsH,EACrB,KAAK,MAAQA,EACb,KAAK,aAAe,KACpB,KAAK,OAAS,KACd,KAAK,UAAY,KACjB,KAAK,eAAiB,EACvB,CACD,OAAQ,CACN,KAAK,cAAc,QACf,KAAK,QAAU,KAAK,eACtB,KAAK,MAAM,QAET,KAAK,cAAgB,MACvB,KAAK,aAAa,QAErB,CACD,iBAAiBrJ,EAAO,CACtB2B,EAAI,OAAO,mBAAoB3B,CAAK,EACpC,GAAI,CACF,OAAA+d,EACA,KAAAzY,CACD,EAAGtF,EACJ,KAAK,cAAc,IAAIqO,EAAqB/I,EAAM,CAChD,OAAAyY,CACD,CAAA,CAAC,CACH,CACD,SAAS1U,EAAO,CACd1H,EAAI,MAAM,WAAY0H,CAAK,EAC3B,IAAI2U,EAAW,KAAK,MAChB,CACF,QAASC,CACV,EAAGD,EAQJ,GAPIA,IAAa,KAAK,eACpBA,EAAS,MAAK,EAEhB,KAAK,MAAQ3U,EACT,KAAK,cAAgB,GACvB,KAAK,aAAaA,CAAK,EAErB4U,IAAe5U,EAAM,QACvB,KAAK,cAAc,IAAIgF,EAAqBvE,EAAc,MAAM,gBAAiB,CAC/E,OAAQT,EAAM,OACf,CAAA,CAAC,UACO,KAAK,iBAAmB,KAAM,CAEvC,GAAI,CACF,IAAA+D,EACA,OAAAC,EACA,QAAApI,CACR,EAAU,KAAK,gBACToE,EAAM,YAAY+D,EAAKC,EAAQpI,CAAO,CACvC,CACG2E,GAA6BP,CAAK,GACpC,KAAK,cAAc,IAAIgF,EAAqBvE,EAAc,MAAM,cAAe,CAC7E,OAAQT,EAAM,KACf,CAAA,CAAC,CAEL,CACD,aAAa6U,EAAc,CACzBvc,EAAI,OAAO,cAAc,EACrB,KAAK,cACP,KAAK,aAAa,SAEhB,KAAK,cAAgB,GACvB,KAAK,gBAAgB,KAAK,KAAK,EAEjC,KAAK,aAAe6T,GAAa,eAAe0I,EAAc7U,GAASA,EAAM,MAAK,CAAE,EACpF,KAAK,aAAa,KAAKA,GAAS,CAC9B,KAAK,aAAe,KACpB,KAAK,SAASA,CAAK,CACzB,CAAK,EAAE,MAAMN,GAAO,CACd,GAAIyM,GAAa,WAAWzM,CAAG,EAAG,CAChCpH,EAAI,OAAO,wBAAwB,EACnC,MACD,CACDA,EAAI,MAAM,2BAA4BoH,CAAG,EACzC,KAAK,aAAe,KACpB,KAAK,cAAc,IAAIsF,EAAqBvE,EAAc,MAAM,eAAgB,CAC9E,OAAQf,CACT,CAAA,CAAC,CACR,CAAK,CACF,CACD,gBAAiB,CACf,MAAM,eAAc,EACpB,KAAK,aAAa,KAAK,KAAK,CAC7B,CACD,eAAgB,CACd,MAAM,cAAa,EACnB,KAAK,gBAAgB,KAAK,KAAK,CAChC,CACD,aAAaM,EAAO,CAElB,QADI8U,EAAS,OAAO,KAAKrU,EAAc,KAAK,EACnC/I,EAAI,EAAGA,EAAIod,EAAO,OAAQpd,GAAK,EAGtCsI,EAAM,iBAAiB8U,EAAOpd,CAAC,EAAG,KAAK,gBAAgB,CAE1D,CACD,gBAAgBsI,EAAO,CAErB,QADI8U,EAAS,OAAO,KAAKrU,EAAc,KAAK,EACnC/I,EAAI,EAAGA,EAAIod,EAAO,OAAQpd,GAAK,EAGtCsI,EAAM,oBAAoB8U,EAAOpd,CAAC,EAAG,KAAK,gBAAgB,CAE7D,CACD,IAAI,UAAW,CACb,OAAO,KAAK,MAAM,QACnB,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,qBAAsB,CACxB,OAAO,KAAK,MAAM,mBACnB,CACD,IAAI,wBAAyB,CAC3B,OAAO,KAAK,MAAM,sBACnB,CACD,IAAI,yBAA0B,CAC5B,OAAO,KAAK,MAAM,uBACnB,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,wBACnB,CACD,eAAeuG,EAAG,CAChB,OAAO,KAAK,MAAM,eAAeA,CAAC,CACnC,CACD,iBAAiB8N,EAAO,CACtB,OAAO,KAAK,MAAM,iBAAiBA,CAAK,CACzC,CACD,IAAI,mBAAoB,CACtB,OAAIyI,EAAsB,KAAK,KAAK,EAC3B,KAAK,MAAM,kBAEb,EACR,CACD,IAAI,sBAAuB,CACzB,GAAIA,EAAsB,KAAK,KAAK,EAAG,CACrC,IAAIO,EACJ,OAAQA,EAAwB,KAAK,MAAM,wBAA0B,MAAQA,IAA0B,OAASA,EAAwB,EACzI,CACD,MAAO,EACR,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,iBACnB,CACD,IAAI,6BAA8B,CAChC,OAAO,KAAK,MAAM,2BACnB,CACD,IAAI,wBAAyB,CAC3B,OAAO,KAAK,MAAM,sBACnB,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,0BAElB,EAAE,KAAK,2BAA6B,KAAK,sBAAsB,OAAS,EACzE,CACD,IAAI,0BAA2B,CAC7B,OAAO,KAAK,MAAM,wBACnB,CACD,IAAI,yBAA0B,CAC5B,OAAO,KAAK,MAAM,uBACnB,CACD,IAAI,mBAAoB,CACtB,OAAQ,KAAK,cAAc,mBAAqB,KAAK,QAAU,OAAS,KAAK,eAAe,SAAW,CACxG,CACD,IAAI,2BAA4B,CAC9B,OAAQ,KAAK,cAAc,2BAA6B,KAAK,eAAe,OAAS,IAAM,KAAK,QAAU,IAC3G,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,iBACnB,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MAAM,YACnB,CACD,IAAI,SAAU,CACZ,OAAO,KAAK,MAAM,OACnB,CACD,IAAI,qBAAsB,CACxB,OAAO,KAAK,MAAM,mBACnB,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,MAAM,gBACnB,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MAAM,YACnB,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,MAAM,kBACnB,CACD,IAAI,mBAAmBtM,EAAQ,CAC7B,KAAK,MAAM,mBAAqBA,CACjC,CACD,IAAI,2BAA4B,CAC9B,OAAO,KAAK,MAAM,yBACnB,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,MAAM,oBACnB,CACD,IAAI,sBAAuB,CACzB,OAAO,KAAK,MAAM,oBACnB,CACD,oBAAoB7M,EAAS,CAC3B,OAAO,KAAK,MAAM,oBAAoBA,CAAO,CAC9C,CACD,IAAI,iBAAkB,CACpB,OAAO,KAAK,cAAc,OAC3B,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,MAAM,cACnB,CACD,IAAI,kBAAmB,CACrB,OAAKoZ,EAA+B,KAAK,aAAa,EAG/C,KAAK,cAAc,iBAFjB,EAGV,CACD,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACnB,CACD,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACnB,CACD,IAAI,OAAOhJ,EAAQ,CACjB,KAAK,MAAM,OAASA,CACrB,CACD,IAAI,iBAAkB,CACpB,MAAI,CAACgJ,EAA+B,KAAK,aAAa,GAAK,CAAC,KAAK,cAAc,oBACtE,KAEF,KAAK,SACb,CACD,IAAI,gBAAgBC,EAAiB,CACnC,GAAI,CAAC,KAAK,oBACR,MAAM,IAAI,MAAM,8BAA8B,EAEhD3c,EAAI,MAAM,sBAAuB2c,CAAe,EAChD,KAAK,UAAYA,EACjB,IAAIJ,EAAe,QAAQ,QAAQ,KAAK,aAAa,EACjDI,GAAmB,MAAQD,EAA+B,KAAK,aAAa,IAC1EC,EAAgB,OAAS,OAC3BJ,EAAe,KAAK,cAAc,mBAAoB,EAAC,KAAKjV,GAAS0U,EAAU,KAAK,GAAI1U,EAAO,KAAK,SAAS,CAAC,EACrGqV,EAAgB,OAAS,SAClCJ,EAAe,KAAK,cAAc,qBAAsB,EAAC,KAAKjV,GAAS0U,EAAU,KAAK,GAAI1U,EAAO,KAAK,SAAS,CAAC,EAEhHiV,EAAe,KAAK,cAAc,eAAeI,EAAgB,UAAU,EAAE,KAAKrV,GAAS0U,EAAU,KAAK,GAAI1U,EAAO,KAAK,SAAS,CAAC,GAGxI,KAAK,aAAaiV,CAAY,CAC/B,CACD,oBAAqB,CACnB,GAAI,CAACG,EAA+B,KAAK,aAAa,EACpD,MAAM,IAAI,MAAM,8BAA8B,EAEhD,OAAO,KAAK,cAAc,oBAC3B,CACD,sBAAuB,CACrB,GAAI,CAACA,EAA+B,KAAK,aAAa,EACpD,MAAM,IAAI,MAAM,8BAA8B,EAEhD,OAAO,KAAK,cAAc,sBAC3B,CACD,eAAenE,EAAY,CACzB,GAAI,CAACmE,EAA+B,KAAK,aAAa,EACpD,MAAM,IAAI,MAAM,8BAA8B,EAEhD,OAAO,KAAK,cAAc,eAAenE,CAAU,CACpD,CACD,IAAI,WAAY,CACd,OAAO,KAAK,MAAM,SACnB,CACD,IAAI,UAAUnX,EAAW,CACvB,KAAK,MAAM,UAAYA,CACxB,CACD,IAAI,MAAO,CACT,OAAO,KAAK,MAAM,IACnB,CACD,IAAI,KAAKuS,EAAM,CACb,KAAK,MAAM,KAAOA,CACnB,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,cAAclL,EAAe,CAC/B,KAAK,MAAM,cAAgBA,CAC5B,CACD,IAAI,eAAgB,CAClB,OAAO,KAAK,MAAM,aACnB,CACD,IAAI,cAAcC,EAAe,CAC/B,KAAK,MAAM,cAAgBA,CAC5B,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MACb,CACD,IAAI,aAAaC,EAAc,CAE7B,GADA3I,EAAI,MAAM,mBAAoB2I,CAAY,EACtC,CAAC,KAAK,kBACR,MAAM,IAAI,MAAM,+BAA+B,EAKjD,GAAI,CAAAiU,GAAUjU,EAAc,KAAK,MAAM,EAGvC,MAAK,OAASA,EACd,IAAI4T,EAAe,QAAQ,QAAQ,KAAK,aAAa,EACjDtU,GAA6B,KAAK,aAAa,GAAKU,GAAgB,OACtE4T,EAAe,KAAK,cAAc,MAAM,OAAO5T,CAAY,EAAE,KAAKrB,GAAS0U,EAAU,KAAK,GAAI1U,EAAO,KAAK,SAAS,CAAC,GAEtH,KAAK,aAAaiV,CAAY,EAC/B,CACD,IAAI,uBAAwB,CAC1B,OAAO,KAAK,cACb,CACD,IAAI,sBAAsBM,EAAa,CAErC,GADA7c,EAAI,MAAM,4BAA6B6c,CAAW,EAC9C,CAAC,KAAK,0BACR,MAAM,IAAI,MAAM,kCAAkC,EAEpD,GAAIA,IAAgB,KAAK,uBAAyBA,EAAY,SAAW,GAAK,KAAK,sBAAsB,SAAW,EAAG,CACrH7c,EAAI,MAAM,oCAAqC6c,CAAW,EAC1D,MACD,CACD,KAAK,eAAiBA,EACtB,IAAI7C,EAAwB6C,EAAY,IAAIzX,GAAQ,KAAK,gBAAgB,KAAKkB,GAAUA,EAAO,OAASlB,CAAI,CAAC,EAAE,OAAOkB,GAAUA,GAAU,IAAI,EAC1IiW,EAAe,QAAQ,QAAQ,KAAK,aAAa,EACjDtU,GAA6B,KAAK,aAAa,GAAK+R,EAAsB,OAAS,IACrFuC,EAAe,KAAK,cAAc,MAAM,eAAevC,CAAqB,EAAE,KAAK1S,GAAS0U,EAAU,KAAK,GAAI1U,EAAO,KAAK,SAAS,CAAC,GAEvI,KAAK,aAAaiV,CAAY,CAC/B,CACD,IAAI,OAAQ,CACV,GAAItU,GAA6B,KAAK,KAAK,EACzC,OAAO,KAAK,MAAM,KAGrB,CACD,IAAI,cAAe,CACjB,OAAO,KAAK,MAAM,YACnB,CACD,IAAI,aAAa2L,EAAc,CAC7B,KAAK,MAAM,aAAeA,CAC3B,CACD,IAAI,kBAAmB,CACrB,OAAO,KAAK,cAAc,gBAC3B,CACD,IAAI,qBAAsB,CACxB,OAAO8I,EAA+B,KAAK,aAAa,EAAI,KAAK,cAAc,oBAAsB,EACtG,CACD,IAAI,YAAa,CACf,OAAOP,EAAoB,KAAK,KAAK,GAAK,KAAK,MAAM,UACtD,CACD,QAAS,CACP,GAAI3P,EAAW,YAAY,KAAK,KAAK,EACnC,MAAM,IAAI,MAAM,oCAAoC,EAEtD,OAAO,KAAK,MAAM,QACnB,CACD,iBAAiBlG,EAAQ,CACvB,GAAIkG,EAAW,YAAY,KAAK,KAAK,EACnC,MAAM,IAAI,MAAM,8CAA8C,EAEhE,OAAO,KAAK,MAAM,iBAAiBlG,CAAM,CAC1C,CACD,IAAI,gBAAiB,CACnB,OAAO,KAAK,MAAM,cACnB,CACD,IAAI,eAAe8F,EAAK,CACtB,KAAK,MAAM,eAAiBA,CAC7B,CACD,IAAI,iBAAkB,CACpB,OAAO,KAAK,MAAM,eACnB,CACD,IAAI,gBAAgBa,EAAO,CACzB,KAAK,MAAM,gBAAkBA,CAC9B,CACD,IAAI,mBAAoB,CACtB,OAAO,KAAK,MAAM,iBACnB,CACD,qBAAqB7H,EAAM,CACzB,OAAO,KAAK,MAAM,qBAAqBA,CAAI,CAC5C,CACD,QAAQgD,EAAU9B,EAAQ+B,EAAW7I,EAAO8I,EAAaC,EAAUC,EAAa,CAC9E,IAAI1G,EAAS,KACb,OAAOkF,GAAkB,WAAa,CACpC,OAAOlF,EAAO,MAAM,QAAQsG,EAAU9B,EAAQ+B,EAAW7I,EAAO8I,EAAaC,EAAUC,CAAW,CACnG,CAAA,GACF,CACD,IAAI,oBAAqB,CACvB,OAAO,KAAK,MAAM,kBACnB,CACH,CACA,MAAAsU,GAAeb,GC3mBf,SAASzV,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ7I,EAAK0B,EAAK,CAAE,GAAI,CAAE,IAAIoH,EAAOL,EAAIzI,CAAG,EAAE0B,CAAG,EAAOF,EAAQsH,EAAK,YAAgBC,EAAO,CAAEJ,EAAOI,CAAK,EAAG,MAAS,CAAKD,EAAK,KAAQJ,EAAQlH,CAAK,EAAY,QAAQ,QAAQA,CAAK,EAAE,KAAKoH,EAAOC,CAAM,CAAM,CACzQ,SAASG,GAAkBC,EAAI,CAAE,OAAO,UAAY,CAAE,IAAIC,EAAO,KAAMC,EAAO,UAAW,OAAO,IAAI,QAAQ,SAAUT,EAASC,EAAQ,CAAE,IAAIF,EAAMQ,EAAG,MAAMC,EAAMC,CAAI,EAAG,SAASP,EAAMpH,EAAO,CAAEgH,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,OAAQrH,CAAK,CAAI,CAAC,SAASqH,EAAOO,EAAK,CAAEZ,GAAmBC,EAAKC,EAASC,EAAQC,EAAOC,EAAQ,QAASO,CAAG,EAAKR,EAAM,MAAS,EAAI,CAAI,CAAG,CAMrY,MAAMmW,EAAqB,CAMzB,OAAO,UAAU3c,EAAIkH,EAAO,CAC1B,IAAIyM,EAAa,UACjB,OAAO/M,GAAkB,WAAa,CACpC,IAAI5F,EAAY2S,EAAW,OAAS,GAAKA,EAAW,CAAC,IAAM,OAAYA,EAAW,CAAC,EAAI,IAAI/K,EAAU5I,CAAE,EACnG6I,EAAa,KACjB,MAAI,CAACuD,EAAW,YAAYlF,CAAK,GAAK,CAACkF,EAAW,mBAAmBlF,CAAK,GAAKA,EAAM,gBACnF2B,EAAa,MAAM3B,EAAM,cAEpB,IAAI2U,GAAmB7b,EAAIkH,EAAOlG,EAAW6H,CAAU,CAC/D,CAAA,GACF,CACH,CACA,MAAA+T,GAAeD"}
|
|
1
|
+
{"version":3,"file":"IrisGridModelFactory-7ea0ea8b.js","sources":["../../../components/dist/CardFlip.js","../../../chart/dist/FigureChartModel.js","../../../chart/dist/ChartModelFactory.js","../../../chart/dist/isFigureChartModel.js","../../../iris-grid/dist/MissingKeyError.js","../../../iris-grid/dist/IrisGridTableModelTemplate.js","../../../iris-grid/dist/IrisGridTableModel.js","../../../iris-grid/dist/EmptyIrisGridModel.js","../../../iris-grid/dist/IrisGridPartitionedTableModel.js","../../../iris-grid/dist/IrisGridTreeTableModel.js","../../../iris-grid/dist/IrisGridProxyModel.js","../../../iris-grid/dist/IrisGridModelFactory.js"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport \"./CardFlip.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nfunction CardFlip(_ref) {\n var {\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId\n } = _ref;\n var getComponent = key => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n var front = useRef(null);\n var transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n var transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n useEffect(function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n var refObj = front.current;\n return function cleanupListener() {\n if (refObj != null) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n }, [transitionStart]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped\n }),\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"card-flip--back\",\n children: getComponent(0)\n }), /*#__PURE__*/_jsx(\"div\", {\n ref: front,\n className: \"card-flip--front\",\n onTransitionEnd: transitionEnd,\n children: getComponent(1)\n })]\n });\n}\nexport default CardFlip;\n//# sourceMappingURL=CardFlip.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport Log from '@deephaven/log';\nimport ChartModel from \"./ChartModel.js\";\nimport ChartUtils from \"./ChartUtils.js\";\nvar log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n /**\n * @param dh JSAPI instance\n * @param figure The figure object created by the API\n * @param theme The theme for the figure\n * @param settings Chart settings\n */\n constructor(dh, figure, theme) {\n var _this;\n var settings = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super(dh);\n _this = this;\n _defineProperty(this, \"chartUtils\", void 0);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"figure\", void 0);\n _defineProperty(this, \"settings\", void 0);\n _defineProperty(this, \"theme\", void 0);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"layout\", void 0);\n _defineProperty(this, \"seriesDataMap\", void 0);\n _defineProperty(this, \"pendingSeries\", void 0);\n _defineProperty(this, \"oneClicks\", void 0);\n _defineProperty(this, \"filterColumnMap\", void 0);\n _defineProperty(this, \"lastFilter\", void 0);\n _defineProperty(this, \"isConnected\", void 0);\n _defineProperty(this, \"seriesToProcess\", void 0);\n _defineProperty(this, \"addPendingSeries\", debounce(() => {\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var {\n pendingSeries\n } = this;\n var _loop = function _loop() {\n var _chart$showLegend;\n var series = pendingSeries[i];\n var chart = _this.figure.charts.find(c => c.series.includes(series));\n _this.addSeries(series, axisTypeMap, (_chart$showLegend = chart === null || chart === void 0 ? void 0 : chart.showLegend) !== null && _chart$showLegend !== void 0 ? _chart$showLegend : null);\n series.subscribe();\n // We'll get an update with the data after subscribing\n };\n for (var i = 0; i < pendingSeries.length; i += 1) {\n _loop();\n }\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE));\n _defineProperty(this, \"getTimeZone\", memoize((columnType, formatter) => {\n if (formatter != null) {\n var dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return undefined;\n }));\n _defineProperty(this, \"getValueTranslator\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.unwrapValue(value, timeZone);\n }));\n _defineProperty(this, \"getValueParser\", memoize((columnType, formatter) => {\n var timeZone = this.getTimeZone(columnType, formatter);\n return value => this.chartUtils.wrapValue(value, columnType, timeZone);\n }));\n _defineProperty(this, \"getRangeParser\", memoize((columnType, formatter) => range => {\n var [rangeStart, rangeEnd] = range;\n var valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }));\n _defineProperty(this, \"getAxisRangeParser\", memoize((chart, formatter) => axis => {\n var source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n return range => range;\n }));\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n var template = {\n data: {},\n layout: this.chartUtils.makeDefaultLayout(theme)\n };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent'\n },\n template\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n // Assume figure is connected to start\n\n close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n getDefaultTitle() {\n if (this.figure.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n var _this$figure$charts$;\n return (_this$figure$charts$ = this.figure.charts[0].title) !== null && _this$figure$charts$ !== void 0 ? _this$figure$charts$ : '';\n }\n return '';\n }\n initAllSeries() {\n var _this2 = this;\n this.oneClicks = [];\n this.filterColumnMap.clear();\n var {\n charts\n } = this.figure;\n var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n var activeSeriesNames = [];\n this.seriesToProcess = new Set();\n var _loop2 = function _loop2() {\n var chart = charts[i];\n for (var j = 0; j < chart.series.length; j += 1) {\n var series = chart.series[j];\n activeSeriesNames.push(series.name);\n _this2.addSeries(series, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n var {\n axes,\n title\n } = chart;\n if (title != null && title.length > 0 && (charts.length > 1 || _this2.figure.title != null)) {\n var xAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.X);\n var yAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn('Chart title provided, but unknown how to map to the correct axes for this chart type', chart);\n } else {\n var _axisTypeMap$get$find, _axisTypeMap$get, _axisTypeMap$get$find2, _axisTypeMap$get2;\n var xAxisIndex = ((_axisTypeMap$get$find = (_axisTypeMap$get = axisTypeMap.get(xAxis.type)) === null || _axisTypeMap$get === void 0 ? void 0 : _axisTypeMap$get.findIndex(a => a === xAxis)) !== null && _axisTypeMap$get$find !== void 0 ? _axisTypeMap$get$find : 0) + 1;\n var yAxisIndex = ((_axisTypeMap$get$find2 = (_axisTypeMap$get2 = axisTypeMap.get(yAxis.type)) === null || _axisTypeMap$get2 === void 0 ? void 0 : _axisTypeMap$get2.findIndex(a => a === yAxis)) !== null && _axisTypeMap$get$find2 !== void 0 ? _axisTypeMap$get$find2 : 0) + 1;\n var annotation = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: \"x\".concat(xAxisIndex, \" domain\"),\n yref: \"y\".concat(yAxisIndex, \" domain\")\n };\n if (_this2.layout.annotations == null) {\n _this2.layout.annotations = [annotation];\n } else {\n _this2.layout.annotations.push(annotation);\n }\n }\n }\n };\n for (var i = 0; i < charts.length; i += 1) {\n _loop2();\n }\n\n // Remove any series that no longer exist\n var allSeriesNames = [...this.seriesDataMap.keys()];\n var inactiveSeriesNames = allSeriesNames.filter(seriesName => activeSeriesNames.indexOf(seriesName) < 0);\n for (var _i = 0; _i < inactiveSeriesNames.length; _i += 1) {\n var seriesName = inactiveSeriesNames[_i];\n this.seriesDataMap.delete(seriesName);\n }\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(series, axisTypeMap, showLegend) {\n var {\n dh\n } = this;\n var seriesData = this.chartUtils.makeSeriesDataFromSeries(series, axisTypeMap, ChartUtils.getSeriesVisibility(series.name, this.settings), this.theme, showLegend);\n this.seriesDataMap.set(series.name, seriesData);\n this.seriesToProcess.add(series.name);\n this.data = [...this.seriesDataMap.values()];\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend = this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE ? showLegend !== null && showLegend !== void 0 ? showLegend : undefined : false;\n if (series.oneClick != null) {\n var {\n oneClick\n } = series;\n var {\n columns\n } = oneClick;\n for (var i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n this.oneClicks.push(oneClick);\n }\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n subscribe(callback) {\n super.subscribe(callback);\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n unsubscribe(callback) {\n super.unsubscribe(callback);\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n subscribeFigure() {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n this.figure.subscribe(this.isDownsamplingDisabled ? this.dh.plot.DownsampleOptions.DISABLE : this.dh.plot.DownsampleOptions.DEFAULT);\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n unsubscribeFigure() {\n this.figure.unsubscribe();\n }\n startListeningFigure() {\n var {\n dh\n } = this;\n this.figure.addEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.addEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.addEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n stopListeningFigure() {\n var {\n dh\n } = this;\n this.figure.removeEventListener(dh.plot.Figure.EVENT_UPDATED, this.handleFigureUpdated);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_SERIES_ADDED, this.handleFigureSeriesAdded);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DISCONNECT, this.handleFigureDisconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_RECONNECT, this.handleFigureReconnected);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLESTARTED, this.handleDownsampleStart);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED, this.handleDownsampleFinish);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLEFAILED, this.handleDownsampleFail);\n this.figure.removeEventListener(dh.plot.Figure.EVENT_DOWNSAMPLENEEDED, this.handleDownsampleNeeded);\n this.figure.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n }\n\n /** Gets the parser for a value with the provided column type */\n\n /**\n * Gets the range parser for a particular column type\n */\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n this.fireDownsampleStart(event.detail);\n }\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n this.fireDownsampleFinish(event.detail);\n }\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n this.fireDownsampleFail(event.detail);\n }\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n this.fireDownsampleNeeded(event.detail);\n }\n handleFigureUpdated(event) {\n var {\n detail: figureUpdateEvent\n } = event;\n var {\n series: seriesArray\n } = figureUpdateEvent;\n log.debug2('handleFigureUpdated', seriesArray);\n for (var i = 0; i < seriesArray.length; i += 1) {\n var series = seriesArray[i];\n log.debug2('handleFigureUpdated updating series', series.name);\n var {\n sources\n } = series;\n for (var j = 0; j < sources.length; j += 1) {\n var source = sources[j];\n var {\n columnType,\n type\n } = source;\n var valueTranslator = this.getValueTranslator(columnType, this.formatter);\n var dataArray = figureUpdateEvent.getArray(series, type, valueTranslator);\n this.setDataArrayForSeries(series, type, dataArray);\n }\n this.seriesToProcess.delete(series.name);\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n var {\n data\n } = this;\n this.fireUpdate(data);\n }\n handleRequestFailed(event) {\n log.error('Request failed', event);\n this.fireError([\"\".concat(event.detail)]);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n setFormatter(formatter) {\n super.setFormatter(formatter);\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n setDownsamplingDisabled(isDownsamplingDisabled) {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n this.resubscribe();\n }\n handleFigureDisconnected(event) {\n log.debug('Figure disconnected', event);\n this.isConnected = false;\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n this.fireDisconnect();\n }\n handleFigureReconnected(event) {\n log.debug('Figure reconnected', event);\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n this.fireReconnect();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n handleFigureSeriesAdded(event) {\n var {\n detail: series\n } = event;\n log.debug('handleFigureSeriesAdded', series);\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n setDimensions(rect) {\n super.setDimensions(rect);\n this.updateAxisPositions();\n }\n setTitle(title) {\n var _match$length, _match;\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n var subtitleCount = (_match$length = (_match = (title !== null && title !== void 0 ? title : '').match(/<br>/g)) === null || _match === void 0 ? void 0 : _match.length) !== null && _match$length !== void 0 ? _match$length : 0;\n var margin = ChartUtils.DEFAULT_MARGIN.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = {\n t: margin\n };\n }\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = _objectSpread({}, this.layout.title);\n this.layout.title.text = title;\n this.layout.title.pad = _objectSpread({}, this.layout.title.pad);\n this.layout.title.pad.t = ChartUtils.DEFAULT_TITLE_PADDING.t + subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n getPlotWidth() {\n var _this$layout$margin$l, _this$layout$margin, _this$layout$margin$r, _this$layout$margin2;\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n return Math.max(this.rect.width - ((_this$layout$margin$l = (_this$layout$margin = this.layout.margin) === null || _this$layout$margin === void 0 ? void 0 : _this$layout$margin.l) !== null && _this$layout$margin$l !== void 0 ? _this$layout$margin$l : 0) - ((_this$layout$margin$r = (_this$layout$margin2 = this.layout.margin) === null || _this$layout$margin2 === void 0 ? void 0 : _this$layout$margin2.r) !== null && _this$layout$margin$r !== void 0 ? _this$layout$margin$r : 0), 0);\n }\n getPlotHeight() {\n var _this$layout$margin$t, _this$layout$margin3, _this$layout$margin$b, _this$layout$margin4;\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n return Math.max(this.rect.height - ((_this$layout$margin$t = (_this$layout$margin3 = this.layout.margin) === null || _this$layout$margin3 === void 0 ? void 0 : _this$layout$margin3.t) !== null && _this$layout$margin$t !== void 0 ? _this$layout$margin$t : 0) - ((_this$layout$margin$b = (_this$layout$margin4 = this.layout.margin) === null || _this$layout$margin4 === void 0 ? void 0 : _this$layout$margin4.b) !== null && _this$layout$margin$b !== void 0 ? _this$layout$margin$b : 0), 0);\n }\n updateAxisPositions() {\n var plotWidth = this.getPlotWidth();\n var plotHeight = this.getPlotHeight();\n this.chartUtils.updateFigureAxes(this.layout, this.figure, this.theme, chart => this.getAxisRangeParser(chart, this.formatter), plotWidth, plotHeight);\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\n if (!this.formatter) {\n return;\n }\n var axisFormats = this.chartUtils.getAxisFormats(this.figure, this.formatter);\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\"Assigning \".concat(axisLayoutProperty), this.layout[axisLayoutProperty], axisFormat);\n var props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(\"Ignoring null layout.\".concat(axisLayoutProperty));\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n var property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series) {\n var {\n dh\n } = this;\n var {\n name,\n plotStyle\n } = series;\n var seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n var {\n xLow,\n xHigh\n } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n var width = [];\n for (var i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.LINE || plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR || plotStyle === dh.plot.SeriesPlotStyle.BAR) {\n var {\n x,\n xLow: _xLow,\n xHigh: _xHigh,\n y,\n yLow,\n yHigh\n } = seriesData;\n if (_xLow && _xHigh && _xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(x, _xLow, _xHigh, this.theme);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh, this.theme);\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n var {\n ids,\n labels\n } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n getData() {\n return this.data;\n }\n getLayout() {\n return this.layout;\n }\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n isFilterRequired() {\n return this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) != null;\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\n var _this3 = this;\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n log.debug('setFilter', filterMap);\n var _loop3 = function _loop3() {\n var oneClick = _this3.oneClicks[i];\n var {\n columns\n } = oneClick;\n // Need to get all the keys in case a filter was removed\n var keys = new Set([...filterMap.keys(), ..._this3.lastFilter.keys()]);\n keys.forEach(key => {\n var value = filterMap.get(key);\n if (_this3.lastFilter.get(key) !== value && columns.find(column => column.name === key) != null) {\n oneClick.setValueForColumn(key, value);\n }\n });\n };\n for (var i = 0; i < this.oneClicks.length; i += 1) {\n _loop3();\n }\n this.lastFilter = new Map(filterMap);\n }\n setFigure(figure) {\n this.close();\n this.figure = figure;\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n updateSettings(settings) {\n this.settings = settings;\n }\n}\n_defineProperty(FigureChartModel, \"ADD_SERIES_DEBOUNCE\", 50);\nexport default FigureChartModel;\n//# sourceMappingURL=FigureChartModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport ChartUtils from \"./ChartUtils.js\";\nimport FigureChartModel from \"./FigureChartModel.js\";\nclass ChartModelFactory {\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @param theme The theme for the figure\n * @returns The ChartModel Promise representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModelFromSettings(dh, settings, table, theme) {\n return _asyncToGenerator(function* () {\n var figure = yield ChartModelFactory.makeFigureFromSettings(dh, settings, table);\n return new FigureChartModel(dh, figure, theme, settings);\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The Figure created with the settings provided\n */\n static makeFigureFromSettings(dh, settings, table) {\n return _asyncToGenerator(function* () {\n // Copy the table first and then re-apply the filters from the original table\n // When we add table linking we'll want to listen to the original table and update\n // the copied table with any changes that occur.\n // The table gets owned by the Figure that gets created, which closes the table\n var tableCopy = yield table.copy();\n tableCopy.applyCustomColumns(table.customColumns);\n tableCopy.applyFilter(table.filter);\n tableCopy.applySort(table.sort);\n return dh.plot.Figure.create(new ChartUtils(dh).makeFigureSettings(settings, tableCopy));\n })();\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param figure The figure to build the model for\n * @param theme The theme for the figure\n * @returns The FigureChartModel representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static makeModel(dh, settings, figure, theme) {\n return _asyncToGenerator(function* () {\n return new FigureChartModel(dh, figure, theme, settings);\n })();\n }\n}\nexport default ChartModelFactory;\n//# sourceMappingURL=ChartModelFactory.js.map","export default function isFigureChartModel(model) {\n return model.setFigure !== undefined;\n}\n//# sourceMappingURL=isFigureChartModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass MissingKeyError extends Error {\n constructor(rowIndex, columnName) {\n super(\"\".concat(columnName, \" can't be empty (on pending row \").concat(rowIndex + 1, \")\"));\n _defineProperty(this, \"isMissingKey\", true);\n _defineProperty(this, \"rowIndex\", void 0);\n _defineProperty(this, \"columnName\", void 0);\n this.rowIndex = rowIndex;\n this.columnName = columnName;\n }\n}\nexport default MissingKeyError;\n//# sourceMappingURL=MissingKeyError.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint-disable no-underscore-dangle */\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridRange, GridUtils, memoizeClear } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport { TableUtils, Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport MissingKeyError from \"./MissingKeyError.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nvar log = Log.module('IrisGridTableModelTemplate');\nvar SET_VIEWPORT_THROTTLE = 150;\nvar APPLY_VIEWPORT_THROTTLE = 0;\nexport function isIrisGridTableModelTemplate(model) {\n return model.table !== undefined;\n}\n\n/**\n * Template model for a grid\n */\n\nclass IrisGridTableModelTemplate extends IrisGridModel {\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n throw new Error('Method not implemented.');\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get customColumns() {\n return [];\n }\n set customColumns(customColumns) {\n throw new Error('Method not implemented.');\n }\n get formatColumns() {\n return [];\n }\n set formatColumns(formatColumns) {\n throw new Error('Method not implemented.');\n }\n updateFrozenColumns(columns) {\n throw new Error('Method not implemented.');\n }\n get rollupConfig() {\n throw new Error('Method not implemented.');\n }\n set rollupConfig(rollupConfig) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n throw new Error('Method not implemented.');\n }\n set selectDistinctColumns(names) {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Returns an array of the columns in the model\n * The order of model columns should never change once established\n */\n get columns() {\n return this.table.columns;\n }\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var _this$layoutHints$col, _this$layoutHints;\n var _formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"irisGridUtils\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"irisFormatter\", void 0);\n _defineProperty(this, \"inputTable\", void 0);\n _defineProperty(this, \"subscription\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"viewport\", void 0);\n _defineProperty(this, \"viewportData\", void 0);\n _defineProperty(this, \"formattedStringData\", void 0);\n _defineProperty(this, \"pendingStringData\", void 0);\n _defineProperty(this, \"isSaveInProgress\", void 0);\n _defineProperty(this, \"totalsTable\", void 0);\n _defineProperty(this, \"totalsTablePromise\", void 0);\n _defineProperty(this, \"totals\", void 0);\n _defineProperty(this, \"totalsDataMap\", void 0);\n _defineProperty(this, \"pendingNewDataMap\", void 0);\n _defineProperty(this, \"pendingNewRowCount\", 0);\n _defineProperty(this, \"_columnHeaderGroupMap\", new Map());\n _defineProperty(this, \"columnHeaderParentMap\", new Map());\n _defineProperty(this, \"_columnHeaderMaxDepth\", null);\n _defineProperty(this, \"_columnHeaderGroups\", []);\n _defineProperty(this, \"_movedColumns\", null);\n _defineProperty(this, \"getMemoizedInitialMovedColumns\", memoize(layoutHints => {\n var _layoutHints$columnGr;\n if (!layoutHints) {\n return [];\n }\n var movedColumns = [];\n var {\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr !== void 0 ? _layoutHints$columnGr : []);\n var moveColumn = (name, toIndex) => {\n var modelIndex = this.getColumnIndexByName(name);\n if (modelIndex == null) {\n throw new Error(\"Unknown layout hint column: \".concat(name));\n }\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n movedColumns = GridUtils.moveItem(visibleIndex, toIndex, movedColumns);\n };\n var moveGroup = (name, toIndex) => {\n var group = groupMap.get(name);\n if (group == null) {\n throw new Error(\"Unknown layout hint group: \".concat(name));\n }\n var visibleRange = group.getVisibleRange(movedColumns);\n movedColumns = GridUtils.moveRange(visibleRange, toIndex, movedColumns);\n };\n var {\n frontColumns = [],\n backColumns = [],\n frozenColumns = []\n } = layoutHints;\n if (frontColumns.length || backColumns.length || frozenColumns.length) {\n var usedColumns = new Set();\n var frontIndex = 0;\n frozenColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n frontColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, frontIndex);\n frontIndex += 1;\n });\n var backIndex = this.columnMap.size - 1;\n backColumns.forEach(name => {\n if (usedColumns.has(name)) {\n throw new Error(\"Column specified in multiple layout hints: \".concat(name));\n }\n moveColumn(name, backIndex);\n backIndex -= 1;\n });\n }\n var layoutHintColumnGroups = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups;\n if (layoutHintColumnGroups) {\n var columnGroups = [...groupMap.values()];\n columnGroups.sort((a, b) => a.depth - b.depth);\n columnGroups.forEach(group => {\n var firstChildName = group.children[0];\n var rightModelIndex = this.getColumnIndexByName(firstChildName);\n var rightVisibleIndex;\n if (rightModelIndex != null) {\n rightVisibleIndex = GridUtils.getVisibleIndex(rightModelIndex, movedColumns);\n } else {\n var firstChildGroup = groupMap.get(firstChildName);\n if (!firstChildGroup) {\n throw new Error(\"Unknown column \".concat(firstChildName, \" in group \").concat(group.name));\n }\n var visibleRange = firstChildGroup.getVisibleRange(movedColumns);\n // Columns will be moved to start at the end of the first child group\n [, rightVisibleIndex] = visibleRange;\n }\n for (var i = 1; i < group.children.length; i += 1) {\n var childName = group.children[i];\n var childGroup = groupMap.get(childName);\n var childColumn = this.getColumnIndexByName(childName);\n if (childGroup) {\n // All columns in the group will be before or after the start index\n // Lower level groups are re-arranged first, so they will be contiguous\n var isBeforeGroup = childGroup.getVisibleRange(movedColumns)[0] < rightVisibleIndex;\n var moveToIndex = isBeforeGroup ? rightVisibleIndex - childGroup.childIndexes.length + 1 : rightVisibleIndex + 1;\n moveGroup(childName, moveToIndex);\n rightVisibleIndex = moveToIndex + childGroup.childIndexes.length - 1;\n } else if (childColumn != null) {\n var _isBeforeGroup = GridUtils.getVisibleIndex(childColumn, movedColumns) < rightVisibleIndex;\n var _moveToIndex = _isBeforeGroup ? rightVisibleIndex : rightVisibleIndex + 1;\n moveColumn(childName, _moveToIndex);\n rightVisibleIndex = _moveToIndex;\n }\n }\n });\n }\n this._movedColumns = movedColumns;\n return movedColumns;\n }));\n _defineProperty(this, \"getMemoizedInitialColumnHeaderGroups\", memoize(layoutHints => {\n var _layoutHints$columnGr2;\n return IrisGridUtils.parseColumnHeaderGroups(this, (_layoutHints$columnGr2 = layoutHints === null || layoutHints === void 0 ? void 0 : layoutHints.columnGroups) !== null && _layoutHints$columnGr2 !== void 0 ? _layoutHints$columnGr2 : []).groups;\n }));\n _defineProperty(this, \"getMemoizedColumnMap\", memoize(tableColumns => {\n var columnMap = new Map();\n tableColumns.forEach(col => columnMap.set(col.name, col));\n return columnMap;\n }));\n _defineProperty(this, \"getColumnIndicesByNameMap\", memoize(columns => {\n var indices = new Map();\n columns.forEach((_ref, i) => {\n var {\n name\n } = _ref;\n return indices.set(name, i);\n });\n return indices;\n }));\n _defineProperty(this, \"setViewport\", throttle((top, bottom, columns) => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n var {\n viewport\n } = this;\n if (viewport != null && viewport.top === top && viewport.bottom === bottom && viewport.columns === columns) {\n log.debug2('Ignoring duplicate viewport', viewport);\n return;\n }\n this.viewport = {\n top,\n bottom,\n columns\n };\n log.debug2('setViewport', this.viewport);\n this.applyViewport();\n }, SET_VIEWPORT_THROTTLE));\n _defineProperty(this, \"applyViewport\", throttle(() => {\n if (!this.viewport) {\n return;\n }\n log.debug2('applyViewport', this.viewport);\n var {\n top,\n bottom,\n columns\n } = this.viewport;\n var [viewportTop, viewportBottom] = this.getCachedViewportRowRange(top, bottom);\n this.applyBufferedViewport(viewportTop, viewportBottom, columns);\n }, APPLY_VIEWPORT_THROTTLE, {\n leading: false\n }));\n _defineProperty(this, \"getCachedFormattedString\", memoizeClear((formatter, value, columnType, columnName, formatOverride) => formatter.getFormattedString(value, columnType, columnName, formatOverride), {\n max: 10000\n }));\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n _defineProperty(this, \"getCachedViewportRowRange\", memoize((top, bottom) => {\n var viewHeight = bottom - top;\n var viewportTop = Math.max(0, top - viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES);\n var viewportBottom = bottom + viewHeight * IrisGridTableModelTemplate.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n }));\n _defineProperty(this, \"getCachedPendingErrors\", memoize((pendingDataMap, columns, keyColumnCount) => {\n var map = new Map();\n pendingDataMap.forEach((row, rowIndex) => {\n var {\n data: rowData\n } = row;\n for (var i = 0; i < keyColumnCount; i += 1) {\n if (!rowData.has(i)) {\n var _map$get;\n if (!map.has(rowIndex)) {\n map.set(rowIndex, []);\n }\n (_map$get = map.get(rowIndex)) === null || _map$get === void 0 ? void 0 : _map$get.push(new MissingKeyError(rowIndex, columns[i].name));\n }\n }\n });\n return map;\n }));\n this.handleTableDisconnect = this.handleTableDisconnect.bind(this);\n this.handleTableReconnect = this.handleTableReconnect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTotalsUpdate = this.handleTotalsUpdate.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.dh = dh;\n this.irisFormatter = _formatter;\n this.irisGridUtils = new IrisGridUtils(dh);\n this.inputTable = inputTable;\n this.subscription = null;\n this.table = table;\n this.tableUtils = new TableUtils(dh);\n this.viewport = null;\n this.viewportData = null;\n this.formattedStringData = [];\n this.pendingStringData = [];\n this.isSaveInProgress = false;\n this.totalsTable = null;\n this.totalsTablePromise = null;\n this.totals = null;\n this.totalsDataMap = null;\n\n // Map from new row index to their values. Only for input tables that can have new rows added.\n // The index of these rows start at 0, and they are appended at the end of the regular table data.\n // These rows can be sparse, so using a map instead of an array.\n this.pendingNewDataMap = new Map();\n this.pendingNewRowCount = 0;\n this.columnHeaderGroups = IrisGridUtils.parseColumnHeaderGroups(this, (_this$layoutHints$col = (_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.columnGroups) !== null && _this$layoutHints$col !== void 0 ? _this$layoutHints$col : []).groups;\n }\n close() {\n this.table.close();\n if (this.totalsTable !== null) {\n this.totalsTable.close();\n }\n if (this.totalsTablePromise !== null) {\n this.totalsTablePromise.cancel();\n }\n }\n startListening() {\n super.startListening();\n var {\n dh\n } = this;\n this.table.addEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.addEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.addEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n this.applyViewport();\n }\n stopListening() {\n super.stopListening();\n var {\n dh\n } = this;\n this.table.removeEventListener(dh.Table.EVENT_DISCONNECT, this.handleTableDisconnect);\n this.table.removeEventListener(dh.Table.EVENT_RECONNECT, this.handleTableReconnect);\n this.table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n this.table.removeEventListener(dh.Client.EVENT_REQUEST_FAILED, this.handleRequestFailed);\n this.table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleCustomColumnsChanged);\n if (this.totalsTable != null) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.closeSubscription();\n }\n addTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.addEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n\n // Totals table only has one row of data\n totalsTable.setViewport(0, 0);\n }\n removeTotalsListeners(totalsTable) {\n var {\n dh\n } = this;\n totalsTable.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTotalsUpdate);\n }\n handleTableDisconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.DISCONNECT));\n }\n handleTableReconnect() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.RECONNECT));\n }\n handleTableUpdate(event) {\n this.copyViewportData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleTotalsUpdate(event) {\n this.copyTotalsData(event.detail);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n handleRequestFailed(event) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, event));\n }\n handleCustomColumnsChanged() {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: this.columns\n }));\n }\n get rowCount() {\n var _this$totals$operatio, _this$totals, _this$totals$operatio2;\n return (\n // Table size can be negative if the table isn't ready yet\n Math.max(this.table.size, 0) + this.pendingNewRowCount + ((_this$totals$operatio = (_this$totals = this.totals) === null || _this$totals === void 0 ? void 0 : (_this$totals$operatio2 = _this$totals.operationOrder) === null || _this$totals$operatio2 === void 0 ? void 0 : _this$totals$operatio2.length) !== null && _this$totals$operatio !== void 0 ? _this$totals$operatio : 0)\n );\n }\n get pendingDataErrors() {\n var _this$inputTable$keyC, _this$inputTable;\n return this.getCachedPendingErrors(this.pendingNewDataMap, this.columns, (_this$inputTable$keyC = (_this$inputTable = this.inputTable) === null || _this$inputTable === void 0 ? void 0 : _this$inputTable.keyColumns.length) !== null && _this$inputTable$keyC !== void 0 ? _this$inputTable$keyC : 0);\n }\n get pendingDataMap() {\n return this.pendingNewDataMap;\n }\n set pendingDataMap(map) {\n if (map === this.pendingNewDataMap) {\n return;\n }\n map.forEach((row, rowIndex) => {\n if (!IrisGridUtils.isValidIndex(rowIndex)) {\n throw new Error(\"Invalid rowIndex \".concat(rowIndex));\n }\n var {\n data\n } = row;\n data.forEach((value, columnIndex) => {\n if (!IrisGridUtils.isValidIndex(columnIndex)) {\n throw new Error(\"Invalid columnIndex \".concat(columnIndex));\n }\n });\n });\n this.pendingNewDataMap = map;\n this.pendingNewRowCount = Math.max(this.pendingNewRowCount, this.maxPendingDataRow);\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n }\n get pendingRowCount() {\n return this.pendingNewRowCount;\n }\n set pendingRowCount(count) {\n if (count === this.pendingNewRowCount) {\n return;\n }\n this.pendingNewRowCount = Math.max(0, count, this.maxPendingDataRow);\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n get maxPendingDataRow() {\n return this.pendingNewDataMap.size > 0 ? Math.max(...this.pendingNewDataMap.keys()) + 1 : 0;\n }\n get columnCount() {\n return this.columns.length;\n }\n get floatingBottomRowCount() {\n var _this$totals$operatio3, _this$totals2, _this$totals2$operati;\n return this.totals != null && this.totals.showOnTop ? 0 : (_this$totals$operatio3 = (_this$totals2 = this.totals) === null || _this$totals2 === void 0 ? void 0 : (_this$totals2$operati = _this$totals2.operationOrder) === null || _this$totals2$operati === void 0 ? void 0 : _this$totals2$operati.length) !== null && _this$totals$operatio3 !== void 0 ? _this$totals$operatio3 : 0;\n }\n get floatingTopRowCount() {\n var _this$totals$operatio4, _this$totals3, _this$totals3$operati;\n return this.totals != null && this.totals.showOnTop ? (_this$totals$operatio4 = (_this$totals3 = this.totals) === null || _this$totals3 === void 0 ? void 0 : (_this$totals3$operati = _this$totals3.operationOrder) === null || _this$totals3$operati === void 0 ? void 0 : _this$totals3$operati.length) !== null && _this$totals$operatio4 !== void 0 ? _this$totals$operatio4 : 0 : 0;\n }\n get isChartBuilderAvailable() {\n return true;\n }\n get isTotalsAvailable() {\n return this.table.getTotalsTable != null;\n }\n get isEditable() {\n return !this.isSaveInProgress && this.inputTable != null;\n }\n cacheFormattedValue(x, y, text) {\n if (this.formattedStringData[x] == null) {\n this.formattedStringData[x] = [];\n }\n this.formattedStringData[x][y] = text;\n }\n cachePendingValue(x, y, text) {\n if (this.pendingStringData[x] == null) {\n this.pendingStringData[x] = [];\n }\n this.pendingStringData[x][y] = text;\n }\n clearPendingValue(x, y) {\n var column = this.pendingStringData[x];\n if (column != null) {\n delete column[y];\n }\n }\n textValueForCell(x, y) {\n var _this$pendingStringDa, _this$formattedString;\n // First check if there's any pending values we should read from\n if (((_this$pendingStringDa = this.pendingStringData[x]) === null || _this$pendingStringDa === void 0 ? void 0 : _this$pendingStringDa[y]) !== undefined) {\n return this.pendingStringData[x][y];\n }\n\n // Use a separate cache from memoization just for the strings that are currently displayed\n if (((_this$formattedString = this.formattedStringData[x]) === null || _this$formattedString === void 0 ? void 0 : _this$formattedString[y]) === undefined) {\n var _value = this.valueForCell(x, y);\n if (_value === null) {\n return null;\n }\n if (_value === undefined) {\n return undefined;\n }\n var _column = this.sourceColumn(x, y);\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(this.formatter, _column.name, _column.type);\n var formatOverride;\n if (!hasCustomColumnFormat) {\n var formatForCell = this.formatForCell(x, y);\n if ((formatForCell === null || formatForCell === void 0 ? void 0 : formatForCell.formatString) != null) {\n formatOverride = formatForCell;\n }\n }\n var text = this.displayString(_value, _column.type, _column.name, formatOverride);\n this.cacheFormattedValue(x, y, text);\n }\n return this.formattedStringData[x][y];\n }\n textForCell(x, y) {\n var _this$columns$x;\n var text = this.textValueForCell(x, y);\n if (text == null && this.isKeyColumn(x)) {\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null && this.pendingDataMap.has(pendingRow)) {\n // Asterisk to show a value is required for a key column on a row that has some data entered\n return '*';\n }\n }\n if (TableUtils.isTextType((_this$columns$x = this.columns[x]) === null || _this$columns$x === void 0 ? void 0 : _this$columns$x.type)) {\n if (text === null) {\n return 'null';\n }\n if (text === '') {\n return 'empty';\n }\n }\n return text !== null && text !== void 0 ? text : '';\n }\n truncationCharForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type) && this.formatter.truncateNumbersWithPound) {\n return '#';\n }\n return undefined;\n }\n colorForCell(x, y, theme) {\n var data = this.dataForCell(x, y);\n if (data) {\n var {\n format,\n value: _value2\n } = data;\n if (_value2 == null || _value2 === '') {\n assertNotNull(theme.nullStringColor);\n return theme.nullStringColor;\n }\n if (format && format.color) {\n return format.color;\n }\n if (this.isPendingRow(y)) {\n // Data entered in a pending row\n assertNotNull(theme.pendingTextColor);\n return theme.pendingTextColor;\n }\n\n // Fallback to formatting based on the value/type of the cell\n if (_value2 != null) {\n var _column2 = this.sourceColumn(x, y);\n if (TableUtils.isDateType(_column2.type) || _column2.name === 'Date') {\n assertNotNull(theme.dateColor);\n return theme.dateColor;\n }\n if (TableUtils.isNumberType(_column2.type)) {\n if (_value2 > 0) {\n assertNotNull(theme.positiveNumberColor);\n return theme.positiveNumberColor;\n }\n if (_value2 < 0) {\n assertNotNull(theme.negativeNumberColor);\n return theme.negativeNumberColor;\n }\n assertNotNull(theme.zeroNumberColor);\n return theme.zeroNumberColor;\n }\n }\n } else if (this.isPendingRow(y) && this.isKeyColumn(x)) {\n assertNotNull(theme.errorTextColor);\n return theme.errorTextColor;\n }\n return theme.textColor;\n }\n backgroundColorForCell(x, y, theme) {\n var _this$formatForCell$b, _this$formatForCell;\n return (_this$formatForCell$b = (_this$formatForCell = this.formatForCell(x, y)) === null || _this$formatForCell === void 0 ? void 0 : _this$formatForCell.backgroundColor) !== null && _this$formatForCell$b !== void 0 ? _this$formatForCell$b : null;\n }\n textAlignForCell(x) {\n var column = this.columns[x];\n var {\n type\n } = column;\n if (TableUtils.isNumberType(type)) {\n return 'right';\n }\n if (TableUtils.isDateType(type) || column.name === 'Date') {\n return 'center';\n }\n return 'left';\n }\n dataBarOptionsForCell(column, row, theme) {\n var _positiveColor, _negativeColor, _format$color, _markerColor;\n var format = this.formatForCell(column, row);\n assertNotNull(format);\n var {\n axis,\n direction,\n max,\n min,\n valuePlacement,\n value,\n marker\n } = format.formatDataBar;\n var {\n positiveColor,\n negativeColor,\n markerColor,\n opacity\n } = format.formatDataBar;\n positiveColor = (_positiveColor = positiveColor) !== null && _positiveColor !== void 0 ? _positiveColor : theme.positiveBarColor;\n negativeColor = (_negativeColor = negativeColor) !== null && _negativeColor !== void 0 ? _negativeColor : theme.negativeBarColor;\n var databarColor = (_format$color = format.color) !== null && _format$color !== void 0 ? _format$color : value >= 0 ? positiveColor : negativeColor;\n if (databarColor.includes(',')) {\n databarColor = databarColor.split(',');\n }\n markerColor = (_markerColor = markerColor) !== null && _markerColor !== void 0 ? _markerColor : theme.markerBarColor;\n opacity = valuePlacement.toLowerCase() === 'overlap' ? 0.5 : opacity;\n var databarOptions = {\n axis: axis.toLowerCase(),\n direction: direction.toUpperCase(),\n columnMax: max,\n columnMin: min,\n opacity,\n color: databarColor,\n valuePlacement: valuePlacement.toLowerCase(),\n value,\n markers: [{\n value: marker,\n color: markerColor\n }]\n };\n return databarOptions;\n }\n renderTypeForCell(column, row) {\n var format = this.formatForCell(column, row);\n return (format === null || format === void 0 ? void 0 : format.formatDataBar) != null ? 'dataBar' : 'text';\n }\n textForColumnHeader(x) {\n var _header$displayName;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var header = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(header)) {\n return header.isNew ? '' : header.name;\n }\n return (_header$displayName = header === null || header === void 0 ? void 0 : header.displayName) !== null && _header$displayName !== void 0 ? _header$displayName : header === null || header === void 0 ? void 0 : header.name;\n }\n colorForColumnHeader(x) {\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var column = this.columnAtDepth(x, depth);\n if (isColumnHeaderGroup(column)) {\n var _column$color;\n return (_column$color = column.color) !== null && _column$color !== void 0 ? _column$color : null;\n }\n return null;\n }\n getColumnHeaderGroup(modelIndex, depth) {\n var group = this.columnAtDepth(modelIndex, depth);\n if (isColumnHeaderGroup(group)) {\n return group;\n }\n return undefined;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n var _this$columnAtDepth$n, _this$columnAtDepth;\n return this.columnHeaderParentMap.get((_this$columnAtDepth$n = (_this$columnAtDepth = this.columnAtDepth(modelIndex, depth)) === null || _this$columnAtDepth === void 0 ? void 0 : _this$columnAtDepth.name) !== null && _this$columnAtDepth$n !== void 0 ? _this$columnAtDepth$n : '');\n }\n columnAtDepth(x) {\n var _this$columns$x2;\n var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (depth === 0) {\n return this.columns[x];\n }\n var columnName = (_this$columns$x2 = this.columns[x]) === null || _this$columns$x2 === void 0 ? void 0 : _this$columns$x2.name;\n var group = this.columnHeaderParentMap.get(columnName);\n if (!group) {\n return undefined;\n }\n var currentDepth = group.depth;\n while (currentDepth < depth) {\n group = this.columnHeaderParentMap.get(group.name);\n if (!group) {\n return undefined;\n }\n currentDepth = group.depth;\n }\n if (group.depth === depth) {\n return group;\n }\n return undefined;\n }\n textForRowFooter(y) {\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null && this.totals) {\n return this.totals.operationOrder[totalsRow];\n }\n return '';\n }\n /**\n * Used to get the initial moved columns based on layout hints\n */\n get initialMovedColumns() {\n var _this$layoutHints2;\n return this.getMemoizedInitialMovedColumns((_this$layoutHints2 = this.layoutHints) !== null && _this$layoutHints2 !== void 0 ? _this$layoutHints2 : undefined);\n }\n get initialColumnHeaderGroups() {\n var _this$layoutHints3;\n return this.getMemoizedInitialColumnHeaderGroups((_this$layoutHints3 = this.layoutHints) !== null && _this$layoutHints3 !== void 0 ? _this$layoutHints3 : undefined);\n }\n get columnMap() {\n return this.getMemoizedColumnMap(this.table.columns);\n }\n get columnHeaderMaxDepth() {\n var _this$_columnHeaderMa;\n return (_this$_columnHeaderMa = this._columnHeaderMaxDepth) !== null && _this$_columnHeaderMa !== void 0 ? _this$_columnHeaderMa : 1;\n }\n set columnHeaderMaxDepth(depth) {\n this._columnHeaderMaxDepth = depth;\n }\n get columnHeaderGroupMap() {\n return this._columnHeaderGroupMap;\n }\n get columnHeaderGroups() {\n return this._columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n if (groups === this._columnHeaderGroups) {\n return;\n }\n var {\n groups: newGroups,\n maxDepth,\n parentMap,\n groupMap\n } = IrisGridUtils.parseColumnHeaderGroups(this, groups !== null && groups !== void 0 ? groups : this.initialColumnHeaderGroups);\n this._columnHeaderGroups = newGroups;\n this.columnHeaderMaxDepth = maxDepth;\n this.columnHeaderParentMap = parentMap;\n this._columnHeaderGroupMap = groupMap;\n }\n row(y) {\n var _this$totals$operatio5, _this$totals4, _this$totals4$operati, _this$totals$showOnTo, _this$totals5, _this$viewportData$of, _this$viewportData, _this$viewportData$ro, _this$viewportData2, _this$viewportData2$r;\n var totalsRowCount = (_this$totals$operatio5 = (_this$totals4 = this.totals) === null || _this$totals4 === void 0 ? void 0 : (_this$totals4$operati = _this$totals4.operationOrder) === null || _this$totals4$operati === void 0 ? void 0 : _this$totals4$operati.length) !== null && _this$totals$operatio5 !== void 0 ? _this$totals$operatio5 : 0;\n var showOnTop = (_this$totals$showOnTo = (_this$totals5 = this.totals) === null || _this$totals5 === void 0 ? void 0 : _this$totals5.showOnTop) !== null && _this$totals$showOnTo !== void 0 ? _this$totals$showOnTo : false;\n var totalsRow = this.totalsRow(y);\n if (totalsRow != null) {\n var _this$totals6, _this$totalsDataMap$g, _this$totalsDataMap;\n var operation = (_this$totals6 = this.totals) === null || _this$totals6 === void 0 ? void 0 : _this$totals6.operationOrder[totalsRow];\n assertNotNull(operation);\n return (_this$totalsDataMap$g = (_this$totalsDataMap = this.totalsDataMap) === null || _this$totalsDataMap === void 0 ? void 0 : _this$totalsDataMap.get(operation)) !== null && _this$totalsDataMap$g !== void 0 ? _this$totalsDataMap$g : null;\n }\n var pendingRow = this.pendingRow(y);\n if (pendingRow != null) {\n var _this$pendingNewDataM;\n return (_this$pendingNewDataM = this.pendingNewDataMap.get(pendingRow)) !== null && _this$pendingNewDataM !== void 0 ? _this$pendingNewDataM : null;\n }\n var offset = (_this$viewportData$of = (_this$viewportData = this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset) !== null && _this$viewportData$of !== void 0 ? _this$viewportData$of : 0;\n var viewportY = (showOnTop ? y - totalsRowCount : y) - offset;\n return (_this$viewportData$ro = (_this$viewportData2 = this.viewportData) === null || _this$viewportData2 === void 0 ? void 0 : (_this$viewportData2$r = _this$viewportData2.rows) === null || _this$viewportData2$r === void 0 ? void 0 : _this$viewportData2$r[viewportY]) !== null && _this$viewportData$ro !== void 0 ? _this$viewportData$ro : null;\n }\n\n /**\n * Retrieve the source column for given coordinates.\n * - Retrieve the totals column if this is a totals row\n * - Retrieve the source column if it's a proxied column\n * - Otherwise return the column at the given index\n * @param column Column index to get the source column from\n * @param row Row index to get the source column from\n */\n sourceColumn(column, row) {\n var totalsRow = this.totalsRow(row);\n if (totalsRow != null) {\n var _this$totals7, _this$totals$defaultO, _this$totals8, _this$totalsTable;\n var operation = (_this$totals7 = this.totals) === null || _this$totals7 === void 0 ? void 0 : _this$totals7.operationOrder[totalsRow];\n var defaultOperation = (_this$totals$defaultO = (_this$totals8 = this.totals) === null || _this$totals8 === void 0 ? void 0 : _this$totals8.defaultOperation) !== null && _this$totals$defaultO !== void 0 ? _this$totals$defaultO : AggregationOperation.SUM;\n var tableColumn = this.columns[column];\n\n // Find the matching totals table column for the operation\n // When there are multiple aggregations, the column name will be the original name of the column with the operation appended afterward\n // When the the operation is the default operation OR there is only one operation, then the totals column name is just the original column name\n var totalsColumn = (_this$totalsTable = this.totalsTable) === null || _this$totalsTable === void 0 ? void 0 : _this$totalsTable.columns.find(col => {\n var _this$totals9;\n return col.name === \"\".concat(tableColumn.name, \"__\").concat(operation) || (operation === defaultOperation || ((_this$totals9 = this.totals) === null || _this$totals9 === void 0 ? void 0 : _this$totals9.operationOrder.length) === 1) && col.name === tableColumn.name;\n });\n if (totalsColumn != null) {\n return totalsColumn;\n }\n // There may be cases were the totals table doesn't have a column, such as when there's a virtual column\n }\n\n return this.columns[column];\n }\n\n /**\n * Translate from the row in the model to a row in the totals table.\n * If the row is not a totals row, return null\n * @param y The row in the model to get the totals row for\n * @returns The row within the totals table if it's a totals row, null otherwise\n */\n totalsRow(y) {\n var _this$totals$operatio6, _this$totals10, _this$totals10$operat, _this$totals$showOnTo2, _this$totals11;\n var totalsRowCount = (_this$totals$operatio6 = (_this$totals10 = this.totals) === null || _this$totals10 === void 0 ? void 0 : (_this$totals10$operat = _this$totals10.operationOrder) === null || _this$totals10$operat === void 0 ? void 0 : _this$totals10$operat.length) !== null && _this$totals$operatio6 !== void 0 ? _this$totals$operatio6 : 0;\n var showOnTop = (_this$totals$showOnTo2 = (_this$totals11 = this.totals) === null || _this$totals11 === void 0 ? void 0 : _this$totals11.showOnTop) !== null && _this$totals$showOnTo2 !== void 0 ? _this$totals$showOnTo2 : false;\n var totalsRow = showOnTop ? y : y - this.table.size;\n if (totalsRow >= 0 && totalsRow < totalsRowCount) {\n return totalsRow;\n }\n return null;\n }\n\n /**\n * Translate from the row in the model to a pending input row.\n * If the row is not a pending input row, return null\n * @param y The row in the model to get the pending row for\n * @returns The row within the pending input rows if it's a pending row, null otherwise\n */\n pendingRow(y) {\n var pendingRow = y - this.floatingTopRowCount - this.table.size;\n if (pendingRow >= 0 && pendingRow < this.pendingNewRowCount) {\n return pendingRow;\n }\n return null;\n }\n\n /**\n * Check if a row is a totals table row\n * @param y The row in the model to check if it's a totals table row\n * @returns True if the row is a totals row, false if not\n */\n isTotalsRow(y) {\n return this.totalsRow(y) != null;\n }\n\n /**\n * Check if a row is a pending input row\n * @param y The row in the model to check if it's a pending new row\n * @returns True if the row is a pending new row, false if not\n */\n isPendingRow(y) {\n return this.pendingRow(y) != null;\n }\n dataForCell(x, y) {\n var _this$row;\n return (_this$row = this.row(y)) === null || _this$row === void 0 ? void 0 : _this$row.data.get(x);\n }\n formatForCell(x, y) {\n var _this$dataForCell;\n return (_this$dataForCell = this.dataForCell(x, y)) === null || _this$dataForCell === void 0 ? void 0 : _this$dataForCell.format;\n }\n valueForCell(x, y) {\n var data = this.dataForCell(x, y);\n\n /* JS API current sets null values as undefined in some instances. This means \n we need to nullish coaelesce so all undefined values from the API return null \n since the data has been fetched. undefined is used to indicate the API has not \n fetched data yet */\n if (data) {\n var _data$value;\n return (_data$value = data.value) !== null && _data$value !== void 0 ? _data$value : null;\n }\n return undefined;\n }\n copyViewportData(data) {\n if (data == null) {\n log.warn('invalid data!');\n return;\n }\n this.viewportData = this.extractViewportData(data);\n this.formattedStringData = [];\n }\n copyTotalsData(totalsData) {\n var _this$totals$defaultO2,\n _this$totals12,\n _this$totals13,\n _this = this;\n if (totalsData == null) {\n log.warn('invalid data!');\n return;\n }\n var {\n columns,\n rows\n } = totalsData;\n if (rows.length !== 1) {\n log.error('Unexpected number of rows received for totals table, ignoring update');\n return;\n }\n var dataMap = new Map();\n var row = rows[0];\n var defaultOperation = (_this$totals$defaultO2 = (_this$totals12 = this.totals) === null || _this$totals12 === void 0 ? void 0 : _this$totals12.defaultOperation) !== null && _this$totals$defaultO2 !== void 0 ? _this$totals$defaultO2 : AggregationOperation.SUM;\n var operationMap = (_this$totals13 = this.totals) === null || _this$totals13 === void 0 ? void 0 : _this$totals13.operationMap;\n var _loop = function _loop() {\n var _operationMap$name$, _operationMap$name;\n var column = columns[c];\n var [name, operation = (_operationMap$name$ = operationMap === null || operationMap === void 0 ? void 0 : (_operationMap$name = operationMap[name]) === null || _operationMap$name === void 0 ? void 0 : _operationMap$name[0]) !== null && _operationMap$name$ !== void 0 ? _operationMap$name$ : defaultOperation] = column.name.split('__');\n if (!dataMap.has(operation)) {\n dataMap.set(operation, {\n data: new Map()\n });\n }\n var {\n data: rowData\n } = dataMap.get(operation);\n var columnIndex = _this.columns.findIndex(col => col.name === name);\n rowData.set(columnIndex, {\n value: row.get(column),\n format: row.getFormat(column)\n });\n };\n for (var c = 0; c < columns.length; c += 1) {\n _loop();\n }\n log.debug2('copyTotalsData', dataMap);\n this.totalsDataMap = dataMap;\n this.formattedStringData = [];\n }\n\n /**\n * Use this as the canonical column index since things like layoutHints could have\n * changed the column order.\n */\n getColumnIndexByName(name) {\n return this.getColumnIndicesByNameMap(this.columns).get(name);\n }\n /**\n * Copies all the viewport data into an object that we can reference later.\n * @param data The data to copy from\n */\n extractViewportData(data) {\n var newData = {\n offset: data.offset,\n rows: []\n };\n var {\n columns\n } = data;\n for (var r = 0; r < data.rows.length; r += 1) {\n var _row = data.rows[r];\n var newRow = this.extractViewportRow(_row, columns);\n newData.rows.push(newRow);\n }\n return newData;\n }\n extractViewportRow(row, columns) {\n var data = new Map();\n for (var c = 0; c < columns.length; c += 1) {\n var _column3 = columns[c];\n var index = this.getColumnIndexByName(_column3.name);\n assertNotNull(index);\n data.set(index, {\n value: row.get(_column3),\n format: row.getFormat(_column3)\n });\n }\n return {\n data\n };\n }\n closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n }\n this.setViewport.cancel();\n this.applyViewport.cancel();\n }\n get filter() {\n return this.table.filter;\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter(filter);\n this.applyViewport();\n }\n get formatter() {\n return this.irisFormatter;\n }\n set formatter(formatter) {\n this.irisFormatter = formatter;\n this.formattedStringData = [];\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.FORMATTER_UPDATED));\n }\n displayString(value, columnType) {\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var formatOverride = arguments.length > 3 ? arguments[3] : undefined;\n return this.getCachedFormattedString(this.formatter, value, columnType, columnName, formatOverride);\n }\n get sort() {\n return this.table.sort;\n }\n set sort(sort) {\n this.closeSubscription();\n this.table.applySort(sort);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n setTotalsTable(totalsTable) {\n log.debug('setTotalsTable', totalsTable);\n if (this.totalsTable !== null) {\n if (this.listenerCount > 0) {\n this.removeTotalsListeners(this.totalsTable);\n }\n this.totalsTable.close();\n }\n this.totalsTable = totalsTable;\n this.totalsDataMap = null;\n if (this.listenerCount > 0 && this.totalsTable != null) {\n this.addTotalsListeners(this.totalsTable);\n }\n }\n\n /**\n * Applies the current viewport to the underlying table.\n */\n\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n log.debug2('applyBufferedViewport', viewportTop, viewportBottom, columns);\n if (this.subscription == null) {\n log.debug2('applyBufferedViewport creating new subscription');\n this.subscription = this.table.setViewport(viewportTop, viewportBottom, columns);\n } else {\n log.debug2('applyBufferedViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n }\n snapshot(ranges) {\n var _arguments = arguments,\n _this2 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var formatValue = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : value => value;\n var consolidateRanges = _arguments.length > 3 && _arguments[3] !== undefined ? _arguments[3] : true;\n if (_this2.subscription == null) {\n throw new Error('No subscription available');\n }\n var consolidated = consolidateRanges ? GridRange.consolidate(ranges) : ranges;\n if (!IrisGridUtils.isValidSnapshotRanges(consolidated)) {\n throw new Error(\"Invalid snapshot ranges \".concat(ranges));\n }\n\n // Need to separate out the floating ranges as they're from a different source\n var topFloatingRowsSet = new Set();\n var tableRanges = [];\n var bottomFloatingRowsSet = new Set();\n for (var i = 0; i < consolidated.length; i += 1) {\n var range = consolidated[i];\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n // Get the rows that are in the top aggregations section\n for (var r = range.startRow; r <= range.endRow && r < _this2.floatingTopRowCount; r += 1) {\n topFloatingRowsSet.add(r);\n }\n\n // Separate out the range that is part of the actual table (ie. not the floating ranges, not aggregations)\n if (range.endRow >= _this2.floatingTopRowCount && range.startRow <= _this2.floatingTopRowCount + _this2.table.size) {\n tableRanges.push(new GridRange(range.startColumn, Math.min(Math.max(0, range.startRow - _this2.floatingTopRowCount)), range.endColumn, Math.min(Math.max(0, range.endRow - _this2.floatingTopRowCount), _this2.table.size - _this2.floatingTopRowCount)));\n }\n // Get the rows that are in the bottom aggregations section\n for (var _r = Math.max(range.startRow, _this2.floatingTopRowCount + _this2.table.size); _r <= range.endRow && _r < _this2.floatingTopRowCount + _this2.table.size + _this2.floatingBottomRowCount; _r += 1) {\n bottomFloatingRowsSet.add(_r);\n }\n }\n var columns = IrisGridUtils.columnsFromRanges(consolidated, _this2.columns);\n var result = [];\n if (includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var topFloatingRows = [...topFloatingRowsSet].sort();\n var _loop2 = function* _loop2() {\n var row = topFloatingRows[_i];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i = 0; _i < topFloatingRows.length; _i += 1) {\n yield* _loop2();\n }\n if (tableRanges.length > 0) {\n var rangeSet = _this2.irisGridUtils.rangeSetFromRanges(tableRanges);\n var snapshot = yield _this2.subscription.snapshot(rangeSet, columns);\n result.push(...snapshot.rows.map(rowData => columns.map(column => formatValue(rowData.get(column), column))));\n }\n var bottomFloatingRows = [...bottomFloatingRowsSet].sort();\n var _loop3 = function* _loop3() {\n var row = bottomFloatingRows[_i2];\n var rowData = columns.map(column => {\n var index = _this2.getColumnIndexByName(column.name);\n assertNotNull(index);\n return formatValue(_this2.valueForCell(index, row), column);\n });\n if (includeHeaders) {\n rowData.push(_this2.textForRowFooter(row));\n }\n result.push(rowData);\n };\n for (var _i2 = 0; _i2 < bottomFloatingRows.length; _i2 += 1) {\n yield* _loop3();\n }\n return result;\n })();\n }\n\n /**\n * Get a text snapshot of the provided ranges\n * @param ranges The ranges to get the snapshot for\n * @param includeHeaders Whether to include the headers in the snapshot or not\n * @param formatValue Function for formatting the raw value into a string\n * @returns A formatted string of all the data, columns separated by `\\t` and rows separated by `\\n`\n */\n textSnapshot(ranges) {\n var _arguments2 = arguments,\n _this3 = this;\n return _asyncToGenerator(function* () {\n var includeHeaders = _arguments2.length > 1 && _arguments2[1] !== undefined ? _arguments2[1] : false;\n var formatValue = _arguments2.length > 2 && _arguments2[2] !== undefined ? _arguments2[2] : value => \"\".concat(value);\n log.debug2('textSnapshot', ranges, includeHeaders);\n var data = yield _this3.snapshot(ranges, includeHeaders, formatValue, false);\n return data.map(row => row.join('\\t')).join('\\n');\n })();\n }\n valuesTable(columns) {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var table = null;\n try {\n table = yield _this4.table.copy();\n table.applyFilter([]);\n table.applySort([]);\n return table.selectDistinct(Array.isArray(columns) ? columns : [columns]);\n } finally {\n if (table != null) {\n table.close();\n }\n }\n })();\n }\n isColumnMovable(modelIndex, depth) {\n if (modelIndex < 0 || modelIndex >= this.columnCount) {\n return false;\n }\n\n // All groups are movable\n if (depth > 0) {\n return true;\n }\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName) || !columnName) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnSortable(modelIndex) {\n var _this$columns$modelIn;\n return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;\n }\n isKeyColumn(x) {\n var _this$inputTable$keyC2, _this$inputTable2;\n return x < ((_this$inputTable$keyC2 = (_this$inputTable2 = this.inputTable) === null || _this$inputTable2 === void 0 ? void 0 : _this$inputTable2.keyColumns.length) !== null && _this$inputTable$keyC2 !== void 0 ? _this$inputTable$keyC2 : 0);\n }\n isRowMovable() {\n return false;\n }\n isEditableRange(range) {\n // Make sure we have an input table and a valid range\n if (this.inputTable == null || !GridRange.isBounded(range)) {\n return false;\n }\n\n // Check that the edit is in the editable range\n // If an input table has keyed columns, the non-key columns are always editable\n // If an input table does not have key columns, it is append only and existing rows cannot be editable\n // Pending rows are always editable\n var isPendingRange = this.isPendingRow(range.startRow) && this.isPendingRow(range.endRow);\n if (!(isPendingRange || this.inputTable.keyColumns.length !== 0 && range.startColumn >= this.inputTable.keyColumns.length && range.endColumn >= this.inputTable.keyColumns.length)) {\n return false;\n }\n\n // Editing the aggregations/totals which are floating above/below is not allowed\n if (range.startRow < this.floatingTopRowCount || range.startRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount || range.endRow >= this.floatingTopRowCount + this.table.size + this.pendingRowCount) {\n return false;\n }\n return true;\n }\n isDeletableRange(range) {\n return this.inputTable != null && range.startRow != null && range.endRow != null && range.startRow >= this.floatingTopRowCount && range.startRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount && range.endRow < this.floatingTopRowCount + this.table.size + this.pendingRowCount;\n }\n isEditableRanges(ranges) {\n return ranges.every(range => this.isEditableRange(range));\n }\n isDeletableRanges(ranges) {\n return ranges.every(range => this.isDeletableRange(range));\n }\n\n /**\n * @returns A range corresponding to the underlying table\n */\n getTableAreaRange() {\n return new GridRange(null, this.floatingTopRowCount, null, this.floatingTopRowCount + this.table.size - 1);\n }\n\n /**\n * @returns A range corresponding to the pending new rows\n */\n getPendingAreaRange() {\n return new GridRange(null, this.floatingTopRowCount + this.table.size, null, this.floatingTopRowCount + this.table.size + this.pendingNewRowCount - 1);\n }\n\n /**\n * Set value in an editable table\n * @param x The column to set\n * @param y The row to set\n * @param value The value to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForCell(x, y, text) {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n return _this5.setValueForRanges([new GridRange(x, y, x, y)], text);\n })();\n }\n\n /**\n * Set value in an editable table\n * @param ranges The ranges to set\n * @param value The values to set\n * @returns A promise that resolves successfully when the operation is complete, or rejects if there's an error\n */\n setValueForRanges(ranges, text) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n if (!_this6.isEditableRanges(ranges)) {\n throw new Error(\"Uneditable ranges \".concat(ranges));\n }\n try {\n // Cache the value in our pending string cache so that it stays displayed until our edit has been completed\n var columnSet = new Set();\n\n // Formatted text for each column\n // Since there could be different formatting for each column, but the value will be the same across rows\n var formattedText = [];\n GridRange.forEachCell(ranges, (x, y) => {\n var column = _this6.columns[x];\n columnSet.add(column);\n if (formattedText[x] === undefined) {\n var _value3 = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n formattedText[x] = _value3 != null ? _this6.displayString(_value3, column.type, column.name) : null;\n }\n _this6.cachePendingValue(x, y, formattedText[x]);\n });\n\n // Take care of updates to the pending new area first, as they can be updated synchronously\n var pendingAreaRange = _this6.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this6.floatingTopRowCount + _this6.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_this6.pendingNewDataMap);\n GridRange.forEachCell(pendingRanges, (columnIndex, rowIndex) => {\n if (!newDataMap.has(rowIndex)) {\n newDataMap.set(rowIndex, {\n data: new Map()\n });\n }\n var column = _this6.columns[columnIndex];\n var row = newDataMap.get(rowIndex);\n assertNotNull(row);\n var {\n data: rowData\n } = row;\n var newRowData = new Map(rowData);\n var value = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n if (value != null) {\n newRowData.set(columnIndex, {\n value\n });\n } else {\n newRowData.delete(columnIndex);\n }\n if (newRowData.size > 0) {\n newDataMap.set(rowIndex, _objectSpread(_objectSpread({}, row), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(rowIndex);\n }\n });\n _this6.pendingDataMap = newDataMap;\n }\n _this6.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n var tableAreaRange = _this6.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this6$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this6.snapshot(tableRanges.map(range => {\n var _range$startRow, _range$endRow;\n return new GridRange(null, (_range$startRow = range === null || range === void 0 ? void 0 : range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : null, null, (_range$endRow = range === null || range === void 0 ? void 0 : range.endRow) !== null && _range$endRow !== void 0 ? _range$endRow : null);\n }));\n var newRows = data.map(row => {\n var newRow = {};\n for (var c = 0; c < _this6.columns.length; c += 1) {\n newRow[_this6.columns[c].name] = row[c];\n }\n columnSet.forEach(column => {\n newRow[column.name] = _this6.tableUtils.makeValue(column.type, text, _this6.formatter.timeZone);\n });\n return newRow;\n });\n var result = yield (_this6$inputTable = _this6.inputTable) === null || _this6$inputTable === void 0 ? void 0 : _this6$inputTable.addRows(newRows);\n log.debug('setValueForRanges(', ranges, ',', text, ') set tableRanges', tableRanges, 'result', result);\n }\n\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n GridRange.forEachCell(ranges, (x, y) => {\n var cellText = formattedText[x];\n assertNotNull(cellText);\n _this6.cacheFormattedValue(x, y, cellText);\n });\n } catch (err) {\n log.error('Unable to set ranges', ranges, text, err);\n } finally {\n GridRange.forEachCell(ranges, (x, y) => {\n _this6.clearPendingValue(x, y);\n });\n }\n })();\n }\n setValues() {\n var _arguments3 = arguments,\n _this7 = this;\n return _asyncToGenerator(function* () {\n var edits = _arguments3.length > 0 && _arguments3[0] !== undefined ? _arguments3[0] : [];\n log.debug('setValues(', edits, ')');\n if (!edits.every(edit => {\n var _edit$column, _edit$row;\n return _this7.isEditableRange(GridRange.makeCell((_edit$column = edit.column) !== null && _edit$column !== void 0 ? _edit$column : edit.x, (_edit$row = edit.row) !== null && _edit$row !== void 0 ? _edit$row : edit.y));\n })) {\n throw new Error(\"Uneditable ranges \".concat(edits));\n }\n try {\n var newDataMap = new Map(_this7.pendingNewDataMap);\n\n // Cache the display values\n edits.forEach(edit => {\n var _edit$column2, _edit$row2;\n var {\n text\n } = edit;\n var x = (_edit$column2 = edit.column) !== null && _edit$column2 !== void 0 ? _edit$column2 : edit.x;\n var y = (_edit$row2 = edit.row) !== null && _edit$row2 !== void 0 ? _edit$row2 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cachePendingValue(x, y, formattedText);\n\n // Take care of updates to the pending new area as well, as that can be updated synchronously\n var pendingRow = _this7.pendingRow(y);\n if (pendingRow != null) {\n if (!newDataMap.has(pendingRow)) {\n newDataMap.set(pendingRow, {\n data: new Map()\n });\n }\n var _row2 = newDataMap.get(pendingRow);\n assertNotNull(_row2);\n var {\n data: rowData\n } = _row2;\n var newRowData = new Map(rowData);\n if (value != null) {\n newRowData.set(x, {\n value\n });\n } else {\n newRowData.delete(x);\n }\n if (newRowData.size > 0) {\n newDataMap.set(pendingRow, _objectSpread(_objectSpread({}, _row2), {}, {\n data: newRowData\n }));\n } else {\n newDataMap.delete(pendingRow);\n }\n }\n });\n _this7.pendingDataMap = newDataMap;\n\n // Send an update right after setting the pending map so the values are displayed immediately\n _this7.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n\n // Need to group by row...\n var rowEditMap = edits.reduce((rowMap, edit) => {\n var _edit$row3, _rowMap$get;\n var y = (_edit$row3 = edit.row) !== null && _edit$row3 !== void 0 ? _edit$row3 : edit.y;\n if (!rowMap.has(y)) {\n rowMap.set(y, []);\n }\n (_rowMap$get = rowMap.get(y)) === null || _rowMap$get === void 0 ? void 0 : _rowMap$get.push(edit);\n return rowMap;\n }, new Map());\n var ranges = GridRange.consolidate(edits.map(edit => {\n var _edit$column3, _edit$row4;\n return GridRange.makeCell((_edit$column3 = edit.column) !== null && _edit$column3 !== void 0 ? _edit$column3 : edit.x, (_edit$row4 = edit.row) !== null && _edit$row4 !== void 0 ? _edit$row4 : edit.y);\n }));\n var tableAreaRange = _this7.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length > 0) {\n var _this7$inputTable;\n // Get a snapshot of the full rows, as we need to write a full row when editing\n var data = yield _this7.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(null, range.startRow, null, range.endRow);\n }));\n var newRows = data.map((row, dataIndex) => {\n var rowIndex = null;\n var r = dataIndex;\n for (var i = 0; i < tableRanges.length; i += 1) {\n var range = tableRanges[i];\n assertNotNull(range);\n var rangeRowCount = GridRange.rowCount([range]);\n if (r < rangeRowCount) {\n assertNotNull(range.startRow);\n rowIndex = range.startRow + r;\n break;\n }\n r -= rangeRowCount;\n }\n var newRow = {};\n for (var c = 0; c < _this7.columns.length; c += 1) {\n newRow[_this7.columns[c].name] = row[c];\n }\n assertNotNull(rowIndex);\n var rowEdits = rowEditMap.get(rowIndex);\n if (rowEdits != null) {\n rowEdits.forEach(edit => {\n var _edit$column4;\n var column = _this7.columns[(_edit$column4 = edit.column) !== null && _edit$column4 !== void 0 ? _edit$column4 : edit.x];\n newRow[column.name] = _this7.tableUtils.makeValue(column.type, edit.text, _this7.formatter.timeZone);\n });\n }\n return newRow;\n });\n log.info('setValues setting tableRanges', tableRanges);\n var result = yield (_this7$inputTable = _this7.inputTable) === null || _this7$inputTable === void 0 ? void 0 : _this7$inputTable.addRows(newRows);\n log.info('setValues set tableRanges', tableRanges, 'SUCCESS', result);\n }\n\n // We've sent the changes to the server, but have not yet got an update with those changes committed\n // Add the changes to the formatted cache so it's still displayed until the update event is received\n // The update event could be received on the next tick, after the input rows have been committed,\n // so make sure we don't display stale data\n edits.forEach(edit => {\n var _edit$column5, _edit$row5;\n var {\n text\n } = edit;\n var x = (_edit$column5 = edit.column) !== null && _edit$column5 !== void 0 ? _edit$column5 : edit.x;\n var y = (_edit$row5 = edit.row) !== null && _edit$row5 !== void 0 ? _edit$row5 : edit.y;\n var column = _this7.columns[x];\n var value = _this7.tableUtils.makeValue(column.type, text, _this7.formatter.timeZone);\n var formattedText = value != null ? _this7.displayString(value, column.type, column.name) : null;\n _this7.cacheFormattedValue(x, y, formattedText);\n });\n } finally {\n edits.forEach(edit => {\n _this7.clearPendingValue(edit.column, edit.row);\n });\n }\n })();\n }\n commitPending() {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (_this8.pendingNewDataMap.size <= 0) {\n throw new Error('No pending changes to commit');\n }\n try {\n var _this8$inputTable, _this8$viewport$botto, _this8$viewport;\n _this8.isSaveInProgress = true;\n var newRows = [];\n _this8.pendingNewDataMap.forEach(row => {\n var newRow = {};\n row.data.forEach((_ref2, columnIndex) => {\n var {\n value\n } = _ref2;\n var column = _this8.columns[columnIndex];\n newRow[column.name] = value;\n });\n newRows.push(newRow);\n });\n var result = yield (_this8$inputTable = _this8.inputTable) === null || _this8$inputTable === void 0 ? void 0 : _this8$inputTable.addRows(newRows);\n log.debug('commitPending()', _this8.pendingNewDataMap, 'result', result);\n _this8.pendingNewDataMap = new Map();\n _this8.pendingNewRowCount = Math.max(0, ((_this8$viewport$botto = (_this8$viewport = _this8.viewport) === null || _this8$viewport === void 0 ? void 0 : _this8$viewport.bottom) !== null && _this8$viewport$botto !== void 0 ? _this8$viewport$botto : 0) - _this8.table.size);\n _this8.formattedStringData = [];\n _this8.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n } finally {\n _this8.isSaveInProgress = false;\n }\n })();\n }\n editValueForCell(x, y) {\n return this.textValueForCell(x, y);\n }\n delete(ranges) {\n return _asyncToGenerator(function* () {\n throw new Error('Delete not implemented');\n })();\n }\n isValidForCell(x, y, value) {\n try {\n var _column4 = this.columns[x];\n this.tableUtils.makeValue(_column4.type, value, this.formatter.timeZone);\n return true;\n } catch (e) {\n return false;\n }\n }\n}\n_defineProperty(IrisGridTableModelTemplate, \"ROW_BUFFER_PAGES\", 1);\nexport default IrisGridTableModelTemplate;\n//# sourceMappingURL=IrisGridTableModelTemplate.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTableModel');\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"userFrozenColumns\", void 0);\n _defineProperty(this, \"customColumnList\", void 0);\n _defineProperty(this, \"formatColumnList\", void 0);\n _defineProperty(this, \"initialFilters\", []);\n _defineProperty(this, \"getMemoizedFrontColumns\", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : []));\n _defineProperty(this, \"getMemoizedBackColumns\", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : []));\n _defineProperty(this, \"getMemoizedFrozenColumns\", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {\n var _ref;\n return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : [];\n }));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize(columns => new Set(columns.map((_, index) => index))));\n _defineProperty(this, \"getCachedPartitionColumns\", memoize(columns => columns.filter(column => column.isPartitionColumn)));\n this.customColumnList = [];\n this.formatColumnList = [];\n this.initialFilters = table.filter;\n }\n get isExportAvailable() {\n return this.table.freeze != null;\n }\n get isColumnStatisticsAvailable() {\n return this.table.getColumnStatistics != null;\n }\n get isValuesTableAvailable() {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n get isRollupAvailable() {\n return this.table.rollup != null;\n }\n get isSelectDistinctAvailable() {\n return this.table.selectDistinct != null;\n }\n get isCustomColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get isFormatColumnsAvailable() {\n return this.table.applyCustomColumns != null;\n }\n get frontColumns() {\n var _this$layoutHints;\n return this.getMemoizedFrontColumns((_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.frontColumns);\n }\n get backColumns() {\n var _this$layoutHints2;\n return this.getMemoizedBackColumns((_this$layoutHints2 = this.layoutHints) === null || _this$layoutHints2 === void 0 ? void 0 : _this$layoutHints2.backColumns);\n }\n get frozenColumns() {\n var _this$layoutHints3;\n return this.getMemoizedFrozenColumns((_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.frozenColumns, this.userFrozenColumns);\n }\n get layoutHints() {\n return this.table.layoutHints;\n }\n get floatingLeftColumnCount() {\n return this.frozenColumns.length;\n }\n get description() {\n return this.table.description;\n }\n get customColumns() {\n return this.customColumnList;\n }\n set customColumns(customColumns) {\n log.debug2('set customColumns', customColumns, this.customColumnList, customColumns === this.customColumnList);\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n get formatColumns() {\n return this.formatColumnList;\n }\n set formatColumns(formatColumns) {\n log.debug2('set formatColumns', formatColumns, this.formatColumnList, formatColumns === this.formatColumnList);\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n updateFrozenColumns(columns) {\n this.userFrozenColumns = columns;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table\n }));\n }\n get partitionColumns() {\n return this.getCachedPartitionColumns(this.columns);\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.valuesTable(_this.partitionColumns);\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var t = yield _this2.table.copy();\n t.applyFilter([]);\n return t;\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n log.debug('getting partition table for partitions', partitions);\n var partitionFilters = [];\n for (var i = 0; i < _this3.partitionColumns.length; i += 1) {\n var partition = partitions[i];\n var partitionColumn = _this3.partitionColumns[i];\n var partitionFilter = _this3.tableUtils.makeFilterRawValue(partitionColumn.type, partition);\n partitionFilters.push(partitionColumn.filter().eq(partitionFilter));\n }\n var t = yield _this3.table.copy();\n t.applyFilter([..._this3.initialFilters, ...partitionFilters]);\n return t;\n })();\n }\n set filter(filter) {\n this.closeSubscription();\n this.table.applyFilter([...this.initialFilters, ...filter]);\n this.applyViewport();\n }\n set totalsConfig(totalsConfig) {\n log.debug('set totalsConfig', totalsConfig);\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n this.totals = totalsConfig;\n this.formattedStringData = [];\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n this.setTotalsTable(null);\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());\n this.totalsTablePromise.then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n get isFilterRequired() {\n return this.table.isUncoalesced;\n }\n get isPartitionRequired() {\n return this.table.isUncoalesced && this.isValuesTableAvailable;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n export() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n return _this4.table.freeze();\n })();\n }\n columnStatistics(column) {\n return this.table.getColumnStatistics(column);\n }\n isColumnMovable(modelIndex) {\n var columnName = this.columns[modelIndex].name;\n if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName)) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n isColumnFrozen(modelIndex) {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n delete(ranges) {\n var _superprop_getPendingDataMap = () => super.pendingDataMap,\n _superprop_setPendingDataMap = _value => super.pendingDataMap = _value,\n _this5 = this;\n return _asyncToGenerator(function* () {\n var _this5$inputTable;\n if (!_this5.isDeletableRanges(ranges)) {\n throw new Error(\"Undeletable ranges \".concat(ranges));\n }\n assertNotNull(_this5.inputTable);\n var {\n keyColumns\n } = _this5.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n var pendingAreaRange = _this5.getPendingAreaRange();\n var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {\n assertNotNull(range);\n return GridRange.offset(range, 0, -(_this5.floatingTopRowCount + _this5.table.size));\n });\n if (pendingRanges.length > 0) {\n var newDataMap = new Map(_superprop_getPendingDataMap());\n for (var i = 0; i < pendingRanges.length; i += 1) {\n var pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (var r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n _superprop_setPendingDataMap(newDataMap);\n _this5.formattedStringData = [];\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));\n _this5.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n var tableAreaRange = _this5.getTableAreaRange();\n var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n var [data, deleteTable] = yield Promise.all([\n // Need to get the key values of each row\n _this5.snapshot(tableRanges.map(range => {\n assertNotNull(range);\n // Need to map each key column to it's range so we can pass that into the snapshot function\n return keyColumns.map(keyColumn => {\n var keyIndex = _this5.getColumnIndexByName(keyColumn.name);\n if (keyIndex == null) {\n throw new Error(\"Key column \".concat(keyColumn.name, \" not found\"));\n }\n return new GridRange(keyIndex, range.startRow, keyIndex, range.endRow);\n });\n }).flat()), _this5.table.copy()]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n var filters = data.map(row => {\n var columnFilters = [];\n for (var c = 0; c < keyColumns.length; c += 1) {\n var column = keyColumns[c];\n var value = row[c];\n var filterValue = _this5.tableUtils.makeFilterRawValue(column.type, value);\n var _filter = column.filter().eq(filterValue);\n columnFilters.push(_filter);\n }\n return columnFilters.reduce((agg, curr) => {\n var _agg$and;\n return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;\n });\n });\n var filter = filters.reduce((agg, curr) => {\n var _agg$or;\n return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;\n });\n deleteTable.applyFilter([filter]);\n yield (_this5$inputTable = _this5.inputTable) === null || _this5$inputTable === void 0 ? void 0 : _this5$inputTable.deleteTable(deleteTable);\n deleteTable.close();\n })();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n return _this6.table.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.table.seekRow != null;\n }\n}\nexport default IrisGridTableModel;\n//# sourceMappingURL=IrisGridTableModel.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport IrisGridModel from \"./IrisGridModel.js\";\nclass EmptyIrisGridModel extends IrisGridModel {\n constructor(dh) {\n var formatter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Formatter(dh);\n super(dh);\n _defineProperty(this, \"modelFormatter\", void 0);\n this.modelFormatter = formatter;\n }\n get rowCount() {\n return 0;\n }\n get columnCount() {\n return 0;\n }\n textForCell(column, row) {\n return '';\n }\n textForColumnHeader(column, depth) {\n return undefined;\n }\n get columns() {\n return EMPTY_ARRAY;\n }\n getColumnIndexByName(name) {\n return undefined;\n }\n get initialMovedColumns() {\n return EMPTY_ARRAY;\n }\n get initialMovedRows() {\n return EMPTY_ARRAY;\n }\n get initialColumnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n get groupedColumns() {\n return EMPTY_ARRAY;\n }\n formatForCell(column, row) {\n return undefined;\n }\n valueForCell(column, row) {\n return undefined;\n }\n get filter() {\n return EMPTY_ARRAY;\n }\n set filter(filter) {\n // No-op\n }\n get partition() {\n return EMPTY_ARRAY;\n }\n set partition(partition) {\n // No-op\n }\n get partitionColumns() {\n return EMPTY_ARRAY;\n }\n get formatter() {\n return this.modelFormatter;\n }\n set formatter(formatter) {\n this.modelFormatter = formatter;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n get sort() {\n return EMPTY_ARRAY;\n }\n set sort(sort) {\n // No-op\n }\n get customColumns() {\n return EMPTY_ARRAY;\n }\n set customColumns(customColumns) {\n // No-op\n }\n get formatColumns() {\n return EMPTY_ARRAY;\n }\n updateFrozenColumns(columns) {\n // Do nothing\n }\n get rollupConfig() {\n return null;\n }\n set rollupConfig(rollupConfig) {\n // No-op\n }\n get totalsConfig() {\n return null;\n }\n set totalsConfig(totalsConfig) {\n // No-op\n }\n export() {\n throw new Error('Method not implemented.');\n }\n columnStatistics(column) {\n throw new Error('Method not implemented.');\n }\n get selectDistinctColumns() {\n return EMPTY_ARRAY;\n }\n set selectDistinctColumns(selectDistinctColumns) {\n // No-op\n }\n get pendingDataMap() {\n return EMPTY_MAP;\n }\n set pendingDataMap(map) {\n // No-op\n }\n get pendingRowCount() {\n return 0;\n }\n set pendingRowCount(count) {\n // No-op\n }\n get pendingDataErrors() {\n return EMPTY_MAP;\n }\n commitPending() {\n return Promise.resolve();\n }\n setViewport(top, bottom, columns) {\n // No-op\n }\n snapshot(ranges) {\n return Promise.resolve([]);\n }\n textSnapshot(ranges, includeHeaders, formatValue) {\n return Promise.resolve('');\n }\n valuesTable(columns) {\n throw new Error('Method not implemented.');\n }\n delete(ranges) {\n return Promise.resolve();\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n return Promise.resolve(0);\n }\n get columnHeaderGroups() {\n return EMPTY_ARRAY;\n }\n set columnHeaderGroups(groups) {\n // No-op\n }\n get columnHeaderGroupMap() {\n return EMPTY_MAP;\n }\n getColumnHeaderParentGroup(modelIndex, depth) {\n return undefined;\n }\n}\nexport default EmptyIrisGridModel;\n//# sourceMappingURL=EmptyIrisGridModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport EmptyIrisGridModel from \"./EmptyIrisGridModel.js\";\nimport MissingPartitionError, { isMissingPartitionError } from \"./MissingPartitionError.js\";\nclass IrisGridPartitionedTableModel extends EmptyIrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Partitioned table to be used in the model\n * @param formatter The formatter to use when getting formats\n */\n constructor(dh, partitionedTable) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n super(dh, formatter);\n _defineProperty(this, \"partitionedTable\", void 0);\n this.partitionedTable = partitionedTable;\n }\n get isPartitionRequired() {\n return true;\n }\n get isReversible() {\n return false;\n }\n displayString(value, columnType, columnName) {\n return '';\n }\n close() {\n this.partitionedTable.close();\n }\n get columns() {\n return this.partitionedTable.columns;\n }\n get partitionColumns() {\n return this.partitionedTable.keyColumns;\n }\n partitionKeysTable() {\n var _this = this;\n return _asyncToGenerator(function* () {\n return _this.partitionedTable.getKeyTable();\n })();\n }\n partitionMergedTable() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.partitionedTable.getMergedTable();\n })();\n }\n partitionTable(partitions) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n try {\n var table = yield _this3.partitionedTable.getTable(partitions);\n if (table == null) {\n // TODO: Will be unnecessary with https://github.com/deephaven/deephaven-core/pull/5050\n throw new MissingPartitionError('Partition not found');\n }\n return table;\n } catch (e) {\n if (!isMissingPartitionError(e)) {\n throw new MissingPartitionError('Unable to retrieve partition');\n } else {\n throw e;\n }\n }\n })();\n }\n}\nexport default IrisGridPartitionedTableModel;\n//# sourceMappingURL=IrisGridPartitionedTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport IrisGridTableModelTemplate from \"./IrisGridTableModelTemplate.js\";\nvar log = Log.module('IrisGridTreeTableModel');\nclass IrisGridTreeTableModel extends IrisGridTableModelTemplate {\n /** We keep a virtual column at the front that tracks the \"group\" that is expanded */\n\n constructor(dh, table) {\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh, table, formatter, inputTable);\n _defineProperty(this, \"virtualColumns\", void 0);\n _defineProperty(this, \"getCachedColumns\", memoize((virtualColumns, tableColumns) => [...virtualColumns, ...tableColumns]));\n _defineProperty(this, \"getCachedGroupColumns\", memoize((virtualColumns, tableGroupedColumns) => [...virtualColumns, ...tableGroupedColumns]));\n _defineProperty(this, \"getCachedFilterableColumnSet\", memoize((columns, groupedColumns, virtualColumns) => new Set(((groupedColumns === null || groupedColumns === void 0 ? void 0 : groupedColumns.length) > 0 ? groupedColumns : columns).filter(c => !virtualColumns.includes(c)).map(c1 => columns.findIndex(c2 => c1.name === c2.name)))));\n _defineProperty(this, \"getCachedGroupedColumnSet\", memoize(groupedColumns => new Set(groupedColumns.map(c1 => this.columns.findIndex(c2 => c1.name === c2.name)))));\n this.virtualColumns = [{\n name: '__DH_UI_GROUP__',\n displayName: 'Group',\n type: TableUtils.dataType.STRING,\n constituentType: TableUtils.dataType.STRING,\n isPartitionColumn: false,\n isSortable: false,\n isProxy: true,\n description: 'Key column',\n filter: () => {\n throw new Error('Filter not implemented for virtual column');\n },\n sort: () => {\n throw new Error('Sort not implemented virtual column');\n },\n formatColor: () => {\n throw new Error('Color not implemented for virtual column');\n },\n formatRowColor: () => {\n throw new Error('Color not implemented for virtual column');\n }\n }];\n }\n applyBufferedViewport(viewportTop, viewportBottom, columns) {\n var viewportColumns = [\n // Need to always fetch the grouped columns so we always have key data for the rows\n // Used to display our virtual key column\n ...this.table.groupedColumns, ...columns.filter(c => !this.virtualColumns.includes(c) && !this.groupedColumns.includes(c))];\n this.table.setViewport(viewportTop, viewportBottom, viewportColumns);\n }\n textForCell(x, y) {\n var column = this.sourceColumn(x, y);\n var row = this.row(y);\n if (row != null && column != null) {\n if (!row.hasChildren && column.constituentType != null) {\n var _value = this.valueForCell(x, y);\n return this.displayString(_value, column.constituentType, column.name);\n }\n // Show empty string instead of null in rollup grouping columns (issue #1483)\n if (row.hasChildren && row.depth <= x + 1 && this.valueForCell(x, y) === null && this.getCachedGroupedColumnSet(this.groupedColumns).has(x)) {\n return '';\n }\n }\n return super.textForCell(x, y);\n }\n extractViewportRow(row, columns) {\n var {\n isExpanded,\n hasChildren,\n depth\n } = row;\n var extractedRow = super.extractViewportRow(row, columns);\n var modifiedData = new Map(extractedRow.data);\n if (hasChildren) {\n for (var i = 0; i < this.virtualColumns.length; i += 1) {\n var key = i + (depth - 1) + (this.virtualColumns.length - 1);\n var cellData = modifiedData.get(key);\n if (cellData == null) {\n log.warn('Missing key data for virtual column', i, depth, key, row);\n } else {\n modifiedData.set(i, cellData);\n }\n }\n }\n return _objectSpread(_objectSpread({}, extractedRow), {}, {\n data: modifiedData,\n isExpanded,\n hasChildren,\n depth\n });\n }\n snapshot(ranges, includeHeaders, formatValue) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$viewport$column, _this$viewportData;\n assertNotNull(_this.viewport);\n assertNotNull(_this.viewportData);\n var columns = (_this$viewport$column = _this.viewport.columns) !== null && _this$viewport$column !== void 0 ? _this$viewport$column : _this.columns;\n var result = [];\n if (includeHeaders != null && includeHeaders) {\n result.push(columns.map(c => c.name));\n }\n var viewportRange = new GridRange(0, (_this$viewportData = _this.viewportData) === null || _this$viewportData === void 0 ? void 0 : _this$viewportData.offset, columns.length, _this.viewportData.offset + _this.viewportData.rows.length);\n for (var i = 0; i < ranges.length; i += 1) {\n var intersection = GridRange.intersection(viewportRange, ranges[i]);\n assertNotNull(intersection);\n assertNotNull(intersection.startRow);\n assertNotNull(intersection.endRow);\n for (var r = intersection.startRow; r <= intersection.endRow; r += 1) {\n var resultRow = [];\n var viewportRow = _this.viewportData.rows[r - _this.viewportData.offset];\n assertNotNull(intersection.startColumn);\n assertNotNull(intersection.endColumn);\n for (var c = intersection.startColumn; c <= intersection.endColumn; c += 1) {\n var _viewportRow$data$get;\n assertNotNull(formatValue);\n resultRow.push(formatValue((_viewportRow$data$get = viewportRow.data.get(c)) === null || _viewportRow$data$get === void 0 ? void 0 : _viewportRow$data$get.value, _this.columns[c]));\n }\n result.push(resultRow);\n }\n }\n return result;\n })();\n }\n get columns() {\n return this.getCachedColumns(this.virtualColumns, super.columns);\n }\n get groupedColumns() {\n return this.getCachedGroupColumns(this.virtualColumns, this.table.groupedColumns);\n }\n sourceForCell(column, row) {\n if (column >= this.virtualColumns.length) {\n return {\n column,\n row\n };\n }\n var depth = this.depthForRow(row);\n return {\n column: column + depth,\n row\n };\n }\n sourceColumn(column, row) {\n if (column >= this.virtualColumns.length) {\n return super.sourceColumn(column, row);\n }\n var depth = this.depthForRow(row);\n return this.columns[column + depth];\n }\n getClearFilterRange(column) {\n if (column >= this.virtualColumns.length) {\n return super.getClearFilterRange(column);\n }\n // Source for the proxied column could be any of the grouped columns.\n // Return the range of columns matching the grouped columns.\n return [this.virtualColumns.length, this.groupedColumns.length];\n }\n get hasExpandableRows() {\n return true;\n }\n get isExpandAllAvailable() {\n return this.table.expandAll !== undefined;\n }\n get isChartBuilderAvailable() {\n return false;\n }\n get isSelectDistinctAvailable() {\n return false;\n }\n get isReversible() {\n return false;\n }\n isFilterable(columnIndex) {\n return this.getCachedFilterableColumnSet(this.columns, this.groupedColumns, this.virtualColumns).has(columnIndex);\n }\n isColumnMovable(column) {\n return column >= this.groupedColumns.length;\n }\n isRowExpandable(y) {\n var _row$hasChildren;\n var row = this.row(y);\n return (_row$hasChildren = row === null || row === void 0 ? void 0 : row.hasChildren) !== null && _row$hasChildren !== void 0 ? _row$hasChildren : false;\n }\n isRowExpanded(y) {\n var _row$isExpanded;\n var row = this.row(y);\n return (_row$isExpanded = row === null || row === void 0 ? void 0 : row.isExpanded) !== null && _row$isExpanded !== void 0 ? _row$isExpanded : false;\n }\n setRowExpanded(y, isExpanded) {\n var expandDescendants = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (this.isExpandAllAvailable) {\n this.table.setExpanded(y, isExpanded, expandDescendants);\n } else {\n this.table.setExpanded(y, isExpanded);\n }\n }\n expandAll() {\n if (this.table.expandAll) {\n this.table.expandAll();\n }\n }\n collapseAll() {\n if (this.table.collapseAll) {\n this.table.collapseAll();\n }\n }\n depthForRow(y) {\n var _row$depth;\n var row = this.row(y);\n return ((_row$depth = row === null || row === void 0 ? void 0 : row.depth) !== null && _row$depth !== void 0 ? _row$depth : 1) - 1;\n }\n updateFrozenColumns(columns) {\n if (columns.length > 0) {\n throw new Error('Cannot freeze columns on a tree table');\n }\n }\n}\nexport default IrisGridTreeTableModel;\n//# sourceMappingURL=IrisGridTreeTableModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/* eslint class-methods-use-this: \"off\" */\nimport deepEqual from 'deep-equal';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { EventShimCustomEvent, PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport IrisGridTableModel from \"./IrisGridTableModel.js\";\nimport IrisGridPartitionedTableModel from \"./IrisGridPartitionedTableModel.js\";\nimport IrisGridTreeTableModel from \"./IrisGridTreeTableModel.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { isPartitionedGridModelProvider } from \"./PartitionedGridModel.js\";\nvar log = Log.module('IrisGridProxyModel');\nfunction makeModel(dh, table, formatter, inputTable) {\n if (TableUtils.isTreeTable(table)) {\n return new IrisGridTreeTableModel(dh, table, formatter);\n }\n if (TableUtils.isPartitionedTable(table)) {\n return new IrisGridPartitionedTableModel(dh, table, formatter);\n }\n return new IrisGridTableModel(dh, table, formatter, inputTable);\n}\n\n/**\n * Model which proxies calls to other IrisGridModels.\n * This allows for operations that generate new tables, like rollups.\n */\nclass IrisGridProxyModel extends IrisGridModel {\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n\n constructor(dh, table) {\n var _this;\n var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);\n var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n super(dh);\n _this = this;\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"originalModel\", void 0);\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"modelPromise\", void 0);\n _defineProperty(this, \"rollup\", void 0);\n _defineProperty(this, \"partition\", void 0);\n _defineProperty(this, \"selectDistinct\", void 0);\n _defineProperty(this, \"currentViewport\", void 0);\n _defineProperty(this, \"textForCell\", function () {\n return _this.model.textForCell(...arguments);\n });\n _defineProperty(this, \"truncationCharForCell\", function () {\n return _this.model.truncationCharForCell(...arguments);\n });\n _defineProperty(this, \"textAlignForCell\", function () {\n return _this.model.textAlignForCell(...arguments);\n });\n _defineProperty(this, \"colorForCell\", function () {\n return _this.model.colorForCell(...arguments);\n });\n _defineProperty(this, \"backgroundColorForCell\", function () {\n return _this.model.backgroundColorForCell(...arguments);\n });\n _defineProperty(this, \"textForColumnHeader\", function () {\n return _this.model.textForColumnHeader(...arguments);\n });\n _defineProperty(this, \"colorForColumnHeader\", function () {\n return _this.model.colorForColumnHeader(...arguments);\n });\n _defineProperty(this, \"textForRowHeader\", function () {\n return _this.model.textForRowHeader(...arguments);\n });\n _defineProperty(this, \"textForRowFooter\", function () {\n return _this.model.textForRowFooter(...arguments);\n });\n _defineProperty(this, \"isRowMovable\", function () {\n return _this.model.isRowMovable(...arguments);\n });\n _defineProperty(this, \"isColumnMovable\", function () {\n return _this.model.isColumnMovable(...arguments);\n });\n _defineProperty(this, \"isRowExpandable\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpandable(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.isRowExpanded(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"setRowExpanded\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.setRowExpanded(...arguments);\n }\n throw Error('Function setRowExpanded does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"expandAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.expandAll();\n }\n throw Error('Function expandAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"collapseAll\", () => {\n if (isExpandableGridModel(this.model)) {\n return this.model.collapseAll();\n }\n throw Error('Function collapseAll does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"depthForRow\", function () {\n if (isExpandableGridModel(_this.model)) {\n return _this.model.depthForRow(...arguments);\n }\n return 0;\n // throw Error('Function depthForRow does not exist on IrisGridTableModel');\n });\n _defineProperty(this, \"getColumnHeaderGroup\", function () {\n return _this.model.getColumnHeaderGroup(...arguments);\n });\n _defineProperty(this, \"getColumnHeaderParentGroup\", function () {\n return _this.model.getColumnHeaderParentGroup(...arguments);\n });\n _defineProperty(this, \"sourceForCell\", function () {\n return _this.model.sourceForCell(...arguments);\n });\n _defineProperty(this, \"getClearFilterRange\", function () {\n return _this.model.getClearFilterRange(...arguments);\n });\n _defineProperty(this, \"formatForCell\", function () {\n return _this.model.formatForCell(...arguments);\n });\n _defineProperty(this, \"valueForCell\", function () {\n return _this.model.valueForCell(...arguments);\n });\n _defineProperty(this, \"renderTypeForCell\", function () {\n return _this.model.renderTypeForCell(...arguments);\n });\n _defineProperty(this, \"dataBarOptionsForCell\", function () {\n return _this.model.dataBarOptionsForCell(...arguments);\n });\n _defineProperty(this, \"displayString\", function () {\n return _this.model.displayString(...arguments);\n });\n _defineProperty(this, \"isEditableRange\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isEditableRange(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"isFilterable\", function () {\n return _this.model.isFilterable(...arguments);\n });\n _defineProperty(this, \"setViewport\", (top, bottom, columns) => {\n this.currentViewport = {\n top,\n bottom,\n columns\n };\n this.model.setViewport(top, bottom, columns);\n });\n _defineProperty(this, \"snapshot\", function () {\n return _this.model.snapshot(...arguments);\n });\n _defineProperty(this, \"textSnapshot\", function () {\n return _this.model.textSnapshot(...arguments);\n });\n _defineProperty(this, \"valuesTable\", function () {\n return _this.model.valuesTable(...arguments);\n });\n _defineProperty(this, \"editValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.editValueForCell(...arguments);\n }\n return '';\n });\n _defineProperty(this, \"setValueForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForCell(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValueForRanges\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValueForRanges(...arguments);\n }\n return Promise.reject(new Error('Model is not editable'));\n });\n _defineProperty(this, \"setValues\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.setValues(...arguments);\n }\n return Promise.resolve();\n });\n _defineProperty(this, \"isValidForCell\", function () {\n if (isEditableGridModel(_this.model)) {\n return _this.model.isValidForCell(...arguments);\n }\n return false;\n });\n _defineProperty(this, \"delete\", function () {\n return _this.model.delete(...arguments);\n });\n _defineProperty(this, \"commitPending\", function () {\n return _this.model.commitPending(...arguments);\n });\n this.handleModelEvent = this.handleModelEvent.bind(this);\n var model = makeModel(dh, table, formatter, inputTable);\n this.dh = dh;\n this.originalModel = model;\n this.model = model;\n this.modelPromise = null;\n this.rollup = null;\n this.partition = null;\n this.selectDistinct = [];\n }\n close() {\n this.originalModel.close();\n if (this.model !== this.originalModel) {\n this.model.close();\n }\n if (this.modelPromise != null) {\n this.modelPromise.cancel();\n }\n }\n handleModelEvent(event) {\n log.debug2('handleModelEvent', event);\n var {\n detail,\n type\n } = event;\n this.dispatchEvent(new EventShimCustomEvent(type, {\n detail\n }));\n }\n setModel(model) {\n log.debug('setModel', model);\n var oldModel = this.model;\n var {\n columns: oldColumns\n } = oldModel;\n if (oldModel !== this.originalModel) {\n oldModel.close();\n }\n this.model = model;\n if (this.listenerCount > 0) {\n this.addListeners(model);\n }\n if (oldColumns !== model.columns) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.COLUMNS_CHANGED, {\n detail: model.columns\n }));\n } else if (this.currentViewport != null) {\n // If the columns haven't changed, the current viewport should still valid, and needs to be set on the new model\n var {\n top,\n bottom,\n columns\n } = this.currentViewport;\n model.setViewport(top, bottom, columns);\n }\n if (isIrisGridTableModelTemplate(model)) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: model.table\n }));\n }\n }\n setNextModel(modelPromise) {\n log.debug2('setNextModel');\n if (this.modelPromise) {\n this.modelPromise.cancel();\n }\n if (this.listenerCount > 0) {\n this.removeListeners(this.model);\n }\n this.modelPromise = PromiseUtils.makeCancelable(modelPromise, model => model.close());\n this.modelPromise.then(model => {\n this.modelPromise = null;\n this.setModel(model);\n }).catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('setNextModel cancelled');\n return;\n }\n log.error('Unable to set next model', err);\n this.modelPromise = null;\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err\n }));\n });\n }\n startListening() {\n super.startListening();\n this.addListeners(this.model);\n }\n stopListening() {\n super.stopListening();\n this.removeListeners(this.model);\n }\n addListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.addEventListener(events[i], this.handleModelEvent);\n }\n }\n removeListeners(model) {\n var events = Object.keys(IrisGridModel.EVENT);\n for (var i = 0; i < events.length; i += 1) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n model.removeEventListener(events[i], this.handleModelEvent);\n }\n }\n get rowCount() {\n return this.model.rowCount;\n }\n get columnCount() {\n return this.model.columnCount;\n }\n get floatingTopRowCount() {\n return this.model.floatingTopRowCount;\n }\n get floatingBottomRowCount() {\n return this.model.floatingBottomRowCount;\n }\n get floatingLeftColumnCount() {\n return this.model.floatingLeftColumnCount;\n }\n get floatingRightColumnCount() {\n return this.model.floatingRightColumnCount;\n }\n isColumnFrozen(x) {\n return this.model.isColumnFrozen(x);\n }\n isColumnSortable(index) {\n return this.model.isColumnSortable(index);\n }\n get hasExpandableRows() {\n if (isExpandableGridModel(this.model)) {\n return this.model.hasExpandableRows;\n }\n return false;\n }\n get isExpandAllAvailable() {\n if (isExpandableGridModel(this.model)) {\n var _this$model$isExpandA;\n return (_this$model$isExpandA = this.model.isExpandAllAvailable) !== null && _this$model$isExpandA !== void 0 ? _this$model$isExpandA : false;\n }\n return false;\n }\n get isExportAvailable() {\n return this.model.isExportAvailable;\n }\n get isColumnStatisticsAvailable() {\n return this.model.isColumnStatisticsAvailable;\n }\n get isValuesTableAvailable() {\n return this.model.isValuesTableAvailable;\n }\n get isCustomColumnsAvailable() {\n return this.model.isCustomColumnsAvailable &&\n // Disable for selectDistinct tables\n !(this.isSelectDistinctAvailable && this.selectDistinctColumns.length > 0);\n }\n get isFormatColumnsAvailable() {\n return this.model.isFormatColumnsAvailable;\n }\n get isChartBuilderAvailable() {\n return this.model.isChartBuilderAvailable;\n }\n get isRollupAvailable() {\n return (this.originalModel.isRollupAvailable || this.rollup != null) && this.selectDistinct.length === 0;\n }\n get isSelectDistinctAvailable() {\n return (this.originalModel.isSelectDistinctAvailable || this.selectDistinct.length > 0) && this.rollup == null;\n }\n get isTotalsAvailable() {\n return this.model.isTotalsAvailable;\n }\n get isReversible() {\n return this.model.isReversible;\n }\n get columns() {\n return this.model.columns;\n }\n get initialMovedColumns() {\n return this.model.initialMovedColumns;\n }\n get initialMovedRows() {\n return this.model.initialMovedRows;\n }\n get layoutHints() {\n return this.model.layoutHints;\n }\n get frontColumns() {\n return this.model.frontColumns;\n }\n get backColumns() {\n return this.model.backColumns;\n }\n get frozenColumns() {\n return this.model.frozenColumns;\n }\n get columnHeaderGroups() {\n return this.model.columnHeaderGroups;\n }\n set columnHeaderGroups(groups) {\n this.model.columnHeaderGroups = groups;\n }\n get initialColumnHeaderGroups() {\n return this.model.initialColumnHeaderGroups;\n }\n get columnHeaderGroupMap() {\n return this.model.columnHeaderGroupMap;\n }\n get columnHeaderMaxDepth() {\n return this.model.columnHeaderMaxDepth;\n }\n updateFrozenColumns(columns) {\n return this.model.updateFrozenColumns(columns);\n }\n get originalColumns() {\n return this.originalModel.columns;\n }\n get groupedColumns() {\n return this.model.groupedColumns;\n }\n get partitionColumns() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n return [];\n }\n return this.originalModel.partitionColumns;\n }\n get description() {\n return this.model.description;\n }\n get filter() {\n return this.model.filter;\n }\n set filter(filter) {\n this.model.filter = filter;\n }\n get partitionConfig() {\n if (!isPartitionedGridModelProvider(this.originalModel) || !this.originalModel.isPartitionRequired) {\n return null;\n }\n return this.partition;\n }\n set partitionConfig(partitionConfig) {\n if (!this.isPartitionRequired) {\n throw new Error('Partitions are not available');\n }\n log.debug('set partitionConfig', partitionConfig);\n this.partition = partitionConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (partitionConfig != null && isPartitionedGridModelProvider(this.originalModel)) {\n if (partitionConfig.mode === 'keys') {\n modelPromise = this.originalModel.partitionKeysTable().then(table => makeModel(this.dh, table, this.formatter));\n } else if (partitionConfig.mode === 'merged') {\n modelPromise = this.originalModel.partitionMergedTable().then(table => makeModel(this.dh, table, this.formatter));\n } else {\n modelPromise = this.originalModel.partitionTable(partitionConfig.partitions).then(table => makeModel(this.dh, table, this.formatter));\n }\n }\n this.setNextModel(modelPromise);\n }\n partitionKeysTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionKeysTable();\n }\n partitionMergedTable() {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionMergedTable();\n }\n partitionTable(partitions) {\n if (!isPartitionedGridModelProvider(this.originalModel)) {\n throw new Error('Partitions are not available');\n }\n return this.originalModel.partitionTable(partitions);\n }\n get formatter() {\n return this.model.formatter;\n }\n set formatter(formatter) {\n this.model.formatter = formatter;\n }\n get sort() {\n return this.model.sort;\n }\n set sort(sort) {\n this.model.sort = sort;\n }\n get customColumns() {\n return this.model.customColumns;\n }\n set customColumns(customColumns) {\n this.model.customColumns = customColumns;\n }\n get formatColumns() {\n return this.model.formatColumns;\n }\n set formatColumns(formatColumns) {\n this.model.formatColumns = formatColumns;\n }\n get rollupConfig() {\n return this.rollup;\n }\n set rollupConfig(rollupConfig) {\n log.debug('set rollupConfig', rollupConfig);\n if (!this.isRollupAvailable) {\n throw new Error('Rollup Rows are not available');\n }\n\n // Prevent model update when IrisGridModelUpdater is mounted\n // if rollup is already initialized in IrisGridPanel\n if (deepEqual(rollupConfig, this.rollup)) {\n return;\n }\n this.rollup = rollupConfig;\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && rollupConfig != null) {\n modelPromise = this.originalModel.table.rollup(rollupConfig).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get selectDistinctColumns() {\n return this.selectDistinct;\n }\n set selectDistinctColumns(columnNames) {\n log.debug('set selectDistinctColumns', columnNames);\n if (!this.isSelectDistinctAvailable) {\n throw new Error('Select distinct is not available');\n }\n if (columnNames === this.selectDistinctColumns || columnNames.length === 0 && this.selectDistinctColumns.length === 0) {\n log.debug('Ignore same selectDistinctColumns', columnNames);\n return;\n }\n this.selectDistinct = columnNames;\n var selectDistinctColumns = columnNames.map(name => this.originalColumns.find(column => column.name === name)).filter(column => column != null);\n var modelPromise = Promise.resolve(this.originalModel);\n if (isIrisGridTableModelTemplate(this.originalModel) && selectDistinctColumns.length > 0) {\n modelPromise = this.originalModel.table.selectDistinct(selectDistinctColumns).then(table => makeModel(this.dh, table, this.formatter));\n }\n this.setNextModel(modelPromise);\n }\n get table() {\n if (isIrisGridTableModelTemplate(this.model)) {\n return this.model.table;\n }\n return undefined;\n }\n get totalsConfig() {\n return this.model.totalsConfig;\n }\n set totalsConfig(totalsConfig) {\n this.model.totalsConfig = totalsConfig;\n }\n get isFilterRequired() {\n return this.originalModel.isFilterRequired;\n }\n get isPartitionRequired() {\n return isPartitionedGridModelProvider(this.originalModel) ? this.originalModel.isPartitionRequired : false;\n }\n get isEditable() {\n return isEditableGridModel(this.model) && this.model.isEditable;\n }\n export() {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'export' property\");\n }\n return this.model.export();\n }\n columnStatistics(column) {\n if (TableUtils.isTreeTable(this.model)) {\n throw new Error(\"TreeTable has no 'columnStatistics' function\");\n }\n return this.model.columnStatistics(column);\n }\n get pendingDataMap() {\n return this.model.pendingDataMap;\n }\n set pendingDataMap(map) {\n this.model.pendingDataMap = map;\n }\n get pendingRowCount() {\n return this.model.pendingRowCount;\n }\n set pendingRowCount(count) {\n this.model.pendingRowCount = count;\n }\n get pendingDataErrors() {\n return this.model.pendingDataErrors;\n }\n getColumnIndexByName(name) {\n return this.model.getColumnIndexByName(name);\n }\n seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n return _this2.model.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);\n })();\n }\n get isSeekRowAvailable() {\n return this.model.isSeekRowAvailable;\n }\n}\nexport default IrisGridProxyModel;\n//# sourceMappingURL=IrisGridProxyModel.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridProxyModel from \"./IrisGridProxyModel.js\";\n/**\n * Factory to create an IrisGridDataModel based on a table or tree table, whatever is passed in.\n */\nclass IrisGridModelFactory {\n /**\n * @param table The Table or TreeTable object to create the model with\n * @param formatter The formatter to use\n * @returns An IrisGridModel that uses the table provided\n */\n static makeModel(dh, table) {\n var _arguments = arguments;\n return _asyncToGenerator(function* () {\n var formatter = _arguments.length > 2 && _arguments[2] !== undefined ? _arguments[2] : new Formatter(dh);\n var inputTable = null;\n if (!TableUtils.isTreeTable(table) && !TableUtils.isPartitionedTable(table) && table.hasInputTable) {\n inputTable = yield table.inputTable();\n }\n return new IrisGridProxyModel(dh, table, formatter, inputTable);\n })();\n }\n}\nexport default IrisGridModelFactory;\n//# sourceMappingURL=IrisGridModelFactory.js.map"],"names":["CardFlip","_ref","className","isFlipped","children","dataTestId","getComponent","key","front","useRef","transitionStart","useCallback","event","transitionEnd","useEffect","refObj","_jsxs","classNames","_jsx","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","_defineProperty","obj","value","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","log","Log","FigureChartModel","ChartModel","dh","figure","theme","_this","settings","debounce","axisTypeMap","ChartUtils","pendingSeries","_loop","_chart$showLegend","series","chart","c","memoize","columnType","formatter","dataFormatter","timeZone","range","rangeStart","rangeEnd","valueParser","axis","template","_this$figure$charts$","_this2","charts","activeSeriesNames","_loop2","j","axes","title","xAxis","yAxis","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","a","yAxisIndex","annotation","allSeriesNames","inactiveSeriesNames","seriesName","_i","showLegend","seriesData","oneClick","columns","callback","figureUpdateEvent","seriesArray","sources","type","valueTranslator","dataArray","data","isDownsamplingDisabled","rect","_match$length","_match","subtitleCount","margin","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","plotWidth","plotHeight","axisFormats","axisFormat","axisLayoutProperty","props","sourceType","name","plotStyle","property","set","xLow","xHigh","width","x","_xLow","_xHigh","y","yLow","yHigh","ids","labels","filterMap","_this3","_loop3","column","FigureChartModel$1","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","err","ChartModelFactory","table","tableCopy","ChartModelFactory$1","isFigureChartModel","model","MissingKeyError","rowIndex","columnName","MissingKeyError$1","SET_VIEWPORT_THROTTLE","APPLY_VIEWPORT_THROTTLE","isIrisGridTableModelTemplate","IrisGridTableModelTemplate","IrisGridModel","startRow","valueType","insensitive","contains","isBackwards","customColumns","formatColumns","rollupConfig","names","_this$layoutHints$col","_this$layoutHints","_formatter","Formatter","inputTable","layoutHints","_layoutHints$columnGr","movedColumns","groupMap","IrisGridUtils","moveColumn","toIndex","modelIndex","visibleIndex","GridUtils","moveGroup","group","visibleRange","frontColumns","backColumns","frozenColumns","usedColumns","frontIndex","backIndex","layoutHintColumnGroups","columnGroups","b","firstChildName","rightModelIndex","rightVisibleIndex","firstChildGroup","childName","childGroup","childColumn","isBeforeGroup","moveToIndex","_isBeforeGroup","_moveToIndex","_layoutHints$columnGr2","tableColumns","columnMap","col","indices","throttle","top","bottom","viewport","viewportTop","viewportBottom","memoizeClear","formatOverride","FormatterUtils","viewHeight","pendingDataMap","keyColumnCount","map","row","rowData","_map$get","TableUtils","totalsTable","EventShimCustomEvent","_this$totals$operatio","_this$totals","_this$totals$operatio2","_this$inputTable$keyC","_this$inputTable","columnIndex","count","_this$totals$operatio3","_this$totals2","_this$totals2$operati","_this$totals$operatio4","_this$totals3","_this$totals3$operati","text","_this$pendingStringDa","_this$formattedString","_value","_column","hasCustomColumnFormat","formatForCell","_this$columns$x","pendingRow","format","_value2","assertNotNull","_column2","_this$formatForCell$b","_this$formatForCell","_positiveColor","_negativeColor","_format$color","_markerColor","direction","max","min","valuePlacement","marker","positiveColor","negativeColor","markerColor","opacity","databarColor","databarOptions","_header$displayName","depth","header","isColumnHeaderGroup","_column$color","_this$columnAtDepth$n","_this$columnAtDepth","_this$columns$x2","currentDepth","totalsRow","_this$layoutHints2","_this$layoutHints3","_this$_columnHeaderMa","groups","newGroups","maxDepth","parentMap","_this$totals$operatio5","_this$totals4","_this$totals4$operati","_this$totals$showOnTo","_this$totals5","_this$viewportData$of","_this$viewportData","_this$viewportData$ro","_this$viewportData2","_this$viewportData2$r","totalsRowCount","showOnTop","_this$totals6","_this$totalsDataMap$g","_this$totalsDataMap","operation","_this$pendingNewDataM","offset","viewportY","_this$totals7","_this$totals$defaultO","_this$totals8","_this$totalsTable","defaultOperation","AggregationOperation","tableColumn","totalsColumn","_this$totals9","_this$totals$operatio6","_this$totals10","_this$totals10$operat","_this$totals$showOnTo2","_this$totals11","_this$row","_this$dataForCell","_data$value","totalsData","_this$totals$defaultO2","_this$totals12","_this$totals13","rows","dataMap","operationMap","_operationMap$name$","_operationMap$name","newData","r","_row","newRow","_column3","index","filter","sort","totalsConfig","PromiseUtils","ranges","_arguments","includeHeaders","formatValue","consolidateRanges","consolidated","GridRange","topFloatingRowsSet","tableRanges","bottomFloatingRowsSet","_r","result","topFloatingRows","rangeSet","snapshot","bottomFloatingRows","_i2","_arguments2","_this4","_this$columns$modelIn","_this$inputTable$keyC2","_this$inputTable2","isPendingRange","_this5","_this6","columnSet","formattedText","_value3","pendingAreaRange","pendingRanges","newDataMap","newRowData","tableAreaRange","_this6$inputTable","_range$startRow","_range$endRow","newRows","cellText","_arguments3","_this7","edits","edit","_edit$column","_edit$row","_edit$column2","_edit$row2","_row2","rowEditMap","rowMap","_edit$row3","_rowMap$get","_edit$column3","_edit$row4","_this7$inputTable","dataIndex","rangeRowCount","rowEdits","_edit$column4","_edit$column5","_edit$row5","_this8","_this8$inputTable","_this8$viewport$botto","_this8$viewport","_ref2","_column4","IrisGridTableModelTemplate$1","IrisGridTableModel","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","_","partitions","partitionFilters","partition","partitionColumn","partitionFilter","t","_superprop_getPendingDataMap","_superprop_setPendingDataMap","_this5$inputTable","keyColumns","pendingRange","deleteTable","keyColumn","keyIndex","filters","columnFilters","filterValue","_filter","agg","curr","_agg$and","_agg$or","IrisGridTableModel$1","EmptyIrisGridModel","EMPTY_ARRAY","selectDistinctColumns","EMPTY_MAP","EmptyIrisGridModel$1","IrisGridPartitionedTableModel","partitionedTable","MissingPartitionError","e","isMissingPartitionError","IrisGridPartitionedTableModel$1","IrisGridTreeTableModel","virtualColumns","tableGroupedColumns","groupedColumns","c1","c2","viewportColumns","isExpanded","hasChildren","extractedRow","modifiedData","cellData","_this$viewport$column","viewportRange","intersection","resultRow","viewportRow","_viewportRow$data$get","_row$hasChildren","_row$isExpanded","expandDescendants","_row$depth","IrisGridTreeTableModel$1","makeModel","IrisGridProxyModel","isExpandableGridModel","isEditableGridModel","detail","oldModel","oldColumns","modelPromise","events","_this$model$isExpandA","isPartitionedGridModelProvider","partitionConfig","deepEqual","columnNames","IrisGridProxyModel$1","IrisGridModelFactory","IrisGridModelFactory$1"],"mappings":"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"}
|